'Jboss 7.2 root-logger level DEBUG provokes ConcurrentModificationException on executing a jpa query

Environment:

  • JBoss 7.2.0
  • Java 11
  • Hibernate 5.3.15.Final

I am getting an error ConcurrentModificationException on executing jpa query from a method in stateless ejb. It was working until now and no idea what it could be. The query is only getting records in a condition.

Error log

13:06:24,419 ERROR [es.caib.accfor.presentation.back.security.UserPrincipalManager] (default task-1) Error UserPrincipalManager.doFilter: es.caib.accfor.business.AppException: Exception UsuarioService.trace
    at deployment.accfor2.ear.accfor-ejb.jar//es.caib.accfor.business.security.boundary.UsuariService.trace(UsuariService.java:254)
    ...
    Suppressed: javax.ejb.EJBTransactionRolledbackException: javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:114)
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:122)
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:256)
        ... 106 more
    Caused by: javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.
        at org.jboss.jts//com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1300)
        at org.jboss.jts//com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
        at org.jboss.jts.integration//com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:89)
        at [email protected]//org.wildfly.transaction.client.LocalTransaction.commitAndDissociate(LocalTransaction.java:77)
        at [email protected]//org.wildfly.transaction.client.ContextTransactionManager.commit(ContextTransactionManager.java:71)
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:88)
        ... 108 more
        Suppressed: javax.transaction.RollbackException: WFTXN0061: Transaction is marked rollback-only
            ...
        Suppressed: javax.transaction.RollbackException: WFTXN0061: Transaction is marked rollback-only
            ...
    Caused by: java.util.ConcurrentModificationException
        at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1493)
        at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1526)
        at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1524)
        at [email protected]//org.hibernate.internal.util.EntityPrinter.toString(EntityPrinter.java:104)
        at [email protected]//org.hibernate.event.internal.AbstractFlushingEventListener.logFlushResults(AbstractFlushingEventListener.java:129)
        at [email protected]//org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:105)
        at [email protected]//org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:38)
        at [email protected]//org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1454)
        at [email protected]//org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:511)
        at [email protected]//org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3283)
        at [email protected]//org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2479)
        at [email protected]//org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473)
        at [email protected]//org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl.beforeCompletion(JtaTransactionCoordinatorImpl.java:352)
        at [email protected]//org.hibernate.resource.transaction.backend.jta.internal.synchronization.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:47)
        at [email protected]//org.hibernate.resource.transaction.backend.jta.internal.synchronization.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:37)
        at [email protected]//org.jboss.as.txn.service.internal.tsr.JCAOrderedLastSynchronizationList.beforeCompletion(JCAOrderedLastSynchronizationList.java:113)
        at [email protected]//org.wildfly.transaction.client.AbstractTransaction.performConsumer(AbstractTransaction.java:236)
        at [email protected]//org.wildfly.transaction.client.AbstractTransaction.performConsumer(AbstractTransaction.java:247)
        at [email protected]//org.wildfly.transaction.client.AbstractTransaction$AssociatingSynchronization.beforeCompletion(AbstractTransaction.java:292)
        at org.jboss.jts//com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:76)
        at org.jboss.jts//com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:360)
        at org.jboss.jts//com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:91)
        at org.jboss.jts//com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
        at org.jboss.jts//com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1288)
        ... 113 more

UserPrincipalManager(filter)

@WebFilter(filterName = "UserPrincipalFilter", urlPatterns = "/*")
public class UserPrincipalManager implements Filter {

    @Inject
    private UsuariServiceable usuariSvc;


    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws java.io.IOException, ServletException {
        ...
        Usuari usuari = usuariSvc.trace(loadUserData(sReq.getUserPrincipal()));
        ...
        chain.doFilter(req, resp);
    }

UserService

@RolesAllowed("**")
@Stateless
public class UserService {
    ...

    public Usuari trace(UserPrincipal uPrincipal) throws AppException {
       //I tried a simple db query and also get this error ConcurrentModificationException without anything else
       ...
       List<VTaula> rolNames = vTaulaSvc.findByNames(rolsToAdd); //Error by calling findByNames(HashSet<String>)
       ...
    }
}

VTaulaService

@PermitAll
@Stateless
public class VTaulaService extends BusinessService<VTaula> implements VTaulaServiceable {
    @PersistenceContext(unitName = "appPU")
    protected EntityManager eManager;
    ...
    public List<VTaula> findByNames(Set<String> names) throws AppException {
        List<VTaula> vTaulas;

        try {
            Query q = eManager.createNamedQuery("SELECT g FROM VTaula g WHERE g.nomCA IN (:names)");
            q.setParameter("names", names);
            vTaulas = q.getResultList();  //Error ConcurrentModificationException

        } catch (Exception e) {
            log.error("findByNomCA", e);
            throw new AppException("Error VTaula " + e, e);
        }

        return vTaulas;
    }

    ...
}

standalone.xml

...
<root-logger>
   <level name="DEBUG"/>
   <handlers>
       <handler name="CONSOLE"/>
       <handler name="FILE"/>
   </handlers>
</root-logger>
...

//Also happen with org.hibernate
 <logger category="org.hibernate">
     <level name="DEBUG"/>
 </logger>


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source