了解Glassfish控制台JNDI输出

时间:2016-10-13 10:08:30

标签: java-ee netbeans glassfish jndi ejb-3.0

当我部署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 个答案:

答案 0 :(得分:3)

  

1)为什么远程接口有JNDI引用?我想到了   只是EJB。

它不是具有JNDI引用的RemoteInterface,它只是一个可移植的JNDI引用,它包含已实现的接口名称。

请参阅here中的以下说明:

  

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

     

EJB 3.1通过强制要求每个容器来解决上述问题   必须为EJB分配(至少一个)定义良好的全局JNDI名称。该   EJB的(可移植)全局JNDI名称的一般语法是   形式:

     

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

     

除了上面的名称,如果EJB只公开一个客户端   view(即它只实现一个接口或无接口)   视图),容器也被强制将bean映射到

     

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

     

其中

     
      
  1. <application-name>默认为没有包扩展名的包名称(.ear文件名)。这可以被覆盖   application.xml中。此外,仅适用于   bean被打包在.ear文件中。
  2.   
  3. <module-name>默认为捆绑名称(.war或.jar),不包含扩展名。同样,这可以在ejb-jar.xml中重写。
  4.   
  5. <bean-name>默认为bean的非限定类名。但是,如果@Stateful@Stateless@Singleton使用该名称   属性,然后指定的值将用作bean   名称
  6.   

  

2)为什么有一个逗号,它似乎将两个JNDI引用分开   每行?

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