tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vamsee Lakamsani <vam...@yahoo.com.INVALID>
Subject Re: Using custom data source connection factory in JUnit
Date Wed, 04 Jun 2014 16:39:34 GMT
Getting close. It is calling my factory when I use the syntax you suggested but the .auth (and
a few more properties I have) are not getting through. When I look in the debugger when running
the unit test,  I just see the two standard ones (ServiceId and transactionManager). I see
all of them when debugging via TomEE. 

Here's is the line of code where I added the extra properties. Is there another way to pass
them in?

 p.put("myDs.auth", "Application");

FYI I use this line to create the embedded container:
EJBContainer.createEJBContainer(p).getContext().bind("inject", this);


On a related topic I have another issue that only shows up in them embedded container via
JUnit. To get there I skip the factory for now and specify all the properties to the data
source directly in the unit test code. It then gets to a point where it needs a MyBatis  SqlSessionFactory setup
using MyBatis CDI like this:
http://mybatis.github.io/cdi/injection.html


All of this works via TomEE but in the embedded container I get this exception. All of the
MyBatis CDI unit tests (in their git repo) use Weld/Weld JUnit runner. But given that this
works in TomEE I 'm hoping there is someway to get it to work in the embedded OpenEJB container
as well. 


SEVERE - The bean instance PolicyManager threw a system exception:org.mybatis.cdi.MybatisCdiConfigurationException:
There are no SqlSessionFactory producers properly configured.
org.mybatis.cdi.MybatisCdiConfigurationException: There are no SqlSessionFactory producers
properly configured.
at org.mybatis.cdi.CDIUtils.findSqlSessionFactory(CDIUtils.java:47)
at org.mybatis.cdi.MyBatisBean.findSqlSessionManager(MyBatisBean.java:113)
at org.mybatis.cdi.MyBatisBean.create(MyBatisBean.java:104)
at org.apache.webbeans.component.third.ThirdpartyBeanImpl.create(ThirdpartyBeanImpl.java:86)
at org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:749)
at org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:628)
at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:95)
at org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
at org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:208)
at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:194)
at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:184)
at org.apache.openejb.cdi.CdiEjbBean$EjbInjectionTargetImpl.inject(CdiEjbBean.java:389)
at org.apache.openejb.BeanContext.inject(BeanContext.java:1662)
at org.apache.openejb.BeanContext.newInstance(BeanContext.java:1491)
at org.apache.openejb.core.singleton.SingletonInstanceManager.createInstance(SingletonInstanceManager.java:179)
at org.apache.openejb.core.singleton.SingletonInstanceManager.access$100(SingletonInstanceManager.java:69)
at org.apache.openejb.core.singleton.SingletonInstanceManager$1.call(SingletonInstanceManager.java:120)
at org.apache.openejb.core.singleton.SingletonInstanceManager$1.call(SingletonInstanceManager.java:118)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at org.apache.openejb.core.singleton.SingletonInstanceManager.getInstance(SingletonInstanceManager.java:129)
at org.apache.openejb.core.singleton.SingletonInstanceManager.initialize(SingletonInstanceManager.java:93)
at org.apache.openejb.core.singleton.SingletonInstanceManager.start(SingletonInstanceManager.java:84)
at org.apache.openejb.core.singleton.SingletonContainer.start(SingletonContainer.java:125)
at org.apache.openejb.assembler.classic.Assembler.startEjbs(Assembler.java:1160)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:816)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:623)
at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:335)
at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
at com.ca.mdo.policy.PolicyManagerTest.setUp(PolicyManagerTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)



________________________________
 From: Romain Manni-Bucau <rmannibucau@gmail.com>
To: "users@tomee.apache.org" <users@tomee.apache.org>; Vamsee Lakamsani <vamsee@yahoo.com>

Sent: Wednesday, June 4, 2014 9:04 AM
Subject: Re: Using custom data source connection factory in JUnit
 

myDs = new://Resource?type=DataSource&class-name=....&factory-name=...
myDs.auth=Application
....


as properties should work


Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau



2014-06-04 17:46 GMT+02:00 Vamsee Lakamsani <vamsee@yahoo.com.invalid>:
>
>
> I have a resource defined like this in tomee.xml and it works fine from TomEE
> <Resource id=“myDS" type="javax.sql.DataSource"
>        factory-name="createJDBCDataSource" class-name=“my.CustomDataSourceFactory"
>
>         auth=Application
>         singleton = true
> </Resource>
>
> Now, I want to test this in JUnit using javax.ejb.embeddable.EJBContainer
>
>
> This example shows how to use Properties to initialize the data source.  But is there
any way I can just pass a javax.sql.DataSource object (created by calling createJDBCDataSource
on my factory above directly) to the embeddable EJB container?
> http://tomee.apache.org/examples-trunk/injection-of-datasource/README.html
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message