在 20.0.0.12 之前的 Liberty 版本中,EJB 组件未绑定到服务器根 Java 命名和目录接口 (JNDI) 名称空间(因为它们位于 WebSphere Application Server Traditional 中),因此可能需要进行迁移,才能在 ibm-ejb-jar-bnd.xml 或 ibm-web-bnd.xml 文件中进行 @EJB 查找和绑定。 如果未使用 Liberty 20.0.0.12 或更新版本,对于同一服务器中托管的 EJB 组件,这些查找必须使用可移植的 JNDI 语法,而对于其他服务器中托管的 EJB 组件,这些查找必须使用 corbaname: URL。
在 Liberty V20.0.0.12 之前只接受以下名称空间:
java:global/java:app/java:module/java:comp/corbaname:此规则将标记 @EJB 带注释的 lookup 未以上面列出的其中一个名称空间开头的属性值。
//此查找将被标记
@Stateless
@EJB(lookup="ejb/myApp/myModule/MyBeanComponent")
此规则也可以标记以“ejblocal:”开头的字符串字面值。
//这将被标记
new InitialContext().lookup("ejblocal:" + getEJBName());
此规则还会标记不使用上述其中一个名称空间的 JNDI 名称。 binding-name 属性值 <ejb-ref> ibm-ejb-jar-bnd.xml 和 ibm-web-bnd.xml 文件中的元素。
//this binding will not be flagged
<ejb-ref name="TestBean" binding-name="java:global/TestApp/TestModule/TestBean!test.TestRemoteInterface">
此规则还会标记不使用上述其中一个名称空间的 JNDI 名称。 jndiName 属性值 <ejbRefBindings> ibm-ejb-jar-bnd.xmi 和 ibm-web-bnd.xmi 文件中的元素。
//this JNDI name will be flagged
<ejbRefBindings jndiName="java:myFolder/">
有关在 Liberty 中使用 Enterprise Java Beans 2.x 的更多信息,请参阅 Using enterprise JavaBeans with remote interfaces on Liberty。