openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dain Sundstrom <d...@iq80.com>
Subject Re: Set query params without TX?
Date Wed, 25 Apr 2007 02:29:20 GMT
I am "they", the one writing the cmp code in OpenEJB.

On first read of the stack trace I thought as you that, I was the one  
close the entity manager, but on a second read I notice it was  
OpenJPA calling "closeIfNoTx" that closes the broker.

> On Apr 24, 2007, at 7:02 PM, Dain Sundstrom wrote:
>
>> java.lang.IllegalStateException
>> 	at org.apache.openjpa.kernel.BrokerImpl.free(BrokerImpl.java:4083)
>> 	at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4013)
>> 	at org.apache.openjpa.kernel.DelegatingBroker.close 
>> (DelegatingBroker.java:1284)
>> 	at org.apache.openjpa.persistence.EntityManagerImpl.close 
>> (EntityManagerImpl.java:999)

3) OpenJPA calls em.close since there is no transaction, which I  
think "closes" the query

>> 	at org.apache.openejb.persistence.JtaEntityManager.closeIfNoTx 
>> (JtaEntityManager.java:87)

2) OpenJPA calls closeIfNoTx

>> 	at  
>> org.apache.openejb.persistence.JtaEntityManager.createNamedQuery 
>> (JtaEntityManager.java:189)

1) OpenEJB calls createNamedQuery

>> 	at org.apache.openejb.core.cmp.jpa.JpaCmpEngine.createNamedQuery 
>> (JpaCmpEngine.java:287)
>> 	at org.apache.openejb.core.cmp.jpa.JpaCmpEngine.queryBeans 
>> (JpaCmpEngine.java:218)
>> 	at org.apache.openejb.core.cmp.CmpContainer.findEJBObject 
>> (CmpContainer.java:718)
>> 	at org.apache.openejb.core.cmp.CmpContainer.invoke 
>> (CmpContainer.java:286)
>>
>> -dain
>>
>> On Apr 24, 2007, at 3:07 PM, Marc Prud'hommeaux wrote:
>>
>>> Dain-
>>>
>>> Can you send the embedded exception as well? That should tell us  
>>> who closed the query, and it might give us a hint why...
>>>
>>>
>>> On Apr 24, 2007, at 3:03 PM, Dain Sundstrom wrote:
>>>
>>>> I have some code that runs outside of a transaction which does  
>>>> basically the following:
>>>>
>>>>     Query query = entityManager.createNamedQuery(name)
>>>>     query.setParameter(1, "foo");
>>>>     List results = query.getResultList();
>>>>
>>>> If I don't set the parameter the code works fine (assuming the  
>>>> query didn't need a parameter), but when I set the parameter, I  
>>>> get the following exception:
>>>>
>>>> Caused by: <0.9.7-incubating-SNAPSHOT fatal user error>  
>>>> org.apache.openjpa.persistence.InvalidStateException: The  
>>>> context has been closed.  The stack trace at which the context  
>>>> was closed is held in the embedded exception.
>>>> FailedObject: java.lang.IllegalStateException
>>>> 	at org.apache.openjpa.kernel.BrokerImpl.assertOpen 
>>>> (BrokerImpl.java:4283)
>>>> 	at org.apache.openjpa.kernel.QueryImpl.assertOpen 
>>>> (QueryImpl.java:1613)
>>>> 	at org.apache.openjpa.kernel.DelegatingQuery.assertOpen 
>>>> (DelegatingQuery.java:626)
>>>> 	at org.apache.openjpa.persistence.QueryImpl.setParameter 
>>>> (QueryImpl.java:404)
>>>> 	at org.apache.openjpa.persistence.QueryImpl.setParameter 
>>>> (QueryImpl.java:49)
>>>> 	at org.apache.openejb.core.cmp.jpa.JpaCmpEngine.executeQuery 
>>>> (JpaCmpEngine.java:261)
>>>>
>>>> Is this supposed to work?  If not, maybe we should throw the  
>>>> exception when getting the query.
>>>>
>>>> In the mean time I'll code around this.
>>>>
>>>> -dain
>>>
>>
>


Mime
View raw message