[英]EJB. Cannot inject session bean
我有EJB bean
接口:
package com.xlab.ice.ejb.sessionbean;
import javax.ejb.Remote;
@Remote
public interface Session {
public String getMessage();
}
豆角,扁豆:
package com.xlab.ice.ejb.sessionbean;
import javax.ejb.Stateless;
@Stateless
public class SessionBean implements Session {
public SessionBean() {
}
public String getMessage() {
return "Hello!";
}
}
它已成功部署到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我遇到错误。 这是堆栈跟踪-http://pastebin.com/JuHRcQp5
我做错了什么?
您正在尝试通过独立客户端访问ejb。
这需要特定的jndi手动查找,如果您以ejb开头,那么这是在获取ejb客栈之前最好的起点。
说:
您需要知道部署ejb的主机和CORBA端口。
创建一个初始上下文并进行手动查找。
请参阅此stackoverflow问题,以了解解决方法。
您是否将客户端和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名称。
private static SessionBean sessionBean;
应该更改为
private static Session sessionBean;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.