gpt4 book ai didi

java - 事务 TransactionImple ActionStatus.ABORTED 已经回滚

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:07 24 4
gpt4 key购买 nike

我实现了一个 DTO 业务从 TomEE 到 JBoss 的迁移。

我有这个实体:

@NamedQueries({
@NamedQuery(name = "common.plagebusiness.plage.getAllPlages", query = "SELECT p FROM Plage p ORDER BY p.plageRgMax, p.plageCReseau") })
@Entity
@Table(name = "PLAGE")
public class Plage {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idPlage")
private Integer idPlage;

@Column(name = "rgMin")
private String plageRgMin;

使用这个接口(interface):

@Local
public interface PlagePersistenceManager {

public void importPlages(List<DetailFH55> listeEnregDetail) throws PlageBusinessException, ParseException;

}

和实现:

@Stateless(name = "common.plagebusiness.PlagePersistenceManager")
public class PlagePersistenceManagerImpl implements PlagePersistenceManager {

private static final Logger LOGGER = Logger.getLogger(PlagePersistenceManager.class);

@PersistenceContext(unitName = "PlageBusiness")
private EntityManager em;

@Override
public void importPlages(final List<DetailFH55> listeEnregDetail) throws PlageBusinessException, ParseException {
LOGGER.debug("Entree dans importPlages");

if (null != listeEnregDetail) {
LOGGER.info("Debut Delete");

// suppression des plages
this.deleteAllPlages();

LOGGER.info("Fin Delete et Debut Insertion en bdd");

for (final DetailFH55 myEnreg : listeEnregDetail) {
// insertion des nouvelles plages
final Plage plage = this.convertEnregDetailToPersist(myEnreg);
this.em.persist(plage);
}

LOGGER.info("Fin Insertion en bdd");
}

LOGGER.debug("Sortie dans importPlages");

}
}

不幸的是,em.persist 不起作用,我有这个异常:

Caused by: javax.transaction.RollbackException: JBAS014585: Transaction 'TransactionImple < ac, BasicAction: 0:ffff0a48268b:4bc8a0e:56f01b76:18 status: ActionStatus.ABORTED >' was already rolled back

我在论坛上看到是因为Jboss超时了。我不想更改 Jboss 的配置,所以我尝试放置 ,

@org.jboss.annotation.ejb.TransactionTimeout(10000000) 
public void importPlages(final List<DetailFH55> listeEnregDetail) throws PlageBusinessException, ParseException

还是一样的异常...这段代码有什么问题。

deleteAllPlages 方法包含:

@Override
public int deleteAllPlages() throws PlageBusinessException {
final Query query = this.em.createNativeQuery("DELETE FROM `PLAGE`");
return query.executeUpdate();
}

我尝试在 persist(plage) 之后放置一个 flush() 和 clear(),但仍然是相同的异常。

final Plage plage = this.convertEnregDetailToPersist(myEnreg);
this.em.persist(plage);
this.em.flush();
this.em.clear();

谢谢。

最佳答案

我注意到您正在使用 org.jboss.annotation.ejb.TransactionTimeout 而不是 required EJB3一:org.jboss.ejb3.annotation.TransactionTimeout .

在您的 POM 中,尝试用这个替换引用您当前 TransactionTimeout 的依赖项:

<dependency>
<groupId>org.jboss.ejb3</groupId>
<artifactId>jboss-ejb3-ext-api</artifactId>
<version>2.2.0.Final</version>
<scope>provided</scope>
</dependency>

然后您可以指定您的值和单位:

@TransactionTimeout(value = 10, unit = TimeUnit.SECONDS).

你可以找到一个related issue在 JBoss 的论坛上。

关于java - 事务 TransactionImple ActionStatus.ABORTED 已经回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136644/

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