Concurrency issue with between RsIterator.finalize() and
PersistenceBrokerAbstractImpl.
---------------------------------------------------------------------------------------
Key: OJB-114
URL: http://issues.apache.org/jira/browse/OJB-114
Project: OJB
Type: Bug
Components: PB-API
Versions: 1.0.4
Reporter: Eric Westfall
I have a long running process that does quite a bit of data manipulation. It
is a single threaded app that starts up Spring, does it's work, then ends. It
runs from the command line.
All the database work happens in a single Spring managed transaction against a
single Oracle database.
If this process runs for a while, I will receive an exception in the log like
this:
2006-06-21 18:59:27,619 [Finalizer] ERROR
org.apache.ojb.broker.accesslayer.ReportQueryRsIterator :: Error when try to
remove RsIterator resource listener
java.lang.ArrayIndexOutOfBoundsException: 107
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.removeListener(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.release(Unknown Source)
at
org.apache.ojb.broker.accesslayer.RsIterator.releaseDbResources(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.finalize(Unknown Source)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)
This might happen many times during the process. The process doesn't stop
running after one of these exceptions. At the end of the run, when Spring
should commit the transaction, it does a rollback with this message:
2006-06-21 19:09:19,786 [main] ERROR
org.springframework.orm.ojb.PersistenceBrokerTransactionManager ::
Commit exception overridden by rollback exception java.lang.NullPointerException
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.notifiyStateListener(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.fireBrokerEvent(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.commitTransaction(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.commitTransaction(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.commitTransaction(Unknown
Source)
at
org.springframework.orm.ojb.PersistenceBrokerTransactionManager.doCommit(PersistenceBrokerTransactionManager.java:251)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
at
org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:267)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy87.postMainEntries(Unknown Source)
at
org.kuali.module.gl.batch.PosterEntriesStep.performStep(PosterEntriesStep.java:44)
at
org.kuali.core.batch.CommandLineStepRunner.main(CommandLineStepRunner.java:63)
2006-06-21 19:09:19,787 [main] ERROR
org.apache.ojb.broker.core.PersistenceBrokerImpl :: Broker is still in
PB-transaction, do automatic abort before close!
This is the result of a concurrency issue between the thread which is running
the finalizer and the main application thread both modifying the arrays. I
have attached a fix to this which basically involved getting the newest
versions of the IndentityArrayList and PersistenceBrokerAbstractImpl from the
1.0.5 branch in the repository, and synchronizing access to the collections
within the PersistenceBrokerAbstractImpl. The original versions of those two
files from 1.0.5 can be found here:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/IdentityArrayList.java?view=log
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java?view=log
The fixed version of PersistenceBrokerAbstractImpl is attached. We verified
this with the same batch job and it now runs without the above errors.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]