It looks like openejb is closing the EntityManager while creating the
query for some reason. You might want to check with them to see why
they might be doing this.
Might they be prohibiting you from running at all outside of the
transaction?
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)
at org.apache.openejb.persistence.JtaEntityManager.closeIfNoTx
(JtaEntityManager.java:87)
at org.apache.openejb.persistence.JtaEntityManager.createNamedQuery
(JtaEntityManager.java:189)
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