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




Reply via email to