You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@deltaspike.apache.org by Remo Meier <re...@adnovum.ch> on 2016/08/16 08:03:47 UTC

Jersey, OpenEJB, Deltaspike

Hi

I attempt to get get the Jersey integration running together with 
Deltaspike, OpenEJB and Test Control according to the documentation at 
the bottom of the page here:

https://deltaspike.apache.org/documentation/test-control.html

Not working so far is the injection of CDI beans into JAX-RS resources. 
The resulting exceptions look like like:

MultiException stack 1 of 1
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no 
object available for injection at 
SystemInjecteeImpl(requiredType=EntityManagerFactory,parent=KatharsisMgmtFeature,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1475912655)
     at 
org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75)
     at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945)
     at 
org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:979)
     at 
org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1054)
     at 
org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1045)
     at 
org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:711)
     at 
org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:648)
     at 
org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:829)
     at 
org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:453)
     at 
org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
     at 
org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
     at 
org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
     at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
     at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
     at 
org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)
     at 
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:347)
     at 
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:311)
     at 
org.glassfish.jersey.jetty.JettyHttpContainer.<init>(JettyHttpContainer.java:474)
     at 
org.glassfish.jersey.jetty.JettyHttpContainerProvider.createContainer(JettyHttpContainerProvider.java:60)
     at 
org.glassfish.jersey.server.ContainerFactory.createContainer(ContainerFactory.java:81)
     at 
org.glassfish.jersey.jetty.JettyHttpContainerFactory.createServer(JettyHttpContainerFactory.java:161)
     at 
ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwareJettyTestContainer.<init>(DeltaspikeAwareJettyTestContainer.java:41)
     at 
ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwareJettyTestContainerFactory.create(DeltaspikeAwareJettyTestContainerFactory.java:16)
     at 
org.glassfish.jersey.test.JerseyTest.createTestContainer(JerseyTest.java:277)
     at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:607)
     at 
ch.adnovum.moap.movie.management.web.EntityAccessTest.setUp(EntityAccessTest.java:50)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:483)
     at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
     at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
     at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
     at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
     at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
     at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
     at 
org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.runChild(CdiTestRunner.java:177)
     at 
org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.runChild(CdiTestRunner.java:76)
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
     at 
org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$BeforeClassStatement.evaluate(CdiTestRunner.java:372)
     at 
org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$AfterClassStatement.evaluate(CdiTestRunner.java:393)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
     at 
org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.run(CdiTestRunner.java:144)
     at 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
     at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

KatharsisMgmtFeature is a regular Feature. And their is a Producer that 
makes the EntityManagerFactory available with @Inject.

The application works if I manually register a 
org.glassfish.hk2.utilities.binding.AbstractBinder bean as singleton to 
the Application and use it to bind CDI beans to jersey/hk2 with 
AbstractBinder.bind(x).to(y). But I would rather prefer for Jersey to 
directly access the CDI beans instead of bridging those with the 
AbstractBinder.

My dependencies for Jersey currently look like:

     compile 'org.glassfish.jersey.core:jersey-client:2.23.1'
     compile 'org.glassfish.jersey.core:jersey-common:2.23.1'
     compile 
'org.glassfish.jersey.test-framework:jersey-test-framework-core:2.23.1'
     compile 
'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:2.23.1'
     compile 
'org.glassfish.jersey.containers:jersey-container-jetty-http:2.23.1'
     compile 'org.glassfish.jersey.bundles.repackaged:jersey-guava:2.23.1'

     compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x:2.23.1'
     compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-transaction:2.23.1'
     compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-servlet:2.23.1'

The last three are new jersey libraries first having become available 
last year. Documentation about those is available here: 
https://jersey.java.net/documentation/latest/cdi.support.html. 
Potentially that api would open up the possiblity for a small deltaspike 
library that does all the necessary integration work (request scoping, 
cdi binding), probably independent of Jetty.

Or is there a complete example somewhere?

Regards Remo








Re: Jersey, OpenEJB, Deltaspike

Posted by Remo Meier <re...@adnovum.ch>.
yes, maybe. I basically just followed the instructions on 
https://deltaspike.apache.org/documentation/test-control.html. And the 
jersey test framework looked quite good to me. Maybe the instructions 
could be completed with alternatives. For me it is now working quite ok.

Personally it would be great to have a second full-fledged container 
next to openejb. Having all of them would be great but unrealistic I 
guess. Weld seems to be a dead end because wildfly does not run as 
embedded library (as far as I know). Glassfish might work

Regards Remo



