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.