【问题标题】:@TransactionAttribute(REQUIRED) cause no effect@TransactionAttribute(REQUIRED) 没有效果
【发布时间】:2016-04-18 07:46:38
【问题描述】:

在 Oracle 数据库中,实体表具有约束检查(ID

但下面的两个代码 sn-ps 工作相同: 即使没有 JTA 注释,第一个 persist 方法也不会提交。 为什么两种变体的工作方式相同?

@Stateless
public class EntityServiceImpl implements EntityService{

@PersistenceContext
private EntityManager enManager;
@Resource
private SessionContext sessionCtx; 

@TransactionAttribute(REQUIRED)
public void updateEntity(List<Entity> entity) {
    try {
        Entity validEntity = entity.get(10);
        enManager.persist(validEntity);
        Entity inValidEntity = entity.get(90);
        enManager.persist(inValidEntity);

    } catch(Exception ex) {
        sessionCtx.setRollbackOnly();
        throw ex;
    }
}

第二个sn-p:

public void updateEntity(List<Entity> entity) {
        Entity validEntity = entity.get(10);
        enManager.persist(validEntity);
        Entity inValidEntity = entity.get(90);
        enManager.persist(inValidEntity);
}

persistence.xml

<persistence-unit name="WASLiberty" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.logging.level.sql" value="FINEST"/>
        <property name="eclipselink.logging.parameters" value="true"/>      
    </properties>
</persistence-unit>

编辑:

来自甲骨文:

必需属性 如果客户端在事务中运行并调用企业 bean 的方法,则该方法在客户端的事务中执行。如果客户端未与事务关联,则容器会在运行该方法之前启动一个新事务。

Required 属性是所有使用容器管理的事务划分运行的企业 bean 方法的隐式事务属性。除非您需要覆盖另一个事务属性,否则您通常不会设置Required 属性。由于事务属性是声明性的,您可以在以后轻松更改它们

这是否意味着不需要声明@TransactionAttribute(REQUIRED),除非我们需要除“REQUIRED”之外的另一个TransactionAttributeType?

【问题讨论】:

  • 是的,你基本上已经回答了你自己的问题:)。 REQUIRED 是所有无状态会话 bean 的默认值。只有在需要默认行为时才能更改它。
  • 是的 :) 谢谢,现在我很开心 :)

标签: jpa websphere jta websphere-liberty


【解决方案1】:

是的,您对@TransactionAttribute(REQUIRED) 是默认行为的理解是正确的。

对于会话 bean 和 MDB,默认情况下隐含此注释,像在第一个 sn-p 中所做的那样指定注释只是冗长。因此,唯一真正需要指定 @TransactionAttribute 的情况是,您使用的值不是 REQUIRED。

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 2018-08-03
    • 1970-01-01
    • 2014-07-29
    • 2012-10-30
    • 2018-05-21
    • 2018-07-28
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多