> +1, what about simply using openejb with the built-in CXF?
> Do you need something special from Jersey?
>
> LieGrue,
> strub
>
>
>
>
>
>> On Tuesday, 16 August 2016, 15:00, Gerhard Petracek <ge...@gmail.com> wrote:
>>> hi remo,
>> if you would like to stick with tomee/openejb as well as with jersey, you
>> need a setup which integrates jersey with owb like jersey-weld2-se is doing
>> it with weld  (or jersey with the cdi 1.1+ api) or you need a setup which
>> integrates tomee/openejb with jersey.
>>
>> the last time i looked at jersey, only the out-of-the-box integration with
>> weld worked as expected.
>> -> if jersey still doesn't provide a better out-of-the-box integration
>> (based on the cdi 1.1+ api or with owb directly), you need to contact one
>> of the two communities (tomee or jersey) or replace one of the parts.
>>
>> regards,
>> gerhard
>>
>>
>>
>>
>> 2016-08-16 10:03 GMT+02:00 Remo Meier <re...@adnovum.ch>:
>>
>>>   Hi
>>>
>>>   I attempt to get get the Jersey integration running together with
>>>   Deltaspike, OpenEJB and Test Control according to the documentation at the
>>>   bottom of the page here:
>>>
>>>   https://deltaspike.apache.org/documentation/test-control.html
>>>
>>>   Not working so far is the injection of CDI beans into JAX-RS resources.
>>>   The resulting exceptions look like like:
>>>
>>>   MultiException stack 1 of 1
>>>   org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object
>>>   available for injection at SystemInjecteeImpl(requiredTyp
>>>   e=EntityManagerFactory,parent=KatharsisMgmtFeature,qualifier
>>>
>> s={},position=-1,optional=false,self=false,unqualified=null,1475912655)
>>>       at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThir
>>>   tyResolver.java:75)
>>>       at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945)
>>>       at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLoca
>>>   torImpl.java:979)
>>>       at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>>>   e(ServiceLocatorImpl.java:1054)
>>>       at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>>>   e(ServiceLocatorImpl.java:1045)
>>>       at org.glassfish.jersey.model.internal.CommonConfig.configureFe
>>>   atures(CommonConfig.java:711)
>>>       at org.glassfish.jersey.model.internal.CommonConfig.configureMe
>>>   taProviders(CommonConfig.java:648)
>>>       at org.glassfish.jersey.server.ResourceConfig.configureMetaProv
>>>   iders(ResourceConfig.java:829)
>>>       at org.glassfish.jersey.server.ApplicationHandler.initialize(Ap
>>>   plicationHandler.java:453)
>>>       at org.glassfish.jersey.server.ApplicationHandler.access$500(Ap
>>>   plicationHandler.java:184)
>>>       at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>>>   ationHandler.java:350)
>>>       at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>>>   ationHandler.java:347)
>>>       at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>>>       at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>>>       at org.glassfish.jersey.internal.Errors.processWithException(Er
>>>   rors.java:255)
>>>       at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>>>   ationHandler.java:347)
>>>       at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>>>   ationHandler.java:311)
>>>       at org.glassfish.jersey.jetty.JettyHttpContainer.<init>(JettyHt
>>>   tpContainer.java:474)
>>>       at org.glassfish.jersey.jetty.JettyHttpContainerProvider.create
>>>   Container(JettyHttpContainerProvider.java:60)
>>>       at org.glassfish.jersey.server.ContainerFactory.createContainer
>>>   (ContainerFactory.java:81)
>>>       at org.glassfish.jersey.jetty.JettyHttpContainerFactory.createS
>>>   erver(JettyHttpContainerFactory.java:161)
>>>       at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>>>
>> reJettyTestContainer.<init>(DeltaspikeAwareJettyTestContainer.java:41)
>>>       at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>>>   reJettyTestContainerFactory.create(DeltaspikeAwareJettyTes
>>>   tContainerFactory.java:16)
>>>       at org.glassfish.jersey.test.JerseyTest.createTestContainer(Jer
>>>   seyTest.java:277)
>>>       at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:607)
>>>       at ch.adnovum.moap.movie.management.web.EntityAccessTest.setUp(
>>>   EntityAccessTest.java:50)
>>>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>>>   ssorImpl.java:62)
>>>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>>   thodAccessorImpl.java:43)
>>>       at java.lang.reflect.Method.invoke(Method.java:483)
>>>       at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>>>   FrameworkMethod.java:50)
>>>       at org.junit.internal.runners.model.ReflectiveCallable.run(Refl
>>>   ectiveCallable.java:12)
>>>       at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr
>>>   ameworkMethod.java:47)
>>>       at org.junit.internal.runners.statements.RunBefores.evaluate(
>>>   RunBefores.java:24)
>>>       at org.junit.internal.runners.statements.RunAfters.evaluate(Run
>>>   Afters.java:27)
>>>       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>>>       at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit
>>>   4ClassRunner.java:78)
>>>       at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>>   runChild(CdiTestRunner.java:177)
>>>       at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>>   runChild(CdiTestRunner.java:76)
>>>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>>>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>>>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>>>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>>>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>>>       at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Be
>>>   foreClassStatement.evaluate(CdiTestRunner.java:372)
>>>       at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Af
>>>   terClassStatement.evaluate(CdiTestRunner.java:393)
>>>       at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>>>       at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>>   run(CdiTestRunner.java:144)
>>>       at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.
>>>   run(JUnit4TestReference.java:86)
>>>       at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
>>>   TestExecution.java:38)
>>>       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>>>   sts(RemoteTestRunner.java:459)
>>>       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>>>   sts(RemoteTestRunner.java:678)
>>>       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
>>>   RemoteTestRunner.java:382)
>>>       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
>>>   RemoteTestRunner.java:192)
>>>
>>>   KatharsisMgmtFeature is a regular Feature. And their is a Producer that
>>>   makes the EntityManagerFactory available with @Inject.
>>>
>>>   The application works if I manually register a
>>>   org.glassfish.hk2.utilities.binding.AbstractBinder bean as singleton to
>>>   the Application and use it to bind CDI beans to jersey/hk2 with
>>>   AbstractBinder.bind(x).to(y). But I would rather prefer for Jersey to
>>>   directly access the CDI beans instead of bridging those with the
>>>   AbstractBinder.
>>>
>>>   My dependencies for Jersey currently look like:
>>>
>>>       compile 'org.glassfish.jersey.core:jersey-client:2.23.1'
>>>       compile 'org.glassfish.jersey.core:jersey-common:2.23.1'
>>>       compile 'org.glassfish.jersey.test-framework:jersey-test-framework-
>>>   core:2.23.1'
>>>       compile 'org.glassfish.jersey.test-framework.providers:jersey-test-
>>>   framework-provider-jetty:2.23.1'
>>>       compile 'org.glassfish.jersey.containers:jersey-container-jetty-
>>>   http:2.23.1'
>>>       compile
>> 'org.glassfish.jersey.bundles.repackaged:jersey-guava:2.23.1'
>>>       compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x:2.23.1'
>>>       compile
>> 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-transaction:2.23.1'
>>>       compile
>> 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-servlet:2.23.1'
>>>   The last three are new jersey libraries first having become available last
>>>   year. Documentation about those is available here:
>>>   https://jersey.java.net/documentation/latest/cdi.support.html.
>>>   Potentially that api would open up the possiblity for a small deltaspike
>>>   library that does all the necessary integration work (request scoping, cdi
>>>   binding), probably independent of Jetty.
>>>
>>>   Or is there a complete example somewhere?
>>>
>>>   Regards Remo
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>

Re: Jersey, OpenEJB, Deltaspike

Posted by Mark Struberg <st...@yahoo.de.INVALID>.
+1, what about simply using openejb with the built-in CXF?
Do you need something special from Jersey?

LieGrue,
strub





