You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Geir Magnusson Jr." <ge...@joost.com> on 2008/01/09 16:47:45 UTC

some help w/ a stacktrace?

<openjpa-1.0.1-r420667:592145 nonfatal user error>  
org.apache.openjpa.persistence.InvalidStateException: This operation  
cannot be performed while a Transaction is active.
at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4014)
at  
org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java: 
1282)
at  
org 
.apache 
.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java: 
1002)
at  
org 
.springframework 
.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:372)
at  
org 
.springframework 
.transaction 
.support 
.AbstractPlatformTransactionManager 
.getTransaction(AbstractPlatformTransactionManager.java:350)
at  
org 
.springframework 
.transaction 
.interceptor 
.TransactionAspectSupport 
.createTransactionIfNecessary(TransactionAspectSupport.java:262)
at  
org 
.springframework 
.transaction 
.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java: 
102)
at  
org 
.springframework 
.aop 
.framework 
.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
at  
org 
.springframework 
.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy31.loadAll(Unknown Source)
at com.joost.md.tools.importexport.OMUtil.getDams(OMUtil.java:184)

I don't understand what's happening here.  All that loadAll is doing  
is :

    em.createNamedQuery(includeHidden ? "dam.all" :  
"dam.allvisible").getResultList();

and I'm not doing anything explicit w/ txn.  This happens only  
rarely.  Normally things are peachy.

tia


Re: some help w/ a stacktrace?

Posted by Thomas Risberg <th...@tridb.com>.
This is probably caused by a different exception caught inside the 
Spring JpaTransactionManager.  Part of the exception handling is to 
sometimes call close on the entity manager. This close call should 
probably be wrapped in a try/catch block so the original exception can 
be re-thrown even if the close call throws a new eception.

Here is what I believe is the offending code:

        catch (TransactionException ex) {
            if (txObject.isNewEntityManagerHolder()) {
                em.close();
            }
            throw ex;
        }
        catch (Exception ex) {
            if (txObject.isNewEntityManagerHolder()) {
                em.close();
            }
            throw new CannotCreateTransactionException("Could not open 
JPA EntityManager for transaction", ex);
        }

I have created a Spring JIRA issue for this - 
http://jira.springframework.org/browse/SPR-4311

Cheers,
Thomas Risberg


Craig L Russell wrote:
> Hi Geir,
>
> The stack trace looks like the springframework is confused.
>
> Do you have any transaction requirements specified on the method that 
> is executing the query? That's what I assume is causing the call from 
> the proxy into the transaction framework.
>
> How are you defining the em variable. Is it injected, or do you manage 
> it yourself?
>
> The strangest thing is where doBegin calls em.close(). I can't explain 
> this part.
>
> Craig
>
> On Jan 9, 2008, at 7:47 AM, Geir Magnusson Jr. wrote:
>
>> <openjpa-1.0.1-r420667:592145 nonfatal user error> 
>> org.apache.openjpa.persistence.InvalidStateException: This operation 
>> cannot be performed while a Transaction is active.
>> at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4014)
>> at 
>> org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java:1282) 
>>
>> at 
>> org.apache.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java:1002) 
>>
>> at 
>> org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:372) 
>>
>> at 
>> org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350) 
>>
>> at 
>> org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262) 
>>
>> at 
>> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102) 
>>
>> at 
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166) 
>>
>> at 
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
>>
>> at $Proxy31.loadAll(Unknown Source)
>> at com.joost.md.tools.importexport.OMUtil.getDams(OMUtil.java:184)
>>
>> I don't understand what's happening here.  All that loadAll is doing 
>> is :
>>
>>    em.createNamedQuery(includeHidden ? "dam.all" : 
>> "dam.allvisible").getResultList();
>>
>> and I'm not doing anything explicit w/ txn.  This happens only 
>> rarely.  Normally things are peachy.
>>
>> tia
>>
>
> Craig Russell
> Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
> 408 276-5638 mailto:Craig.Russell@sun.com
> P.S. A good JDO? O, Gasp!
>


Re: some help w/ a stacktrace?

Posted by Craig L Russell <Cr...@Sun.COM>.
Hi Geir,

The stack trace looks like the springframework is confused.

Do you have any transaction requirements specified on the method that  
is executing the query? That's what I assume is causing the call from  
the proxy into the transaction framework.

How are you defining the em variable. Is it injected, or do you  
manage it yourself?

The strangest thing is where doBegin calls em.close(). I can't  
explain this part.

Craig

On Jan 9, 2008, at 7:47 AM, Geir Magnusson Jr. wrote:

> <openjpa-1.0.1-r420667:592145 nonfatal user error>  
> org.apache.openjpa.persistence.InvalidStateException: This  
> operation cannot be performed while a Transaction is active.
> at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4014)
> at org.apache.openjpa.kernel.DelegatingBroker.close 
> (DelegatingBroker.java:1282)
> at org.apache.openjpa.persistence.EntityManagerImpl.close 
> (EntityManagerImpl.java:1002)
> at org.springframework.orm.jpa.JpaTransactionManager.doBegin 
> (JpaTransactionManager.java:372)
> at  
> org.springframework.transaction.support.AbstractPlatformTransactionMan 
> ager.getTransaction(AbstractPlatformTransactionManager.java:350)
> at  
> org.springframework.transaction.interceptor.TransactionAspectSupport.c 
> reateTransactionIfNecessary(TransactionAspectSupport.java:262)
> at  
> org.springframework.transaction.interceptor.TransactionInterceptor.inv 
> oke(TransactionInterceptor.java:102)
> at  
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed 
> (ReflectiveMethodInvocation.java:166)
> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke 
> (JdkDynamicAopProxy.java:204)
> at $Proxy31.loadAll(Unknown Source)
> at com.joost.md.tools.importexport.OMUtil.getDams(OMUtil.java:184)
>
> I don't understand what's happening here.  All that loadAll is  
> doing is :
>
>    em.createNamedQuery(includeHidden ? "dam.all" :  
> "dam.allvisible").getResultList();
>
> and I'm not doing anything explicit w/ txn.  This happens only  
> rarely.  Normally things are peachy.
>
> tia
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!