tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: Problem with openejb.testing.start-cdi-contexts = false and application composer
Date Fri, 16 Dec 2016 18:07:45 GMT
2016-12-16 19:04 GMT+01:00 Xavier Dury <kalgon@hotmail.com>:

> Hi Romain,
>
> thanks for the answer, I should have thought about the rules ordering.
> Normally, I always use RuleChain when I write my own tests, but for once, I
> took an existing test (https://github.com/apache/
> tomee/blob/master/container/openejb-core/src/test/java/
> org/apache/openejb/junit/ScopesRuleTest.java) ... and now, after reading
> your explanation, I don't really see what this test is actually testing as
> the request context is always active... ;-)
>
>
fixed


> Xavier
>
>
>
> From: Romain Manni-Bucau <rmannibucau@gmail.com>
> Sent: Friday, December 16, 2016 6:52 PM
> To: users@tomee.apache.org
> Subject: Re: Problem with openejb.testing.start-cdi-contexts = false and
> application composer
>
> Hi Xavier,
>
> first test doesnt pass cause app composer runs the test as an EJB
> (ManagedBean actually) and therefore inherits from the auto request scope
> for it. RequestScoped is quite particular cause often implicit so switching
> it off is quite an issue for a lot of tests - it explains why it is still
> on even if ScopesRule is active. We can think to a way to force it to be
> disabled but I think it would need to be another flag to not break too much
> tests (like new ScopesRule(disableRequestScope) or something like that).
>
> regarding "is this a bug" the answer is no.
>
>
>
>
>
>
>
>
>
>
> ok ok, I'll explain why ;). This is a conflict between junit runner and
> rules, you need to migrate to app composer rule (which is as hard as
> removing the runner and using ApplicationComposerRule) and chain it in an
> ordered manner with the scope rule:
>
>
> @ContainerProperties({
>         @ContainerProperties.Property(name =
> "openejb.testing.start-cdi-contexts", value = "false")
> })
> @org.apache.openejb.testing.Classes(cdi = true, innerClassesAsBean = true)
> public class ScopesRuleTest {
>     @Rule
>     public final TestRule rule = RuleChain.outerRule(new
> ApplicationComposerRule(this)).around(new ScopesRule());
>
>     public static class Foo {
>         public void touch() {
>             // ok
>         }
>     }
>
>     @Inject
>     private BeanManager beanManager;
>
>     @Test
>     public void scopeDoesNotExist() {
>         assertFalse(beanManager.getContext(RequestScoped.
> class).isActive());
>     }
>
>     @Test
>     @CdiScopes(RequestScoped.class)
>     public void scopeExists() {
>         assertTrue(WebBeansContext.currentInstance().getContextsService().
> getCurrentContext(RequestScoped.class).isActive());
>     }
> }
>
>
>
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
>
>
> RBlog: the RManniBucau v2 Blog
> blog-rmannibucau.rhcloud.com
> RBlog: Romain Manni-Bucau Blog about Java, JavaEE, TomEE, Angular, Open
> Source, Code and geeky topics...
> <http://rmannibucau.wordpress.com> | Github <https://github.com/
> rmannibucau> |
>
>
> [old blog] new RManniBucau().blog()
> rmannibucau.wordpress.com
> New blog on: https://blog-rmannibucau.rhcloud.com/
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2016-12-16 18:37 GMT+01:00 Xavier Dury <kalgon@hotmail.com>:
>
> > Hi,
> >
> > I have a problem with the following test (with TomEE 7.0.1):
> >
> > @ContainerProperties(@ContainerProperties.Property(name =
> > "openejb.testing.start-cdi-contexts", value = "false"))
> > @Classes(cdi = true, innerClassesAsBean = true)
> > @RunWith(ApplicationComposer.class)
> > public class ScopesRuleTest {
> >     public static class Foo {
> >         public void touch() {}
> >     }
> >
> >     @Rule
> >     public final ScopesRule rule = new ScopesRule();
> >
> >     @Inject
> >     private BeanManager beanManager;
> >
> >     @Test
> >     public void scopeDoesNotExist() {
> >         Assert.assertFalse(beanManager.getContext(
> > RequestScoped.class).isActive());
> >     }
> >
> >     @Test
> >     @CdiScopes(RequestScoped.class)
> >     public void scopeExists() {
> >         Assert.assertTrue(beanManager.getContext(
> > RequestScoped.class).isActive());
> >     }
> > }
> >
> > The scopes should not be started but the first test gives an assertion
> > error (so the RequestContext is well started although that's not what I
> > wanted) and the second one gives a NPE:
> >
> > java.lang.NullPointerException
> >     at org.apache.openejb.util.AppFinder.findAppContextOrWeb(
> > AppFinder.java:28)
> >     at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
> > ThreadSingletonServiceImpl.java:287)
> >     at org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(
> > ThreadSingletonServiceImpl.java:267)
> >     at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
> > ThreadSingletonServiceImpl.java:327)
> >     at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
> > ThreadSingletonServiceImpl.java:64)
> >     at org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(
> > WebBeansFinder.java:51)
> >     at org.apache.webbeans.config.WebBeansContext.getInstance(
> > WebBeansContext.java:185)
> >     at org.apache.webbeans.config.WebBeansContext.currentInstance(
> > WebBeansContext.java:203)
> >     at org.apache.openejb.junit.ScopesRule$1.evaluate(
> ScopesRule.java:42)
> >     at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> >
> > If I remove the first test, the second one passes.
> >
> > Is this a bug?
> >
> > Thanks,
> >
> > Xavier
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message