Hi, I'm going back at the OpenJPA implementation for the Apache ODE project and am still having problems with the setup. Whan I try to persist a new object I get an exception "Attempt to persist detached object". I guess the when I instantiate my object OpenJPA can't locate its transactional context or something related therefore assuming that the object is instantiated outside of any persistent context.
Here is the code that creates the EntityManagerFactory: HashMap<String, Object> propMap = new HashMap<String,Object>(); propMap.put("openjpa.Log", "DefaultLevel=TRACE"); propMap.put("openjpa.jdbc.DBDictionary", " org.apache.openjpa.jdbc.sql.DerbyDictionary"); propMap.put("openjpa.ManagedRuntime", new TxMgrProvider()); propMap.put("openjpa.ConnectionFactory", _ds); propMap.put("openjpa.ConnectionFactoryMode", "managed"); propMap.put("openjpa.Log", "DefaultLevel=TRACE"); _emf = Persistence.createEntityManagerFactory("ode-dao", propMap); And here is my object instantiation code: ProcessDAOImpl ret = new ProcessDAOImpl(pid,type,guid,this,version); System.out.println("detached " + ((PersistenceCapable)ret).pcIsDetached()); _em.persist(ret); My little debugging statement outputs "true". I've reproduced the full log below. I've also encapsulated to transaction manager and the transaction to check whether OpenJPA was getting the transaction and registering a synchronizer properly. It seems to be doing so (the log statements are just a couple lines above the '.....'). I've removed all the mapping logs just to avoid making this too lengthy. Any idea of what the problem could be? I'm kind of stuck on this as it's hard to debug the enhanced code that gets called when I instantiate my process object. DEBUG - ODEMessageReceiver.receive(47) | Received message for helloWorld.hello DEBUG - ODEService.onAxisMessageExchange(96) | Starting transaction. DEBUG - BpelEngineImpl.route(237) | Routed: svcQname { http://ode/bpel/unit-test.wsdl}HelloService --> BpelProcess[{ http://ode/bpel/unit-test}HelloWorld2-1] 29603 ode-dao INFO [http-8080-Processor25] openjpa.Runtime - Starting OpenJPA 0.9.7-incubating-SNAPSHOT 29604 ode-dao TRACE [http-8080-Processor25] openjpa.Runtime - Properties: openjpa.EntityManagerFactory: default openjpa.DataCache: false openjpa.MetaDataFactory: jpa(Types= org.apache.ode.dao.jpa.ActivityRecoveryDAOImpl ;org.apache.ode.dao.jpa.CorrelationSetDAOImpl;org.apache.ode.dao.jpa.CorrelatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.ode.dao.jpa.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apache.ode.dao.jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRouteDAOImpl;org.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa.ProcessDAOImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache.ode.dao.jpa.ScopeDAOImpl;org.apache.ode.dao.jpa.XmlDataDAOImpl) openjpa.InverseManager: false openjpa.ReadLockLevel: read openjpa.DataCacheManager: default openjpa.jdbc.SubclassFetchMode: join openjpa.jdbc.UpdateManager: default openjpa.jdbc.SynchronizeMappings: false openjpa.NontransactionalRead: true openjpa.QueryCompilationCache: true openjpa.MaxFetchDepth: -1 openjpa.RetainState: true openjpa.DynamicDataStructs: false openjpa.BrokerFactory: jdbc openjpa.WriteLockLevel: write openjpa.ManagedRuntime: org.apache.ode.dao.jpa.BPELDAOConnectionFactoryImpl$TxMgrProvider openjpa.jdbc.EagerFetchMode: parallel openjpa.RestoreState: immutable openjpa.jdbc.SchemaFactory: dynamic openjpa.LockManager: version openjpa.BrokerImpl: default openjpa.NontransactionalWrite: true openjpa.MetaDataRepository: default openjpa.Log: true(DefaultLevel=TRACE) openjpa.jdbc.ResultSetType: forward-only openjpa.AutoDetach: openjpa.ConnectionRetainMode: on-demand openjpa.SavepointManager: in-mem openjpa.jdbc.DBDictionary: derby openjpa.Optimistic: true openjpa.ConnectionFactoryMode: managed openjpa.Sequence: table openjpa.FetchGroups: default openjpa.jdbc.Schemas: openjpa.Id: ode-dao openjpa.OrphanedKeyAction: log openjpa.FlushBeforeQueries: true openjpa.AutoClear: datastore openjpa.Compatibility: default openjpa.DetachState: loaded openjpa.jdbc.LRSSize: query openjpa.Multithreaded: false openjpa.FetchBatchSize: -1 openjpa.jdbc.SQLFactory: default openjpa.IgnoreChanges: false openjpa.jdbc.MappingDefaults: jpa openjpa.TransactionMode: local openjpa.RetryClassRegistration: false openjpa.jdbc.FetchDirection: forward openjpa.ClassResolver: default openjpa.LockTimeout: -1 openjpa.DataCacheTimeout: -1 openjpa.QueryCache: true openjpa.jdbc.DriverDataSource: simple openjpa.jdbc.TransactionIsolation: default openjpa.ProxyManager: default 29604 ode-dao TRACE [http-8080-Processor25] openjpa.MetaData - Using metadata factory " [EMAIL PROTECTED]". 29604 ode-dao INFO [http-8080-Processor25] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary". WARN - BPELDAOConnectionFactoryImpl$DebugTxMgr.getTransaction(130) | JPA get transaction WARN - BPELDAOConnectionFactoryImpl$DebugTx.registerSynchronization(179) | Synchronization registration on org.apache.openjpa.kernel.BrokerImpl WARN - BPELDAOConnectionFactoryImpl$DebugTx.registerSynchronization(179) | Synchronization registration on org.apache.openjpa.kernel.AbstractBrokerFactory$RemoveTransactionSync 29610 ode-dao INFO [http-8080-Processor25] openjpa.MetaData - Found 13 classes with metadata in 0 milliseconds. 29834 ode-dao TRACE [http-8080-Processor25] openjpa.MetaData - Loading metadata for "class org.apache.ode.dao.jpa.MessageExchangeDAOImpl" under mode "[META][QUERY]". .......... .......... 30386 ode-dao TRACE [http-8080-Processor25] openjpa.jdbc.SQL - <t 9601173, conn 16542562> executing prepstmnt 6493766 SELECT t0.ID, t0.VERSION, t0.GUID, t0.NUMBER_OF_INSTANCES, t0.PROCESS_ID, t0.PROCESS_TYPE FROM ODE_PROCESS t0 WHERE (t0.PROCESS_ID = ?) [params=(String) { http://ode/bpel/unit-test}HelloWorld2-1] 30387 ode-dao TRACE [http-8080-Processor25] openjpa.jdbc.SQL - <t 9601173, conn 16542562> [0 ms] spent 30388 ode-dao TRACE [http-8080-Processor25] openjpa.jdbc.JDBC - <t 9601173, conn 16542562> [0 ms] close detached true WARN - BPELDAOConnectionFactoryImpl$DebugTxMgr.getTransaction(130) | JPA get transaction ERROR - BpelServerImpl.bounceProcessDAO(334) | DbError <2|false|0.9.7-incubating-SNAPSHOT> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist detached object "[EMAIL PROTECTED]". FailedObject: [EMAIL PROTECTED] at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2346) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2204) at org.apache.openjpa.kernel.DelegatingBroker.persist( DelegatingBroker.java:991) at org.apache.openjpa.persistence.EntityManagerImpl.persist( EntityManagerImpl.java:525) at org.apache.ode.dao.jpa.BPELDAOConnectionImpl.createProcess( BPELDAOConnectionImpl.java:78) Thanks! Matthieu