deltaspike-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Remo Meier <remo.me...@adnovum.ch>
Subject Re: Jersey, OpenEJB, Deltaspike
Date Wed, 17 Aug 2016 14:28:58 GMT
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 <remo.meier@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
>>
>>
>>
>>
>>
>>
>>
>>

Mime
View raw message