2016-10-13 43 views
2

当我部署我的EJB模块(包含会话bean)时;我看到在Glassfish的控制台下方的输出(在Netbeans的):了解Glassfish控制台JNDI输出

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? 

回答

3

1)为什么远程接口有一个JNDI参考?我认为它 只是EJB。

这不是它有一个JNDI参考,它只是一个便携式JNDI参考,其中包括其实现的接口的名称RemoteInterface。

请参见下面的解释从here

客户端应用程序需要使用全局JNDI名称来查找一个EJB。沿着ejb规范的所有 都没有提到这种全球jndi名称的可移植性。这允许每个供应商以特定于供应商的方式为EJB分配全局名称。这意味着执行使用全局JNDI名称查找的客户端代码本质上是 在应用服务器供应商实现中不可移植。

EJB 3.1通过强制要求每个容器必须分配(至少一个)明确定义的全局JNDI名称给EJB来解决上述问题。一个(便携式)全局JNDI的EJB的名称的 一般语法 形式:

java:global/[<application-name>]/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>

除了上述的名称,如果EJB公开只是一个单一的客户端 视图(即它实现一个接口或没有界面 视图),所述容器还负责豆映射到

java:global/[<application-name>]/<module-name>/<bean-name>

  1. <application-name>默认为包名称(.ear文件名),而不捆绑扩展。这可以在 application.xml中覆盖。此外,仅当 bean打包在.ear文件中时才适用。
  2. <module-name>默认为没有包扩展名的包名(.war或.jar)。再次,这可以在ejb-jar.xml中重写。
  3. <bean-name>默认为bean的非限定类名称。但是,如果@Stateful@Stateless@Singleton使用名称 属性,则在那里指定的值将用作bean的名称 。

而且

2)为什么会出现一个逗号,这似乎分离两个JNDI引用 每行?

因为逗号用于分隔列表中的条目:)问题1的答案也应该回答这个问题,有一个条目只包含bean名称和一个包含bean名称+接口名称的条目。

+0

感谢+1链接。你能够看看我的其他问题在这里:http://stackoverflow.com/questions/40045883/windows-client-and-linux-ubuntu-server? – w0051977