You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by javidelgadillo <jd...@esri.com> on 2012/03/28 02:56:52 UTC

OpenJPA transactions

I've been banging my head against a wall for well over a week trying to get
this to work.  So now I'm coming to the experts for help.

I've got Karaf 2.2.5, OpenJPA 2.2.0, and Aries 0.3 installed.  I've got an
entity configured  via the persistence.xml.  The DataSources are loaded and
a connection to the DB is acquired.  But when I call
em.getTransaction().begin() the whole hing blows up.  It seems I'm winding
up with the default JTAEntityManager that doesn't support Transacations, but
attempts to set the TransactionManager via the properties section in the
persistence.xml file aren't working.

Any ideas on what I'm doing wrong?

 My persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
	version="1.0">

	<persistence-unit name="metadataPersistenceUnit"
		transaction-type="JTA">
		<description>Persistence unit for Metadata</description>

	
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

	
<jta-data-source>osgi:service/javax.sql.XADataSource/(osgi.jndi.service.name=jdbc/jta)</jta-data-source>
	
<non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/nojta)</non-jta-data-source>

		<class>MetadataEntity</class>
		<exclude-unlisted-classes>true</exclude-unlisted-classes>
		<properties>
			<property name="openjpa.Log" value="DefaultLevel=TRACE" />
			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
			<property name="openjpa.TransactionMode" value="managed"/>
			<property name="openjpa.ManagedRuntime"
value="jndi(TransactionManagerName=osgi:service/javax.transaction.TransactionManager)"/>
		</properties>
		
	</persistence-unit>
</persistence>

Here's the stack trace I get when trying to persist an Entity to the DB:
Caused by: java.lang.IllegalStateException: Transaction management is not
available for container managed EntityManagers
        at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.getTransaction(JTAEntityManager.java:244)
        at xxx.xxx.xxx.xxx(MetadataDAOImpl.java:65)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)[:1.6.0_17]
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_17]
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_17]
        at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_17]
        at
org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:50)
        at
org.apache.aries.blueprint.proxy.Collaborator.invoke(Collaborator.java:91)
        at
org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:78)
        at xxx.xxx.xxx(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)[:1.6.0_17]
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_17]
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_17]
        at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_17]
        at
org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:50)
        at
org.apache.aries.proxy.impl.DefaultWrapper.invoke(DefaultWrapper.java:31)
        at
org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:78)
        at $Proxy33.saveNewMetadatas(Unknown Source)




--
View this message in context: http://openjpa.208410.n2.nabble.com/OpenJPA-transactions-tp7411924p7411924.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: AW: OpenJPA transactions

Posted by Jeremy Bauer <te...@gmail.com>.
I'm not very familiar with how transaction management works within
Aries, but for JPA in general, if you are using JTA transactions you
should not use em.getTransaction().begin().  That API should only be
used for resource local transactions (non-JTA, direct to the
database).  It looks like the Aries site has some good JPA related
information here:  http://aries.apache.org/modules/jpaproject.html.
In particular, take a look at incidentDAO.  That bean has a
container-managed transactional element specified.  I suspect you'll
need to do something similar in your application.

hth,
Jeremy

