先前版本的 Liberty 中 Enterprise JavaBeans 查找的行为更改

在 20.0.0.12 之前的 Liberty 版本中,EJB 组件未绑定到服务器根 Java 命名和目录接口 (JNDI) 名称空间(因为它们位于 WebSphere Application Server Traditional 中),因此可能需要进行迁移,才能在 ibm-ejb-jar-bnd.xmlibm-web-bnd.xml 文件中进行 @EJB 查找和绑定。 如果未使用 Liberty 20.0.0.12 或更新版本,对于同一服务器中托管的 EJB 组件,这些查找必须使用可移植的 JNDI 语法,而对于其他服务器中托管的 EJB 组件,这些查找必须使用 corbaname: URL。

在 Liberty V20.0.0.12 之前只接受以下名称空间:

此规则将标记以下 @EJB 注释:包含不以上面所列的某个名称空间开头的 lookup 属性值。


//此查找将被标记 
@Stateless
@EJB(lookup="ejb/myApp/myModule/MyBeanComponent")

此规则也可以标记以“ejblocal:”开头的字符串字面值。


//这将被标记
new InitialContext().lookup("ejblocal:" + getEJBName());

对于 ibm-ejb-jar-bnd.xmlibm-web-bnd.xml 文件中 <ejb-ref> 元素中的 binding-name 属性 值,该规则还会标记不使用上面列出的某个名称空间的 JNDI 名称。


//此绑定将不被标记
<ejb-ref name="TestBean" binding-name="java:global/TestApp/TestModule/TestBean!test.TestRemoteInterface">

对于 ibm-ejb-jar-bnd.xmiibm-web-bnd.xmi 文件中 <ejbRefBindings> 元素中的 jndiName 属性 值,该规则还会标记不使用上面列出的某个名称空间的 JNDI 名称。


//此 JNDI 名称将被标记
<ejbRefBindings jndiName="java:myFolder/">

有关在 Liberty 中使用 Enterprise JavaBeans 2.x 的更多信息,请参阅 在 Liberty 上将 Enterprise JavaBeans 与远程接口结合使用