了解Glassfish控制台JNDI输出



当我部署我的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)为什么远程接口有JNDI引用?我是这么想的就是EJB。

它不是有JNDI引用的RemoteInterface,它只是一个可移植的JNDI引用,其中包括被实现的接口的名称。

请看下面的解释:

客户端应用程序需要使用全局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只公开一个客户端视图(即它只实现一个接口或没有接口)视图),容器还被强制将bean映射到

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

,

  1. <application-name>默认为包名。(文件名),没有包扩展名。中可以重写application.xml。此外,仅在bean被打包在.ear文件中。
  2. <module-name>默认为bundle name()。War或.jar),没有包扩展名。同样,这也可以在ejb-jar.xml中重写。
  3. <bean-name>默认为bean的非限定类名。但是,如果@Stateful@Stateless@Singleton使用该名称属性,则在那里指定的值将用作bean名字。

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

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

相关内容

  • 没有找到相关文章

最新更新