There are way too many cases I can cite of the spec saying something
is
optional but good implementations doing what is actually right. Even in the
worst reading of this, that is exactly what is happening here.
Reza take one day and re-read it with a not oriented eye: the spec states
it shouldnt work. Let also ignore the concurrency utility for one moment
since it covers only 50% of the cases and show me where the spec states it
should be covered please.
On Mar 7, 2016, at 8:12 AM, Romain Manni-Bucau
<rmannibucau(a)gmail.com>
wrote:
2016-03-07 14:06 GMT+01:00 Reza Rahman <reza_rahman(a)lycos.com>:
> What this is saying is that it is not recommended to use them because of
> the possible life-cycle mismatch. If they are not supposed to work at all,
> the specification would have simply stated it won't work.
>
>
It is not stated so not supported, that's the way EE works whatever you
think (if you doubt just use any of the SHOULD features in 2 servers ;)).
> Anyway personally I have no reason to further discuss this. I'm going to
> try to find a way to get this done for developers sooner rather than later.
> If TomEE does not want to do it, too bad for developers.
>
>
This is not the point. I'm for getting it done but the spec states the
opposite since it ignores not submitting instances completely and it states
that submitting ones are not expected to work very clearly in the previous
quote (not being deterministic means it doesn't work).
However the issue is wider than concurrency-utilities so even if you
manage to get it done for this spec users can still face this issue. If I
follow a context start/stop API is possible for 2.0 so question is really:
should this API get inheritance or not.
> On Mar 7, 2016, at 3:49 AM, Romain Manni-Bucau <rmannibucau(a)gmail.com>
> wrote:
>
> "
> Tasks that are submitted to a managed instance of ExecutorService may
> still be running after the lifecycle of the submitting component.
> Therefore, CDI beans with a scope of @RequestScoped, @SessionScoped, or
> @ConversationScoped are not recommended to use as tasks as it cannot be
> guaranteed that the tasks will complete before the CDI context is
> destroyed.
> "
>
> States that the context is not inherited, is that what you mean?
>
>
>
> Romain Manni-Bucau
> @rmannibucau <
https://twitter.com/rmannibucau> | Blog
> <
http://rmannibucau.wordpress.com> | Github
> <
https://github.com/rmannibucau> | LinkedIn
> <
https://www.linkedin.com/in/rmannibucau> | Tomitriber
> <
http://www.tomitribe.com>
>
> 2016-03-07 5:57 GMT+01:00 Reza Rahman <reza_rahman(a)lycos.com>:
>
>> The specification currently references pretty much all the major CDI
>> scopes specifically with the issue of propagation and lifecycle in mind.
>> Please see section 2.3.
>>
>> On Mar 6, 2016, at 11:53 PM, Mark Struberg <struberg(a)yahoo.de> wrote:
>> Specifically
>>
>> The containers mimic ejb for propagation for a good reason!
>> No session e.g. , new TX, etc
>>
>> Sadly the concurrency utilis only mention @ApplicationScoped, so the
>> Request Context not only doesn't get propagated (which is good), but also
>> doesn't get set up (which is crap).
>>
>> LieGrue,
>> Strub
>>
>> Am 06.03.2016 um 23:03 schrieb John D. Ament <john.d.ament(a)gmail.com>:
>>
>> I agree, in a sense, with what you're saying. There's nothing in this
>> spec that says it wouldn't be propagated. However, there's nothing in
this
>> spec that states clearly that CDI contexts are propagated.
>>
>> If you look at the RI, the RI only seems to propagate transaction
>> state. Considering the age of the spec, I'm not surprised to see that.
>> The worst part is that right now, outside of the ASF, all other EE7 impls
>> seem to be using the RI for concurrency.
>>
>> I'm fairly certain that from this spec's standpoint, the only thing
>> that's actually propagated is the transaction.
>>
>> John
>>
>> On Sun, Mar 6, 2016 at 4:50 PM Reza Rahman <reza_rahman(a)lycos.com>
>> wrote:
>>
>>> I am re-reading the spec end to end again right now. So far it seems I
>>> have remembered everything correctly.
>>>
>>> You should read over section 2.3. What it is saying is that a container
>>> implementing the Java EE concurrency utilities should ensure whatever
>>> contextual information is needed for managed components to work correctly
>>> should be propagated automatically. For the correct implementation of CDI
>>> scopes, this should also mean any currently active scopes. The section you
>>> are referring to is basically implying that thinking that it is possible to
>>> use these scoped beans in tasks (albeit not reliably since beans could go
>>> out of scope before the thread finishes - for example if the request ends).
>>>
>>> This does not have anything to do with the context service per se. The
>>> context service is an SPI of sorts to allow end user developers to do for
>>> their own applications what the container does behind the scenes for
>>> managed component context propagation.
>>>
>>> I'll read over the entire spec to see if there is anything to
>>> contradict this. If that's not the case what Romain is describing is
most
>>> likely an implementation specific bug that did not take into account CDI
>>> scope propagation.
>>>
>>> On Mar 6, 2016, at 4:23 PM, John D. Ament <john.d.ament(a)gmail.com>
>>> wrote:
>>>
>>> Reza,
>>>
>>> I read through the concurrency utils spec. Was there a specific
>>> section you had in mind? The only references to CDI were near the
>>> beginning warning users to not use Request/Session scoped beans as tasks
>>> since the outer most context may be destroyed before the work is done.
>>>
>>> I have a feeling what you're referring to is the context service:
>>>
http://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ContextSe...
>>>
>>> If that's the case, then basically this should work OOTB right?
>>>
>>> Task task = new MyTask();
>>> task = contextService.createContextualProxy(task, Task.class);
>>> executor.submit(task);
>>>
>>> // now magically the context should be prop'd?
>>>
>>> Is that about right?
>>>
>>> John
>>>
>>> On Sun, Mar 6, 2016 at 3:30 PM Reza Rahman <reza_rahman(a)lycos.com>
>>> wrote:
>>>
>>>> Have you actually looked at the EE concurrency spec text in detail?
>>>> What does it say about managed component context propagation?
>>>>
>>>> Without actually doing that further discussing this is just taking
>>>> shots in the dark. As an implementer it should not surprise you that
this
>>>> might simply be a bug because the person implementing the concurrency
>>>> utilities for the EE runtime was not told about what to copy over into
the
>>>> new thread for CDI to work correctly.
>>>>
>>>> On Mar 6, 2016, at 3:06 PM, Romain Manni-Bucau
<rmannibucau(a)gmail.com>
>>>> wrote:
>>>>
>>>>
>>>> 2016-03-06 20:59 GMT+01:00 Reza Rahman <reza_rahman(a)lycos.com>:
>>>>
>>>>> As far as I know this is precisely the sort of thing that the EE
>>>>> concurrency spec is intended for. It is supposed to copy over
everything
>>>>> from the underlying thread local context into the new thread for all
EE
>>>>> managed components to function. Since CDI beans are also EE
container
>>>>> managed, it also applies to CDI beans as well. The EE vendor is
supposed to
>>>>> make sure this works properly.
>>>>>
>>>>> I don't think the concurrency utilities specifically lists APIs
for
>>>>> which thread context propagation should work. If this doesn't
work in a
>>>>> specific implementation it's most likely because they didn't
take CDI into
>>>>> account in their own EE concurrency implementation.
>>>>>
>>>>>
>>>> That's what I wanted/would like. CDI TCK breaks it quite easily and
>>>> @RequestScoped which is *used* today is sadly a @ThreadLocalScoped
badly
>>>> named. So to solve it we would need another scope as I mentionned
several
>>>> times on this list 100% matching servlet instances lifecycles (on a pure
>>>> CDI side we have the same issue for sessions which are recycled during a
>>>> request, the session scope is corrupted *by spec* in term of user
behavior).
>>>>
>>>>
>>>>> On Mar 6, 2016, at 2:45 PM, John D. Ament
<john.d.ament(a)gmail.com>
>>>>> wrote:
>>>>>
>>>>> The section of the spec you link to makes no references to threads.
>>>>> 6.3 makes some notes about normal scopes and threads, and
specifically
>>>>> says that a context is bound to one or more threads.
>>>>>
>>>>> I think what's happened is that over the years, people have
simply
>>>>> bound HTTP Request == single thread, but when async processing was
>>>>> introduced no one thought to clarify that the spawning of a child
thread
>>>>> from the original HTTP request retains the parent's context.
>>>>>
>>>>> This is another requested feature, but looks more like a bug or gap
>>>>> in the spec.
>>>>>
>>>>> John
>>>>>
>>>>> On Sun, Mar 6, 2016 at 2:37 PM Romain Manni-Bucau <
>>>>> rmannibucau(a)gmail.com> wrote:
>>>>>
>>>>>> 2016-03-06 20:25 GMT+01:00 Reza Rahman
<reza_rahman(a)lycos.com>:
>>>>>>
>>>>>>> Let's see. I suspect the specification text for EE
concurrency is
>>>>>>> generic enough for implementations to also be able to cover
CDI scopes or
>>>>>>> any other Java EE API context propagation needs. This means
the issue needs
>>>>>>> to be solved at the individual implementation level. Changing
anything in
>>>>>>> the spec is probably just unnecessary ceremony in this case.
>>>>>>>
>>>>>>>
>>>>>> Then 1. concurrency- utility can't be reliable for
"EE" users, 2.
>>>>>> CDI still prevent it to work since it would violate the spec to
propagate
>>>>>> it while request scope is bound to another thread (
>>>>>>
http://docs.jboss.org/cdi/spec/1.1/cdi-spec.html#request_context
>>>>>> handles async listener but not the main AsyncContext part).
>>>>>>
>>>>>>
>>>>>>> On Mar 6, 2016, at 2:15 PM, Romain Manni-Bucau <
>>>>>>> rmannibucau(a)gmail.com> wrote:
>>>>>>>
>>>>>>>
>>>>>>> 2016-03-06 19:42 GMT+01:00 Reza Rahman
<reza_rahman(a)lycos.com>:
>>>>>>>
>>>>>>>> This frankly surprises me. I'll check the
specification text. This
>>>>>>>> might indeed just be an implementation bug. The EE
concurrency utilities
>>>>>>>> are supposed to be copying all relevant context. If this
is an issue than
>>>>>>>> it has to be that it is not copying enough of the HTTP
request context for
>>>>>>>> CDI to work.
>>>>>>>>
>>>>>>>>
>>>>>>> The issue is not technical since I got it working but needed
to
>>>>>>> reverse. From my understanding ee concurrency utilities was
done in a time
>>>>>>> CDI was not there so it just ignored it somehow and it hasnt
been updated
>>>>>>> when integrated to the spec. Now with the wording of the CDI
- and TCK - it
>>>>>>> is impossible to make it working since request scope is bound
the thre
>>>>>>> request thread - and not the request. Side note: same applies
to session
>>>>>>> scope and conversation.
>>>>>>>
>>>>>>>
>>>>>>>> Surely the Red Hat folks can quickly shed some light here
since
>>>>>>>> they implement essentially this whole stack?
>>>>>>>>
>>>>>>>> On Mar 6, 2016, at 1:30 PM, Romain Manni-Bucau <
>>>>>>>> rmannibucau(a)gmail.com> wrote:
>>>>>>>>
>>>>>>>> 2016-03-06 19:20 GMT+01:00 Reza Rahman
<reza_rahman(a)lycos.com>:
>>>>>>>>
>>>>>>>>> Can you kindly try to make the example a bit simpler?
It's
>>>>>>>>> important to make the case for how likely this is
supposed to occur in most
>>>>>>>>> business applications.
>>>>>>>>>
>>>>>>>>> Also, other than making sure that the executor
service is
>>>>>>>>> propagating thread local request contexts correctly
what other solution are
>>>>>>>>> you proposing? Did you check the specification? How
sure are you that this
>>>>>>>>> isn't simply an implementation bug?
>>>>>>>>>
>>>>>>>>> As far as I know the executor service is supposed to
be
>>>>>>>>> preserving all relevant parts of the EE context?
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Not in concurrency-utilities for EE at least. That was
the first
>>>>>>>> impl I did then Mark pointed out it was violating CDI
spec and request
>>>>>>>> scope definition. There is a kind of contracdiction there
cause
>>>>>>>> concurrency-utilities doesn't integrate with CDI at
all but we can also see
>>>>>>>> it the opposite way: CDI doesn't provide any way to
propagate a context in
>>>>>>>> another thread. Both point of view are valid so we need
to see where we
>>>>>>>> tackle it.
>>>>>>>>
>>>>>>>>
>>>>>>>>> On Mar 6, 2016, at 12:35 PM, Romain Manni-Bucau <
>>>>>>>>> rmannibucau(a)gmail.com> wrote:
>>>>>>>>>
>>>>>>>>> does
https://gist.github.com/rmannibucau/d55fce47b001185dca3e
>>>>>>>>> help?
>>>>>>>>>
>>>>>>>>> Idea is to give an API to make:
>>>>>>>>>
>>>>>>>>> public void complete() {
>>>>>>>>> try {
>>>>>>>>> asyncContext.complete();
>>>>>>>>> } finally {
>>>>>>>>> auditContext.end();
>>>>>>>>> }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> working without hacky and almost impossible context
pushing
>>>>>>>>> (cause of injections nature you are not supposed to
know what to push in
>>>>>>>>> the context when going async).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Romain Manni-Bucau
>>>>>>>>> @rmannibucau <
https://twitter.com/rmannibucau>
| Blog
>>>>>>>>> <
http://rmannibucau.wordpress.com> | Github
>>>>>>>>> <
https://github.com/rmannibucau> | LinkedIn
>>>>>>>>> <
https://www.linkedin.com/in/rmannibucau> |
Tomitriber
>>>>>>>>> <
http://www.tomitribe.com>
>>>>>>>>>
>>>>>>>>> 2016-03-06 16:40 GMT+01:00 Reza Rahman
<reza_rahman(a)lycos.com>:
>>>>>>>>>
>>>>>>>>>> Can you kindly share an annotated code example of
the proposed
>>>>>>>>>> solution so we can all follow and discuss this?
>>>>>>>>>>
>>>>>>>>>> On Mar 6, 2016, at 9:31 AM, Romain Manni-Bucau
<
>>>>>>>>>> rmannibucau(a)gmail.com> wroteshar:
>>>>>>>>>>
>>>>>>>>>> Hi guys,
>>>>>>>>>>
>>>>>>>>>> spoke on concurrency utilities about the ability
to inherit a
>>>>>>>>>> cdi scope. Idea is to follow request scope more
than cdi spec allows. First
>>>>>>>>>> thought it was a concurrency utilities thing but
Reza mentionned can be a
>>>>>>>>>> CDI one so here it is.
>>>>>>>>>>
>>>>>>>>>> Sample:
>>>>>>>>>> In a servlet i get MyBean which is
@RequestScoped, I do some set
>>>>>>>>>> on it. The i go async (AsyncContext) and trigger
a task in another thread.
>>>>>>>>>> It would be neat - and mandatory in some case by
the loose coupling nature
>>>>>>>>>> of CDI - to get the *same* MyBean *instance* in
this thread. With a direct
>>>>>>>>>> dependency you can easily use message passing
pattern - but you loose the
>>>>>>>>>> loose coupling cause you need to know until which
level you unwrap, think t
>>>>>>>>>> principal case which has 2-3 proxies!. However in
practice you have a lot
>>>>>>>>>> of undirect dependencies, in particular with
enterprise concerns (auditing,
>>>>>>>>>> security...) so you can't really do it
easily/naturally.
>>>>>>>>>>
>>>>>>>>>> Bonus:
>>>>>>>>>> One very verbose way is to be able to kind of
push/pop an
>>>>>>>>>> existing context in a thread - wrappers doing it
on a
>>>>>>>>>> Runnable/Consumer/Function/... would be neat.
>>>>>>>>>>
>>>>>>>>>> Question:
>>>>>>>>>> Would CDI handle it in 2.0?
>>>>>>>>>>
>>>>>>>>>> Side note: this is really about the fact to reuse
a "context
>>>>>>>>>> context" (its current instances map) in
another thread the more
>>>>>>>>>> transparently possible and match the user vision
more than a technical
>>>>>>>>>> question for now.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Romain Manni-Bucau
>>>>>>>>>> @rmannibucau
<
https://twitter.com/rmannibucau> | Blog
>>>>>>>>>> <
http://rmannibucau.wordpress.com> |
Github
>>>>>>>>>> <
https://github.com/rmannibucau> |
LinkedIn
>>>>>>>>>> <
https://www.linkedin.com/in/rmannibucau> |
Tomitriber
>>>>>>>>>> <
http://www.tomitribe.com>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> cdi-dev mailing list
>>>>>>>>>> cdi-dev(a)lists.jboss.org
>>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>>>>
>>>>>>>>>> Note that for all code provided on this list, the
provider
>>>>>>>>>> licenses the code under the Apache License,
Version 2 (
>>>>>>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html).
For all other
>>>>>>>>>> ideas provided on this list, the provider waives
all patent and other
>>>>>>>>>> intellectual property rights inherent in such
information.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> cdi-dev mailing list
>>>>>>>>>> cdi-dev(a)lists.jboss.org
>>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>>>>
>>>>>>>>>> Note that for all code provided on this list, the
provider
>>>>>>>>>> licenses the code under the Apache License,
Version 2 (
>>>>>>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html).
For all other
>>>>>>>>>> ideas provided on this list, the provider waives
all patent and other
>>>>>>>>>> intellectual property rights inherent in such
information.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> cdi-dev mailing list
>>>>>>>>> cdi-dev(a)lists.jboss.org
>>>>>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>>>
>>>>>>>>> Note that for all code provided on this list, the
provider
>>>>>>>>> licenses the code under the Apache License, Version 2
(
>>>>>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For
all other
>>>>>>>>> ideas provided on this list, the provider waives all
patent and other
>>>>>>>>> intellectual property rights inherent in such
information.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> cdi-dev mailing list
>>>>>>>> cdi-dev(a)lists.jboss.org
>>>>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>>
>>>>>>>> Note that for all code provided on this list, the
provider
>>>>>>>> licenses the code under the Apache License, Version 2 (
>>>>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all
other
>>>>>>>> ideas provided on this list, the provider waives all
patent and other
>>>>>>>> intellectual property rights inherent in such
information.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> cdi-dev mailing list
>>>>>>> cdi-dev(a)lists.jboss.org
>>>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>
>>>>>>> Note that for all code provided on this list, the provider
licenses
>>>>>>> the code under the Apache License, Version 2 (
>>>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all
other
>>>>>>> ideas provided on this list, the provider waives all patent
and other
>>>>>>> intellectual property rights inherent in such information.
>>>>>>>
>>>>>> _______________________________________________
>>>>>> cdi-dev mailing list
>>>>>> cdi-dev(a)lists.jboss.org
>>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>
>>>>>> Note that for all code provided on this list, the provider
licenses
>>>>>> the code under the Apache License, Version 2 (
>>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>>>>>> ideas provided on this list, the provider waives all patent and
other
>>>>>> intellectual property rights inherent in such information.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> cdi-dev mailing list
>>>>> cdi-dev(a)lists.jboss.org
>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>
>>>>> Note that for all code provided on this list, the provider licenses
>>>>> the code under the Apache License, Version 2 (
>>>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>>>>> ideas provided on this list, the provider waives all patent and
other
>>>>> intellectual property rights inherent in such information.
>>>>>
>>>>
>>>> _______________________________________________
>>>> cdi-dev mailing list
>>>> cdi-dev(a)lists.jboss.org
>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>
>>>> Note that for all code provided on this list, the provider licenses
>>>> the code under the Apache License, Version 2 (
>>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>>>> provided on this list, the provider waives all patent and other
>>>> intellectual property rights inherent in such information.
>>>
>>> _______________________________________________
>>> cdi-dev mailing list
>>> cdi-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>
>>> Note that for all code provided on this list, the provider licenses the
>>> code under the Apache License, Version 2 (
>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>>> provided on this list, the provider waives all patent and other
>>> intellectual property rights inherent in such information.
>>>
>>> _______________________________________________
>>> cdi-dev mailing list
>>> cdi-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>
>>> Note that for all code provided on this list, the provider licenses the
>>> code under the Apache License, Version 2 (
>>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>>> provided on this list, the provider waives all patent and other
>>> intellectual property rights inherent in such information.
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses the
>> code under the Apache License, Version 2 (
>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>> provided on this list, the provider waives all patent and other
>> intellectual property rights inherent in such information.
>>
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses the
>> code under the Apache License, Version 2 (
>>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
>> provided on this list, the provider waives all patent and other
>> intellectual property rights inherent in such information.
>>
>
>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>
> Note that for all code provided on this list, the provider licenses the
> code under the Apache License, Version 2 (
>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
> provided on this list, the provider waives all patent and other
> intellectual property rights inherent in such information.
>
_______________________________________________
cdi-dev mailing list
cdi-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/cdi-dev
Note that for all code provided on this list, the provider licenses the
code under the Apache License, Version 2 (
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
provided on this list, the provider waives all patent and other
intellectual property rights inherent in such information.