> On Tuesday, 16 August 2016, 15:00, Gerhard Petracek <ge...@gmail.com> wrote:
> > hi remo,
> 
> if you would like to stick with tomee/openejb as well as with jersey, you
> need a setup which integrates jersey with owb like jersey-weld2-se is doing
> it with weld  (or jersey with the cdi 1.1+ api) or you need a setup which
> integrates tomee/openejb with jersey.
> 
> the last time i looked at jersey, only the out-of-the-box integration with
> weld worked as expected.
> -> if jersey still doesn't provide a better out-of-the-box integration
> (based on the cdi 1.1+ api or with owb directly), you need to contact one
> of the two communities (tomee or jersey) or replace one of the parts.
> 
> regards,
> gerhard
> 
> 
> 
> 
> 2016-08-16 10:03 GMT+02:00 Remo Meier <re...@adnovum.ch>:
> 
>>  Hi
>> 
>>  I attempt to get get the Jersey integration running together with
>>  Deltaspike, OpenEJB and Test Control according to the documentation at the
>>  bottom of the page here:
>> 
>>  https://deltaspike.apache.org/documentation/test-control.html
>> 
>>  Not working so far is the injection of CDI beans into JAX-RS resources.
>>  The resulting exceptions look like like:
>> 
>>  MultiException stack 1 of 1
>>  org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object
>>  available for injection at SystemInjecteeImpl(requiredTyp
>>  e=EntityManagerFactory,parent=KatharsisMgmtFeature,qualifier
>> 
> s={},position=-1,optional=false,self=false,unqualified=null,1475912655)
>>      at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThir
>>  tyResolver.java:75)
>>      at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945)
>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLoca
>>  torImpl.java:979)
>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>>  e(ServiceLocatorImpl.java:1054)
>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>>  e(ServiceLocatorImpl.java:1045)
>>      at org.glassfish.jersey.model.internal.CommonConfig.configureFe
>>  atures(CommonConfig.java:711)
>>      at org.glassfish.jersey.model.internal.CommonConfig.configureMe
>>  taProviders(CommonConfig.java:648)
>>      at org.glassfish.jersey.server.ResourceConfig.configureMetaProv
>>  iders(ResourceConfig.java:829)
>>      at org.glassfish.jersey.server.ApplicationHandler.initialize(Ap
>>  plicationHandler.java:453)
>>      at org.glassfish.jersey.server.ApplicationHandler.access$500(Ap
>>  plicationHandler.java:184)
>>      at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>>  ationHandler.java:350)
>>      at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>>  ationHandler.java:347)
>>      at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>>      at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>>      at org.glassfish.jersey.internal.Errors.processWithException(Er
>>  rors.java:255)
>>      at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>>  ationHandler.java:347)
>>      at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>>  ationHandler.java:311)
>>      at org.glassfish.jersey.jetty.JettyHttpContainer.<init>(JettyHt
>>  tpContainer.java:474)
>>      at org.glassfish.jersey.jetty.JettyHttpContainerProvider.create
>>  Container(JettyHttpContainerProvider.java:60)
>>      at org.glassfish.jersey.server.ContainerFactory.createContainer
>>  (ContainerFactory.java:81)
>>      at org.glassfish.jersey.jetty.JettyHttpContainerFactory.createS
>>  erver(JettyHttpContainerFactory.java:161)
>>      at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>> 
> reJettyTestContainer.<init>(DeltaspikeAwareJettyTestContainer.java:41)
>>      at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>>  reJettyTestContainerFactory.create(DeltaspikeAwareJettyTes
>>  tContainerFactory.java:16)
>>      at org.glassfish.jersey.test.JerseyTest.createTestContainer(Jer
>>  seyTest.java:277)
>>      at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:607)
>>      at ch.adnovum.moap.movie.management.web.EntityAccessTest.setUp(
>>  EntityAccessTest.java:50)
>>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>>  ssorImpl.java:62)
>>      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>  thodAccessorImpl.java:43)
>>      at java.lang.reflect.Method.invoke(Method.java:483)
>>      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>>  FrameworkMethod.java:50)
>>      at org.junit.internal.runners.model.ReflectiveCallable.run(Refl
>>  ectiveCallable.java:12)
>>      at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr
>>  ameworkMethod.java:47)
>>      at org.junit.internal.runners.statements.RunBefores.evaluate(
>>  RunBefores.java:24)
>>      at org.junit.internal.runners.statements.RunAfters.evaluate(Run
>>  Afters.java:27)
>>      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>>      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit
>>  4ClassRunner.java:78)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>  runChild(CdiTestRunner.java:177)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>  runChild(CdiTestRunner.java:76)
>>      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>>      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>>      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>>      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>>      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Be
>>  foreClassStatement.evaluate(CdiTestRunner.java:372)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Af
>>  terClassStatement.evaluate(CdiTestRunner.java:393)
>>      at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>  run(CdiTestRunner.java:144)
>>      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.
>>  run(JUnit4TestReference.java:86)
>>      at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
>>  TestExecution.java:38)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>>  sts(RemoteTestRunner.java:459)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>>  sts(RemoteTestRunner.java:678)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
>>  RemoteTestRunner.java:382)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
>>  RemoteTestRunner.java:192)
>> 
>>  KatharsisMgmtFeature is a regular Feature. And their is a Producer that
>>  makes the EntityManagerFactory available with @Inject.
>> 
>>  The application works if I manually register a
>>  org.glassfish.hk2.utilities.binding.AbstractBinder bean as singleton to
>>  the Application and use it to bind CDI beans to jersey/hk2 with
>>  AbstractBinder.bind(x).to(y). But I would rather prefer for Jersey to
>>  directly access the CDI beans instead of bridging those with the
>>  AbstractBinder.
>> 
>>  My dependencies for Jersey currently look like:
>> 
>>      compile 'org.glassfish.jersey.core:jersey-client:2.23.1'
>>      compile 'org.glassfish.jersey.core:jersey-common:2.23.1'
>>      compile 'org.glassfish.jersey.test-framework:jersey-test-framework-
>>  core:2.23.1'
>>      compile 'org.glassfish.jersey.test-framework.providers:jersey-test-
>>  framework-provider-jetty:2.23.1'
>>      compile 'org.glassfish.jersey.containers:jersey-container-jetty-
>>  http:2.23.1'
>>      compile 
> 'org.glassfish.jersey.bundles.repackaged:jersey-guava:2.23.1'
>> 
>>      compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x:2.23.1'
>>      compile 
> 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-transaction:2.23.1'
>>      compile 
> 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-servlet:2.23.1'
>> 
>>  The last three are new jersey libraries first having become available last
>>  year. Documentation about those is available here:
>>  https://jersey.java.net/documentation/latest/cdi.support.html.
>>  Potentially that api would open up the possiblity for a small deltaspike
>>  library that does all the necessary integration work (request scoping, cdi
>>  binding), probably independent of Jetty.
>> 
>>  Or is there a complete example somewhere?
>> 
>>  Regards Remo
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
> 

Re: Jersey, OpenEJB, Deltaspike

Posted by Gerhard Petracek <ge...@gmail.com>.
hi remo,

ds-test-control uses the same instance for @Before and @Test methods (per
default).
activating deltaspike.testcontrol.use_test_class_as_cdi_bean is the only
known way to get the effect you described.
(in that case you get dependent-scoped test-instances, >if< you don't
specify a scope for the test-class.)

regards,
gerhard



2016-08-17 16:28 GMT+02:00 Remo Meier <re...@adnovum.ch>:

