JBoss 5.1上で実行されるJavaアプリケーションがあります。場合によっては、JDBCException
がいくつかの基本メソッドによってスローされる場合にトランザクションがクローズされないようにする必要があります。JBoss + Hibernateでのトランザクションロールバックの防止
は、我々は、次の1 insert
は(制約違反によって引き起こさJDBCException
をラップする)ためPersistenceException
で失敗した場合
@PersistenceContext(unitName = "bar")
public EntityManager em;
public Object foo() {
try {
insert(stuff);
return stuff;
} (catch PersistenceException p) {
Object t = load(id);
if (t != null) {
find(t);
return t;
}
}
}
、我々は内load
で実行を続けたいように見えるEJBメソッドを持っています同じ取引。
取引がコンテナによって閉鎖されているため、現時点ではこれを行うことはできません。ここでは、ログに見るものです:
org.hibernate.exception.GenericJDBCException: Cannot open connection
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
...
Caused by: javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: 7f000101:85fe:4f04679d:182 status: ActionStatus.ABORT_ONLY >
EJBクラスには、次の注釈
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
でマークされて戻ってちょうどこの特定のケースでは、圧延からトランザクションを防ぐために、任意の適切な方法はありますか?