Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EJB。无法注入会话bean_Java_Glassfish_Ejb - Fatal编程技术网

Java EJB。无法注入会话bean

Java EJB。无法注入会话bean,java,glassfish,ejb,Java,Glassfish,Ejb,我有EJB bean 接口: package com.xlab.ice.ejb.sessionbean; import javax.ejb.Remote; @Remote public interface Session { public String getMessage(); } 豆子: 它已成功部署到Glassfhish 4中。 但我无法通过简单客户端访问它: package com.xlab.ice.ejb.sessionbean; import javax.ejb.EJB;

我有EJB bean

接口:

package com.xlab.ice.ejb.sessionbean;
import javax.ejb.Remote;

@Remote
public interface Session {
    public String getMessage();
}
豆子:

它已成功部署到Glassfhish 4中。 但我无法通过简单客户端访问它:

package com.xlab.ice.ejb.sessionbean;
import javax.ejb.EJB;

public class Client {

    @EJB
    private static SessionBean sessionBean;

    public void getMsg() {
        System.out.print(sessionBean.getMessage());
    }

    public static void main(String[] args) {
        new Client().getMsg();
    }
}
当我试图通过appclient-client-SessionBeanClient.jar运行它时,我得到了一个错误。 这是堆栈跟踪-


我做错了什么?

是否将客户机和bean部署在同一台服务器上?除了不必使用接口之外,还可以用'@LocalBean'注释bean,这样就可以从同一个JVM调用它。 解决您的问题:您需要按如下方式注入bean:

public class Client {

    @EJB
    private static SessionBean sessionBean;
    private final String jndiName = "java:global/find/this/out";

    public void getMsg() {
        InitialContext ctx = new InitialContext();
        sessionBean = (SessionBean) ctx.lookup(ejb_path);
        System.out.print(sessionBean.getMessage());
    }

    public static void main(String[] args) {
        new Client().getMsg();
    }
}
这只适用于本地bean,对于远程bean,您必须配置访问权限。
部署bean后,您可以在glassfish服务器的日志文件中找到JNDI名称。

您正试图通过独立客户端访问ejb

这需要特定的jndi手动查找,如果您是从ejb开始的,那么在获得ejb的INN之前,最好从jndi手动查找开始

也就是说:

您需要知道部署ejb的主机和CORBA端口

创建初始上下文并进行手动查找

看这个关于如何进行的问题

你应该看看他回答的内容。此外,您不能将
EJB
注入到静态字段中,有关EJB规范的链接和引用以及不允许的原因,请参阅

private static SessionBean sessionBean;
应改为

private static Session sessionBean;

我的客户机是独立的,正如我前面提到的,我是这样启动它的:appclient-client-SessionBeanClient.jar。顺便说一下,据我所知,远程接口在EJB3.2中是冗余的,我已经尝试过您的建议,但没有结果。我得到了同样的错误。为什么会改变什么呢?远程接口必须用于注入,而不是bean本身
private static Session sessionBean;