jpa - Cannot create and close multiple EntityManagers in a SessionBean method -


i'm trying use openjpa slice persistence mechanism 1 of classes inside jboss 4.0.5 (ejb 2.1) application server , i'm experiencing problems.

in j2se setting following code (create entitymanager, use it, close it, create new one, use close it) works fine.

entitymanagerfactory factory = persistence.createentitymanagerfactory("my_persistence_unit");  entitymanager em = factory.createentitymanager(); query q = em.createquery("select m mytable m"); list result = q.getresultlist(); // ... result em.close();  em = factory.createentitymanager(); q = em.createquery("select m myothertable m"); result = q.getresultlist(); // ... result em.close(); 

but if try same thing in statelesssessionbean (again: ejb 2.1)

// entity manager factory static variable defined elsewhere entitymanager em = factory.createentitymanager(); query q = em.createquery("select m mytable m"); list result = q.getresultlist(); // ... result em.close();  em = factory.createentitymanager(); q = em.createquery("select m myothertable m"); result = q.getresultlist(); // ... result em.close(); 

... exception on second query execution:

<openjpa-1.0.1-r420667:592145 fatal user error> org.apache.openjpa.persistence.invalidstateexception: context has been closed. 

the same thing happens if have 1 query in sessionbean method , remote call twice. first call works fine second call throw same exception.

it seems queries in sessionbean executed against context of first entitymanager ever created in session bean. if don't call close() on first entitymanager, works fine.

i'm puzzled why there's interference between sessionbeans , jpa entitymanagers @ since jboss 4 old shouldn't know jpa.

this persistence.xml j2se setup: com.mycompany.myentity

    <properties>         <property name="openjpa.brokerfactory" value="slice"/>         <property name="openjpa.slice.names"   value="one,two"/>         <property name="openjpa.slice.master"  value="one"/>         <property name="openjpa.slice.lenient" value="true"/>          <property name="openjpa.slice.one.connectionurl" value="jdbc:mysql://localhost/jpa_test_1"/>         <property name="openjpa.slice.two.connectionurl" value="jdbc:mysql://localhost/jpa_test_2"/>          <property name="openjpa.slice.distributionpolicy" value="com.mycompany.randomdistributionpolicy"/>          <property name="openjpa.connectiondrivername" value="com.mysql.jdbc.driver"/>         <property name="openjpa.connectionusername" value="user"/>         <property name="openjpa.connectionpassword" value="password"/>          <property name="openjpa.jdbc.synchronizemappings" value="buildschema"/>         <!-- -->     </properties> </persistence-unit> 

this persistence.xml jboss setup:

<persistence-unit name="my_persistence_unit" transaction-type="resource_local">     <class>com.mycompany.myentity</class>      <properties>         <property name="openjpa.brokerfactory" value="slice"/>         <property name="openjpa.slice.names"   value="one"/>         <property name="openjpa.slice.master"  value="one"/>         <property name="openjpa.slice.lenient" value="true"/>          <property name="openjpa.connectionusername" value="user"/>         <property name="openjpa.connectionpassword" value="password"/>          <property name="openjpa.slice.one.connectionurl" value="jdbc:mysql://localhost/jpa_test_1"/>         <property name="openjpa.slice.one.connectiondrivername" value="com.mysql.jdbc.driver"/>          <property name="openjpa.slice.two.connectionurl" value="jdbc:mysql://localhost/jpa_test_2"/>         <property name="openjpa.slice.two.connectiondrivername" value="com.mysql.jdbc.driver"/>           <property name="openjpa.slice.threadingpolicy" value="cached"/>         <property name="openjpa.slice.distributionpolicy" value="com.mycompany.randomdistributionpolicy"/>          <property name="openjpa.jdbc.dbdictionary" value="mysql"/>         <property name="openjpa.jdbc.synchronizemappings" value="buildschema"/>          <property name="openjpa.log" value="defaultlevel=info, runtime=trace, tool=info, sql=trace"/>         <property name="openjpa.jdbc.querysqlcache" value="false"/>     </properties> </persistence-unit> 


Comments

Popular posts from this blog

design - Custom Styling Qt Quick Controls -

Unable to remove the www from url on https using .htaccess -