You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Teresa Kan (JIRA)" <ji...@apache.org> on 2007/06/21 17:40:26 UTC

[jira] Issue Comment Edited: (OPENJPA-261) UnsupportedOperationException occurred in BrokerImpl.java

    [ https://issues.apache.org/jira/browse/OPENJPA-261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12506936 ] 

Teresa Kan edited comment on OPENJPA-261 at 6/21/07 8:40 AM:
-------------------------------------------------------------

Patrick,
After I applied your changes and I got the NPE in your changes:

if ((_dirty == null || _dirty.isEmpty() 
&& 
_clean == null || _clean .isEmpty())) 


Exception in thread "main" <0.0.0 fatal store error> 

org.apache.openjpa.persistence.RollbackException : null 
at org.apache.openjpa.persistence.EntityManagerImpl.commit(

EntityManagerImpl.java:420) 
at tutorial.ejb.TestEmpsPerClass.main(

TestEmpsPerClass.java:56) 
Caused by: <0.0.0 nonfatal general error> 

org.apache.openjpa.persistence.PersistenceException: null 
at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(

BrokerImpl.java:1834) 
at org.apache.openjpa.kernel.LocalManagedRuntime.commit(

LocalManagedRuntime.java:93) 
at org.apache.openjpa.kernel.BrokerImpl.commit(

BrokerImpl.java:1320) 
at org.apache.openjpa.kernel.DelegatingBroker.commit(

DelegatingBroker.java:869) 
at org.apache.openjpa.persistence.EntityManagerImpl.commit(

EntityManagerImpl.java:409) 
... 1 more

Caused by: 

java.lang.NullPointerException 
at org.apache.openjpa.kernel.BrokerImpl$TransactionalCache.iterator(

BrokerImpl.java:4691) 
at org.apache.openjpa.kernel.BrokerImpl.endTransaction(

BrokerImpl.java:2194) 
at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(

BrokerImpl.java:1810) 
- Show quoted text -

I attached the testcase JIAR261_test.zip file here.
 



 was:
Patrick,
After I applied your changes and I got the NPE in your changes:

if ((_dirty == null || _dirty.isEmpty() 
&& 
_clean == null || _clean .isEmpty())) 


Exception in thread "main" <0.0.0 fatal store error> 

org.apache.openjpa.persistence.RollbackException : null 
at org.apache.openjpa.persistence.EntityManagerImpl.commit(

EntityManagerImpl.java:420) 
at tutorial.ejb.TestEmpsPerClass.main(

TestEmpsPerClass.java:56) 
Caused by: <0.0.0 nonfatal general error> 

org.apache.openjpa.persistence.PersistenceException: null 
at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(

BrokerImpl.java:1834) 
at org.apache.openjpa.kernel.LocalManagedRuntime.commit(

LocalManagedRuntime.java:93) 
at org.apache.openjpa.kernel.BrokerImpl.commit(

BrokerImpl.java:1320) 
at org.apache.openjpa.kernel.DelegatingBroker.commit(

DelegatingBroker.java:869) 
at org.apache.openjpa.persistence.EntityManagerImpl.commit(

EntityManagerImpl.java:409) 
... 1 more

Caused by: 

java.lang.NullPointerException 
at org.apache.openjpa.kernel.BrokerImpl$TransactionalCache.iterator(

BrokerImpl.java:4691) 
at org.apache.openjpa.kernel.BrokerImpl.endTransaction(

BrokerImpl.java:2194) 
at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(

BrokerImpl.java:1810) 
- Show quoted text -

I attached the testcase JIAR261_test.zip file here.
 
On 6/20/07, Patrick Linskey (JIRA) <ji...@apache.org> wrote: 

    [ https://issues.apache.org/jira/browse/OPENJPA-261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Patrick Linskey updated OPENJPA-261:
------------------------------------

   Attachment: OPENJPA-261-Java5.jar
               OPENJPA-261.patch

So I saw exactly this problem a few days ago, and fixed the code that was leading to the IteratorChain problem. Upon doing so, I just ended up uncovering a new problem. 

Attached is a patch that gets past this exception; I expect that you will just get a new exception, probably about the managed cache being corrupt. Can you try it out?

The jar contains a a compiled version of the patch; because of some other changes that I'm working on in my environment, the jar has a dependency on Java 5; if you are still using JDK1.4, you'll need to manually apply the patch (or convince another OpenJPA developer to do so, and post the jar). If you are using Java 5, just put the jar in the front of your classpath, or update the contents of openjpa.jar with the classes listed in the jar.

Also, can you describe what your test case is doing, or better yet, attach your test case to this issue?

> UnsupportedOperationException occurred in BrokerImpl.java
> ---------------------------------------------------------
>
>                 Key: OPENJPA-261
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-261 
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 0.9.7
>         Environment: Window XP
>            Reporter: Teresa Kan 
>            Priority: Critical
>         Attachments: NPE.patch, OPENJPA-261-Java5.jar, OPENJPA-261.patch
>
>
> While I was testing against the openjpa code, I got an UnsupportedOperationException in the BrokerImpl.endtransaction() method. The method set the transState to an empty Collection if there is no cache for transactions. Later the code got an UnsupportedOperationException.
> Original code:
> Collection transStates = _transCache; 
>         if (transStates == null)
>             transStates = Collections.EMPTY_LIST;
> .....
> for (Iterator itr = transStates.iterator(); itr.hasNext();) {
>             sm = (StateManagerImpl) itr.next();
>             try {
>                 if (rollback) {
>                     // tell objects that may have been derefed then flushed
>                     // (and therefore deleted) to un-deref 
>                     sm.setDereferencedDependent(false, false);
>                     sm.rollback();
>                 } else
>                     sm.commit();
>             } catch (RuntimeException re) { 
>                 exceps = add(exceps, re);
>             }
>          }
> I put a check before this "for" loop then the UnsupportedOperationException
> disappeared.
> if (!transStates.isEmpty()) { 
>               for (Iterator itr = transStates.iterator(); itr.hasNext();) {
>             sm = (StateManagerImpl) itr.next();
>             try {
>                 if (rollback) {
>                     // tell objects that may have been derefed then flushed 
>                     // (and therefore deleted) to un-deref
>                     sm.setDereferencedDependent(false, false);
>                     sm.rollback();
>                 } else
>                     sm.commit();
>             } catch (RuntimeException re) {
>                 exceps = add(exceps, re);
>             }
>          }
>         }
> The NPE.patch is attached to this JIRA. 

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.





> UnsupportedOperationException occurred in BrokerImpl.java
> ---------------------------------------------------------
>
>                 Key: OPENJPA-261
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-261
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 0.9.7
>         Environment: Window XP
>            Reporter: Teresa Kan
>            Priority: Critical
>         Attachments: JIAR261_test.zip, NPE.patch, OPENJPA-261-Java5.jar, OPENJPA-261.patch
>
>
> While I was testing against the openjpa code, I got an UnsupportedOperationException in the BrokerImpl.endtransaction() method. The method set the transState to an empty Collection if there is no cache for transactions. Later the code got an UnsupportedOperationException.
> Original code:
> Collection transStates = _transCache;
>         if (transStates == null)
>             transStates = Collections.EMPTY_LIST;
> .....
> for (Iterator itr = transStates.iterator(); itr.hasNext();) {
>             sm = (StateManagerImpl) itr.next();
>             try {
>                 if (rollback) {
>                     // tell objects that may have been derefed then flushed
>                     // (and therefore deleted) to un-deref
>                     sm.setDereferencedDependent(false, false);
>                     sm.rollback();
>                 } else
>                     sm.commit();
>             } catch (RuntimeException re) {
>                 exceps = add(exceps, re);
>             }
>          }
> I put a check before this "for" loop then the UnsupportedOperationException
> disappeared.
> if (!transStates.isEmpty()) {   
>         	for (Iterator itr = transStates.iterator(); itr.hasNext();) {
>             sm = (StateManagerImpl) itr.next();
>             try {
>                 if (rollback) {
>                     // tell objects that may have been derefed then flushed
>                     // (and therefore deleted) to un-deref
>                     sm.setDereferencedDependent(false, false);
>                     sm.rollback();
>                 } else
>                     sm.commit();
>             } catch (RuntimeException re) {
>                 exceps = add(exceps, re);
>             }
>          }
>         }
> The NPE.patch is attached to this JIRA. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.