> Hi Gerhard
>
> Thx. Seems that injection is working fine for normal JAX-RS Resources, but
> not for JAX-RS Features. I will investigate this further.
>
> An other issue I have noticed that test classes get loaded twice by
> openejb. The stack traces look like (1.7.1 version):
>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:52037
>     Thread [main] (Suspended (entry into method <init> in BasicTest))
>         BasicTest.<init>() line: 17
> NativeConstructorAccessorImpl.newInstance0(Constructor<?>, Object[])
> line: not available [native method]
>         NativeConstructorAccessorImpl.newInstance(Object[]) line: 62
>         DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45
>         Constructor<T>.newInstance(Object...) line: 408
>         InjectableConstructor<T>.doInjection() line: 72
> InjectionTargetImpl<T>.newInstance(CreationalContextImpl<T>) line: 190
> InjectionTargetImpl<T>.produce(Map<Interceptor<?>,?>,
> CreationalContextImpl<T>) line: 173
> InjectionTargetImpl<T>(AbstractProducer<T>).produce(CreationalContext<T>)
> line: 172
> ManagedBean<T>(AbstractOwbBean<T>).create(CreationalContext<T>) line: 122
>         ManagedBean<T>.create(CreationalContext<T>) line: 67
>         DependentContext.getInstance(Contextual<T>, CreationalContext<T>)
> line: 68
>         DependentContext(AbstractContext).get(Contextual<T>,
> CreationalContext<T>) line: 125
>         BeanManagerImpl.getReference(Bean<?>, Type, CreationalContext<?>)
> line: 789
>         InjectableBeanManager.getReference(Bean<?>, Type,
> CreationalContext<?>) line: 165
>         CdiTestRunner.createTest() line: 203
>         BlockJUnit4ClassRunner$1.runReflectiveCall() line: 266
>         BlockJUnit4ClassRunner$1(ReflectiveCallable).run() line: 12
> CdiTestRunner(BlockJUnit4ClassRunner).methodBlock(FrameworkMethod) line:
> 263
> CdiTestRunner(BlockJUnit4ClassRunner).runChild(FrameworkMethod,
> RunNotifier) line: 78
>         CdiTestRunner.runChild(FrameworkMethod, RunNotifier) line: 177
>         CdiTestRunner.runChild(Object, RunNotifier) line: 76
>         ParentRunner$3.run() line: 290
>         ParentRunner$1.schedule(Runnable) line: 71
> CdiTestRunner(ParentRunner<T>).runChildren(RunNotifier) line: 288
>         ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 58
>         ParentRunner$2.evaluate() line: 268
>         CdiTestRunner$BeforeClassStatement.evaluate() line: 372
>         CdiTestRunner$AfterClassStatement.evaluate() line: 393
>         CdiTestRunner(ParentRunner<T>).run(RunNotifier) line: 363
>         CdiTestRunner.run(RunNotifier) line: 144
>         JUnit4TestReference.run(TestExecution) line: 86
>         TestExecution.run(ITestReference[]) line: 38
>         RemoteTestRunner.runTests(String[], String, TestExecution) line:
> 459
>         RemoteTestRunner.runTests(TestExecution) line: 678
>         RemoteTestRunner.run() line: 382
>         RemoteTestRunner.main(String[]) line: 192
>     Thread [ReaderThread] (Running)
>     Daemon Thread [LogStreamAsync.Thread] (Running)
>     Daemon Thread [RetryTimer] (Running)
>
>
> and
>
>
> Thread [main] (Suspended (entry into method <init> in BasicTest))
>     BasicTest.<init>() line: 17
> NativeConstructorAccessorImpl.newInstance0(Constructor<?>, Object[])
> line: not available [native method]
>     NativeConstructorAccessorImpl.newInstance(Object[]) line: 62
>     DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45
>     Constructor<T>.newInstance(Object...) line: 408
>     InjectableConstructor<T>.doInjection() line: 72
> InjectionTargetImpl<T>.newInstance(CreationalContextImpl<T>) line: 190
> InjectionTargetImpl<T>.produce(Map<Interceptor<?>,?>,
> CreationalContextImpl<T>) line: 173
> InjectionTargetImpl<T>(AbstractProducer<T>).produce(CreationalContext<T>)
> line: 172
> ManagedBean<T>(AbstractOwbBean<T>).create(CreationalContext<T>) line: 122
>     ManagedBean<T>.create(CreationalContext<T>) line: 67
>     DependentContext.getInstance(Contextual<T>, CreationalContext<T>)
> line: 68
>     DependentContext(AbstractContext).get(Contextual<T>,
> CreationalContext<T>) line: 125
>     BeanManagerImpl.getReference(Bean<?>, Type, CreationalContext<?>)
> line: 789
>     InjectableBeanManager.getReference(Bean<?>, Type,
> CreationalContext<?>) line: 165
>     CdiTestRunner$ContainerAwareMethodInvoker.evaluate() line: 326
>     RunBefores.evaluate() line: 26
>     RunAfters.evaluate() line: 27
>     CdiTestRunner(ParentRunner<T>).runLeaf(Statement, Description,
> RunNotifier) line: 325
> CdiTestRunner(BlockJUnit4ClassRunner).runChild(FrameworkMethod,
> RunNotifier) line: 78
>     CdiTestRunner.runChild(FrameworkMethod, RunNotifier) line: 177
>     CdiTestRunner.runChild(Object, RunNotifier) line: 76
>     ParentRunner$3.run() line: 290
>     ParentRunner$1.schedule(Runnable) line: 71
>     CdiTestRunner(ParentRunner<T>).runChildren(RunNotifier) line: 288
>     ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 58
>     ParentRunner$2.evaluate() line: 268
>     CdiTestRunner$BeforeClassStatement.evaluate() line: 372
>     CdiTestRunner$AfterClassStatement.evaluate() line: 393
>     CdiTestRunner(ParentRunner<T>).run(RunNotifier) line: 363
>     CdiTestRunner.run(RunNotifier) line: 144
>     JUnit4TestReference.run(TestExecution) line: 86
>     TestExecution.run(ITestReference[]) line: 38
>     RemoteTestRunner.runTests(String[], String, TestExecution) line: 459
>     RemoteTestRunner.runTests(TestExecution) line: 678
>     RemoteTestRunner.run() line: 382
>     RemoteTestRunner.main(String[]) line: 192
>
> For example, @Before and @Test get called on different instances. It works
> when I annotate the test class with @Singleton. Not sure about the
> Deltaspike internals, but maybe @RunWith should imply @Singleton. I have
> only seen this when using with Jersey. Maybe because it uses request
> scoping by default and messes something up within deltaspike.
>
> Regards Remo
>
>
>
> Am 16.08.2016 um 15:00 schrieb Gerhard Petracek:
>
>> hi remo,
>>
>> if you would like to stick with tomee/openejb as well as with jersey, you
>> need a setup which integrates jersey with owb like jersey-weld2-se is
>> doing
>> it with weld  (or jersey with the cdi 1.1+ api) or you need a setup which
>> integrates tomee/openejb with jersey.
>>
>> the last time i looked at jersey, only the out-of-the-box integration with
>> weld worked as expected.
>> -> if jersey still doesn't provide a better out-of-the-box integration
>> (based on the cdi 1.1+ api or with owb directly), you need to contact one
>> of the two communities (tomee or jersey) or replace one of the parts.
>>
>> regards,
>> gerhard
>>
>>
>>
>> 2016-08-16 10:03 GMT+02:00 Remo Meier <re...@adnovum.ch>:
>>
>> Hi
>>>
>>> I attempt to get get the Jersey integration running together with
>>> Deltaspike, OpenEJB and Test Control according to the documentation at
>>> the
>>> bottom of the page here:
>>>
>>> https://deltaspike.apache.org/documentation/test-control.html
>>>
>>> Not working so far is the injection of CDI beans into JAX-RS resources.
>>> The resulting exceptions look like like:
>>>
>>> MultiException stack 1 of 1
>>> org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no
>>> object
>>> available for injection at SystemInjecteeImpl(requiredTyp
>>> e=EntityManagerFactory,parent=KatharsisMgmtFeature,qualifier
>>> s={},position=-1,optional=false,self=false,unqualified=null,1475912655)
>>>      at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThir
>>> tyResolver.java:75)
>>>      at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945)
>>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLoca
>>> torImpl.java:979)
>>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>>> e(ServiceLocatorImpl.java:1054)
>>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>>> e(ServiceLocatorImpl.java:1045)
>>>      at org.glassfish.jersey.model.internal.CommonConfig.configureFe
>>> atures(CommonConfig.java:711)
>>>      at org.glassfish.jersey.model.internal.CommonConfig.configureMe
>>> taProviders(CommonConfig.java:648)
>>>      at org.glassfish.jersey.server.ResourceConfig.configureMetaProv
>>> iders(ResourceConfig.java:829)
>>>      at org.glassfish.jersey.server.ApplicationHandler.initialize(Ap
>>> plicationHandler.java:453)
>>>      at org.glassfish.jersey.server.ApplicationHandler.access$500(Ap
>>> plicationHandler.java:184)
>>>      at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>>> ationHandler.java:350)
>>>      at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>>> ationHandler.java:347)
>>>      at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>>>      at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>>>      at org.glassfish.jersey.internal.Errors.processWithException(Er
>>> rors.java:255)
>>>      at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>>> ationHandler.java:347)
>>>      at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>>> ationHandler.java:311)
>>>      at org.glassfish.jersey.jetty.JettyHttpContainer.<init>(JettyHt
>>> tpContainer.java:474)
>>>      at org.glassfish.jersey.jetty.JettyHttpContainerProvider.create
>>> Container(JettyHttpContainerProvider.java:60)
>>>      at org.glassfish.jersey.server.ContainerFactory.createContainer
>>> (ContainerFactory.java:81)
>>>      at org.glassfish.jersey.jetty.JettyHttpContainerFactory.createS
>>> erver(JettyHttpContainerFactory.java:161)
>>>      at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>>> reJettyTestContainer.<init>(DeltaspikeAwareJettyTestContainer.java:41)
>>>      at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>>> reJettyTestContainerFactory.create(DeltaspikeAwareJettyTes
>>> tContainerFactory.java:16)
>>>      at org.glassfish.jersey.test.JerseyTest.createTestContainer(Jer
>>> seyTest.java:277)
>>>      at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:607)
>>>      at ch.adnovum.moap.movie.management.web.EntityAccessTest.setUp(
>>> EntityAccessTest.java:50)
>>>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>>> ssorImpl.java:62)
>>>      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>> thodAccessorImpl.java:43)
>>>      at java.lang.reflect.Method.invoke(Method.java:483)
>>>      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>>> FrameworkMethod.java:50)
>>>      at org.junit.internal.runners.model.ReflectiveCallable.run(Refl
>>> ectiveCallable.java:12)
>>>      at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr
>>> ameworkMethod.java:47)
>>>      at org.junit.internal.runners.statements.RunBefores.evaluate(
>>> RunBefores.java:24)
>>>      at org.junit.internal.runners.statements.RunAfters.evaluate(Run
>>> Afters.java:27)
>>>      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>>>      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit
>>> 4ClassRunner.java:78)
>>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>> runChild(CdiTestRunner.java:177)
>>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>> runChild(CdiTestRunner.java:76)
>>>      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>>>      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>>>      at org.junit.runners.ParentRunner.runChildren(ParentRunner.
>>> java:288)
>>>      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>>>      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Be
>>> foreClassStatement.evaluate(CdiTestRunner.java:372)
>>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Af
>>> terClassStatement.evaluate(CdiTestRunner.java:393)
>>>      at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>>> run(CdiTestRunner.java:144)
>>>      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.
>>> run(JUnit4TestReference.java:86)
>>>      at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
>>> TestExecution.java:38)
>>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>>> sts(RemoteTestRunner.java:459)
>>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>>> sts(RemoteTestRunner.java:678)
>>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
>>> RemoteTestRunner.java:382)
>>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
>>> RemoteTestRunner.java:192)
>>>
>>> KatharsisMgmtFeature is a regular Feature. And their is a Producer that
>>> makes the EntityManagerFactory available with @Inject.
>>>
>>> The application works if I manually register a
>>> org.glassfish.hk2.utilities.binding.AbstractBinder bean as singleton to
>>> the Application and use it to bind CDI beans to jersey/hk2 with
>>> AbstractBinder.bind(x).to(y). But I would rather prefer for Jersey to
>>> directly access the CDI beans instead of bridging those with the
>>> AbstractBinder.
>>>
>>> My dependencies for Jersey currently look like:
>>>
>>>      compile 'org.glassfish.jersey.core:jersey-client:2.23.1'
>>>      compile 'org.glassfish.jersey.core:jersey-common:2.23.1'
>>>      compile 'org.glassfish.jersey.test-framework:jersey-test-framework-
>>> core:2.23.1'
>>>      compile 'org.glassfish.jersey.test-framework.providers:jersey-test-
>>> framework-provider-jetty:2.23.1'
>>>      compile 'org.glassfish.jersey.containers:jersey-container-jetty-
>>> http:2.23.1'
>>>      compile 'org.glassfish.jersey.bundles.
>>> repackaged:jersey-guava:2.23.1'
>>>
>>>      compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x:2.23.1'
>>>      compile 'org.glassfish.jersey.ext.cdi:
>>> jersey-cdi1x-transaction:2.23.1'
>>>      compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-servlet:2.23.1'
>>>
>>> The last three are new jersey libraries first having become available
>>> last
>>> year. Documentation about those is available here:
>>> https://jersey.java.net/documentation/latest/cdi.support.html.
>>> Potentially that api would open up the possiblity for a small deltaspike
>>> library that does all the necessary integration work (request scoping,
>>> cdi
>>> binding), probably independent of Jetty.
>>>
>>> Or is there a complete example somewhere?
>>>
>>> Regards Remo
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>

