【问题标题】:EJB Bindings for WebSphere LibertyWebSphere Liberty 的 EJB 绑定
【发布时间】:2020-03-13 17:40:01
【问题描述】:

我正在将 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:global/java:app 等 java 命名空间吗?

【问题讨论】:

  • 是来自 InitialContext 的代码 .lookup("com.abc.cde.Test"); 还是您首先查找了不同的上下文,例如“ejblocal”?您在绑定文件中是否有任何内容,例如 ejb-jar-bnd.xml 将元素设置为“com.abc.cde.Test”,例如 simple-binding-name
  • 它正在使用初始上下文。我没有在任何 xml 文件中找到绑定

标签: ejb websphere-liberty


【解决方案1】:

您已经注意到,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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多