理解Glassfish控制台JNDI输出

3

当我部署我的EJB模块(包含一个会话bean)时,在Glassfish控制台中(在Netbeans中)会看到下面的输出:

Info:   EJB5181:Portable JNDI names for EJB NewSessionBean: [java:global/EJBModule1/NewSessionBean!com.Hello.NewSessionBeanRemote, java:global/EJBModule1/NewSessionBean]
Info:   EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB NewSessionBean: [com.Hello.NewSessionBeanRemote, com.Hello.NewSessionBeanRemote#com.Hello.NewSessionBeanRemote]

我有两个问题:

1) Why does the remote interface have a JNDI reference? I thought it was just the EJB.
2) Why is there a comma, which appears to separate two JNDI references per line?
1个回答

4
1) 为什么远程接口有一个JNDI引用?我认为它只是EJB。
不是RemoteInterface有一个JNDI引用,而是包含实现的接口名称的可移植JNDI引用。
请参考以下来自这里的解释:
客户端应用程序需要使用全局JNDI名称查找EJB。一直以来,ejb规范对这些全局jndi名称的可移植性保持沉默。这使得每个供应商都可以以供应商特定的方式为EJB分配全局JNDI名称。这意味着执行使用全局JNDI名称进行查找的客户端代码在应用程序服务器供应商实现之间本质上是不可移植的。
EJB 3.1通过规定每个容器必须为EJB分配(至少一个)定义明确的全局JNDI名称来解决上述问题。 EJB的(可移植)全局JNDI名称的通用语法形式如下:
java:global / [<application-name>] / <module-name> / <bean-name>!<fully-qualified-bean-interface-name>
除了上述名称之外,如果EJB仅公开单个客户端视图(即仅实现一个接口或无接口视图),则容器还必须将bean映射到
java:global / [<application-name>] / <module-name> / <bean-name>
其中,
<application-name>默认为捆绑包名称(.ear文件名),不带捆绑扩展名。这可以在application.xml中覆盖。此外,仅当bean打包在.ear文件内时才适用。
<module-name>默认为捆绑包名称(.war或.jar),不带捆绑扩展名。同样,这可以在ejb-jar.xml中覆盖。
<bean-name>默认为bean的未限定类名。但是,如果@Stateful或@Stateless或@Singleton使用name属性,则将使用那里指定的值作为bean名称。
2) 为什么每行中似乎有一个逗号分隔两个JNDI引用?
因为逗号用于分隔列表中的条目 :)问题1的答案也应该回答这个问题,其中一个条目只包含bean名称,另一个条目包含bean名称+接口名称。

谢谢你提供的链接,+1。你能否看一下我在这里提出的另一个问题:http://stackoverflow.com/questions/40045883/windows-client-and-linux-ubuntu-server? - w0051977

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接