You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Michael Baylis <mi...@baylishome.me.uk> on 2012/01/06 15:11:40 UTC

JUnit embedded OPENEJB and XAResource problems

Hi Folks,
            I am receiving the following error with an embedded OpenEJB 
session for use with junit tests.  I'm using IBM JDK 6, OpenEJB 4 and 
Derby or MySQL.   I can find only one solution to this via google, but 
that requires changing OpenEJB code.   Is there a property I can set in 
the InitialContext to prevent OpenJPA from using XA transaction 
management and use local instead?  Or is there another solution I am 
missing?

Cheers,

Michael

Exception in thread "main" javax.ejb.EJBException: The bean encountered 
a non-application exception; nested exception is:
<openjpa-2.1.1-r422266:1148538 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: Connection does not 
have a registered XAResource jdbc:derby:firstdb, UserName=sa, Apache 
Derby Embedded JDBC Driver
     at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:363)
     at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:288)
     at $Proxy56.getTestString(Unknown Source)
     at t.TG1.main(TG1.java:36)
Caused by: <openjpa-2.1.1-r422266:1148538 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: Connection does not 
have a registered XAResource jdbc:derby:firstdb, UserName=sa, Apache 
Derby Embedded JDBC Driver
     at 
org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
     at 
org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
     at 
org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
     at 
org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
     at 
org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
     at 
org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
     at 
org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
     at 
org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
     at 
org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:949)
     at 
org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:940)
     at 
org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:637)
     at 
org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:204)
     at 
org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
     at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
     at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
     at 
org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:115)
     at 
org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:77)
     at 
org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:150)
     at 
uk.me.baylishome.homeaccounts.ejb.impl.TestEJB.getTestString(TestEJB.java:29)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
     at java.lang.reflect.Method.invoke(Method.java:611)
     at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
     at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
     at 
org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:174)
     at 
org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:93)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
     at java.lang.reflect.Method.invoke(Method.java:611)
     at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
     at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
     at 
org.apache.openejb.cdi.CdiInterceptor.invoke(CdiInterceptor.java:129)
     at 
org.apache.openejb.cdi.CdiInterceptor.access$000(CdiInterceptor.java:45)
     at org.apache.openejb.cdi.CdiInterceptor$1.call(CdiInterceptor.java:66)
     at 
org.apache.openejb.cdi.CdiInterceptor.aroundInvoke(CdiInterceptor.java:72)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
     at java.lang.reflect.Method.invoke(Method.java:611)
     at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
     at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
     at 
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:130)
     at 
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:226)
     at 
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:178)
     at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:255)
     at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:235)
     at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
     at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:284)
     ... 2 more
Caused by: java.sql.SQLException: Connection does not have a registered 
XAResource jdbc:derby:firstdb, UserName=sa, Apache Derby Embedded JDBC 
Driver
     at 
org.apache.commons.dbcp.managed.TransactionRegistry.getXAResource(TransactionRegistry.java:78)
     at 
org.apache.commons.dbcp.managed.TransactionContext.setSharedConnection(TransactionContext.java:88)
     at 
org.apache.commons.dbcp.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:131)
     at 
org.apache.commons.dbcp.managed.ManagedConnection.<init>(ManagedConnection.java:55)
     at 
org.apache.commons.dbcp.managed.ManagedDataSource.getConnection(ManagedDataSource.java:77)
     at 
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
     at 
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:131)
     at 
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:106)
     at 
org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
     ... 51 more


Re: JUnit embedded OPENEJB and XAResource problems

Posted by Romain Manni-Bucau <rm...@gmail.com>.
We use commons-dbcp for this.

The configuration should probably be done on the datasource itself.

More information about the behavior here: h
ttp://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/managed/BasicManagedDataSource.html<http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/managed/BasicManagedDataSource.html>



- Romain


2012/1/6 Michael Baylis <mi...@baylishome.me.uk>

