Glassfish4中的独立EJB客户端查找

时间:2014-02-02 17:15:29

标签: ejb-3.0 glassfish-4

花了半天时间解决了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)。

2 个答案:

答案 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