Re: Jersey, OpenEJB, Deltaspike

Posted by Remo Meier <re...@adnovum.ch>.
Hi Gerhard

Thx. Seems that injection is working fine for normal JAX-RS Resources, 
but not for JAX-RS Features. I will investigate this further.

An other issue I have noticed that test classes get loaded twice by 
openejb. The stack traces look like (1.7.1 version):

org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:52037
     Thread [main] (Suspended (entry into method <init> in BasicTest))
         BasicTest.<init>() line: 17
NativeConstructorAccessorImpl.newInstance0(Constructor<?>, Object[]) 
line: not available [native method]
         NativeConstructorAccessorImpl.newInstance(Object[]) line: 62
         DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45
         Constructor<T>.newInstance(Object...) line: 408
         InjectableConstructor<T>.doInjection() line: 72
InjectionTargetImpl<T>.newInstance(CreationalContextImpl<T>) line: 190
InjectionTargetImpl<T>.produce(Map<Interceptor<?>,?>, 
CreationalContextImpl<T>) line: 173
InjectionTargetImpl<T>(AbstractProducer<T>).produce(CreationalContext<T>) 
line: 172
ManagedBean<T>(AbstractOwbBean<T>).create(CreationalContext<T>) line: 122
         ManagedBean<T>.create(CreationalContext<T>) line: 67
         DependentContext.getInstance(Contextual<T>, 
CreationalContext<T>) line: 68
         DependentContext(AbstractContext).get(Contextual<T>, 
CreationalContext<T>) line: 125
         BeanManagerImpl.getReference(Bean<?>, Type, 
CreationalContext<?>) line: 789
         InjectableBeanManager.getReference(Bean<?>, Type, 
CreationalContext<?>) line: 165
         CdiTestRunner.createTest() line: 203
         BlockJUnit4ClassRunner$1.runReflectiveCall() line: 266
         BlockJUnit4ClassRunner$1(ReflectiveCallable).run() line: 12
