- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我遇到了一个奇怪的 EJB 事务属性问题。 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 没有按预期启动新事务。
我将 EJB 3 与 Weblogic 结合使用。
伪代码如下:
@Stateless
public class EJB1 implements IEJB1
{
@EJB
private IEJB2 ejb2;
@Override
public void method1()
{
for (i=0; i<N; i++) {
ejb2.method2();
}
}
}
@Stateless
public class EJB2 implements IEJB2
{
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void method2()
{
DBpersist();
}
}
因为我为 EJB2.method2 指定了 TransactionAttributeType.REQUIRES_NEW,所以我希望为 method2 创建一个新事务。但是在测试期间我发现没有为 method2 创建新的事务,method2 与 EJB1.method1 具有相同的事务。我使用 Weblogic 的 API 来记录事务信息。
然后我做了以下代码更改:
@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED
public void method1()
{
for (i=0; i<N; i++) {
ejb2.method2();
}
}
这样它强制容器为 EJB2.method2 创建一个新事务。
但我不明白为什么当我为 EJB1.method1 使用默认的 TransactionAttributeType(通过不指定任何 TransactionAttributeType)并且为 EJB2.method2 使用 TransactionAttributeType=REQUIRES_NEW 时容器没有为 EJB2.method2 创建新事务。
我搜索了与此问题相关的现有问题。但我发现的所有情况都是当您从同一 EJB 中的另一个私有(private)方法调用私有(private)方法(使用 REQUIRES_NEW)时,除非您通过 EJB 接口(interface)调用它,否则容器不会启动新事务。这不是我的情况。
最佳答案
伪代码看起来没问题。我在各种项目中都实践过这一点,所以没有错。
这可能有多种原因
关于java - EJB TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19935443/
我在我的项目中使用 EcllipseLink 2.5。@TransactionAttribute 的默认值是必需的。如果我们将SessionBean定义为TransactionManagementTy
在我的项目中使用 Wildfly 10、java 8、mysql、camel 和 hibernate methodKO 持久化实体 orderEntity("ko"),调用 methodOK 并进入异
我需要在 glassfish3.0 上使用 JPA 2.0 和 EJB3.0 删除忽略任何完整性约束的员工列表(即成功删除尚未与任何其他实体相关的实体或跳过与其他实体相关的实体) : 我迭代列表并在
我测试了我的 ejb jpa 事务。我使用容器管理的 entityManager: @PersistenceContext(unitName = "ParticularUnit") EntityMan
我正在测试应用程序中试验 CDI。我有一个 DAO,它注入(inject)一个容器管理的 JTA 持久性上下文,如下所示: public class TestDAO implements Serial
我开始进行持久性编码,并且遇到了诸如 @Transactional 和 @TransactionAttribute 之类的注释。我了解这两个注释的基本功能,并且它们可以在类级别和方法级别使用。我想更好
我遇到了两个单独事务的问题,它们以与实际执行顺序相反的顺序刷新到数据库。 这是业务案例:存在 RemoteJob-RemoteJobEvent 一对多关系。每创建一个新的事件,都会获取一个时间戳,并设
名为 Aby 的 EJB 方法调用另一个名为 Bob 的 EJB 方法Bob标有 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW
我有一个方法 Meth1,女巫会从另一个类调用 Meth2。我希望如果 Meth1 失败,则不执行 Meth2。 它们都有 REQUIRED 属性。使用此代码,如果 Meth1 在持久化过程中失败(M
查看此链接: When does @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) commit? B怎么可能是正确答案呢?我认
我有包含以下代码的 OwnerService 类: public RegisterOwnerResult registerOwner(RegisterOwnerRequest request) {
我遇到了一个奇怪的 EJB 事务属性问题。 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 没有按预期启动新事务。 我将 EJ
您能否在不需要事务的方法中调用需要事务的方法? @TransactionAttribute(value = TransactionAttributeType.NEVER) public void Do
我说的对吗,@TransactionManagement(TransactionManagementType.BEAN) 与 SessionBean 上的任何 @TransactionAttribut
我了解容器管理事务(CMT)。我也知道different possible values枚举类型TransactionAttributeType。由于客户端从不直接调用 MDB,因此除了 REQUIR
我正在使用 mdb-jms。我创建了一个具有 2 个方法的 EJB 无状态类。(i) 方法 insertInput() 被注释为 @TransactionAttribute(TransactionAt
我的 EJB3.1 bean 初始化遇到困难,更具体地说,由于感知到的事务回滚而导致它失败,即使我已经用 @TransactionAttribute(NOT_SUPPORTED) 标记了 bean .
我是一名优秀的程序员,十分优秀!