Websphere Traditional vs Liberty 中的 EJB 支持



我正在做一个项目,我们计划使用 WLP(WebSphere liberty(而不是传统的 WAS。

代码具有用于不同组件的 ejb 模块(ejb 2 和 3(。 一个组件的 EJB 客户端被其他一些组件用来与 EJB 服务器模块通信。

我知道自由有一些ejb特征。但是 liberty 对 EJB 的支持/功能级别是否与 WAS 9 中相同?

自由使用 EJB 有哪些限制/问题?

WebSpherev9 和 WebSphere Liberty 都支持完整的 EJB 3.2 规范(包括对 EJB 1 和 EJB 2 的底层支持(。 但是,当涉及到超出 EJB 规范的受支持的可选功能和扩展时,WebSphere Liberty 中存在一些限制。 与 WebSphere v9 相比,WebSphere Liberty 的当前限制是:

  • 实体 Bean:Liberty 不支持可选的 2.x/1.x CMP/BMP 实体 Bean API 组。

  • JAX-RPC Web ServiceEndpoint:Liberty 不支持可选的 JAX-RPC WebService Endpoint API 组。(支持 JAX-WS 端点(更新:2022 年 1 月新增了一个 Maven/Gradle 转换工具,用于将 JAX-RPC 应用程序迁移到 JAX-WS。有关详细信息,请参阅以下博客文章和文档。

  • 可嵌入的 EJB容器:Liberty 不提供可选的可嵌入的 EJB 容器 API 组的实现。

  • 事务传播:Liberty 不支持远程 EJB 方法的出站或入站事务传播。 事务在服务器进程中传播,但不从客户端或与其他服务器进程一起传播。

  • EJB瘦客户机支持:Liberty 不提供 EJB 瘦客户机,但支持使用 WebSphere v9 EJB 瘦客户机。 Liberty 确实提供了完整的 Java EE 应用程序客户端。此外,Liberty 不提供手动生成用于瘦客户机的 EJB 存根类的工具,尽管支持使用 RMIC (EJB 2.x/1.x( 或 WebSphere v9 中的 createEJBStubs 命令 (EJB 3.x( 生成的存根。

  • 定制 JNDI名称:Liberty 不支持使用定制名称(从ibm-ejb-jar-bnd.xml开始(将 EJB 绑定到 JNDI 中。 EJB 在规范定义的位置可用,分别是java:globaljava:appjava:module。注意:此支持正在开发中,您可以按照此处详述的进度进行操作:https://github.com/OpenLiberty/open-liberty/issues/7918更新:现在从 Liberty 20.0.0.12 开始可用。

  • 持久计时器故障转移:Liberty 不支持将 EJB 持久计时器故障转移到其他服务器实例。注意:此功能正在开发中(目前处于测试阶段(,您可以按照此处详细介绍的进度进行操作: https://github.com/OpenLiberty/open-liberty/issues/7774 更新现在从 Liberty 20.0.0.5 开始可用。

  • 有状态会话故障转移:Liberty 不支持将有状态会话 Bean 的状态故障转移到其他服务器实例。

  • WLM:Liberty 不提供类似于 WebSphere v9 中为远程 EJB 调用提供的工作负载管理支持的功能。

  • PMI:Liberty 不支持 WebSphere v9 上提供的 WebSphere 性能监视基础结构。

  • 远程 EJB 接口的本地优化:同一服务器进程中的远程 EJB 调用不会优化,它们将经过完整的 RMI/IIOP 堆栈。

  • EJB MDB 对侦听器端口的支持:Liberty 支持将激活规范与消息驱动的 Bean 一起使用。

根据应用程序的描述,由于缺乏对事务传播、EJB 瘦客户机和 WLM 的支持,在使用 EJB 远程接口时可能会遇到问题。 您可能需要考虑将这些 Bean 公开为 Web 服务端点 (@WebService(。 此外,如果应用程序使用自定义 JNDI 名称,如ejb/ABeanejblocal:ABean,则需要将它们切换为使用规范定义的位置(如java:global/<app>/<module>/ABean!<interface>(查找 bean 。

最新更新