Java 跨远程EJB调用的事务

Java 跨远程EJB调用的事务,java,jakarta-ee,jpa,jboss,ejb,Java,Jakarta Ee,Jpa,Jboss,Ejb,编辑:我自己解决了问题的第一部分-为了避免结束我的问题并打开第二部分的新问题,我循环使用此问题并提供在同一应用程序服务器上访问远程EJB的链接: 我有战争和耳朵。 Ear包含一个@Stateful EJB,对某些数据库操作使用PersistenceContext.EXTENDED。此上下文被扩展以访问持久性bean外部实体中的延迟抓取列表 WAR有一个JAX-RS REST接口,使用@Stateless sessionbean实现,它还可以对其他数据源执行简单操作。它们不需要扩展上下文,因此使

编辑:我自己解决了问题的第一部分-为了避免结束我的问题并打开第二部分的新问题,我循环使用此问题并提供在同一应用程序服务器上访问远程EJB的链接:

我有战争和耳朵。 Ear包含一个@Stateful EJB,对某些数据库操作使用PersistenceContext.EXTENDED。此上下文被扩展以访问持久性bean外部实体中的延迟抓取列表

WAR有一个JAX-RS REST接口,使用@Stateless sessionbean实现,它还可以对其他数据源执行简单操作。它们不需要扩展上下文,因此使用常规CMT

然而,战争中的bean需要调用EAR的EJB

如果我只是将项目合并到一个EAR中,并通过@EJB注入bean,CMT将无法与扩展持久性上下文交互。这是预期的,请参见JPA规范7.6.3。(@Stateless bean将常规PersistenceContext附加到事务,扩展上下文不接受该事务)

所以我将这两个服务分开,现在需要一个用于交互的服务接口

我的问题是:


1) 远程EJB调用会解决事务问题吗,或者JBOSS的行为会像Bean是本地的一样,试图将扩展持久性上下文添加到本地事务中,从而导致相同的问题吗?

您是仅在有状态EJB上使用扩展持久性上下文,还是在所有EJB(无状态+有状态EJB)上使用扩展持久性上下文?只有statefull,stateless才会接受扩展ctx,我想我是这样问的,因为你写了关于使用无状态EJB的文章。我发现了其中的一部分-现在的主要问题是,事务是跨应用程序的,还是远程EJB独立处理其事务?我意识到这不是你要问的问题,但是,您确定要为此保留打开的交易吗?您可以急切地获取实体中的列表并结束事务——这意味着加载更多的数据,可能是冗余的,但我希望它更具性能和可伸缩性(在大多数情况下)而不是在多个远程调用之间保持长时间运行的事务打开?您是仅在有状态EJB上使用扩展持久性上下文,还是在所有EJB(无状态+有状态EJB)上使用它?仅在有状态EJB上使用扩展持久性上下文,无状态不会接受扩展的ctx,我想我是这样问的,因为你写了关于使用无状态EJB的文章。我发现了其中的一部分-现在的主要问题是,事务是跨应用程序的,还是远程EJB独立处理其事务?我意识到这不是你要问的问题,但是,您确定要为此保留打开的交易吗?您可以急切地获取实体中的列表并结束事务——这意味着加载更多的数据,可能是冗余的,但我希望它比在多个远程调用中打开长时间运行的事务更具性能和可伸缩性(在大多数情况下)?