ah. ok. It makes sense. We will update our test framework. Thanks all!
On Fri, May 8, 2015 at 12:21 PM, Pete Muir <pmuir(a)redhat.com> wrote:
Mark is correct.
The TCK needs to be able to get hold of the Context implementation when
the Context is not active, in order to verify that "If the context object
is inactive, the get() and destroy() methods must throw a
ContextNotActiveException.” (section 6.2). As you can’t get a context impl
from BeanManager when the context is not active, it needs to use the
porting package API instead.
> the TCK code is calling into org.jboss.weld.Container which is an
internal Weld class which should not be visible to application so the
application should not need to load them
Yes, however it is not a direct call, and this call is replaceable as
described in the TCK docs
http://docs.jboss.org/cdi/tck/reference/1.2.4.Final/en-US/html_single/#po....
You can replace the call to Container with whatever works for you (e.g. a
JNDI lookup).
> >> 2) the TCK code is calling Container.instance() with no arguments,
which should not be called. We always use Container.instance(contextId), in
accordance with Weld doc A.3.2.4. Singleton SPI (this should be used in
OSGi environment).
You need to implement a version of the porting package that calls your
implementation / container with the correct arguments. The porting package
provided with Weld is provided for reference only.
> On 8 May 2015, at 09:00, Emily Jiang <emijiang6(a)googlemail.com> wrote:
>
> Mark,
> Are you saying you might get a request scope Context via
contexts.getRequestionContext() even if the context is not active while the
BeanManager.getContext(RequestScoped.class) gives you a better exception
instead? The javadoc on BeanManger states that you should get a
ContextActiveException if the context is not active. Anyway, I think
BeanManager.getContext(RequestScoped.class) is widely used and it is an api.
> Thanks
> Emily
>
> On Thu, May 7, 2015 at 6:29 PM, Mark Struberg <struberg(a)yahoo.de> wrote:
> No it makes perfect sense in _some_ cases to use
Contexts.getRequestContxt() as BeanManager.getContext(RequestScoped.class)
might throw a ContextNotActiveException.
>
> LieGrue,
> strub
>
>
>
> > Am 07.05.2015 um 17:02 schrieb Jozef Hartinger <jharting(a)redhat.com>:
> >
> > Hi Emily,
> >
> > you can submit TCK challenges direcly by opening JIRA issues at
https://issues.jboss.org/browse/CDITCK.
> >
> > As for this particular one I am not sure why the
Contexts.getRequestContext() method is still used in the tests.
BeanManager.getContext(RequestScoped.class) should IMHO be used instead.
> >
> > Jozef
> >
> > On 05/07/2015 01:50 PM, Emily Jiang wrote:
> >>
> >> I am trying to run cdi 1.2 tck:
> >> In test:
org.jboss.cdi.tck.tests.event.observer.conditional.ConditionalObserverTest
> >> Method: testConditionalObserverMethodNotInvokedIfNoActiveContext
> >>
> >> I got this following failure:
> >> java.lang.IllegalStateException: Singleton not set for
STATIC_INSTANCE => [29478a84-0d13-49f5-b140-34a6cd92ab71,
0dd30cdc-10f4-4ec0-a8c5-d8fa3a82fc25, bbc59ac1-4747-49d0-96a3-12f0d4987829,
3459400f-dd41-473c-a4db-94d60fe5899b, 10795c17-3611-41d5-b7ca-497709c2ad53,
f10c929f-5314-44ba-aeb4-99888f6b4611, a22c5a8f-bf26-4f54-a847-d1c7b5532426,
00c3de8d-65d9-4ba7-804a-9c3c515e59d7, d7c8be7e-8b52-4c88-97e1-5ba6925fb794,
72ac8455-7c21-4090-b7ec-13d70c75a7d7, dbe7255d-5485-4c2a-b547-058815660144,
d3bb3d00-3214-48a5-b662-499010197e12]
> >> at
org.jboss.weld.bootstrap.api.helpers.RegistrySingletonProvider$RegistrySingleton.get(RegistrySingletonProvider.java:28)
> >> at org.jboss.weld.Container.instance(Container.java:55)
> >> at
org.jboss.weld.tck.ContextsImpl.getRequestContext(ContextsImpl.java:33)
> >> at
org.jboss.weld.tck.ContextsImpl.getRequestContext(ContextsImpl.java:30)
> >> at
org.jboss.cdi.tck.tests.event.observer.conditional.ConditionalObserverTest.testConditionalObserverMethodNotInvokedIfNoActiveContext(ConditionalObserverTest.java:96)
> >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>
> >> From the stack trace, two strange things are happening:
> >>
> >> 1) the TCK code is calling into org.jboss.weld.Container which is an
internal Weld class which should not be visible to application so the
application should not need to load them
> >> 2) the TCK code is calling Container.instance() with no arguments,
which should not be called. We always use Container.instance(contextId), in
accordance with Weld doc A.3.2.4. Singleton SPI (this should be used in
OSGi environment).
> >>
> >> Can someone help to explain why the tck test was done this way? Is it
accurate?
> >>
> >> --
> >> Thanks
> >> Emily
> >> =================
> >> Emily Jiang
> >> ejiang(a)apache.org
> >>
> >>
> >> _______________________________________________
> >> weld-dev mailing list
> >>
> >> weld-dev(a)lists.jboss.org
> >>
https://lists.jboss.org/mailman/listinfo/weld-dev
> >
> > _______________________________________________
> > weld-dev mailing list
> > weld-dev(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/weld-dev
>
>
>
>
> --
> Thanks
> Emily
> =================
> Emily Jiang
> ejiang(a)apache.org
> _______________________________________________
> weld-dev mailing list
> weld-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/weld-dev