我为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)?
答案 0 :(得分:1)
您可以使用依赖于应用程序服务器的JNDI名称,如:
@Stateless(name="etc")
您可以访问它:
InitialContext.doLookup("etc")
但这只适用于玻璃鱼。