[ http://issues.apache.org/jira/browse/OJB-114?page=all ]

Armin Waibel reassigned OJB-114:
--------------------------------

    Assign To: Armin Waibel

> 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
>     Assignee: Armin Waibel
>  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]

Reply via email to