请勿使用局部 JNDI 名称

在 WebLogic 和 JBoss 应用程序中,<local-jndi-name> 元素为全局 JNDI 树中 Bean 的本地 home 接口定义 JNDI 名称。 该名称是在 weblogic-ejb-jar.xmljboss.xml 文件中定义的。

WebSphere® 不允许将本地 home 接口映射至全局 JNDI 树中的 JNDI 名称。 它们被改为映射至局部容器的 JNDI 树。 由于该原因,程序员必须使用局部名称空间中的 JNDI 引用而不是全局名称空间中的 JNDI 名称来访问局部企业 Bean。

当在 weblogic-ejb-jar.xmljboss.xml 中找到 <local-jndi-name> 元素时,此规则会被触发。 源扫描程序中提供了快速修订。该快速修订会处理 Java 文件、部署描述符和绑定以使这些引用能在 WebSphere 上工作。

会对在其中找到 <local-jndi-name> 元素的应用程序相关的所有包进行处理。 如果找不到应用程序 EAR 项目或它与找到的 EJB 项目不关联,那么仅会对该 EJB 项目进行处理。 使相关项目正确地定义很重要。

在源扫描程序中运行快速修订时,它会对在其中找到 <local-jndi-name> 的应用程序中的所有 Java 文件进行扫描。它进行扫描是为了针对局部 JNDI 名称进行直接上下文查询,以及为了查询对该名称的 EJB 引用。

例如,如果局部 JNDI 名称为 ejb/myBeanLocalHome,那么下列代码示例会触发对代码和/或部署描述符及绑定的更新。

Java 查询示例:

ctx.lookup("ejb/myBeanLocalHome");

ctx.lookup("java:comp/ejb/myBeanLocalHome");

ctx.lookup(myBeanLocalHomeNameVariable);

第一个示例中 Java 代码更改为 ctx.lookup("java:comp/ejb/myBeanLocalHome"),以便执行 EJB 引用查询。 其他两个 Java 示例保持不变。 在以上三种情况下,快速修订会对项目的部署描述符和绑定进行更新。

当对于项目检测到对特定局部 JNDI 名称的查询时,以及当使用了变量但无法确定查询时,web.xml 文件或 ejb-jar.xml 文件会被修改为包含定义了该局部 JNDI 名称的 Bean 的 <ejb-local-ref>。 对于 EJB 项目,<ejb-local-ref> 元素会添加至 ejb-jar.xml 中定义的每个 bean。 对于 web.xml 文件,会针对定义了该局部 JNDI 名称的 Bean 而添加一个引用。 对于以上两种情况,<ejb-local-ref> JNDI 名称都会添加至项目的绑定文件