Hello everyone,

    We were using our Jackrabbit content repository in version 1.6.2 on JBOSS 
4.2.3. It was configured as described on this page : 
http://wiki.apache.org/jackrabbit/JackrabbitOnJBoss. Everything worked well, 
and we decided to upgrade to Jackrabbit v2.2.9. Configuration did not change, 
and our content repository has behaved correctly, until we led some load 
testing.

At this point, the application bugs, and our content repository is no more 
available (until a JBOSS reboot). The main stack shows this error log :

2011-11-29 17:57:17,193 WARN  [org.apache.jackrabbit.core.session.SessionState] 
: Attempt to close session-username-59 while another thread is concurrently 
accessing this session. Blocking until the other thread is finished using this 
session. Please review your code to avoid concurrent use of a session.
java.lang.Exception: Stack trace of concurrent access to session-username-59
                at 
org.apache.jackrabbit.core.session.SessionState.close(SessionState.java:234)
                at 
org.apache.jackrabbit.core.SessionImpl.logout(SessionImpl.java:888)
                at 
org.apache.jackrabbit.core.XASessionImpl.logout(XASessionImpl.java:389)
                at 
org.apache.jackrabbit.jca.JCAManagedConnection.cleanup(JCAManagedConnection.java:170)
                at 
org.jboss.resource.connectionmanager.InternalManagedConnectionPool.returnConnection(InternalManagedConnectionPool.java:339)
                at 
org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.returnConnection(JBossManagedConnectionPool.java:704)
                at 
org.jboss.resource.connectionmanager.BaseConnectionManager2.returnManagedConnection(BaseConnectionManager2.java:369)
                at 
org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:654)
                at 
org.apache.jackrabbit.jca.JCAManagedConnection.sendEvent(JCAManagedConnection.java:336)
                at 
org.apache.jackrabbit.jca.JCAManagedConnection.sendEvent(JCAManagedConnection.java:366)
                at 
org.apache.jackrabbit.jca.JCAManagedConnection.sendClosedEvent(JCAManagedConnection.java:373)
                at 
org.apache.jackrabbit.jca.JCAManagedConnection.closeHandle(JCAManagedConnection.java:226)
                at 
org.apache.jackrabbit.jca.JCAManagedConnection.closeHandles(JCAManagedConnection.java:431)
                at 
org.apache.jackrabbit.jca.TransactionBoundXAResource.end(TransactionBoundXAResource.java:58)
                at 
org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper.end(JcaXAResourceWrapper.java:58)
                at 
com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelPrepare(XAResourceRecord.java:259)
                at 
com.arjuna.ats.arjuna.coordinator.BasicAction.doPrepare(BasicAction.java:2871)
                at 
com.arjuna.ats.arjuna.coordinator.BasicAction.doPrepare(BasicAction.java:2828)
                at 
com.arjuna.ats.arjuna.coordinator.BasicAction.prepare(BasicAction.java:2382)
                at 
com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1783)
                at 
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:88)
                at 
com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
                at 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1389)
                at 
com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
                at 
com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
                at 
org.jboss.tm.usertx.client.ServerVMClientUserTransaction.commit(ServerVMClientUserTransaction.java:140)
                at 
org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
                at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
                at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
                at 
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
                at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
                at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
                at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
                at $Proxy223.findByReference(Unknown Source)

The problem is that no other thread is accessing the same  jcr session in our 
application (we call javax.jcr.Repository.login(Credentials) for each method 
involving our content repository ). The findByReference method  (at stack end) 
is coded by ourself and works with another XA managed transaction. I think that 
our session transaction is involved in a XA global transaction, and that JCR is 
not very pleased that someone else accesses its session (or transaction), when 
XA rollbacks or commits its transaction. We tried to remove <xa-transaction/> 
from our datasource configuration file, but it prevents us from using the 
repository....

Thanks in advance for your help,
François Caremoli

Reply via email to