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