CdiTestRunner(BlockJUnit4ClassRunner).methodBlock(FrameworkMethod) line: 
263
CdiTestRunner(BlockJUnit4ClassRunner).runChild(FrameworkMethod, 
RunNotifier) line: 78
         CdiTestRunner.runChild(FrameworkMethod, RunNotifier) line: 177
         CdiTestRunner.runChild(Object, RunNotifier) line: 76
         ParentRunner$3.run() line: 290
         ParentRunner$1.schedule(Runnable) line: 71
CdiTestRunner(ParentRunner<T>).runChildren(RunNotifier) line: 288
         ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 58
         ParentRunner$2.evaluate() line: 268
         CdiTestRunner$BeforeClassStatement.evaluate() line: 372
         CdiTestRunner$AfterClassStatement.evaluate() line: 393
         CdiTestRunner(ParentRunner<T>).run(RunNotifier) line: 363
         CdiTestRunner.run(RunNotifier) line: 144
         JUnit4TestReference.run(TestExecution) line: 86
         TestExecution.run(ITestReference[]) line: 38
         RemoteTestRunner.runTests(String[], String, TestExecution) 
line: 459
         RemoteTestRunner.runTests(TestExecution) line: 678
         RemoteTestRunner.run() line: 382
         RemoteTestRunner.main(String[]) line: 192
     Thread [ReaderThread] (Running)
     Daemon Thread [LogStreamAsync.Thread] (Running)
     Daemon Thread [RetryTimer] (Running)


and


Thread [main] (Suspended (entry into method <init> in BasicTest))
     BasicTest.<init>() line: 17
NativeConstructorAccessorImpl.newInstance0(Constructor<?>, Object[]) 
line: not available [native method]
     NativeConstructorAccessorImpl.newInstance(Object[]) line: 62
     DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45
     Constructor<T>.newInstance(Object...) line: 408
     InjectableConstructor<T>.doInjection() line: 72
InjectionTargetImpl<T>.newInstance(CreationalContextImpl<T>) line: 190
InjectionTargetImpl<T>.produce(Map<Interceptor<?>,?>, 
CreationalContextImpl<T>) line: 173
InjectionTargetImpl<T>(AbstractProducer<T>).produce(CreationalContext<T>) 
line: 172
ManagedBean<T>(AbstractOwbBean<T>).create(CreationalContext<T>) line: 122
     ManagedBean<T>.create(CreationalContext<T>) line: 67
     DependentContext.getInstance(Contextual<T>, CreationalContext<T>) 
line: 68
     DependentContext(AbstractContext).get(Contextual<T>, 
CreationalContext<T>) line: 125
     BeanManagerImpl.getReference(Bean<?>, Type, CreationalContext<?>) 
line: 789
     InjectableBeanManager.getReference(Bean<?>, Type, 
CreationalContext<?>) line: 165
     CdiTestRunner$ContainerAwareMethodInvoker.evaluate() line: 326
     RunBefores.evaluate() line: 26
     RunAfters.evaluate() line: 27
     CdiTestRunner(ParentRunner<T>).runLeaf(Statement, Description, 
RunNotifier) line: 325
CdiTestRunner(BlockJUnit4ClassRunner).runChild(FrameworkMethod, 
RunNotifier) line: 78
     CdiTestRunner.runChild(FrameworkMethod, RunNotifier) line: 177
     CdiTestRunner.runChild(Object, RunNotifier) line: 76
     ParentRunner$3.run() line: 290
     ParentRunner$1.schedule(Runnable) line: 71
     CdiTestRunner(ParentRunner<T>).runChildren(RunNotifier) line: 288
     ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 58
     ParentRunner$2.evaluate() line: 268
     CdiTestRunner$BeforeClassStatement.evaluate() line: 372
     CdiTestRunner$AfterClassStatement.evaluate() line: 393
     CdiTestRunner(ParentRunner<T>).run(RunNotifier) line: 363
     CdiTestRunner.run(RunNotifier) line: 144
     JUnit4TestReference.run(TestExecution) line: 86
     TestExecution.run(ITestReference[]) line: 38
     RemoteTestRunner.runTests(String[], String, TestExecution) line: 459
     RemoteTestRunner.runTests(TestExecution) line: 678
     RemoteTestRunner.run() line: 382
     RemoteTestRunner.main(String[]) line: 192

For example, @Before and @Test get called on different instances. It 
works when I annotate the test class with @Singleton. Not sure about the 
Deltaspike internals, but maybe @RunWith should imply @Singleton. I have 
only seen this when using with Jersey. Maybe because it uses request 
scoping by default and messes something up within deltaspike.

