Websphere Traditional 与 Liberty 中的 EJB 支持
EJB support in Websphere Traditional vs Liberty
我正在做一个项目,我们计划使用 WLP (WebSphere liberty) 而不是传统的 WAS。
该代码具有用于不同组件的 ejb 模块(ejb 2 和 3)。
一个组件的 EJB 客户端被一些其他组件用来与 EJB 服务器模块对话。
我知道 liberty 有一些 ejb 特性。但是 liberty 是否具有与 WAS 9 中可用的相同级别的 EJB support/features?
自由使用 EJB 有哪些limitations/issues?
WebSphere v9 和 WebSphere Liberty 都支持完整的 EJB 3.2 规范(包括对 EJB 1 和 EJB 2 的后级支持)。但是,在涉及超出 EJB 规范的受支持可选功能和扩展时,WebSphere Liberty 存在一些限制。与 WebSphere v9 相比,WebSphere Liberty 的当前限制是:
Entity beans : Liberty 不支持可选的 2.x / 1.x CMP/BMP Entity Beans API组。
JAX-RPC Web 服务端点:Liberty 不支持可选的 JAX-RPC Web 服务端点 API 组。 (支持 JAX-WS 端点)
更新: 2022 年 1 月新增的 Maven/Gradle 转换工具可用于将 JAX-RPC 应用程序迁移到 JAX-WS。详情见下文blog post and documentation。
可嵌入 EJB 容器:Liberty 不提供可选可嵌入 EJB 容器 API 组的实现。
事务传播:Liberty 不支持远程 EJB 方法的出站或入站事务传播。事务在服务器进程内传播,而不是从客户端或与另一个服务器进程传播。
EJB 瘦客户端支持:Liberty 不提供 EJB 瘦客户端,但支持使用 WebSphere v9 EJB 瘦客户端。 Liberty 确实提供了完整的 Java EE 应用程序客户端。此外,Liberty 不提供工具来手动生成用于瘦客户机的 EJB 存根 类,尽管使用 RMIC(EJB 2.x/1.x)或 createEJBStubs 命令(EJB 3.x) 来自 WebSphere v9 的支持。
自定义 JNDI 名称:Liberty 不支持使用自定义名称将 EJB 绑定到 JNDI(来自 ibm-ejb-jar-bnd.xml
). EJB 在规范定义的位置 java:global
、java:app
和 java: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 Performance Monitoring Infrastructure
远程 EJB 接口的本地优化:同一服务器进程内的远程 EJB 调用未优化,它们将经过完整 RMI/IIOP堆叠.
侦听器端口的 EJB MDB 支持:Liberty 支持将激活规范与消息驱动的 bean 一起使用。
根据您的应用程序的描述,由于缺乏对事务传播、EJB 瘦客户端和 WLM 的支持,您在使用 EJB 远程接口时可能会遇到问题。您可能需要考虑将这些 bean 公开为 Web 服务端点 (@WebService
)。此外,如果应用程序使用自定义 JNDI 名称,例如 ejb/ABean
或 ejblocal:ABean
,那么您需要将它们切换为使用规范定义的位置(例如 java:global/<app>/<module>/ABean!<interface>
.[=)查找 bean。 21=]
我正在做一个项目,我们计划使用 WLP (WebSphere liberty) 而不是传统的 WAS。
该代码具有用于不同组件的 ejb 模块(ejb 2 和 3)。 一个组件的 EJB 客户端被一些其他组件用来与 EJB 服务器模块对话。
我知道 liberty 有一些 ejb 特性。但是 liberty 是否具有与 WAS 9 中可用的相同级别的 EJB support/features?
自由使用 EJB 有哪些limitations/issues?
WebSphere v9 和 WebSphere Liberty 都支持完整的 EJB 3.2 规范(包括对 EJB 1 和 EJB 2 的后级支持)。但是,在涉及超出 EJB 规范的受支持可选功能和扩展时,WebSphere Liberty 存在一些限制。与 WebSphere v9 相比,WebSphere Liberty 的当前限制是:
Entity beans : Liberty 不支持可选的 2.x / 1.x CMP/BMP Entity Beans API组。
JAX-RPC Web 服务端点:Liberty 不支持可选的 JAX-RPC Web 服务端点 API 组。 (支持 JAX-WS 端点) 更新: 2022 年 1 月新增的 Maven/Gradle 转换工具可用于将 JAX-RPC 应用程序迁移到 JAX-WS。详情见下文blog post and documentation。
可嵌入 EJB 容器:Liberty 不提供可选可嵌入 EJB 容器 API 组的实现。
事务传播:Liberty 不支持远程 EJB 方法的出站或入站事务传播。事务在服务器进程内传播,而不是从客户端或与另一个服务器进程传播。
EJB 瘦客户端支持:Liberty 不提供 EJB 瘦客户端,但支持使用 WebSphere v9 EJB 瘦客户端。 Liberty 确实提供了完整的 Java EE 应用程序客户端。此外,Liberty 不提供工具来手动生成用于瘦客户机的 EJB 存根 类,尽管使用 RMIC(EJB 2.x/1.x)或 createEJBStubs 命令(EJB 3.x) 来自 WebSphere v9 的支持。
自定义 JNDI 名称:Liberty 不支持使用自定义名称将 EJB 绑定到 JNDI(来自ibm-ejb-jar-bnd.xml
). EJB 在规范定义的位置java:global
、java:app
和java: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 Performance Monitoring Infrastructure远程 EJB 接口的本地优化:同一服务器进程内的远程 EJB 调用未优化,它们将经过完整 RMI/IIOP堆叠.
侦听器端口的 EJB MDB 支持:Liberty 支持将激活规范与消息驱动的 bean 一起使用。
根据您的应用程序的描述,由于缺乏对事务传播、EJB 瘦客户端和 WLM 的支持,您在使用 EJB 远程接口时可能会遇到问题。您可能需要考虑将这些 bean 公开为 Web 服务端点 (@WebService
)。此外,如果应用程序使用自定义 JNDI 名称,例如 ejb/ABean
或 ejblocal:ABean
,那么您需要将它们切换为使用规范定义的位置(例如 java:global/<app>/<module>/ABean!<interface>
.[=)查找 bean。 21=]