> Hi Folks,
>           I am receiving the following error with an embedded OpenEJB
> session for use with junit tests.  I'm using IBM JDK 6, OpenEJB 4 and Derby
> or MySQL.   I can find only one solution to this via google, but that
> requires changing OpenEJB code.   Is there a property I can set in the
> InitialContext to prevent OpenJPA from using XA transaction management and
> use local instead?  Or is there another solution I am missing?
>
> Cheers,
>
> Michael
>
> Exception in thread "main" javax.ejb.EJBException: The bean encountered a
> non-application exception; nested exception is:
> <openjpa-2.1.1-r422266:1148538 fatal general error> org.apache.openjpa.**
> persistence.**PersistenceException: Connection does not have a registered
> XAResource jdbc:derby:firstdb, UserName=sa, Apache Derby Embedded JDBC
> Driver
>    at org.apache.openejb.core.ivm.**BaseEjbProxyHandler.**
> convertException(**BaseEjbProxyHandler.java:363)
>    at org.apache.openejb.core.ivm.**BaseEjbProxyHandler.invoke(**
> BaseEjbProxyHandler.java:288)
>    at $Proxy56.getTestString(Unknown Source)
>    at t.TG1.main(TG1.java:36)
> Caused by: <openjpa-2.1.1-r422266:1148538 fatal general error>
> org.apache.openjpa.**persistence.**PersistenceException: Connection does
> not have a registered XAResource jdbc:derby:firstdb, UserName=sa, Apache
> Derby Embedded JDBC Driver
>    at org.apache.openjpa.jdbc.sql.**DBDictionaryFactory.**newDBDictionary(
> **DBDictionaryFactory.java:102)
>    at org.apache.openjpa.jdbc.conf.**JDBCConfigurationImpl.**
> getDBDictionaryInstance(**JDBCConfigurationImpl.java:**603)
>    at org.apache.openjpa.jdbc.meta.**MappingRepository.**endConfiguration(
> **MappingRepository.java:1510)
>    at org.apache.openjpa.lib.conf.**Configurations.**configureInstance(**
> Configurations.java:518)
>    at org.apache.openjpa.lib.conf.**Configurations.**configureInstance(**
> Configurations.java:443)
>    at org.apache.openjpa.lib.conf.**PluginValue.instantiate(**
> PluginValue.java:104)
>    at org.apache.openjpa.conf.**MetaDataRepositoryValue.**instantiate(**
> MetaDataRepositoryValue.java:**68)
>    at org.apache.openjpa.lib.conf.**ObjectValue.instantiate(**
> ObjectValue.java:83)
>    at org.apache.openjpa.conf.**OpenJPAConfigurationImpl.**
> newMetaDataRepositoryInstance(**OpenJPAConfigurationImpl.java:**949)
>    at org.apache.openjpa.conf.**OpenJPAConfigurationImpl.**
> getMetaDataRepositoryInstance(**OpenJPAConfigurationImpl.java:**940)
>    at org.apache.openjpa.kernel.**AbstractBrokerFactory.**makeReadOnly(**
> AbstractBrokerFactory.java:**637)
>    at org.apache.openjpa.kernel.**AbstractBrokerFactory.**newBroker(**
> AbstractBrokerFactory.java:**204)
>    at org.apache.openjpa.kernel.**DelegatingBrokerFactory.**newBroker(**
> DelegatingBrokerFactory.java:**156)
>    at org.apache.openjpa.**persistence.**EntityManagerFactoryImpl.**
> createEntityManager(**EntityManagerFactoryImpl.java:**227)
>    at org.apache.openjpa.**persistence.**EntityManagerFactoryImpl.**
> createEntityManager(**EntityManagerFactoryImpl.java:**60)
>    at org.apache.openejb.**persistence.**JtaEntityManagerRegistry.**
> getEntityManager(**JtaEntityManagerRegistry.java:**115)
>    at org.apache.openejb.**persistence.JtaEntityManager.**
> getEntityManager(**JtaEntityManager.java:77)
>    at org.apache.openejb.**persistence.JtaEntityManager.**
> find(JtaEntityManager.java:**150)
>    at uk.me.baylishome.homeaccounts.**ejb.impl.TestEJB.**
> getTestString(TestEJB.java:29)
>    at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method)
>    at sun.reflect.**NativeMethodAccessorImpl.**invoke(**
> NativeMethodAccessorImpl.java:**60)
>    at sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
> DelegatingMethodAccessorImpl.**java:37)
>    at java.lang.reflect.Method.**invoke(Method.java:611)
>    at org.apache.openejb.core.**interceptor.**ReflectionInvocationContext$
> **Invocation.invoke(**ReflectionInvocationContext.**java:181)
>    at org.apache.openejb.core.**interceptor.**ReflectionInvocationContext.
> **proceed(**ReflectionInvocationContext.**java:163)
>    at org.apache.openejb.monitoring.**StatsInterceptor.record(**
> StatsInterceptor.java:174)
>    at org.apache.openejb.monitoring.**StatsInterceptor.invoke(**
> StatsInterceptor.java:93)
>    at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method)
>    at sun.reflect.**NativeMethodAccessorImpl.**invoke(**
> NativeMethodAccessorImpl.java:**60)
>    at sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
> DelegatingMethodAccessorImpl.**java:37)
>    at java.lang.reflect.Method.**invoke(Method.java:611)
>    at org.apache.openejb.core.**interceptor.**ReflectionInvocationContext$
> **Invocation.invoke(**ReflectionInvocationContext.**java:181)
>    at org.apache.openejb.core.**interceptor.**ReflectionInvocationContext.
> **proceed(**ReflectionInvocationContext.**java:163)
>    at org.apache.openejb.cdi.**CdiInterceptor.invoke(**
> CdiInterceptor.java:129)
>    at org.apache.openejb.cdi.**CdiInterceptor.access$000(**
> CdiInterceptor.java:45)
>    at org.apache.openejb.cdi.**CdiInterceptor$1.call(**
> CdiInterceptor.java:66)
>    at org.apache.openejb.cdi.**CdiInterceptor.aroundInvoke(**
> CdiInterceptor.java:72)
>    at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method)
>    at sun.reflect.**NativeMethodAccessorImpl.**invoke(**
> NativeMethodAccessorImpl.java:**60)
>    at sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
> DelegatingMethodAccessorImpl.**java:37)
>    at java.lang.reflect.Method.**invoke(Method.java:611)
>    at org.apache.openejb.core.**interceptor.**ReflectionInvocationContext$
> **Invocation.invoke(**ReflectionInvocationContext.**java:181)
>    at org.apache.openejb.core.**interceptor.**ReflectionInvocationContext.
> **proceed(**ReflectionInvocationContext.**java:163)
>    at org.apache.openejb.core.**interceptor.InterceptorStack.**
> invoke(InterceptorStack.java:**130)
>    at org.apache.openejb.core.**stateless.StatelessContainer._**
> invoke(StatelessContainer.**java:226)
>    at org.apache.openejb.core.**stateless.StatelessContainer.**
> invoke(StatelessContainer.**java:178)
>    at org.apache.openejb.core.ivm.**EjbObjectProxyHandler.**
> synchronizedBusinessMethod(**EjbObjectProxyHandler.java:**255)
>    at org.apache.openejb.core.ivm.**EjbObjectProxyHandler.**
> businessMethod(**EjbObjectProxyHandler.java:**235)
>    at org.apache.openejb.core.ivm.**EjbObjectProxyHandler._invoke(**
> EjbObjectProxyHandler.java:92)
>    at org.apache.openejb.core.ivm.**BaseEjbProxyHandler.invoke(**
> BaseEjbProxyHandler.java:284)
>    ... 2 more
> Caused by: java.sql.SQLException: Connection does not have a registered
> XAResource jdbc:derby:firstdb, UserName=sa, Apache Derby Embedded JDBC
> Driver
>    at org.apache.commons.dbcp.**managed.TransactionRegistry.**
> getXAResource(**TransactionRegistry.java:78)
>    at org.apache.commons.dbcp.**managed.TransactionContext.**
> setSharedConnection(**TransactionContext.java:88)
>    at org.apache.commons.dbcp.**managed.ManagedConnection.**
> updateTransactionStatus(**ManagedConnection.java:131)
>    at org.apache.commons.dbcp.**managed.ManagedConnection.<**
> init>(ManagedConnection.java:**55)
>    at org.apache.commons.dbcp.**managed.ManagedDataSource.**getConnection(
> **ManagedDataSource.java:77)
>    at org.apache.commons.dbcp.**BasicDataSource.getConnection(**
> BasicDataSource.java:1044)
>    at org.apache.openjpa.lib.jdbc.**DelegatingDataSource.**getConnection(*
> *DelegatingDataSource.java:131)
>    at org.apache.openjpa.lib.jdbc.**DecoratingDataSource.**getConnection(*
> *DecoratingDataSource.java:106)
>    at org.apache.openjpa.jdbc.sql.**DBDictionaryFactory.**newDBDictionary(
> **DBDictionaryFactory.java:91)
>    ... 51 more
>
>