Regards Remo


Am 16.08.2016 um 15:00 schrieb Gerhard Petracek:
> hi remo,
>
> if you would like to stick with tomee/openejb as well as with jersey, you
> need a setup which integrates jersey with owb like jersey-weld2-se is doing
> it with weld  (or jersey with the cdi 1.1+ api) or you need a setup which
> integrates tomee/openejb with jersey.
>
> the last time i looked at jersey, only the out-of-the-box integration with
> weld worked as expected.
> -> if jersey still doesn't provide a better out-of-the-box integration
> (based on the cdi 1.1+ api or with owb directly), you need to contact one
> of the two communities (tomee or jersey) or replace one of the parts.
>
> regards,
> gerhard
>
>
>
> 2016-08-16 10:03 GMT+02:00 Remo Meier <re...@adnovum.ch>:
>
>> Hi
>>
>> I attempt to get get the Jersey integration running together with
>> Deltaspike, OpenEJB and Test Control according to the documentation at the
>> bottom of the page here:
>>
>> https://deltaspike.apache.org/documentation/test-control.html
>>
>> Not working so far is the injection of CDI beans into JAX-RS resources.
>> The resulting exceptions look like like:
>>
>> MultiException stack 1 of 1
>> org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object
>> available for injection at SystemInjecteeImpl(requiredTyp
>> e=EntityManagerFactory,parent=KatharsisMgmtFeature,qualifier
>> s={},position=-1,optional=false,self=false,unqualified=null,1475912655)
>>      at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThir
>> tyResolver.java:75)
>>      at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945)
>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLoca
>> torImpl.java:979)
>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>> e(ServiceLocatorImpl.java:1054)
>>      at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
>> e(ServiceLocatorImpl.java:1045)
>>      at org.glassfish.jersey.model.internal.CommonConfig.configureFe
>> atures(CommonConfig.java:711)
>>      at org.glassfish.jersey.model.internal.CommonConfig.configureMe
>> taProviders(CommonConfig.java:648)
>>      at org.glassfish.jersey.server.ResourceConfig.configureMetaProv
>> iders(ResourceConfig.java:829)
>>      at org.glassfish.jersey.server.ApplicationHandler.initialize(Ap
>> plicationHandler.java:453)
>>      at org.glassfish.jersey.server.ApplicationHandler.access$500(Ap
>> plicationHandler.java:184)
>>      at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>> ationHandler.java:350)
>>      at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
>> ationHandler.java:347)
>>      at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>>      at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>>      at org.glassfish.jersey.internal.Errors.processWithException(Er
>> rors.java:255)
>>      at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>> ationHandler.java:347)
>>      at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
>> ationHandler.java:311)
>>      at org.glassfish.jersey.jetty.JettyHttpContainer.<init>(JettyHt
>> tpContainer.java:474)
>>      at org.glassfish.jersey.jetty.JettyHttpContainerProvider.create
>> Container(JettyHttpContainerProvider.java:60)
>>      at org.glassfish.jersey.server.ContainerFactory.createContainer
>> (ContainerFactory.java:81)
>>      at org.glassfish.jersey.jetty.JettyHttpContainerFactory.createS
>> erver(JettyHttpContainerFactory.java:161)
>>      at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>> reJettyTestContainer.<init>(DeltaspikeAwareJettyTestContainer.java:41)
>>      at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
>> reJettyTestContainerFactory.create(DeltaspikeAwareJettyTes
>> tContainerFactory.java:16)
>>      at org.glassfish.jersey.test.JerseyTest.createTestContainer(Jer
>> seyTest.java:277)
>>      at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:607)
>>      at ch.adnovum.moap.movie.management.web.EntityAccessTest.setUp(
>> EntityAccessTest.java:50)
>>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>> ssorImpl.java:62)
>>      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>> thodAccessorImpl.java:43)
>>      at java.lang.reflect.Method.invoke(Method.java:483)
>>      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>> FrameworkMethod.java:50)
>>      at org.junit.internal.runners.model.ReflectiveCallable.run(Refl
>> ectiveCallable.java:12)
>>      at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr
>> ameworkMethod.java:47)
>>      at org.junit.internal.runners.statements.RunBefores.evaluate(
>> RunBefores.java:24)
>>      at org.junit.internal.runners.statements.RunAfters.evaluate(Run
>> Afters.java:27)
>>      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>>      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit
>> 4ClassRunner.java:78)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>> runChild(CdiTestRunner.java:177)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>> runChild(CdiTestRunner.java:76)
>>      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>>      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>>      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>>      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>>      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Be
>> foreClassStatement.evaluate(CdiTestRunner.java:372)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Af
>> terClassStatement.evaluate(CdiTestRunner.java:393)
>>      at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>>      at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
>> run(CdiTestRunner.java:144)
>>      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.
>> run(JUnit4TestReference.java:86)
>>      at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
>> TestExecution.java:38)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>> sts(RemoteTestRunner.java:459)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
>> sts(RemoteTestRunner.java:678)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
>> RemoteTestRunner.java:382)
>>      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
>> RemoteTestRunner.java:192)
>>
>> KatharsisMgmtFeature is a regular Feature. And their is a Producer that
>> makes the EntityManagerFactory available with @Inject.
>>
>> The application works if I manually register a
>> org.glassfish.hk2.utilities.binding.AbstractBinder bean as singleton to
>> the Application and use it to bind CDI beans to jersey/hk2 with
>> AbstractBinder.bind(x).to(y). But I would rather prefer for Jersey to
>> directly access the CDI beans instead of bridging those with the
>> AbstractBinder.
>>
>> My dependencies for Jersey currently look like:
>>
>>      compile 'org.glassfish.jersey.core:jersey-client:2.23.1'
>>      compile 'org.glassfish.jersey.core:jersey-common:2.23.1'
>>      compile 'org.glassfish.jersey.test-framework:jersey-test-framework-
>> core:2.23.1'
>>      compile 'org.glassfish.jersey.test-framework.providers:jersey-test-
>> framework-provider-jetty:2.23.1'
>>      compile 'org.glassfish.jersey.containers:jersey-container-jetty-
>> http:2.23.1'
>>      compile 'org.glassfish.jersey.bundles.repackaged:jersey-guava:2.23.1'
>>
>>      compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x:2.23.1'
>>      compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-transaction:2.23.1'
>>      compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-servlet:2.23.1'
>>
>> The last three are new jersey libraries first having become available last
>> year. Documentation about those is available here:
>> https://jersey.java.net/documentation/latest/cdi.support.html.
>> Potentially that api would open up the possiblity for a small deltaspike
>> library that does all the necessary integration work (request scoping, cdi
>> binding), probably independent of Jetty.
>>
>> Or is there a complete example somewhere?
>>
>> Regards Remo
>>
>>
>>
>>
>>
>>
>>
>>

