Could you post the code for the T1...T3 steps? Maybe something is not synchronized there... (just a guess).
Regards, Alex On Tue, Jan 20, 2009 at 5:20 PM, Moritz Rebbert <[email protected]> wrote: > Hi List, > > i noticed a strange behavior of the jca-adapter in a jboss environment. > It was hardly to reproduce so wasn't able to write a simple example, yet. > > Some hours of debugging let me get the impression, that the caching of > the ItemStates is broken in my case... > > Generally I perform some actions on an EJB that user the Repository > Resource. I choose ContainerManagedTransactions but encountered the > Problem in BMT,too. > > The tasks i do are: > T1: create a node "a" > T2: create a child node "a/b" > T3: removes "a" > > Sometimes(!) after repeating this process two or more times, the remove > stops with a TransactionRollbackException [0]. The jboss server.log also > gives a small hint to what has happend: > 2009-01-20 15:16:33,464 DEBUG > [org.apache.jackrabbit.core.state.SharedItemStateManager] > 41bcdd97-3589-4095-a32e-aa1f60867744 has been modified externally > The id is the id of node "a". > I could also extract the underlying Exception that leads to the rollback[1]. > Also i extracted the modCount of the given ItemState and its overlayItemState: > 15:16:33,401 INFO [STDOUT] state.modCount: 0 state.overlay.getModeCount: 1 > > So it seems that the node i retrieve in the remove methode was modified, > while i try to remove it. But this only happens some times and i only > tested on single client that performs the actions sequentially. > > A workaround that helps me out of this is to clear the ItemCache, but > that goes far beyond the API and wasn't more than wild guessing: > > Every time I aquire a new Session from the JCA Repository I do something > like this: > > JCASessionHandle handle = (JCASessionHandle)session; > ItemManager itemManager = > ((XASessionImpl)handle.getManagedConnection().getSession(handle)).getItemManager(); > Method m = itemManager.getClass().getDeclaredMethod("dispose"); > m.setAccessible(true); > m.invoke(itemManager); > > Ugly, isn't it!? > > I wasn't able to write a simple example to reproduce this. So mayby i > missused the JCR-API and cause this by my self. But besides the > dispose-hack above i only do normal jcr-Api calls. > > So now i need some hints: > 1. What further informations i could provide to write an proper > bug-report? > 2. Any ideas how to isolate the problem? > > > I use: > jackrabbit-jca-1.5.0 > jboss-4.2.2.GA > my jcr-ds.xml looks like this[2] > my repository.xml like this[3] > > Any help appreciated! > > Regards > Moritz Rebbert > > > > [0] > ERROR: java.lang.RuntimeException: javax.transaction.RollbackException: > [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] > [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't > commit because the transaction is in aborted state; nested exception is: > java.lang.RuntimeException: javax.transaction.RollbackException: > [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] > [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't > commit because the transaction is in aborted state > > [1] > 16:20:13,463 ERROR [STDERR] javax.transaction.xa.XAException > 16:20:13,464 ERROR [STDERR] at > org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:155) > 16:20:13,464 ERROR [STDERR] at > org.apache.jackrabbit.core.XASessionImpl.commit(XASessionImpl.java:337) > 16:20:13,465 ERROR [STDERR] at > org.apache.jackrabbit.jca.TransactionBoundXAResource.commit(TransactionBoundXAResource.java:39) > 16:20:13,465 ERROR [STDERR] at > org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper.commit(JcaXAResourceWrapper.java:53) > 16:20:13,465 ERROR [STDERR] at > com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelOnePhaseCommit(XAResourceRecord.java:636) > 16:20:13,465 ERROR [STDERR] at > com.arjuna.ats.arjuna.coordinator.BasicAction.onePhaseCommit(BasicAction.java:2619) > 16:20:13,465 ERROR [STDERR] at > com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1779) > 16:20:13,465 ERROR [STDERR] at > com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:88) > 16:20:13,466 ERROR [STDERR] at > com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177) > 16:20:13,466 ERROR [STDERR] at > com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1389) > 16:20:13,466 ERROR [STDERR] at > com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135) > 16:20:13,466 ERROR [STDERR] at > com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87) > 16:20:13,466 ERROR [STDERR] at > org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175) > 16:20:13,466 ERROR [STDERR] at > org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) > 16:20:13,466 ERROR [STDERR] at > org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191) > 16:20:13,466 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,467 ERROR [STDERR] at > org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) > 16:20:13,467 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,467 ERROR [STDERR] at > org.jboss.ejb3.stateful.StatefulInstanceInterceptor.invoke(StatefulInstanceInterceptor.java:83) > 16:20:13,467 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,468 ERROR [STDERR] at > org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:166) > 16:20:13,478 ERROR [STDERR] at > org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:115) > 16:20:13,478 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,479 ERROR [STDERR] at > org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) > 16:20:13,479 ERROR [STDERR] at > org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) > 16:20:13,496 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,496 ERROR [STDERR] at > org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) > 16:20:13,496 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,496 ERROR [STDERR] at > org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) > 16:20:13,496 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:13,496 ERROR [STDERR] at > org.jboss.ejb3.stateful.StatefulContainer.dynamicInvoke(StatefulContainer.java:335) > 16:20:13,497 ERROR [STDERR] at > org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) > 16:20:13,497 ERROR [STDERR] at > org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) > 16:20:13,497 ERROR [STDERR] at > org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:769) > 16:20:13,511 ERROR [STDERR] at > org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573) > 16:20:13,512 ERROR [STDERR] at > org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373) > 16:20:13,512 ERROR [STDERR] at > org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166) > 16:20:13,513 ERROR [STDERR] Caused by: > org.apache.jackrabbit.core.TransactionException: Unable to prepare > transaction. > 16:20:13,513 ERROR [STDERR] at > org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:155) > 16:20:13,513 ERROR [STDERR] at > org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:138) > 16:20:13,514 ERROR [STDERR] ... 36 more > 16:20:13,514 ERROR [STDERR] Caused by: > org.apache.jackrabbit.core.state.StaleItemStateException: > b0a65dc6-5180-4fe9-8f77-d09f0870b2cb has been modified externally > 16:20:13,514 ERROR [STDERR] at > org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin(SharedItemStateManager.java:644) > 16:20:13,515 ERROR [STDERR] at > org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate(SharedItemStateManager.java:1054) > 16:20:13,515 ERROR [STDERR] at > org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:149) > 16:20:13,515 ERROR [STDERR] ... 37 more > 16:20:22,241 ERROR [STDERR] javax.transaction.xa.XAException > 16:20:22,241 ERROR [STDERR] at > org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:155) > 16:20:22,241 ERROR [STDERR] at > org.apache.jackrabbit.core.XASessionImpl.commit(XASessionImpl.java:337) > 16:20:22,241 ERROR [STDERR] at > org.apache.jackrabbit.jca.TransactionBoundXAResource.commit(TransactionBoundXAResource.java:39) > 16:20:22,241 ERROR [STDERR] at > org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper.commit(JcaXAResourceWrapper.java:53) > 16:20:22,241 ERROR [STDERR] at > com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelOnePhaseCommit(XAResourceRecord.java:636) > 16:20:22,241 ERROR [STDERR] at > com.arjuna.ats.arjuna.coordinator.BasicAction.onePhaseCommit(BasicAction.java:2619) > 16:20:22,242 ERROR [STDERR] at > com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1779) > 16:20:22,242 ERROR [STDERR] at > com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:88) > 16:20:22,242 ERROR [STDERR] at > com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177) > 16:20:22,242 ERROR [STDERR] at > com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1389) > 16:20:22,242 ERROR [STDERR] at > com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135) > 16:20:22,243 ERROR [STDERR] at > com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87) > 16:20:22,243 ERROR [STDERR] at > org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175) > 16:20:22,243 ERROR [STDERR] at > org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) > 16:20:22,243 ERROR [STDERR] at > org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191) > 16:20:22,243 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,243 ERROR [STDERR] at > org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) > 16:20:22,244 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,244 ERROR [STDERR] at > org.jboss.ejb3.stateful.StatefulInstanceInterceptor.invoke(StatefulInstanceInterceptor.java:83) > 16:20:22,244 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,244 ERROR [STDERR] at > org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:166) > 16:20:22,244 ERROR [STDERR] at > org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:115) > 16:20:22,244 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,244 ERROR [STDERR] at > org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) > 16:20:22,244 ERROR [STDERR] at > org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) > 16:20:22,284 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,284 ERROR [STDERR] at > org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) > 16:20:22,284 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,284 ERROR [STDERR] at > org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) > 16:20:22,284 ERROR [STDERR] at > org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) > 16:20:22,284 ERROR [STDERR] at > org.jboss.ejb3.stateful.StatefulContainer.dynamicInvoke(StatefulContainer.java:335) > 16:20:22,285 ERROR [STDERR] at > org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) > 16:20:22,285 ERROR [STDERR] at > org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) > 16:20:22,285 ERROR [STDERR] at > org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:769) > 16:20:22,285 ERROR [STDERR] at > org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573) > 16:20:22,285 ERROR [STDERR] at > org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373) > 16:20:22,285 ERROR [STDERR] at > org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166) > 16:20:22,286 ERROR [STDERR] Caused by: > org.apache.jackrabbit.core.TransactionException: Unable to prepare > transaction. > 16:20:22,286 ERROR [STDERR] at > org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:155) > 16:20:22,286 ERROR [STDERR] at > org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:138) > 16:20:22,286 ERROR [STDERR] ... 36 more > 16:20:22,286 ERROR [STDERR] Caused by: > org.apache.jackrabbit.core.state.StaleItemStateException: > b0a65dc6-5180-4fe9-8f77-d09f0870b2cb has been modified externally > 16:20:22,286 ERROR [STDERR] at > org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin(SharedItemStateManager.java:644) > 16:20:22,287 ERROR [STDERR] at > org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate(SharedItemStateManager.java:1054) > 16:20:22,287 ERROR [STDERR] at > org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:149) > 16:20:22,287 ERROR [STDERR] ... 37 more > > > [2] > <connection-factories> > <tx-connection-factory> > <jndi-name>jcr/local</jndi-name> > <xa-transaction/> > <rar-name>jackrabbit-jca-1.5.0.rar</rar-name> > <track-connection-by-tx/> > <connection-definition>javax.jcr.Repository</connection-definition> > <config-property name="homeDir" > type="java.lang.String">/Users/moritzrebbert/jackrabbit/homeDir</config-property> > <config-property name="configFile" > type="java.lang.String">classpath:repository.xml</config-property> > <config-property name="bindSessionToTransaction" > type="java.lang.Boolean">true</config-property> > </tx-connection-factory> > </connection-factories> > > [3] > i<?xml version="1.0" encoding="ISO-8859-1"?> > <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD > Jackrabbit 1.2//EN" > > "http://jackrabbit.apache.org/dtd/repository-1.4.dtd"> > <Repository> > <FileSystem > class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> > <param name="path" value="${rep.home}/repository"/> > </FileSystem> > > <Security appName="Jackrabbit"> > <!-- <AccessManager > class="org.apache.jackrabbit.core.security.SimpleAccessManager"/> --> > <AccessManager > class="de.jabc.dms.backend.security.LoggingAccessManager"/> > <LoginModule > class="org.apache.jackrabbit.core.security.SimpleLoginModule"> > <param name="anonymousId" value="anonymous"/> > </LoginModule> > </Security> > > <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default" /> > > <Workspace name="${wsp.name}"> > <FileSystem > class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> > <param name="path" value="${wsp.home}"/> > </FileSystem> > > <PersistenceManager > class="org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager"> > <param name="driver" value="org.postgresql.Driver"/> > <param name="url" > value="jdbc:postgresql://localhost/jackrabbit"/> > <param name="schema" value="postgresql"/> > <param name="user" value="postgres"/> > <param name="password" value="postgres"/> > <param name="schemaObjectPrefix" value="${wsp.name}_"/> > <param name="externalBLOBs" value="false"/> > </PersistenceManager> > <SearchIndex > class="org.apache.jackrabbit.core.query.lucene.SearchIndex"> > <param name="path" value="${wsp.home}/index" /> > </SearchIndex> > </Workspace> > > <Versioning rootPath="${rep.home}/versions"> > <FileSystem > class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> > <param name="path" value="${rep.home}/versions"/> > </FileSystem> > <!-- TODO --> > <PersistenceManager > class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager" /> > </Versioning> > > <DataStore class="org.apache.jackrabbit.core.data.FileDataStore"> > <param name="path" value="${rep.home}/repository/datastore"/> > <param name="minRecordLength" value="100"/> > </DataStore> > > </Repository> > -- Alexander Klimetschek [email protected]