On Wed, Mar 28, 2012 at 11:54 AM, javidelgadillo <jd...@esri.com> wrote:
> Bobitz,
>
> Thanks for the suggestion, but that didn't make a difference.
>
> As an FYI, here's the output when I start Karaf:
> 31  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime -
> Setting the following properties from "?" into configuration:
> {javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
> openjpa.RuntimeUnenhancedClasses=unsupported,
> javax.persistence.sharedCache.mode=UNSPECIFIED,
> openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=1.0,
> openjpa.Id=metadataPersistenceUnit, openjpa.ConnectionFactoryMode=managed,
> openjpa.ConnectionFactory=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@556aa9,
> javax.persistence.validation.mode=AUTO,
> openjpa.jdbc.SynchronizeMappings=buildSchema,
> openjpa.ManagedRuntime=jndi(TransactionManagerName=osgi:service/javax.transaction.TransactionManager),
> openjpa.TransactionMode=managed,
> openjpa.MetaDataFactory=jpa(Types=MetadataEntity),
> openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@157c76a,
> openjpa.ConnectionFactory2=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@1cdbaf7}
> 46  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime - No
> cache marshaller found for id
> org.apache.openjpa.conf.MetaDataCacheMaintenance.
> 202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
> Scanning resource "META-INF/orm.xml" for persistent types.
> 202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
> The persistent unit root url is "null"
> 202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
> parsePersistentTypeNames() found [MetadataEntity].
> 202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
> Found 1 classes with metadata in 15 milliseconds.
> 0  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime -
> Setting the following properties from "?" into configuration:
> {openjpa.BrokerFactory=jdbc,
> javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
> openjpa.RuntimeUnenhancedClasses=unsupported,
> javax.persistence.sharedCache.mode=UNSPECIFIED,
> openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=1.0,
> openjpa.Id=metadataPersistenceUnit, openjpa.ConnectionFactoryMode=managed,
> openjpa.ConnectionFactory=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource
> @556aa9, javax.persistence.validation.mode=AUTO,
> openjpa.jdbc.SynchronizeMappings=buildSchema,
> openjpa.ManagedRuntime=jndi(TransactionManagerName=osgi:service/javax.transaction.TransactionManager),
> openjpa.TransactionMode=managed, openjpa.BrokerImpl=non-finalizing,
> openjpa.MetaDataFactory=jpa(Types=MetadataEntity),
> openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@157c76a,
> openjpa.ConnectionFactory2=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@1cdbaf7}
> 109  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime - Not
> creating a ValidatorImpl because this app is using the JPA 1.0 Spec
> 203  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime -
> org.apache.openjpa.persistence.PersistenceProviderImpl@1f543bb creating
> container org.apache.openjpa.persistence.EntityManagerFactoryImpl@131cfec
> for PU metadataPersistenceUnit.
>
>
> --
> View this message in context: http://openjpa.208410.n2.nabble.com/OpenJPA-transactions-tp7411924p7414446.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: AW: OpenJPA transactions

Posted by javidelgadillo <jd...@esri.com>.
Bobitz,

Thanks for the suggestion, but that didn't make a difference.

As an FYI, here's the output when I start Karaf:
31  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime -
Setting the following properties from "?" into configuration:
{javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
openjpa.RuntimeUnenhancedClasses=unsupported,
javax.persistence.sharedCache.mode=UNSPECIFIED,
openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=1.0,
openjpa.Id=metadataPersistenceUnit, openjpa.ConnectionFactoryMode=managed,
openjpa.ConnectionFactory=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@556aa9,
javax.persistence.validation.mode=AUTO,
openjpa.jdbc.SynchronizeMappings=buildSchema,
openjpa.ManagedRuntime=jndi(TransactionManagerName=osgi:service/javax.transaction.TransactionManager),
openjpa.TransactionMode=managed,
openjpa.MetaDataFactory=jpa(Types=MetadataEntity),
openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@157c76a,
openjpa.ConnectionFactory2=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@1cdbaf7}
46  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime - No
cache marshaller found for id
org.apache.openjpa.conf.MetaDataCacheMaintenance.
202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
Scanning resource "META-INF/orm.xml" for persistent types.
202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
The persistent unit root url is "null"
202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
parsePersistentTypeNames() found [MetadataEntity].
202  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.MetaData -
Found 1 classes with metadata in 15 milliseconds.
0  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime -
Setting the following properties from "?" into configuration:
{openjpa.BrokerFactory=jdbc,
javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
openjpa.RuntimeUnenhancedClasses=unsupported,
javax.persistence.sharedCache.mode=UNSPECIFIED,
openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=1.0,
openjpa.Id=metadataPersistenceUnit, openjpa.ConnectionFactoryMode=managed,
openjpa.ConnectionFactory=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource
@556aa9, javax.persistence.validation.mode=AUTO,
openjpa.jdbc.SynchronizeMappings=buildSchema,
openjpa.ManagedRuntime=jndi(TransactionManagerName=osgi:service/javax.transaction.TransactionManager),
openjpa.TransactionMode=managed, openjpa.BrokerImpl=non-finalizing,
openjpa.MetaDataFactory=jpa(Types=MetadataEntity),
openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@157c76a,
openjpa.ConnectionFactory2=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@1cdbaf7}
109  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime - Not
creating a ValidatorImpl because this app is using the JPA 1.0 Spec
203  metadataPersistenceUnit  TRACE  [FelixStartLevel] openjpa.Runtime -
org.apache.openjpa.persistence.PersistenceProviderImpl@1f543bb creating
container org.apache.openjpa.persistence.EntityManagerFactoryImpl@131cfec
for PU metadataPersistenceUnit.


