3

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

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    

我的天啊!我的 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 规范不同?

4

1 回答 1

7

JavaEE 命名混乱是一个由来已久的问题,直到 JavaEE6 规范解决了它。现在我们有了 Java EE AppServer 的各种组件的标准命名空间。公平地说,您应该比较 Java EE 6 AppServer,如 JBossAS7、Websphere 8、Glassfish 3.1。

于 2012-07-13T13:05:29.790 回答