You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by "Eric Westfall (JIRA)" <ji...@apache.org> on 2006/06/22 21:40:32 UTC

[jira] Created: (OJB-114) Concurrency issue with between RsIterator.finalize() and 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


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: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


[jira] Closed: (OJB-114) Concurrency issue with between RsIterator.finalize() and PersistenceBrokerAbstractImpl.

Posted by "Armin Waibel (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/OJB-114?page=all ]
     
Armin Waibel closed OJB-114:
----------------------------

    Fix Version: 1.0.5
     Resolution: Fixed

apply the patch

> 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
>      Fix For: 1.0.5
>  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: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


[jira] Assigned: (OJB-114) Concurrency issue with between RsIterator.finalize() and PersistenceBrokerAbstractImpl.

Posted by "Armin Waibel (JIRA)" <ji...@apache.org>.
     [ 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: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


[jira] Updated: (OJB-114) Concurrency issue with between RsIterator.finalize() and PersistenceBrokerAbstractImpl.

Posted by "Eric Westfall (JIRA)" <ji...@apache.org>.
     [ 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: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org