--
View this message in context: http://openjpa.208410.n2.nabble.com/OpenJPA-transactions-tp7411924p7414446.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

AW: OpenJPA transactions

Posted by Boblitz John <Jo...@BERTSCHI.com>.
 

> -----Ursprüngliche Nachricht-----
> Von: javidelgadillo [mailto:jdelgadillo@esri.com] 
> Gesendet: Mittwoch, 28. März 2012 02:57
> An: users@openjpa.apache.org
> Betreff: OpenJPA transactions
> 
> I've been banging my head against a wall for well over a week 
> trying to get this to work.  So now I'm coming to the experts 
> for help.
> 
> I've got Karaf 2.2.5, OpenJPA 2.2.0, and Aries 0.3 installed. 
>  I've got an entity configured  via the persistence.xml.  The 
> DataSources are loaded and a connection to the DB is 
> acquired.  But when I call
> em.getTransaction().begin() the whole hing blows up.  It 
> seems I'm winding up with the default JTAEntityManager that 
> doesn't support Transacations, but attempts to set the 
> TransactionManager via the properties section in the 
> persistence.xml file aren't working.
> 
> Any ideas on what I'm doing wrong?
> 
>  My persistence.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence xmlns="http://java.sun.com/xml/ns/persistence"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
> 	version="1.0">
> 
> 	<persistence-unit name="metadataPersistenceUnit"
> 		transaction-type="JTA">
> 		<description>Persistence unit for Metadata</description>
> 
> 	
> <provider>org.apache.openjpa.persistence.PersistenceProviderIm
> pl</provider>
> 
> 	
> <jta-data-source>osgi:service/javax.sql.XADataSource/(osgi.jnd
> i.service.name=jdbc/jta)</jta-data-source>
> 	
> <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.j
> ndi.service.name=jdbc/nojta)</non-jta-data-source>
> 
> 		<class>MetadataEntity</class>
> 		
> <exclude-unlisted-classes>true</exclude-unlisted-classes>
> 		<properties>
> 			<property name="openjpa.Log" 
> value="DefaultLevel=TRACE" />
> 			<property 
> name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
> 			<property 
> name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
> 			<property 
> name="openjpa.TransactionMode" value="managed"/>
> 			<property name="openjpa.ManagedRuntime"
> value="jndi(TransactionManagerName=osgi:service/javax.transact
> ion.TransactionManager)"/>
> 		</properties>
> 		
> 	</persistence-unit>
> </persistence>
> 
> Here's the stack trace I get when trying to persist an Entity 
> to the DB:
> Caused by: java.lang.IllegalStateException: Transaction 
> management is not available for container managed EntityManagers
>         at
> org.apache.aries.jpa.container.context.transaction.impl.JTAEnt
> ityManager.getTransaction(JTAEntityManager.java:244)
>         at xxx.xxx.xxx.xxx(MetadataDAOImpl.java:65)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)[:1.6.0_17]
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess
> orImpl.java:39)[:1.6.0_17]
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth
> odAccessorImpl.java:25)[:1.6.0_17]
>         at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_17]
>         at
> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler
> .java:50)
>         at
> org.apache.aries.blueprint.proxy.Collaborator.invoke(Collabora
> tor.java:91)
>         at
> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:78)
>         at xxx.xxx.xxx(Unknown Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)[:1.6.0_17]
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess
> orImpl.java:39)[:1.6.0_17]
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth
> odAccessorImpl.java:25)[:1.6.0_17]
>         at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_17]
>         at
> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler
> .java:50)
>         at
> org.apache.aries.proxy.impl.DefaultWrapper.invoke(DefaultWrapp
> er.java:31)
>         at
> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:78)
>         at $Proxy33.saveNewMetadatas(Unknown Source)
> 
> 
> 
> 
> --
> View this message in context: 
> http://openjpa.208410.n2.nabble.com/OpenJPA-transactions-tp741
> 1924p7411924.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
> 


Maybe you need:

	<persistence-unit name="metadataPersistenceUnit" transaction-type="RESOURCE_LOCAL">

Instead of 

      <persistence-unit name="metadataPersistenceUnit" transaction-type="JTA">

 

John

---- 

Who is General Failure, and why is he reading my hard disk?