You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Matthieu Riou <ma...@gmail.com> on 2007/03/01 03:28:55 UTC

OpenJPA & Transaction configuration

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 "
org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@1742ad8".
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 "org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
    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

RE: OpenJPA & Transaction configuration

Posted by Pinaki Poddar <pp...@bea.com>.
> But shouldn't I worry about the fact that a brand new instance is
detached?
You must! Strange behavior.   

01: ProcessDAOImpl ret = new ProcessDAOImpl(pid,type,guid,this,version);
02: System.out.println("detached " +
((PersistenceCapable)ret).pcIsDetached());
03: _em.persist(ret);

the constructor of ProcessDAOImpl (or some instruction before that)
seems to be doing something that prompts OpenJPA to issue the following
SQL:
(are these three lines just following each other?) 
 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]

Can you share ProcessDAOImpl and BPELDAOConnectionImpl source + your
persistence.xml?


Pinaki Poddar
BEA Systems
415.402.7317  


-----Original Message-----
From: Matthieu Riou [mailto:matthieu.riou@gmail.com] 
Sent: Wednesday, February 28, 2007 7:50 PM
To: Pinaki Poddar
Cc: open-jpa-dev@incubator.apache.org
Subject: Re: OpenJPA & Transaction configuration

Thanks! But shouldn't I worry about the fact that a brand new instance
is detached? I could be wrong but it looks like it's more a symptom of
something wrong in my configuration, no?


On 2/28/07, Pinaki Poddar <pp...@bea.com> wrote:

	  instead of _em.persist(ret);
	try
	  _em.merge(ret);
	
	as ret is detached instance rather than new.
	
	
	
	Pinaki Poddar
	BEA Systems
	415.402.7317
	
	
	-----Original Message-----
	From: Matthieu Riou [mailto: matthieu.riou@gmail.com]
	Sent: Wednesday, February 28, 2007 6:29 PM
	To: open-jpa-dev@incubator.apache.org
	Subject: OpenJPA & Transaction configuration 
	
	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.Cor
	
relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.ode.dao.jp

	
a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apache.ode.dao.
	
jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRouteDAOImpl;or
	
g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa.ProcessDA

	
OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache.ode.dao.j
	pa.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 "
	
org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@1742ad8".
	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
<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 "org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
	FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
	    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
	
_______________________________________________________________________
	Notice:  This email message, together with any attachments, may
contain
	information  of  BEA Systems,  Inc.,  its subsidiaries  and
affiliated 
	entities,  that may be confidential,  proprietary,  copyrighted
and/or
	legally privileged, and is intended solely for the use of the
individual
	or entity named in this message. If you are not the intended
recipient, 
	and have received this message in error, please immediately
return this
	by email and then delete it.
	



Re: OpenJPA & Transaction configuration

Posted by Abe White <aw...@bea.com>.
If you set the version field of an instance to a non-default value,  
OpenJPA assumes the instance was detached, or that you're actively  
trying to make it behave as a detached instance.
_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.

Re: OpenJPA & Transaction configuration

