2016-03-21 15 views
1

TomEEからJBossへのDTOビジネスの移行を実現しました。トランザクションTransactionImple ActionStatus.ABORTEDはすでにロールバックされていました

@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; 

このインタフェースでは:

@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 iは、動作しません

私は、このエンティティを持っていますこの除外がありました:

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

私はフォーラムでJbossのtimeOutのために読んでいました。私は、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(); 
} 

を私はまだ(プラージュ)を持続し、同じ例外の後に)((フラッシュを入れてみました)とクリア。

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

Thxs。

+0

'deleteAllPages()'メソッドは何をしますか?トランザクションが中断された可能性があります。 – metlos

+0

@metlosメソッドdeleteAllPlagesを追加します – Kikou

+0

@aribeiro私はdeleteAllPages関数をコメントアウトしました。同じ結果が同じ例外です – Kikou

答えて

3

あなたはrequired EJB3の代わりにorg.jboss.annotation.ejb.TransactionTimeoutを使用しています。org.jboss.ejb3.annotation.TransactionTimeoutです。

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

あなたはrelated issueのを見つけることができます。そして、あなたはあなたの値と単位を指定することができます

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

:あなたのPOMで

は、このいずれかで、あなたの現在のTransactionTimeoutを意味し、依存関係を交換してみてくださいJBossのフォーラム

+0

Thxsこの注釈でうまく動作します。 – Kikou

関連する問題