在不同的应用程序服务器上查找JNDI

时间:2012-07-13 09:14:38

标签: java-ee jboss glassfish weblogic jndi

我有一个内置ejb模块的EAR应用程序和SomeService:

some-ear.ear -> some-ejb.jar -> SomeBean implements ISomeBean   

在Java EE规范中,我看到这个bean的JNDI名称应该是

java:comp/env/ISomeService    

当我在 WebLogic 10.3 上部署我的应用时,new InitialContext().lookup("java:comp/env/ISomeService");效果很好

现在我在 JBoss 4.2.3 上部署此应用程序,我在日志中看到以下内容:

DEBUG [org.jboss.ejb3.stateless.BaseStatelessProxyFactory] Binding proxy for SomeBean in JNDI at some-ear/SomeBean/local    

OMG!我的bean的JNDI名称是some-ear/SomeBean/local
new InitialContext().lookup("java:comp/env/ISomeService"); - 不工作
new InitialContext().lookup("some-ear/SomeBean/local"); - 运作良好

现在我在 GlassFish 3.1 上部署我的应用程序,我在日志中看到以下内容:

Portable JNDI names for EJB SomeBean : [java:global/some-ear/some-jar/SomeBean ...  

再次提出新的JNDI名称!

new InitialContext().lookup("java:global/some-ear/some-jar/SomeBean"); - 效果很好

你能解释一下为什么在不同的AS上存在同一个bean的不同JNDI名称,以及为什么这个JNDI名称与Java EE规范不同?

1 个答案:

答案 0 :(得分:7)

JavaEE命名混乱是一个长期问题,直到JavaEE6规范解决它。现在我们为Java EE AppServer的各种组件提供了标准名称空间。公平地说,您应该比较Java EE 6 AppServers,例如JBossAS7,Websphere 8,Glassfish 3.1。