如何通过JNDI从库访问业务bean?

时间:2014-07-04 15:10:25

标签: java-ee glassfish glassfish-4

我为Glassfish服务器4编写了自己的身份验证领域。正如参考文献所述,我已经在domains/[domain]/lib中放置了带有领域类和登录模块的jar,一切正常。现在我想从这个域库中访问一个业务bean。业务bean位于项目的EJB部分中。但它永久失败。我试过了:

    try {
        Object object = InitialContext.doLookup("java:global/My-Demo-ejb/A");
        System.out.println("=====> Obj: " + object);
    } catch (Exception e) {
        logger.log(Level.SEVERE, "Looking up failed:");
        logger.log(Level.SEVERE, e.toString());
        e.printStackTrace();
    }

在这种情况下,我的项目名为“My-Demo”,EJB子项目名为“My-Demo-ejb”。接口“A”看起来像:

@Remote
public interface A {
...
}

并且还有一个实现:

@Stateless
@LocalBean
public class AB implements A {
...
}

但每次尝试此操作时,都会发生异常javax.naming.NameNotFoundException。同时尝试将Bean放入WAR部分失败,并使用JNDI字符串java:global/My-Demo-war/A

你能看到任何错误吗?

编辑:它正在运行,如果使用JNDI字符串java:global/Demo/Demo-ejb/AB!de.login.security.AB。是不是比引用包的完整路径更容易,为什么不使用接口名称(A而不是AB)?

1 个答案:

答案 0 :(得分:1)

您可以使用依赖于应用程序服务器的JNDI名称,如:

@Stateless(name="etc")

您可以访问它:

InitialContext.doLookup("etc")

但这只适用于玻璃鱼。