Posted by Matthieu Riou <ma...@gmail.com>.
Thanks for all the feedback, let me remove the @Version (it should really be
a basic field instead as it's app specific) and test it again.

On 3/1/07, Patrick Linskey <pl...@bea.com> wrote:
>
> > Here is a link to the source (and no version field):
>
> There is a version field in there. How are you invoking the non-default
> constructor? As Abe mentioned, if your version field is set to a value
> other than the Java default (0 in this case), OpenJPA will assume that
> the instance is detached.
>
> -Patrick
>
> --
> Patrick Linskey
> BEA Systems, Inc.
>
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
>
> > -----Original Message-----
> > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> > Sent: Wednesday, February 28, 2007 9:51 PM
> > To: Patrick Linskey
> > Cc: open-jpa-dev@incubator.apache.org
> > Subject: Re: OpenJPA & Transaction configuration
> >
> > Here is a link to the source (and no version field):
> >
> > http://svn.apache.org/repos/asf/incubator/ode/trunk/dao-jpa/sr
> c/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
> >
> > How can I try to change the default detach manager? Which one
> > should I use instead?
> >
> > Thanks!
> > Matthieu
> >
> >
> > On 2/28/07, Patrick Linskey < plinskey@bea.com> wrote:
> >
> >       Can you post the source for ProcessDAOImpl? Also, are
> > there any other
> >       OpenJPA properties in your configuration? Finally, I'm
> > assuming that
> >       you're using a somewhat-current 0.9.7-SNAPSHOT. Correct
> > me if I'm wrong.
> >
> >       > But shouldn't I worry about the fact that a brand new
> >       > instance is detached? I could be wrong but it looks
> >       > like it's more a symptom of
> >
> >       I believe that you should. I think I remember reading
> > something about
> >       this recently, but I don't remember the details. My
> > suspicion is that
> >       you don't have an @Version field, and you're using the
> > default detach
> >       manager. IIRC, this combination leaves OpenJPA with no
> > way to detect a
> >       detached object vs. a new object, and we default to
> > detached. I thought
> >       that we had improved the docs around this at the least;
> > certainly, it'd
> >       be good to figure out your particulars and make sure
> > that this is
> >       clearer for others.
> >
> >       (IIRC, the default detach manager uses a heuristic on
> > the value in the
> >       version field to determine whether an instance is new
> > or detached.
> >       OpenJPA supports more flexible detach managers that can
> > do fun things
> >       like providing useful errors when attempting to
> > navigate past the end of
> >       a detached object graph, and fine-grained tracking of
> > changes made while
> >       detached. But it's not serialization-compatible with
> > the unenhanced
> >       code, meaning that you need to put the enhanced classes
> > into your client
> >       tier, which I think that we decided was a bad default.)
> >
> >       -Patrick
> >
> >       --
> >       Patrick Linskey
> >       BEA Systems, Inc.
> >
> >
> > ______________________________________________________________
> > _________
> >       Notice:  This email message, together with any
> > attachments, may contain
> >       information  of  BEA Systems,  Inc.,  its subsidiaries
> > and  affiliated
> >       entities,  that may be confidential,  proprietary,
> > copyrighted  and/or
> >       legally privileged, and is intended solely for the use
> > of the individual
> >       or entity named in this message. If you are not the
> > intended recipient,
> >       and have received this message in error, please
> > immediately return this
> >       by email and then delete it.
> >
> >       > -----Original Message-----
> >       > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> >       > Sent: Wednesday, February 28, 2007 7:50 PM
> >       > To: Pinaki Poddar
> >       > Cc: open-jpa-dev@incubator.apache.org
> > <ma...@incubator.apache.org>
> >       > Subject: Re: OpenJPA & Transaction configuration
> >       >
> >       > Thanks! But shouldn't I worry about the fact that a brand new
> >       > instance is
> >       > detached? I could be wrong but it looks like it's
> > more a symptom of
> >       > something wrong in my configuration, no?
> >       >
> >       > On 2/28/07, Pinaki Poddar <pp...@bea.com> wrote:
> >       > >
> >       > >   instead of _em.persist(ret);
> >       > > try
> >       > >   _em.merge(ret);
> >       > >
> >       > > as ret is detached instance rather than new.
> >       > >
> >       > >
> >       > >
> >       > > Pinaki Poddar
> >       > > BEA Systems
> >       > > 415.402.7317
> >       > >
> >       > >
> >       > > -----Original Message-----
> >       > > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> >       > > Sent: Wednesday, February 28, 2007 6:29 PM
> >       > > To: open-jpa-dev@incubator.apache.org
> >       > > Subject: OpenJPA & Transaction configuration
> >       > >
> >       > > 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.d
> >       > ao.jpa.Cor
> >       > >
> >       > relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.
> >       > ode.dao.jp
> >       > >
> >       > a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apach
> >       > e.ode.dao .
> >       > >
> >       > jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRoute
> >       > DAOImpl;or
> >       > >
> >       > g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa
> >       > .ProcessDA
> >       > >
> >       > OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache
> >       > .ode.dao.j
> >       > > pa.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 "
> >       > >
> >       > org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@
> >       > 1742ad8".
> >       > > 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
> > <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 "
> > org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
> >       > > FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
> >       > >     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
> >       > >
> >       > ______________________________________________________________
> >       > _________
> >       > > Notice:  This email message, together with any attachments,
> >       > may contain
> >       > > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> >       >  affiliated
> >       > > entities,  that may be confidential,  proprietary,
> >       > copyrighted  and/or
> >       > > legally privileged, and is intended solely for the use of
> >       > the individual
> >       > > or entity named in this message. If you are not the
> >       > intended recipient,
> >       > > and have received this message in error, please immediately
> >       > return this
> >       > > by email and then delete it.
> >       > >
> >       >
> >
> >
> >
> >
>

RE: OpenJPA & Transaction configuration

Posted by Patrick Linskey <pl...@bea.com>.
> Here is a link to the source (and no version field):

There is a version field in there. How are you invoking the non-default
constructor? As Abe mentioned, if your version field is set to a value
other than the Java default (0 in this case), OpenJPA will assume that
the instance is detached.

-Patrick

-- 
Patrick Linskey
BEA Systems, Inc. 

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it. 

> -----Original Message-----
> From: Matthieu Riou [mailto:matthieu.riou@gmail.com] 
> Sent: Wednesday, February 28, 2007 9:51 PM
> To: Patrick Linskey
> Cc: open-jpa-dev@incubator.apache.org
> Subject: Re: OpenJPA & Transaction configuration
> 
> Here is a link to the source (and no version field):
> 
> http://svn.apache.org/repos/asf/incubator/ode/trunk/dao-jpa/sr
c/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java 
> 
> How can I try to change the default detach manager? Which one 
> should I use instead?
> 
> Thanks!
> Matthieu
> 
> 
> On 2/28/07, Patrick Linskey < plinskey@bea.com> wrote:
> 
> 	Can you post the source for ProcessDAOImpl? Also, are 
> there any other 
> 	OpenJPA properties in your configuration? Finally, I'm 
> assuming that
> 	you're using a somewhat-current 0.9.7-SNAPSHOT. Correct 
> me if I'm wrong.
> 	
> 	> But shouldn't I worry about the fact that a brand new 
> 	> instance is detached? I could be wrong but it looks
> 	> like it's more a symptom of
> 	
> 	I believe that you should. I think I remember reading 
> something about
> 	this recently, but I don't remember the details. My 
> suspicion is that 
> 	you don't have an @Version field, and you're using the 
> default detach
> 	manager. IIRC, this combination leaves OpenJPA with no 
> way to detect a
> 	detached object vs. a new object, and we default to 
> detached. I thought 
> 	that we had improved the docs around this at the least; 
> certainly, it'd
> 	be good to figure out your particulars and make sure 
> that this is
> 	clearer for others.
> 	
> 	(IIRC, the default detach manager uses a heuristic on 
> the value in the 
> 	version field to determine whether an instance is new 
> or detached.
> 	OpenJPA supports more flexible detach managers that can 
> do fun things
> 	like providing useful errors when attempting to 
> navigate past the end of
> 	a detached object graph, and fine-grained tracking of 
> changes made while
> 	detached. But it's not serialization-compatible with 
> the unenhanced
> 	code, meaning that you need to put the enhanced classes 
> into your client 
> 	tier, which I think that we decided was a bad default.)
> 	
> 	-Patrick
> 	
> 	--
> 	Patrick Linskey
> 	BEA Systems, Inc.
> 	
> 	
> ______________________________________________________________
> _________
> 	Notice:  This email message, together with any 
> attachments, may contain 
> 	information  of  BEA Systems,  Inc.,  its subsidiaries  
> and  affiliated
> 	entities,  that may be confidential,  proprietary,  
> copyrighted  and/or
> 	legally privileged, and is intended solely for the use 
> of the individual 
> 	or entity named in this message. If you are not the 
> intended recipient,
> 	and have received this message in error, please 
> immediately return this
> 	by email and then delete it.
> 	
> 	> -----Original Message----- 
> 	> From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> 	> Sent: Wednesday, February 28, 2007 7:50 PM
> 	> To: Pinaki Poddar
> 	> Cc: open-jpa-dev@incubator.apache.org 
> <ma...@incubator.apache.org> 
> 	> Subject: Re: OpenJPA & Transaction configuration
> 	>
> 	> Thanks! But shouldn't I worry about the fact that a brand new
> 	> instance is
> 	> detached? I could be wrong but it looks like it's 
> more a symptom of 
> 	> something wrong in my configuration, no?
> 	>
> 	> On 2/28/07, Pinaki Poddar <pp...@bea.com> wrote:
> 	> >
> 	> >   instead of _em.persist(ret);
> 	> > try 
> 	> >   _em.merge(ret);
> 	> >
> 	> > as ret is detached instance rather than new.
> 	> >
> 	> >
> 	> >
> 	> > Pinaki Poddar
> 	> > BEA Systems
> 	> > 415.402.7317
> 	> >
> 	> >
> 	> > -----Original Message-----
> 	> > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> 	> > Sent: Wednesday, February 28, 2007 6:29 PM 
> 	> > To: open-jpa-dev@incubator.apache.org
> 	> > Subject: OpenJPA & Transaction configuration
> 	> >
> 	> > 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.d
> 	> ao.jpa.Cor
> 	> > 
> 	> relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.
> 	> ode.dao.jp
> 	> >
> 	> a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apach
> 	> e.ode.dao .
> 	> >
> 	> jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRoute
> 	> DAOImpl;or
> 	> >
> 	> g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa
> 	> .ProcessDA
> 	> >
> 	> OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache
> 	> .ode.dao.j
> 	> > pa.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 "
> 	> >
> 	> org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@
> 	> 1742ad8".
> 	> > 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 
> <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 " 
> org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
> 	> > FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
> 	> >     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
> 	> >
> 	> ______________________________________________________________
> 	> _________
> 	> > Notice:  This email message, together with any attachments, 
> 	> may contain
> 	> > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> 	>  affiliated
> 	> > entities,  that may be confidential,  proprietary,
> 	> copyrighted  and/or
> 	> > legally privileged, and is intended solely for the use of 
> 	> the individual
> 	> > or entity named in this message. If you are not the
> 	> intended recipient,
> 	> > and have received this message in error, please immediately
> 	> return this
> 	> > by email and then delete it. 
> 	> >
> 	>
> 	
> 
> 
> 

Re: OpenJPA & Transaction configuration

Posted by Matthieu Riou <ma...@gmail.com>.
Here is a link to the source (and no version field):

http://svn.apache.org/repos/asf/incubator/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java

How can I try to change the default detach manager? Which one should I use
instead?

Thanks!
Matthieu

On 2/28/07, Patrick Linskey <pl...@bea.com> wrote:
>
> Can you post the source for ProcessDAOImpl? Also, are there any other
> OpenJPA properties in your configuration? Finally, I'm assuming that
> you're using a somewhat-current 0.9.7-SNAPSHOT. Correct me if I'm wrong.
>
> > But shouldn't I worry about the fact that a brand new
> > instance is detached? I could be wrong but it looks
> > like it's more a symptom of
>
> I believe that you should. I think I remember reading something about
> this recently, but I don't remember the details. My suspicion is that
> you don't have an @Version field, and you're using the default detach
> manager. IIRC, this combination leaves OpenJPA with no way to detect a
> detached object vs. a new object, and we default to detached. I thought
> that we had improved the docs around this at the least; certainly, it'd
> be good to figure out your particulars and make sure that this is
> clearer for others.
>
> (IIRC, the default detach manager uses a heuristic on the value in the
> version field to determine whether an instance is new or detached.
> OpenJPA supports more flexible detach managers that can do fun things
> like providing useful errors when attempting to navigate past the end of
> a detached object graph, and fine-grained tracking of changes made while
> detached. But it's not serialization-compatible with the unenhanced
> code, meaning that you need to put the enhanced classes into your client
> tier, which I think that we decided was a bad default.)
>
> -Patrick
>
> --
> Patrick Linskey
> BEA Systems, Inc.
>
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
>
> > -----Original Message-----
> > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> > Sent: Wednesday, February 28, 2007 7:50 PM
> > To: Pinaki Poddar
> > Cc: open-jpa-dev@incubator.apache.org
> > Subject: Re: OpenJPA & Transaction configuration
> >
> > Thanks! But shouldn't I worry about the fact that a brand new
> > instance is
> > detached? I could be wrong but it looks like it's more a symptom of
> > something wrong in my configuration, no?
> >
> > On 2/28/07, Pinaki Poddar <pp...@bea.com> wrote:
> > >
> > >   instead of _em.persist(ret);
> > > try
> > >   _em.merge(ret);
> > >
> > > as ret is detached instance rather than new.
> > >
> > >
> > >
> > > Pinaki Poddar
> > > BEA Systems
> > > 415.402.7317
> > >
> > >
> > > -----Original Message-----
> > > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> > > Sent: Wednesday, February 28, 2007 6:29 PM
> > > To: open-jpa-dev@incubator.apache.org
> > > Subject: OpenJPA & Transaction configuration
> > >
> > > 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.d
> > ao.jpa.Cor
> > >
> > relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.
> > ode.dao.jp
> > >
> > a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apach
> > e.ode.dao.
> > >
> > jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRoute
> > DAOImpl;or
> > >
> > g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa
> > .ProcessDA
> > >
> > OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache
> > .ode.dao.j
> > > pa.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 "
> > >
> > org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@
> > 1742ad8".
> > > 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 "org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
> > > FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
> > >     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
> > >
> > ______________________________________________________________
> > _________
> > > Notice:  This email message, together with any attachments,
> > may contain
> > > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> >  affiliated
> > > entities,  that may be confidential,  proprietary,
> > copyrighted  and/or
> > > legally privileged, and is intended solely for the use of
> > the individual
> > > or entity named in this message. If you are not the
> > intended recipient,
> > > and have received this message in error, please immediately
> > return this
> > > by email and then delete it.
> > >
> >
>

RE: OpenJPA & Transaction configuration

Posted by Patrick Linskey <pl...@bea.com>.
Can you post the source for ProcessDAOImpl? Also, are there any other
OpenJPA properties in your configuration? Finally, I'm assuming that
you're using a somewhat-current 0.9.7-SNAPSHOT. Correct me if I'm wrong.

> But shouldn't I worry about the fact that a brand new 
> instance is detached? I could be wrong but it looks 
> like it's more a symptom of

I believe that you should. I think I remember reading something about
this recently, but I don't remember the details. My suspicion is that
you don't have an @Version field, and you're using the default detach
manager. IIRC, this combination leaves OpenJPA with no way to detect a
detached object vs. a new object, and we default to detached. I thought
that we had improved the docs around this at the least; certainly, it'd
be good to figure out your particulars and make sure that this is
clearer for others.

(IIRC, the default detach manager uses a heuristic on the value in the
version field to determine whether an instance is new or detached.
OpenJPA supports more flexible detach managers that can do fun things
like providing useful errors when attempting to navigate past the end of
a detached object graph, and fine-grained tracking of changes made while
detached. But it's not serialization-compatible with the unenhanced
code, meaning that you need to put the enhanced classes into your client
tier, which I think that we decided was a bad default.)

-Patrick

-- 
Patrick Linskey
BEA Systems, Inc. 

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it. 

> -----Original Message-----
> From: Matthieu Riou [mailto:matthieu.riou@gmail.com] 
> Sent: Wednesday, February 28, 2007 7:50 PM
> To: Pinaki Poddar
> Cc: open-jpa-dev@incubator.apache.org
> Subject: Re: OpenJPA & Transaction configuration
> 
> Thanks! But shouldn't I worry about the fact that a brand new 
> instance is
> detached? I could be wrong but it looks like it's more a symptom of
> something wrong in my configuration, no?
> 
> On 2/28/07, Pinaki Poddar <pp...@bea.com> wrote:
> >
> >   instead of _em.persist(ret);
> > try
> >   _em.merge(ret);
> >
> > as ret is detached instance rather than new.
> >
> >
> >
> > Pinaki Poddar
> > BEA Systems
> > 415.402.7317
> >
> >
> > -----Original Message-----
> > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> > Sent: Wednesday, February 28, 2007 6:29 PM
> > To: open-jpa-dev@incubator.apache.org
> > Subject: OpenJPA & Transaction configuration
> >
> > 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.d
> ao.jpa.Cor
> > 
> relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.
> ode.dao.jp
> > 
> a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apach
> e.ode.dao.
> > 
> jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRoute
> DAOImpl;or
> > 
> g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa
> .ProcessDA
> > 
> OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache
> .ode.dao.j
> > pa.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 "
> > 
> org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@
> 1742ad8".
> > 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 "org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
> > FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
> >     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
> > 
> ______________________________________________________________
> _________
> > Notice:  This email message, together with any attachments, 
> may contain
> > information  of  BEA Systems,  Inc.,  its subsidiaries  and 
>  affiliated
> > entities,  that may be confidential,  proprietary,  
> copyrighted  and/or
> > legally privileged, and is intended solely for the use of 
> the individual
> > or entity named in this message. If you are not the 
> intended recipient,
> > and have received this message in error, please immediately 
> return this
> > by email and then delete it.
> >
> 

Re: OpenJPA & Transaction configuration

Posted by Matthieu Riou <ma...@gmail.com>.
Thanks! But shouldn't I worry about the fact that a brand new instance is
detached? I could be wrong but it looks like it's more a symptom of
something wrong in my configuration, no?

On 2/28/07, Pinaki Poddar <pp...@bea.com> wrote:
>
>   instead of _em.persist(ret);
> try
>   _em.merge(ret);
>
> as ret is detached instance rather than new.
>
>
>
> Pinaki Poddar
> BEA Systems
> 415.402.7317
>
>
> -----Original Message-----
> From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> Sent: Wednesday, February 28, 2007 6:29 PM
> To: open-jpa-dev@incubator.apache.org
> Subject: OpenJPA & Transaction configuration
>
> 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.Cor
> relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.ode.dao.jp
> a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apache.ode.dao.
> jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRouteDAOImpl;or
> g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa.ProcessDA
> OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache.ode.dao.j
> pa.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 "
> org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@1742ad8".
> 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 "org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
> FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
>     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
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
>

RE: OpenJPA & Transaction configuration

Posted by Pinaki Poddar <pp...@bea.com>.
  instead of _em.persist(ret);
try
  _em.merge(ret);

as ret is detached instance rather than new.



Pinaki Poddar
BEA Systems
415.402.7317  


-----Original Message-----
From: Matthieu Riou [mailto:matthieu.riou@gmail.com] 
Sent: Wednesday, February 28, 2007 6:29 PM
To: open-jpa-dev@incubator.apache.org
Subject: OpenJPA & Transaction configuration

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.Cor
relatorDAOImpl;org.apache.ode.dao.jpa.EventDAOImpl;org.apache.ode.dao.jp
a.FaultDAOImpl;org.apache.ode.dao.jpa.MessageDAOImpl;org.apache.ode.dao.
jpa.MessageExchangeDAOImpl;org.apache.ode.dao.jpa.MessageRouteDAOImpl;or
g.apache.ode.dao.jpa.PartnerLinkDAOImpl;org.apache.ode.dao.jpa.ProcessDA
OImpl;org.apache.ode.dao.jpa.ProcessInstanceDAOImpl;org.apache.ode.dao.j
pa.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 "
org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@1742ad8".
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 "org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3".
FailedObject: org.apache.ode.dao.jpa.ProcessDAOImpl@c195e3
    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
_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.