WebSphere Liberty 的 EJB 绑定

EJB Bindings for WebSphere Liberty

我正在努力将 ear 应用程序从 WebSphere 8.5 迁移到 liberty。

作为更改的一部分,我已将 JNDI 绑定(在查找中)替换为 java 名称空间

例如

ejb/abc/cde/TestHome  
ejblocal:ejb/qwe/ret/AbcHome  

替换为 java 类似于

的命名空间
java:global/my-ear-app-name/my-ejb-module-name/MyEjbBean!my.package.name.MyEjbLocal

但是在代码的某些地方,有像

这样的查找
.lookup("com.abc.cde.Test");

这些查找是否在本地使用 java 个命名空间?

如何处理这些查询?我应该添加 java 名称空间,例如 java:global/java:app 等吗?

您已经注意到,WebSphere JNDI 传统自定义绑定目前在 Liberty 中不起作用。为了将来参考,我们目前正在努力让他们在 Liberty 中工作,以便将来更容易迁移。 (https://github.com/OpenLiberty/open-liberty/issues/7918)

您混淆的查找(InitialContext.lookup("com.abc.cde.Test");) 就是我们所说的远程bean 的默认短格式绑定,它只是远程接口。

你用 Java 命名空间查找替换它们是正确的,具有这些模式:

  • java:global/<appname>/<modulename>/<bean>!<interface>
  • java:app/<modulename>/<bean>!<interface>
  • java:module/<bean>!<interface>

    • 注:<interface>为限定接口名,包含包
    • 注意 2:对 java:appjava:module 的调用需要在与 bean 相同的应用程序或模块中。

此外,如果您 运行 Liberty 服务器,我们会打印出 java:global 与 CNTR0167I:

的绑定

作为参考,旧的默认绑定尚未生效:

  • 本地长格式:ejblocal:<appname>/<modulename>.jar/<bean>#<interface>
  • 本地简称:ejblocal:<interface>
  • 远程长格式:ejb/<appname>/<modulename>.jar/<bean>#<interface>
  • 远程短格式:<interface>

还有一些旧的自定义绑定表单可以通过绑定文件指定,例如 ejb-jar-bnd.xml,它们目前具有相同的迁移策略,但我不会讨论所有不同的样式,除非您也 运行 加入其中。安全的赌注是,如果它正在查找一个不是 java 命名空间的查找 bean,只需将其替换为 java:global.