gpt4 book ai didi

java - EJB3.1 - 同一 JVM 中多个应用程序的事务

转载 作者:行者123 更新时间:2023-11-30 07:13:35 24 4
gpt4 key购买 nike

我有以下情况:

  • App1 ear — 包含一些执行 DB 工作的服务的应用程序。
  • App2 ear — 另一个使用 App1 服务的应用程序。
  • 两者都在同一个 JVM 中运行。应用服务器是JBoss7。
  • App2 在调用 App1 的服务之前/之后做一些更多的数据库工作。

假设在服务的 App2 中有一个方法:

void method(){
doDBWorkinApp2();
callApp1ServiceToDoMoreDBWork();
moreDBWorkinApp2();
}

我希望此方法在单个事务中执行。我该怎么做?

最佳答案

好吧,假设是无状态的,事务/持久性范围是一般传播的。但是,请考虑您为每种方法使用的事务属性(即 NOT_SUPPORTED、SUPPORTS、MANDATORY..)和一些传播规则(规则:https://weblogs.java.net/blog/ss141213/archive/2006/10/persistence_con.html)。

如果从事务中调用一个事务范围的实体管理器,如果还没有一个新的持久化上下文并与该事务相关联,则会创建一个新的持久化上下文(Enterprise JavaBeans 3.0)

因此,如果您为两个无状态使用默认 Tx 属性(必需):它们将共享相同的上下文,因此,如果 1 方法失败,所有 将回滚。如果你不想要这种行为,你仍然可以使用类似(REQUIRES_NEW,NOT_SUPPORTED ..)

要了解有关交易属性的更多信息:http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttributeType.html

编辑:在多个 EAR 的情况下,每个 EJB 都有一个上下文(一种客户端上下文),并将根据调用的 EJB 的 TransactionAttribute 进行传播,这仅适用于本地调用。请注意,您不能在远程 EJB 调用之间共享持久性上下文。

关于java - EJB3.1 - 同一 JVM 中多个应用程序的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19304402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com