Java EJB。无法注入会话bean
我有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;
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;