hi, folks: 1. My env is : WPS6.1, DB2 9.0, OpenJPA 1.2.0
2. The followed is my persistence.xml configuration file: <persistence-unit name="derby.ojpa"> <provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> <jta-data-source>jdbc/jpa</jta-data-source> <mapping-file>orm.xml</mapping-file> <properties> <property name="openjpa.TransactionMode" value="managed" /> <property name="openjpa.ConnectionFactoryMode" value= "managed"/> <property name="openjpa.jdbc.DBDictionary" value="db2"/> <property name="openjpa.jdbc.EagerFetchMode" value="join" ></property> <property name="openjpa.InverseManager" value="true"/> <property name="openjpa.RetainState" value="true"/> <property name="openjpa.AutoDetach" value="nontx-read"/> <property name="openjpa.NontransactionalRead" value= "false"/> <property name="openjpa.NontransactionalWrite" value= "false"/> <property name="openjpa.ConnectionRetainMode" value= "transaction"/> </properties> </persistence-unit> 3. I enable global transaction of SCA component , make sure tx is started, and invokes several DAO operations in one of the SCA component operation named "updateCaseStatus". such as CaseMgmtImpl SCA component sequentially invokes DAO operations CaseStatus cStatus = statusDAO.findByCaseStatusPK(caseeStatus); Casee casee = caseDAO.findByCaseePKWithRef(caseeId); casee.setBusinessStatus(cStatus); caseDAO.updateCasee(casee); In caseDAO.findByCaseePKWithRef : em = emf.createEntityManager(); em.joinTransaction(); result = (Casee)em.find(Casee.class, caseID); em.close(); In statusDAO.findByCaseStatusPK : em = emf.createEntityManager(); em.joinTransaction(); result = (CaseStatus)em.find(CaseStatus.class, statusCode); em.close(); In caseDAO.updateCasee : em = emf.createEntityManager(); em.joinTransaction(); Casee mergedcasee = em.merge(casee); em.flush(); em.close(); 4. Then at the end of the sca component updateCaseStatus method, such errors throwed. com.ibm.sbs.cci.dao.DAOException: <openjpa-1.2.0-r422266:683325 fatal general error> org.apache.openjpa.persistence.PersistenceException: DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;DB2ADMIN.CASEESQLCA OUTPUT[Errp=SQLDMISR, Errd=-2146893819, 5, 0, 0, -957, 0] DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;DB2ADMIN.CASEE FailedObject: prepstmnt 315232970 INSERT INTO DB2ADMIN.CASEE (CASEID, CREATIONTIME, EFFECTIVEDATE, ENDDATE, EXPIRYDATE, CASESTATUS_BUSINESSSTATUS, CASETYPE_CASETYPE) VALUES (?, ?, ?, ?, ?, ?, ?) [org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement] at com.ibm.sbs.cci.dao.AbstractCaseeDAO.updateCasee( AbstractCaseeDAO.java:104) at com.ibm.sbs.cci.CaseMgmtImpl.updateCaseStatus( CaseMgmtImpl.java:129) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at com.ibm.ws.sca.internal.java.handler.JavaReflectionAdapter$2.run( JavaReflectionAdapter.java:152) at java.security.AccessController.doPrivileged( AccessController.java:197) at com.ibm.ws.sca.internal.java.handler.JavaReflectionAdapter.invoke( JavaReflectionAdapter.java:149) at com.ibm.ws.sca.internal.java.handler.JavaImplementationHandler.invokeSync( JavaImplementationHandler.java:447) at com.ibm.ws.sca.internal.java.handler.JavaImplementationHandler.processMessage( JavaImplementationHandler.java:195) at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI( MessageDispatcherImpl.java:714) at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage( MessageDispatcherImpl.java:1166) at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process( ManagedMessageImpl.java:821) at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processUOWMessage( ModuleSessionBean.java:338) at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.transactionRequiredActivitySessionNotSupported( ModuleSessionBean.java:311) at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionRequiredActivitySessionNotSupported( EJSLocalStatelessModule_43132892.java:233) at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionGlobalActivitySessionFalse( UOWStrategyImpl.java:311) at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage( JoinUOWHandler.java:165) at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI( MessageDispatcherImpl.java:725) at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage( MessageDispatcherImpl.java:1166) at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process( ManagedMessageImpl.java:812) at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processMessage( ModuleSessionBean.java:149) at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.processMessage( EJSLocalStatelessModule_43132892.java:97) at com.ibm.wbit.comptest.controller.invocation.impl.AdhocInvoker.processMessage(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.Invoker.managedInvoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.Invoker.invoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.BaseInvocationHandler.invoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.InvocationManager.doInvoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.InvocationManager$1.run(Unknown Source) at java.security.AccessController.doPrivileged( AccessController.java:219) at javax.security.auth.Subject.doAs(Subject.java:495) at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118) at com.ibm.wbit.comptest.controller.invocation.impl.InvocationManager.invoke(Unknown Source) at com.ibm.wbit.comptest.controller.command.impl.BaseCommandHandler.doCommand(Unknown Source) at com.ibm.wbit.comptest.controller.command.impl.CommandProcessor.doCommand(Unknown Source) at com.ibm.wbit.comptest.controller.command.impl.CommandProcessor.doCommand(Unknown Source) at com.ibm.wbit.comptest.servlet.TestControllerServlet.process( TestControllerServlet.java:76) at com.ibm.wbit.comptest.servlet.TestControllerServlet.doPost( TestControllerServlet.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service( ServletWrapper.java:995) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest( ServletWrapper.java:501) at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest( ServletWrapper.java:464) at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest( CacheServletWrapper.java:90) at com.ibm.ws.webcontainer.WebContainer.handleRequest( WebContainer.java:744) at com.ibm.ws.wswebcontainer.WebContainer.handleRequest( WebContainer.java:1455) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready( WCChannelLink.java:113) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination( HttpInboundLink.java:454) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation( HttpInboundLink.java:383) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready( HttpInboundLink.java:263) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators( NewConnectionInitialReadCallback.java:214) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete( NewConnectionInitialReadCallback.java:113) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted( AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback( AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions( AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) at com.ibm.io.async.ResultHandler.runEventProcessingLoop( ResultHandler.java:743) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1469) Caused by: <openjpa-1.2.0-r422266:683325 fatal general error> org.apache.openjpa.persistence.PersistenceException: DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;DB2ADMIN.CASEESQLCA OUTPUT[Errp=SQLDMISR, Errd=-2146893819, 5, 0, 0, -957, 0] DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;DB2ADMIN.CASEE FailedObject: prepstmnt 315232970 INSERT INTO DB2ADMIN.CASEE (CASEID, CREATIONTIME, EFFECTIVEDATE, ENDDATE, EXPIRYDATE, CASESTATUS_BUSINESSSTATUS, CASETYPE_CASETYPE) VALUES (?, ?, ?, ?, ?, ?, ?) [org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement] at org.apache.openjpa.jdbc.sql.DBDictionary.narrow( DBDictionary.java:4238) at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException( DBDictionary.java:4203) at org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException( DB2Dictionary.java:503) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore( SQLExceptions.java:102) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore( SQLExceptions.java:72) at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushBatch( BatchingPreparedStatementManagerImpl.java:195) at org.apache.openjpa.jdbc.kernel.MyUpdateManager.flush( MyUpdateManager.java:357) at org.apache.openjpa.jdbc.kernel.MyUpdateManager.flush( MyUpdateManager.java:77) at org.apache.openjpa.jdbc.kernel.MyUpdateManager.flush( MyUpdateManager.java:60) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush( JDBCStoreManager.java:655) at org.apache.openjpa.kernel.DelegatingStoreManager.flush( DelegatingStoreManager.java:130) at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010) at org.apache.openjpa.kernel.BrokerImpl.flushSafe( BrokerImpl.java:1908) at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679) at org.apache.openjpa.kernel.DelegatingBroker.flush( DelegatingBroker.java:989) at org.apache.openjpa.persistence.EntityManagerImpl.flush( EntityManagerImpl.java:592) at com.ibm.sbs.cci.dao.AbstractCaseeDAO.updateCasee( AbstractCaseeDAO.java:98) ... 60 more Caused by: com.ibm.websphere.ce.cm.DuplicateKeyException: DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;DB2ADMIN.CASEE at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance( NativeConstructorAccessorImpl.java:67) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance( DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:522) at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapExceptionHelper( GenericDataStoreHelper.java:523) at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapException( GenericDataStoreHelper.java:578) at com.ibm.ws.rsadapter.jdbc.WSJdbcUtil.mapException( WSJdbcUtil.java:903) at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate( WSJdbcPreparedStatement.java:626) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate( DelegatingPreparedStatement.java:269) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate( LoggingConnectionDecorator.java:864) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate( DelegatingPreparedStatement.java:269) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate( JDBCStoreManager.java:1504) at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate( PreparedStatementManagerImpl.java:151) at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushSingleRow( BatchingPreparedStatementManagerImpl.java:217) at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushBatch( BatchingPreparedStatementManagerImpl.java:156) ... 71 more [08-10-15 16:51:08:718 CST] 00000074 RegisteredSyn E WTRN0074E: 从 before_completion 同步操作捕获异常:<openjpa-1.2.0-r422266:683325 nonfatal user error> org.apache.openjpa.persistence.InvalidStateException: Encountered unmanaged object in persistent field "com.ibm.sbs.cci.pojo.Casee.businessStatus" during flush. However, this field does not allow cascade persist. Set the cascade attribute for this field to CascadeType.PERSIST or CascadeType.ALL (JPA annotations) or "persist" or "all" (JPA orm.xml), or enable cascade-persist globally, or manually persist the related field value prior to flushing. You cannot flush unmanaged objects or graphs that have persistent associations to unmanaged objects. FailedObject: com.ibm.sbs.cci.pojo.CaseStatus-APPROVED at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC( SingleFieldManager.java:753) at org.apache.openjpa.kernel.SingleFieldManager.preFlush( SingleFieldManager.java:594) at org.apache.openjpa.kernel.SingleFieldManager.preFlush( SingleFieldManager.java:562) at org.apache.openjpa.kernel.SingleFieldManager.preFlush( SingleFieldManager.java:478) at org.apache.openjpa.kernel.StateManagerImpl.preFlush( StateManagerImpl.java:2828) at org.apache.openjpa.kernel.PDirtyState.beforeFlush( PDirtyState.java:37) at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush( StateManagerImpl.java:959) at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1948) at org.apache.openjpa.kernel.BrokerImpl.flushSafe( BrokerImpl.java:1908) at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion( BrokerImpl.java:1826) at org.apache.openjpa.ee.WASManagedRuntime$WASSynchronization.beforeCompletion( WASManagedRuntime.java:304) at com.ibm.ws.jtaextensions.SynchronizationCallbackWrapper.beforeCompletion( SynchronizationCallbackWrapper.java:65) at com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeBefore( RegisteredSyncs.java:242) at com.ibm.ws.Transaction.JTA.TransactionImpl.prePrepare( TransactionImpl.java:2398) at com.ibm.ws.Transaction.JTA.TransactionImpl.stage1CommitProcessing( TransactionImpl.java:1631) at com.ibm.ws.Transaction.JTA.TransactionImpl.processCommit( TransactionImpl.java:1602) at com.ibm.ws.Transaction.JTA.TransactionImpl.commit( TransactionImpl.java:1537) at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit( TranManagerImpl.java:239) at com.ibm.ws.Transaction.JTA.TranManagerSet.commit( TranManagerSet.java:163) at com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java:756) at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:181) at com.ibm.ejs.csi.TransactionControlImpl.postInvoke( TransactionControlImpl.java:581) at com.ibm.ejs.container.EJSContainer.postInvoke( EJSContainer.java:3910) at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.transactionRequiredActivitySessionNotSupported( EJSLocalStatelessModule_43132892.java:244) at com.ibm.ws.sca.internal.uow.handler.UOWStrategyImpl.transactionGlobalActivitySessionFalse( UOWStrategyImpl.java:311) at com.ibm.ws.sca.internal.uow.handler.JoinUOWHandler.processMessage( JoinUOWHandler.java:165) at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessageWithPCI( MessageDispatcherImpl.java:725) at com.ibm.ws.sca.internal.message.impl.MessageDispatcherImpl.processMessage( MessageDispatcherImpl.java:1166) at com.ibm.ws.sca.internal.message.impl.ManagedMessageImpl.process( ManagedMessageImpl.java:812) at com.ibm.wsspi.sca.ejb.module.impl.ModuleSessionBean.processMessage( ModuleSessionBean.java:149) at com.ibm.wsspi.sca.ejb.module.EJSLocalStatelessModule_43132892.processMessage( EJSLocalStatelessModule_43132892.java:97) at com.ibm.wbit.comptest.controller.invocation.impl.AdhocInvoker.processMessage(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.Invoker.managedInvoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.Invoker.invoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.BaseInvocationHandler.invoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.InvocationManager.doInvoke(Unknown Source) at com.ibm.wbit.comptest.controller.invocation.impl.InvocationManager$1.run(Unknown Source) at java.security.AccessController.doPrivileged( AccessController.java:219) at javax.security.auth.Subject.doAs(Subject.java:495) at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118) at com.ibm.wbit.comptest.controller.invocation.impl.InvocationManager.invoke(Unknown Source) at com.ibm.wbit.comptest.controller.command.impl.BaseCommandHandler.doCommand(Unknown Source) at com.ibm.wbit.comptest.controller.command.impl.CommandProcessor.doCommand(Unknown Source) at com.ibm.wbit.comptest.controller.command.impl.CommandProcessor.doCommand(Unknown Source) at com.ibm.wbit.comptest.servlet.TestControllerServlet.process( TestControllerServlet.java:76) at com.ibm.wbit.comptest.servlet.TestControllerServlet.doPost( TestControllerServlet.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service( ServletWrapper.java:995) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest( ServletWrapper.java:501) at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest( ServletWrapper.java:464) at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest( CacheServletWrapper.java:90) at com.ibm.ws.webcontainer.WebContainer.handleRequest( WebContainer.java:744) at com.ibm.ws.wswebcontainer.WebContainer.handleRequest( WebContainer.java:1455) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready( WCChannelLink.java:113) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination( HttpInboundLink.java:454) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation( HttpInboundLink.java:383) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready( HttpInboundLink.java:263) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators( NewConnectionInitialReadCallback.java:214) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete( NewConnectionInitialReadCallback.java:113) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted( AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback( AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions( AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) at com.ibm.io.async.ResultHandler.runEventProcessingLoop( ResultHandler.java:743) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1469) 5. According to my analysis, CaseStatus cStatus = statusDAO.findByCaseStatusPK(caseeStatus); --- cStatus with StateManagerImpl & PNonTransState Casee casee = caseDAO.findByCaseePKWithRef(caseeId); --- casee with StateManagerImpl & PNonTransState casee.setBusinessStatus(cStatus); --- casee with StateManagerImpl & PDirtyState caseDAO.updateCasee(casee); --- in updateCasee method, casee(PDirtyTransState -> PNewState) em = emf.createEntityManager(); em.joinTransaction(); Casee mergedcasee = em.merge(casee); --- casee with StateManagerImpl & PDirtyState --- mergedcasee with StateManagerImpl & PNewState em.flush(); --- Here, a record would be inserted into DB em.close(); So anyone could help me out of this error? Hongjin Lu (鲁红金) Developer, GCG Global Business Solution Centre (GBSC) - GBS Asset [EMAIL PROTECTED] Tel: +86 10 82454718, TieLine: 9152244 x 4718, Fax: +86-10-8245-2904 E-mail: [EMAIL PROTECTED] Address: 3/F DeShi Building, No. 9 ShangDi Dong Lu (East Road) Haidian District Beijing, 100094 P.R. China