[ https://issues.apache.org/jira/browse/OPENJPA-172?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ritika Maheshwari updated OPENJPA-172: -------------------------------------- Description: My persistence.xml looks like following ******************************************************************************************************* <?xml version="1.0" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <persistence-unit name="dwtest" transaction-type="JTA"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <non-jta-data-source>jdbc/ErwwDS</non-jta-data-source> <class>ejb.jpa.test.Customer</class> <class>ejb.jpa.test.District</class> <class>ejb.jpa.test.Warehouse</class> <class>ejb.jpa.test.History</class> <class>ejb.jpa.test.Item</class> <class>ejb.jpa.test.Neworders</class> <class>ejb.jpa.test.Orderline</class> <class>ejb.jpa.test.Orders</class> <class>ejb.jpa.test.Stock</class> <properties> <property name="openjpa.LockManager" value="pessimistic"/> <property name="openjpa.ReadLockLevel" value="read"/> <property name="openjpa.WriteLockLevel" value="write"/> <property name="openjpa.LockTimeout" value="30000"/> <property name="openjpa.FetchBatchSize" value="1" /> <property name="openjpa.jdbc.TransactionIsolation" value="read-committed" /> <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO,SQL=TRACE"/> </properties> </persistence-unit> </persistence> ******************************************************************************************************************* The Orderline entity looks like following ************************************************************************************************* @Entity @IdClass(ejb.jpa.test.OrderlineId.class) @SequenceGenerator(name="mysequence",sequenceName="ORDER_ID") public class Orderline implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mysequence") java.lang.Integer ol_o_id = null; @Id java.lang.String ol_d_id = null; @Id java.lang.String ol_w_id = null; @Id java.lang.Short ol_number = null; java.lang.String ol_i_id = null; java.sql.Timestamp ol_delivery_d = null; java.lang.String ol_supply_w_id = null; java.lang.Short ol_quantity = null; java.math.BigDecimal ol_amount = null; java.sql.Timestamp itime = null; java.lang.String ol_dist_info = null; @ManyToOne(fetch=FetchType.LAZY) @JoinColumns({ @JoinColumn(name="ol_o_id", referencedColumnName="o_id"), @JoinColumn(name="ol_d_id", referencedColumnName="o_d_id"), @JoinColumn(name="ol_w_id", referencedColumnName="o_w_id") }) Orders orders = null; @ManyToOne(fetch=FetchType.LAZY) @JoinColumns({ @JoinColumn(name="ol_i_id", referencedColumnName="s_i_id"), @JoinColumn(name="ol_supply_w_id", referencedColumnName="s_w_id") }) Stock stock = null; ************************************************************************************************************************* Now if I run the following client UserTransaction ut = null; ClientEJB facade = null; EntityManager em = null; try { Hashtable parms = new Hashtable(); parms.put( Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); InitialContext ctx = new InitialContext(parms); ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); ut.begin(); em = getFactory().createEntityManager (); try { OpenJPAEntityManager kem = OpenJPAPersistence.cast (em); kem.getFetchPlan().setReadLockMode(LockModeType.WRITE); stock = (Stock)kem.find(Stock.class,stockKey); kem.getFetchPlan().setReadLockMode(null); } catch (Exception fe) {} try { Timestamp itime = new Timestamp(System.currentTimeMillis()); Orderline orderLine = new Orderline (districtId, warehouseId, new Short((short)ol_number), itemId,null, itemSupplyWarehouseId,new Short((short)itemQuantity), amount, itime, stockDistInfo); em.persist(orderLine); em.flush(); *************************************************************************************************************** I get the the following stack trace, which appears to happen when we try to get the next value from Sequence [3/12/07 13:59:06:496 PDT] 00000020 SystemErr R 3073 TRACE [WebContainer : 0] openjpa.jdbc.SQL - <t 1503025558, conn 1348751460> executing prepstmnt 2134933312 SELECT t0.s_data, t0.s_dist_01, t0.s_dist_02, t0.s_dist_03, t0.s_dist_04, t0.s_dist_05, t0.s_dist_06, t0.s_dist_07, t0.s_dist_08, t0.s_dist_09, t0.s_dist_10, t0.s_order_cnt, t0.s_quantity, t0.s_remote_cnt, t0.s_ytd FROM Stock t0 WHERE t0.s_i_id = ? AND t0.s_w_id = ? WITH RS USE AND KEEP UPDATE LOCKS [params=(String) 000111, (String) 0001] [3/12/07 13:59:06:498 PDT] 00000020 SystemErr R 3075 TRACE [WebContainer : 0] openjpa.jdbc.SQL - <t 1503025558, conn 1348751460> [2 ms] spent [3/12/07 13:59:06:720 PDT] 00000020 SystemErr R javax.ejb.EJBException: ClientEJB: CreateException: OrderLineLocalHome create failed in placeNewOrder() of ClientEJB; nested exception is: <0|true|0.9.6-incubating> org.apache.openjpa.persistence.PersistenceException: DSRA9250E: Operation setTransactionIsolation is not allowed during a global transaction for Shareable Connections. <0|true|0.9.6-incubating> org.apache.openjpa.persistence.PersistenceException: DSRA9250E: Operation setTransactionIsolation is not allowed during a global transaction for Shareable Connections. at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3764) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:94) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:80) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:56) at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:59) at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:159) at org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:143) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:554) at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:435) at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:420) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:538) at org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:131) at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:471) at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2662) at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:36) at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:845) at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1865) at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1825) at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1609) at org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:959) at org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:438) at helpers.ClientEJB.placeNewOrder(Unknown Source) at erww.web.ErwwController.performServicesForNewOrder(ErwwController.java:550) at erww.web.ErwwController.performTask(ErwwController.java:272) at erww.web.ErwwController.doGet(ErwwController.java:85) at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966) Any idea why is this happening is this a bug.It appears like that while trying to get the next value from Sequence JPA tries to get a connection and then on the connection if the isolationLevel is not already READ_COMMITTED it tries to set it to READ_COMMITTED and that is where it blows out ritika was: My persistence.xml looks like following ******************************************************************************************************* <?xml version="1.0" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <persistence-unit name="dwtest" transaction-type="JTA"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <non-jta-data-source>jdbc/ErwwDS</non-jta-data-source> <class>ejb.jpa.test.Customer</class> <class>ejb.jpa.test.District</class> <class>ejb.jpa.test.Warehouse</class> <class>ejb.jpa.test.History</class> <class>ejb.jpa.test.Item</class> <class>ejb.jpa.test.Neworders</class> <class>ejb.jpa.test.Orderline</class> <class>ejb.jpa.test.Orders</class> <class>ejb.jpa.test.Stock</class> <properties> <property name="openjpa.LockManager" value="pessimistic"/> <property name="openjpa.ReadLockLevel" value="read"/> <property name="openjpa.WriteLockLevel" value="write"/> <property name="openjpa.LockTimeout" value="30000"/> <property name="openjpa.FetchBatchSize" value="1" /> <property name="openjpa.jdbc.TransactionIsolation" value="read-committed" /> <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO,SQL=TRACE"/> </properties> </persistence-unit> </persistence> ******************************************************************************************************************* The Orderline entity looks like following ************************************************************************************************* @Entity @IdClass(ejb.jpa.test.OrderlineId.class) @SequenceGenerator(name="mysequence",sequenceName="ORDER_ID") public class Orderline implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mysequence") java.lang.Integer ol_o_id = null; @Id java.lang.String ol_d_id = null; @Id java.lang.String ol_w_id = null; @Id java.lang.Short ol_number = null; java.lang.String ol_i_id = null; java.sql.Timestamp ol_delivery_d = null; java.lang.String ol_supply_w_id = null; java.lang.Short ol_quantity = null; java.math.BigDecimal ol_amount = null; java.sql.Timestamp itime = null; java.lang.String ol_dist_info = null; @ManyToOne(fetch=FetchType.LAZY) @JoinColumns({ @JoinColumn(name="ol_o_id", referencedColumnName="o_id"), @JoinColumn(name="ol_d_id", referencedColumnName="o_d_id"), @JoinColumn(name="ol_w_id", referencedColumnName="o_w_id") }) Orders orders = null; @ManyToOne(fetch=FetchType.LAZY) @JoinColumns({ @JoinColumn(name="ol_i_id", referencedColumnName="s_i_id"), @JoinColumn(name="ol_supply_w_id", referencedColumnName="s_w_id") }) Stock stock = null; ************************************************************************************************************************* Now if I run the following client UserTransaction ut = null; ClientEJB facade = null; EntityManager em = null; try { Hashtable parms = new Hashtable(); parms.put( Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); InitialContext ctx = new InitialContext(parms); ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); ut.begin(); em = getFactory().createEntityManager (); > DSRA9250E: Operation setTransactionIsolation is not allowed during a global > transaction for Shareable Connections. > ------------------------------------------------------------------------------------------------------------------- > > Key: OPENJPA-172 > URL: https://issues.apache.org/jira/browse/OPENJPA-172 > Project: OpenJPA > Issue Type: Bug > Components: jpa > Affects Versions: 0.9.6 > Environment: Websphere 6.1 for zos and DB2 zos V8 > Reporter: Ritika Maheshwari > Fix For: 0.9.6 > > > My persistence.xml looks like following > ******************************************************************************************************* > <?xml version="1.0" ?> > <persistence xmlns="http://java.sun.com/xml/ns/persistence" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > version="1.0"> > <persistence-unit name="dwtest" transaction-type="JTA"> > <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> > <non-jta-data-source>jdbc/ErwwDS</non-jta-data-source> > <class>ejb.jpa.test.Customer</class> > <class>ejb.jpa.test.District</class> > <class>ejb.jpa.test.Warehouse</class> > <class>ejb.jpa.test.History</class> > <class>ejb.jpa.test.Item</class> > <class>ejb.jpa.test.Neworders</class> > <class>ejb.jpa.test.Orderline</class> > <class>ejb.jpa.test.Orders</class> > <class>ejb.jpa.test.Stock</class> > <properties> > > <property name="openjpa.LockManager" value="pessimistic"/> > <property name="openjpa.ReadLockLevel" value="read"/> > <property name="openjpa.WriteLockLevel" value="write"/> > <property name="openjpa.LockTimeout" value="30000"/> > <property name="openjpa.FetchBatchSize" value="1" /> > <property name="openjpa.jdbc.TransactionIsolation" value="read-committed" /> > <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, > Tool=INFO,SQL=TRACE"/> > > </properties> > </persistence-unit> > </persistence> > ******************************************************************************************************************* > The Orderline entity looks like following > ************************************************************************************************* > @Entity > @IdClass(ejb.jpa.test.OrderlineId.class) > @SequenceGenerator(name="mysequence",sequenceName="ORDER_ID") > public class Orderline implements Serializable{ > > @Id > @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mysequence") > java.lang.Integer ol_o_id = null; > @Id > java.lang.String ol_d_id = null; > @Id > java.lang.String ol_w_id = null; > @Id > java.lang.Short ol_number = null; > java.lang.String ol_i_id = null; > java.sql.Timestamp ol_delivery_d = null; > java.lang.String ol_supply_w_id = null; > java.lang.Short ol_quantity = null; > java.math.BigDecimal ol_amount = null; > java.sql.Timestamp itime = null; > java.lang.String ol_dist_info = null; > @ManyToOne(fetch=FetchType.LAZY) > @JoinColumns({ > @JoinColumn(name="ol_o_id", referencedColumnName="o_id"), > @JoinColumn(name="ol_d_id", referencedColumnName="o_d_id"), > @JoinColumn(name="ol_w_id", referencedColumnName="o_w_id") > }) > Orders orders = null; > @ManyToOne(fetch=FetchType.LAZY) > @JoinColumns({ > @JoinColumn(name="ol_i_id", referencedColumnName="s_i_id"), > @JoinColumn(name="ol_supply_w_id", referencedColumnName="s_w_id") > > }) > Stock stock = null; > ************************************************************************************************************************* > Now if I run the following client > UserTransaction ut = null; > ClientEJB facade = null; > EntityManager em = null; > try { > Hashtable parms = new Hashtable(); > parms.put( Context.INITIAL_CONTEXT_FACTORY, > "com.ibm.websphere.naming.WsnInitialContextFactory"); > InitialContext ctx = new InitialContext(parms); > ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); > ut.begin(); > em = getFactory().createEntityManager (); > > try { > OpenJPAEntityManager kem = OpenJPAPersistence.cast (em); > kem.getFetchPlan().setReadLockMode(LockModeType.WRITE); > stock = (Stock)kem.find(Stock.class,stockKey); > kem.getFetchPlan().setReadLockMode(null); > > } catch (Exception fe) {} > try { > > Timestamp itime = new > Timestamp(System.currentTimeMillis()); > Orderline orderLine = new Orderline (districtId, > warehouseId, > new Short((short)ol_number), > itemId,null, itemSupplyWarehouseId,new Short((short)itemQuantity), amount, > itime, stockDistInfo); > em.persist(orderLine); > em.flush(); > *************************************************************************************************************** > I get the the following stack trace, which appears to happen when we try to > get the next value from Sequence > [3/12/07 13:59:06:496 PDT] 00000020 SystemErr R 3073 TRACE > [WebContainer : 0] openjpa.jdbc.SQL - <t 1503025558, conn 1348751460> > executing prepstmnt 2134933312 SELECT t0.s_data, t0.s_dist_01, t0.s_dist_02, > t0.s_dist_03, t0.s_dist_04, t0.s_dist_05, t0.s_dist_06, t0.s_dist_07, > t0.s_dist_08, t0.s_dist_09, t0.s_dist_10, t0.s_order_cnt, t0.s_quantity, > t0.s_remote_cnt, t0.s_ytd FROM Stock t0 WHERE t0.s_i_id = ? AND t0.s_w_id = ? > WITH RS USE AND KEEP UPDATE LOCKS [params=(String) 000111, (String) 0001] > [3/12/07 13:59:06:498 PDT] 00000020 SystemErr R 3075 TRACE > [WebContainer : 0] openjpa.jdbc.SQL - <t 1503025558, conn 1348751460> [2 ms] > spent > [3/12/07 13:59:06:720 PDT] 00000020 SystemErr R javax.ejb.EJBException: > ClientEJB: CreateException: OrderLineLocalHome create failed in > placeNewOrder() of ClientEJB; nested exception is: <0|true|0.9.6-incubating> > org.apache.openjpa.persistence.PersistenceException: DSRA9250E: Operation > setTransactionIsolation is not allowed during a global transaction for > Shareable Connections. > <0|true|0.9.6-incubating> > org.apache.openjpa.persistence.PersistenceException: DSRA9250E: Operation > setTransactionIsolation is not allowed during a global transaction for > Shareable Connections. > at > org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3764) > at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:94) > at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:80) > at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:56) > at > org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:59) > at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:159) > at org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:143) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:554) > at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:435) > at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:420) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:538) > at > org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:131) > at > org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:471) > at > org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2662) > at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:36) > at > org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:845) > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1865) > at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1825) > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1609) > at > org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:959) > at > org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:438) > at helpers.ClientEJB.placeNewOrder(Unknown Source) > at > erww.web.ErwwController.performServicesForNewOrder(ErwwController.java:550) > at erww.web.ErwwController.performTask(ErwwController.java:272) > at erww.web.ErwwController.doGet(ErwwController.java:85) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) > at > com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966) > > Any idea why is this happening is this a bug.It appears like that while > trying to get the next value from Sequence JPA tries to get a connection and > then on the connection if the isolationLevel is not already READ_COMMITTED it > tries to set it to READ_COMMITTED and that is where it blows out > ritika -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.