Re: Jersey, OpenEJB, Deltaspike

Posted by Gerhard Petracek <ge...@gmail.com>.
hi remo,

if you would like to stick with tomee/openejb as well as with jersey, you
need a setup which integrates jersey with owb like jersey-weld2-se is doing
it with weld  (or jersey with the cdi 1.1+ api) or you need a setup which
integrates tomee/openejb with jersey.

the last time i looked at jersey, only the out-of-the-box integration with
weld worked as expected.
-> if jersey still doesn't provide a better out-of-the-box integration
(based on the cdi 1.1+ api or with owb directly), you need to contact one
of the two communities (tomee or jersey) or replace one of the parts.

regards,
gerhard



2016-08-16 10:03 GMT+02:00 Remo Meier <re...@adnovum.ch>:

> Hi
>
> I attempt to get get the Jersey integration running together with
> Deltaspike, OpenEJB and Test Control according to the documentation at the
> bottom of the page here:
>
> https://deltaspike.apache.org/documentation/test-control.html
>
> Not working so far is the injection of CDI beans into JAX-RS resources.
> The resulting exceptions look like like:
>
> MultiException stack 1 of 1
> org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object
> available for injection at SystemInjecteeImpl(requiredTyp
> e=EntityManagerFactory,parent=KatharsisMgmtFeature,qualifier
> s={},position=-1,optional=false,self=false,unqualified=null,1475912655)
>     at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThir
> tyResolver.java:75)
>     at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:945)
>     at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLoca
> torImpl.java:979)
>     at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
> e(ServiceLocatorImpl.java:1054)
>     at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitializ
> e(ServiceLocatorImpl.java:1045)
>     at org.glassfish.jersey.model.internal.CommonConfig.configureFe
> atures(CommonConfig.java:711)
>     at org.glassfish.jersey.model.internal.CommonConfig.configureMe
> taProviders(CommonConfig.java:648)
>     at org.glassfish.jersey.server.ResourceConfig.configureMetaProv
> iders(ResourceConfig.java:829)
>     at org.glassfish.jersey.server.ApplicationHandler.initialize(Ap
> plicationHandler.java:453)
>     at org.glassfish.jersey.server.ApplicationHandler.access$500(Ap
> plicationHandler.java:184)
>     at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
> ationHandler.java:350)
>     at org.glassfish.jersey.server.ApplicationHandler$3.call(Applic
> ationHandler.java:347)
>     at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>     at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>     at org.glassfish.jersey.internal.Errors.processWithException(Er
> rors.java:255)
>     at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
> ationHandler.java:347)
>     at org.glassfish.jersey.server.ApplicationHandler.<init>(Applic
> ationHandler.java:311)
>     at org.glassfish.jersey.jetty.JettyHttpContainer.<init>(JettyHt
> tpContainer.java:474)
>     at org.glassfish.jersey.jetty.JettyHttpContainerProvider.create
> Container(JettyHttpContainerProvider.java:60)
>     at org.glassfish.jersey.server.ContainerFactory.createContainer
> (ContainerFactory.java:81)
>     at org.glassfish.jersey.jetty.JettyHttpContainerFactory.createS
> erver(JettyHttpContainerFactory.java:161)
>     at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
> reJettyTestContainer.<init>(DeltaspikeAwareJettyTestContainer.java:41)
>     at ch.adnovum.jcan.test.deltaspike.jaxrs.internal.DeltaspikeAwa
> reJettyTestContainerFactory.create(DeltaspikeAwareJettyTes
> tContainerFactory.java:16)
>     at org.glassfish.jersey.test.JerseyTest.createTestContainer(Jer
> seyTest.java:277)
>     at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:607)
>     at ch.adnovum.moap.movie.management.web.EntityAccessTest.setUp(
> EntityAccessTest.java:50)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
> ssorImpl.java:62)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
> thodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:483)
>     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
> FrameworkMethod.java:50)
>     at org.junit.internal.runners.model.ReflectiveCallable.run(Refl
> ectiveCallable.java:12)
>     at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr
> ameworkMethod.java:47)
>     at org.junit.internal.runners.statements.RunBefores.evaluate(
> RunBefores.java:24)
>     at org.junit.internal.runners.statements.RunAfters.evaluate(Run
> Afters.java:27)
>     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit
> 4ClassRunner.java:78)
>     at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
> runChild(CdiTestRunner.java:177)
>     at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
> runChild(CdiTestRunner.java:76)
>     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>     at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Be
> foreClassStatement.evaluate(CdiTestRunner.java:372)
>     at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$Af
> terClassStatement.evaluate(CdiTestRunner.java:393)
>     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>     at org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.
> run(CdiTestRunner.java:144)
>     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.
> run(JUnit4TestReference.java:86)
>     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
> TestExecution.java:38)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
> sts(RemoteTestRunner.java:459)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe
> sts(RemoteTestRunner.java:678)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
> RemoteTestRunner.java:382)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
> RemoteTestRunner.java:192)
>
> KatharsisMgmtFeature is a regular Feature. And their is a Producer that
> makes the EntityManagerFactory available with @Inject.
>
> The application works if I manually register a
> org.glassfish.hk2.utilities.binding.AbstractBinder bean as singleton to
> the Application and use it to bind CDI beans to jersey/hk2 with
> AbstractBinder.bind(x).to(y). But I would rather prefer for Jersey to
> directly access the CDI beans instead of bridging those with the
> AbstractBinder.
>
> My dependencies for Jersey currently look like:
>
>     compile 'org.glassfish.jersey.core:jersey-client:2.23.1'
>     compile 'org.glassfish.jersey.core:jersey-common:2.23.1'
>     compile 'org.glassfish.jersey.test-framework:jersey-test-framework-
> core:2.23.1'
>     compile 'org.glassfish.jersey.test-framework.providers:jersey-test-
> framework-provider-jetty:2.23.1'
>     compile 'org.glassfish.jersey.containers:jersey-container-jetty-
> http:2.23.1'
>     compile 'org.glassfish.jersey.bundles.repackaged:jersey-guava:2.23.1'
>
>     compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x:2.23.1'
>     compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-transaction:2.23.1'
>     compile 'org.glassfish.jersey.ext.cdi:jersey-cdi1x-servlet:2.23.1'
>
> The last three are new jersey libraries first having become available last
> year. Documentation about those is available here:
> https://jersey.java.net/documentation/latest/cdi.support.html.
> Potentially that api would open up the possiblity for a small deltaspike
> library that does all the necessary integration work (request scoping, cdi
> binding), probably independent of Jetty.
>
> Or is there a complete example somewhere?
>
> Regards Remo
>
>
>
>
>
>
>
>