[ http://issues.apache.org/jira/browse/OJB-114?page=all ]
Eric Westfall updated OJB-114:
------------------------------
Attachment: PersistenceBrokerAbstractImpl.java
Synchronized version of PersistenceBrokerAbstractImpl.
> 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
> Attachments: PersistenceBrokerAbstractImpl.java
>
> 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]