花了半天时间解决了glassfish 4中ejb客户端查询的问题。
豆子:
@Stateless
@LocalBean
public class TestBean implements TestRemote{
@PersistenceContext(unitName = "testunit")
private EntityManager em;
public String sayHello() {return "hello";}
}
远程业务接口:
@javax.ejb.Remote
public interface TestRemote {
public String sayHello();
}
客户端查找代码,尝试了以下变体(客户端可以在另一台机器上,但在此测试中它们在同一台机器上运行):
new InitialContext().lookup("java:global/myproject/TestBean");
new InitialContext().lookup("java:global/myproject/TestRemote");
new InitialContext().lookup("TestRemote");
new InitialContext().lookup("TestBean");
new InitialContext().lookup(TestBean.class.getName());
该项目被部署为战争(myproject.war)。
答案 0 :(得分:1)
这有效:
new InitialContext().lookup("com.example.TestRemote");
答案 1 :(得分:0)
如果您正在使用glassFish,它通常会说明日志中的可移植JNDI名称,例如:
INFO: EJB5181:Portable JNDI names for EJB ProductsBean: [java:global/products-ejb/ProductsBean, java:global/products-ejb/ProductsBean!com.sample.product.ejb.ProductsRemote]
所以你的行将是:
java:global/<ejb-module-name>/TestBean
这与您的问题类似,但我无法判断“myproject”是企业应用程序名称还是EJB模块名称...
或
java:global/<enterpriseApplicationName>/<ejb-module-name>/TestBean!<package_of_remote>.TestRemote