Re: JUnit embedded OPENEJB and XAResource problems

Posted by Michael Baylis <mi...@baylishome.me.uk>.
Andy,
        As far as I know:-

         Properties p = new Properties();
         p.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.apache.openejb.client.LocalInitialContextFactory");

         p.put("HomeAccountsDB", "new://Resource?type=DataSource");
         p.put("HomeAccountsDB.JdbcDriver", 
"org.apache.derby.jdbc.EmbeddedDriver");
         p.put("HomeAccountsDB.JdbcUrl", "jdbc:derby:firstdb;create=true");
         p.put("HomeAccountsDB.JtaManaged", "true");

         p.put("HomeAccountsDBUnmanaged", "new://Resource?type=DataSource");
         p.put("HomeAccountsDBUnmanaged.JdbcDriver", 
"org.apache.derby.jdbc.EmbeddedDriver");
         p.put("HomeAccountsDBUnmanaged.JdbcUrl", 
"jdbc:derby:firstdb;create=true");
         p.put("HomeAccountsDBUnmanaged.JtaManaged", "false");

         Context context = new InitialContext(p);

         TestEJBLocal te = (TestEJBLocal) context.lookup("TestEJBLocal");

         String x = te.getTestString();


Michael

On 01/06/2012 03:01 PM, AndyG wrote:
> Are you sure you have your DataSource configured properly?
>
> http://openejb.apache.org/configuring-datasources-in-tests.html
>
> ...
>
> p.put("myDataSource.JtaManaged", "true");
>
> --
> View this message in context: http://openejb.979440.n4.nabble.com/JUnit-embedded-OPENEJB-and-XAResource-problems-tp4269488p4269649.html
> Sent from the OpenEJB User mailing list archive at Nabble.com.

Re: JUnit embedded OPENEJB and XAResource problems

Posted by AndyG <an...@orprovision.com>.
Are you sure you have your DataSource configured properly?

http://openejb.apache.org/configuring-datasources-in-tests.html

... 

p.put("myDataSource.JtaManaged", "true");

--
View this message in context: http://openejb.979440.n4.nabble.com/JUnit-embedded-OPENEJB-and-XAResource-problems-tp4269488p4269649.html
Sent from the OpenEJB User mailing list archive at Nabble.com.