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



Reply via email to