transaction lock ejb verrou

transaction lock ejb verrou - Java - Programmation

Marsh Posté le 20-09-2012 à 12:53:58    

Bonjour
J'ai un erreur "ORA-02049: temporisation : la transaction distribuée attend un verrou" sur mon application java ejb3, jpa, qui arrive 20 fois par mois.  
 

Citation :

ATTENTION: Local Exception Stack:  
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-02049: temporisation : la transaction distribuée attend un verrou
Error Code: 2049
Call: UPDATE MANAGE SET END_DATE = ? WHERE (((ID_HOST = ?) AND (BEGIN_DATE = ?)) AND (EMPLOYEE = ?))
 bind => [4 parameters bound]
Query: UpdateObjectQuery(com.agarik.operia.orm.Manage2@1b55825)
 at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
 at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:840)
 at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:906)
 at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:592)
 at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
 at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717)
 at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253)
 at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
 at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
 at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.updateObject(DatasourceCallQueryMechanism.java:749)
 at org.eclipse.persistence.internal.queries.StatementQueryMechanism.updateObject(StatementQueryMechanism.java:432)
 at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1042)
 at org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(UpdateObjectQuery.java:84)
 at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:287)
 at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
 at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844)
 at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:743)
 at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
 at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
 at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)
 at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516)
 at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498)
 at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1449)
 at org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForClassWithChangeSet(CommitManager.java:265)
 at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:128)
 at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3799)
 at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1415)
 at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:636)
 at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1561)
 at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:447)
 at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:780)
 at org.eclipse.persistence.internal.jpa.EJBQueryImpl.performPreQueryFlush(EJBQueryImpl.java:1298)
 at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:434)
 at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:773)
 at....rdbms.RDBMSEquipmentDAO.getEquipment(RDBMSEquipmentDAO.java:45)
 at ...s.RDBMSManageDAO.stopManage(RDBMSManageDAO.java:117)
 at ....monitoring.manage.ManageBean.stopManage(ManageBean.java:473)


 
 

Citation :


@Stateless(
@TransactionAttribute(value = TransactionAttributeType.SUPPORTS)
public class ManageBean{
 
   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
   public void stopManage(){
       manageDAO.stopManage();
   }
 
}
 
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
public class RDBMSManageDAO{
    @PersistenceContext
    private EntityManager em;
    @Inject
    private EquipmentDAO hostDAO;
 
    public void stopManage(){
         Host host = hostDAO.getEquipment(manage.getEquipment());
    }
}
 
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
public abstract class RDBMSEquipmentDAO{
       @PersistenceContext
 private EntityManager em;
       public Host getEquipment(String equipment) throws DAOException
 {
  Query query = em.createNamedQuery(...
  try
  {
   return (Host)query.getSingleResult();// DEBUT DE LA STACK D'ERREUR    
     
  }
  catch (NoResultException e)
  {
   return null;
  }
 }
}


 
Le type 'TransactionAttributeType.REQUIRED' propagé dans les différentes méthode par EJB est il compatible avec l'entityManager injecté par javax.inject.Inject (c'est du cdi, je crois)?
Faut il faire un flush quelquepart car c'est un update? Faut il créer un singleton pour entityManager ou utiliser entityManagerFactory?

Reply

Marsh Posté le 20-09-2012 à 12:53:58   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed