Not sure what you mean, Seam works on all app servers AFAIK.  It may be EOL
but it's portable across app servers.


On Mon, Apr 8, 2013 at 11:20 AM, Romain Manni-Bucau
<rmannibu...@gmail.com>wrote:

> Seam.is not portable at all....
> Le 8 avr. 2013 16:58, "John D. Ament" <john.d.am...@gmail.com> a écrit :
>
> > Antoine,
> >
> > Difference with seam 3 is that it's a portable CDI extension that
> provides
> > the injection.  It's not a container (e.g. no additional compilation or
> > runtime dependency) provided solution.  So it's clear to you (and through
> > tooling) how the injection occurs.
> >
> > Actually the null proxy is pretty much the norm in these cases.  It's not
> > defined what should be injected here.
> >
> > John
> >
> >
> > On Mon, Apr 8, 2013 at 10:53 AM, Antoine Reilles
> > <areilles+to...@gmail.com>wrote:
> >
> > > I agree this unportable behavior should be documented, since it will
> tie
> > to
> > > a particular runtime (which is exactly what is done for seam3
> > >
> > >
> >
> http://docs.jboss.org/seam/3/servlet/latest/reference/en-US/html/injectablerefs.html
> > > ).
> > >
> > > I'm actually trying to replicate with tomee something I had done with
> > > jersey on a previous version of our product: the runtime now mandates
> > > tomee, where is was plain tomcat before; those two don't mix very
> > happily.
> > > I' m trying to inject to services that need it a handle to a database,
> > and
> > > manage transactions on request boundaries using the response status:
> read
> > > only transaction is initialized for GET requests, UPDATE for POST/PUT,
> > and
> > > the transaction is committed or aborted depending on the http status,
> the
> > > resources being properly reclaimed at request completion. Another use
> > case
> > > is to configure a logger using information from the request.
> > >
> > > I can probably simply reach my goal by passing the @context injected
> > > information from the jax-rs endpoint to the CDI bean for each request,
> > > using something like
> > >
> > > @Path
> > > public String service(@Context HttpServletRequest request, @Context
> > > HttpServletReponse) {
> > >   mybean.initWith(request, response);
> > >   ...
> > > }
> > > and have all users do that.
> > > In any case, @Context annontated fields in cdi beans should either
> > recieve
> > > the jax-rs values (with proper documentation of non portability), or
> > simply
> > > be left null, but not get a proxy to a null object
> > >
> > > Best regards,
> > > antoine
> > >
> > >
> > > On Mon, Apr 8, 2013 at 4:09 PM, John D. Ament <john.d.am...@gmail.com
> > > >wrote:
> > >
> > > > Problem here is that maybe only the dev system is TomEE.  Maybe
> > > production
> > > > is another app server.  If you do something like this, it may become
> > > > difficult to debug.  At a bare minimum it should be documented that
> > > TomEE+
> > > > has this non-spec mandated injection target created for CDI beans
> that
> > > > users may use at their own will but is not considered portable.
> > > >
> > > > If the docs are in a repo somewhere I can send a pull request for the
> > > > change.
> > > >
> > > >
> > > > On Mon, Apr 8, 2013 at 10:02 AM, Romain Manni-Bucau
> > > > <rmannibu...@gmail.com>wrote:
> > > >
> > > > > @john: yep, here i think offering the feature costs nothing for us
> > and
> > > > > helps the user to don't care about the spec. Implementing 100% the
> > > specs
> > > > > with their spirits sometimes make the container not usable ;). And
> > once
> > > > > again the spec never said it was not available for CDI beans, the
> > spec
> > > > > states it is available for resource beans and as others @resource
> are
> > > > > available for cdi beans it seems consistent to offer it for me
> > > > >
> > > > > *Romain Manni-Bucau*
> > > > > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> > > > > *Blog: **http://rmannibucau.wordpress.com/*<
> > > > > http://rmannibucau.wordpress.com/>
> > > > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> > > > > *Github: https://github.com/rmannibucau*
> > > > >
> > > > >
> > > > >
> > > > > 2013/4/8 John D. Ament <john.d.am...@gmail.com>
> > > > >
> > > > > > Not from TomEE examples, but by understanding the JAX-RS spec a
> > > little
> > > > > bit.
> > > > > >
> > > > > > I think (IMHO) sometimes as open source programmers we jump
> quickly
> > > on
> > > > > the
> > > > > > "OMG someone found an issue I can fix" before we think "is this
> > > really
> > > > an
> > > > > > issue with the product or a limitation of the spec that the
> product
> > > > > > implements?"  (not anything against Romain mind you)
> > > > > >
> > > > > >
> > > > > > On Mon, Apr 8, 2013 at 9:53 AM, Howard W. Smith, Jr. <
> > > > > > smithh032...@gmail.com
> > > > > > > wrote:
> > > > > >
> > > > > > > Ditto ( +1 ) and +1 this topic/thread and the responses.
> > > Definitely,
> > > > > good
> > > > > > > to know as I am hoping to use (REST) web services via TomEE,
> > ASAP.
> > > > > > >
> > > > > > > Could this question/issue have been avoided after
> > reading/reviewing
> > > > > TomEE
> > > > > > > documentation/examples?
> > > > > > >
> > > > > > >
> > > > > > > On Mon, Apr 8, 2013 at 9:30 AM, Romain Manni-Bucau <
> > > > > > rmannibu...@gmail.com
> > > > > > > >wrote:
> > > > > > >
> > > > > > > > yep +1
> > > > > > > >
> > > > > > > > *Romain Manni-Bucau*
> > > > > > > > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> > > > > > > > *Blog: **http://rmannibucau.wordpress.com/*<
> > > > > > > > http://rmannibucau.wordpress.com/>
> > > > > > > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> > > > > > > > *Github: https://github.com/rmannibucau*
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > 2013/4/8 John D. Ament <john.d.am...@gmail.com>
> > > > > > > >
> > > > > > > > > Right, but it's still a server specific solution.  Not a
> > > portable
> > > > > > > > solution.
> > > > > > > > >  The use of @Context in a CDI is especially bad since only
> > > > @Inject
> > > > > > and
> > > > > > > > @EJB
> > > > > > > > > type injection is meant to work.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Mon, Apr 8, 2013 at 9:01 AM, Romain Manni-Bucau <
> > > > > > > > rmannibu...@gmail.com
> > > > > > > > > >wrote:
> > > > > > > > >
> > > > > > > > > > but now it works (and that's not forbidden by the spec
> > > AFAIK).
> > > > DS
> > > > > > > > doesn't
> > > > > > > > > > have it ATM. The best alternative today is a web filter
> + a
> > > > > > > threadlocal
> > > > > > > > > > IMO.
> > > > > > > > > >
> > > > > > > > > > what is common is to get it from the rest endpoints then
> > > > > propagate
> > > > > > it
> > > > > > > > to
> > > > > > > > > > cdi beans
> > > > > > > > > >
> > > > > > > > > > all depends on your model
> > > > > > > > > >
> > > > > > > > > > *Romain Manni-Bucau*
> > > > > > > > > > *Twitter: @rmannibucau <https://twitter.com/rmannibucau
> >*
> > > > > > > > > > *Blog: **http://rmannibucau.wordpress.com/*<
> > > > > > > > > > http://rmannibucau.wordpress.com/>
> > > > > > > > > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> > > > > > > > > > *Github: https://github.com/rmannibucau*
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > 2013/4/8 John D. Ament <john.d.am...@gmail.com>
> > > > > > > > > >
> > > > > > > > > > > Sorry , just noticed this was on the list twice.
> > > > > > > > > > >
> > > > > > > > > > > I believe this change actually violates the JAX-RS 1.1
> > > spec,
> > > > > see
> > > > > > > > here:
> > > > > > > > > > >
> > > > > > >
> > > http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-520005
> > > > > > > > > > >
> > > > > > > > > > > JAX-RS provides facilities for obtaining and processing
> > > > > > information
> > > > > > > > > about
> > > > > > > > > > > the application deployment context and the context of
> > > > > individual
> > > > > > > > > > requests.
> > > > > > > > > > > Such information is available to Application subclasses
> > > (see
> > > > > > > section
> > > > > > > > > > > 2.1<
> > > > > > > > > >
> > > > > > >
> > > >
> http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-110002.1
> > > > > > > > > > > >),
> > > > > > > > > > > root resource classes (see chapter
> > > > > > > > > > > 3<
> > > > > > > >
> > > > http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-180003
> > > > > > > > > >),
> > > > > > > > > > > and providers (see chapter
> > > > > > > > > > > 4<
> > > > > > > >
> > > > http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-390004
> > > > > > > > > >).
> > > > > > > > > > > This chapter describes these facilities.
> > > > > > > > > > >
> > > > > > > > > > > CDI beans are none of those.
> > > > > > > > > > >
> > > > > > > > > > > John
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Mon, Apr 8, 2013 at 3:48 AM, Romain Manni-Bucau <
> > > > > > > > > > rmannibu...@gmail.com
> > > > > > > > > > > >wrote:
> > > > > > > > > > >
> > > > > > > > > > > > https://issues.apache.org/jira/browse/TOMEE-888
> > > > > > > > > > > >
> > > > > > > > > > > > done ;)
> > > > > > > > > > > >
> > > > > > > > > > > > *Romain Manni-Bucau*
> > > > > > > > > > > > *Twitter: @rmannibucau <
> > https://twitter.com/rmannibucau
> > > >*
> > > > > > > > > > > > *Blog: **http://rmannibucau.wordpress.com/*<
> > > > > > > > > > > > http://rmannibucau.wordpress.com/>
> > > > > > > > > > > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> > > > > > > > > > > > *Github: https://github.com/rmannibucau*
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > 2013/4/8 Romain Manni-Bucau <rmannibu...@gmail.com>
> > > > > > > > > > > >
> > > > > > > > > > > > > ok,
> > > > > > > > > > > > >
> > > > > > > > > > > > > the issue is the @Context resources are basically
> > only
> > > > > > > available
> > > > > > > > > for
> > > > > > > > > > > rest
> > > > > > > > > > > > > endpoints ATM
> > > > > > > > > > > > >
> > > > > > > > > > > > > i'll dig to see if we can make it available to cdi
> > > beans
> > > > > > > without
> > > > > > > > > > > getting
> > > > > > > > > > > > a
> > > > > > > > > > > > > big extra cost
> > > > > > > > > > > > >
> > > > > > > > > > > > > *Romain Manni-Bucau*
> > > > > > > > > > > > > *Twitter: @rmannibucau <
> > > https://twitter.com/rmannibucau
> > > > >*
> > > > > > > > > > > > > *Blog: **http://rmannibucau.wordpress.com/*<
> > > > > > > > > > > > http://rmannibucau.wordpress.com/>
> > > > > > > > > > > > > *LinkedIn: **
> http://fr.linkedin.com/in/rmannibucau*
> > > > > > > > > > > > > *Github: https://github.com/rmannibucau*
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > 2013/4/8 Romain Manni-Bucau <rmannibu...@gmail.com
> >
> > > > > > > > > > > > >
> > > > > > > > > > > > >> Think i know, can you try ServletRequest instead
> of
> > > > > > > > > > httpservletrequest
> > > > > > > > > > > > >> please (ill get a computer in 1h to go further)
> > > > > > > > > > > > >> Le 8 avr. 2013 08:13, "Antoine Reilles" <
> > > > > > > > areilles+to...@gmail.com
> > > > > > > > > >
> > > > > > > > > > a
> > > > > > > > > > > > >> écrit :
> > > > > > > > > > > > >>
> > > > > > > > > > > > >>  Sure, here is the war I used, with its sources.
> > > > > > > > > > > > >>> I tried to get the sample minimalist, so it
> almost
> > > only
> > > > > > > > performs
> > > > > > > > > > > > >>> System.out traces.
> > > > > > > > > > > > >>>
> > > > > > > > > > > > >>> On Mon, Apr 8, 2013 at 7:58 AM, Romain
> Manni-Bucau
> > <
> > > > > > > > > > > > >>> rmannibu...@gmail.com> wrote:
> > > > > > > > > > > > >>>
> > > > > > > > > > > > >>>> Hi
> > > > > > > > > > > > >>>>
> > > > > > > > > > > > >>>> You seem to have a sample project, can you share
> > it
> > > or
> > > > > the
> > > > > > > war
> > > > > > > > > > > > >>>> associated
> > > > > > > > > > > > >>>> please?
> > > > > > > > > > > > >>>> Le 8 avr. 2013 07:55, "Antoine Reilles" <
> > > > > > > > > areilles+to...@gmail.com
> > > > > > > > > > >
> > > > > > > > > > > a
> > > > > > > > > > > > >>>> écrit :
> > > > > > > > > > > > >>>>
> > > > > > > > > > > > >>>> > Hi,
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > I'm running into issues when defining a
> > > > RequestScoped
> > > > > > CDI
> > > > > > > > bean
> > > > > > > > > > to
> > > > > > > > > > > be
> > > > > > > > > > > > >>>> > injected in a jax-rs service, and initialized
> > with
> > > > > > > > information
> > > > > > > > > > > from
> > > > > > > > > > > > >>>> the
> > > > > > > > > > > > >>>> > http request.
> > > > > > > > > > > > >>>> > My first problem is that the @Context
> > > > > HttpServletRequest
> > > > > > > > that
> > > > > > > > > > gets
> > > > > > > > > > > > >>>> injected
> > > > > > > > > > > > >>>> > in the CDI bean is invalid (the threadlocal
> > proxy
> > > > > points
> > > > > > > to
> > > > > > > > > > null,
> > > > > > > > > > > > thus
> > > > > > > > > > > > >>>> > raising NPE when a method is called on the
> > object)
> > > > > > > whenever
> > > > > > > > > the
> > > > > > > > > > > same
> > > > > > > > > > > > >>>> > @Context HttpServletRequest is not injected in
> > the
> > > > > > jax-rs
> > > > > > > > > > context.
> > > > > > > > > > > > If
> > > > > > > > > > > > >>>> the
> > > > > > > > > > > > >>>> > servletrequest in injected in the jax-rs
> > endpoint,
> > > > > then
> > > > > > it
> > > > > > > > is
> > > > > > > > > > > > properly
> > > > > > > > > > > > >>>> > available from the CDI bean.
> > > > > > > > > > > > >>>> > The second issue I have is that injecting the
> > > > > > > > > > HttpServletResponse
> > > > > > > > > > > in
> > > > > > > > > > > > >>>> the
> > > > > > > > > > > > >>>> > CDI bean makes it available with the same
> > > > limitations
> > > > > as
> > > > > > > the
> > > > > > > > > > > > >>>> > HttpServletRequest, but it is no more
> available
> > > > > (again,
> > > > > > a
> > > > > > > > > thread
> > > > > > > > > > > > local
> > > > > > > > > > > > >>>> > proxy pointing to null) in the @PreDestroy
> > method
> > > of
> > > > > the
> > > > > > > CDI
> > > > > > > > > > bean.
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > Here are samples of what I used to test, I can
> > > > > provide a
> > > > > > > > > > complete
> > > > > > > > > > > > >>>> sample if
> > > > > > > > > > > > >>>> > it is useful.
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > The service is simply:
> > > > > > > > > > > > >>>> > @Path("service")
> > > > > > > > > > > > >>>> > @Produces(MediaType.TEXT_PLAIN)
> > > > > > > > > > > > >>>> > public class Service {
> > > > > > > > > > > > >>>> >   @Context HttpServletRequest request;
> > > > > > > > > > > > >>>> >   @Context HttpServletResponse response;
> > > > > > > > > > > > >>>> >   @Inject Ctx ctx;
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> >   @GET
> > > > > > > > > > > > >>>> >   public String foo() {
> > > > > > > > > > > > >>>> >     return "foo: "+ctx;
> > > > > > > > > > > > >>>> >   }
> > > > > > > > > > > > >>>> > }
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > with the two @Context annotated fields
> > triggering
> > > > > > > different
> > > > > > > > > > > behavior
> > > > > > > > > > > > >>>> in the
> > > > > > > > > > > > >>>> > CDI bean when commented out.
> > > > > > > > > > > > >>>> > The CDI bean itself is:
> > > > > > > > > > > > >>>> > @RequestScoped
> > > > > > > > > > > > >>>> > public class Ctx {
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> >   @Context HttpServletRequest request;
> > > > > > > > > > > > >>>> >   @Context HttpServletResponse response;
> > > > > > > > > > > > >>>> >   private String requesturi;
> > > > > > > > > > > > >>>> >   Ctx() {
> > > > > > > > > > > > >>>> >     requesturi = null;
> > > > > > > > > > > > >>>> >   }
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> >   @PostConstruct
> > > > > > > > > > > > >>>> >   public void postConstruct() {
> > > > > > > > > > > > >>>> >     ServletRequest localreq =
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>>
> > > > > > > > > > > >
> > > > > > > > >
> > > > > >
> > > ((org.apache.openejb.rest.ThreadLocalHttpServletRequest)request).get();
> > > > > > > > > > > > >>>> >     if (null == localreq) {
> > > > > > > > > > > > >>>> >       System.out.println("null request
> > injected");
> > > > > > > > > > > > >>>> >     } else {
> > > > > > > > > > > > >>>> >       requesturi = request.getRequestURI();
> > > > > > > > > > > > >>>> >     }
> > > > > > > > > > > > >>>> >     System.out.println("Ctx
> > > @PostConstruct:"+this);
> > > > > > > > > > > > >>>> >     ServletResponse localResp =
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>>
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > ((org.apache.openejb.rest.ThreadLocalHttpServletResponse)response).get();
> > > > > > > > > > > > >>>> >     if (null == localResp) {
> > > > > > > > > > > > >>>> >       System.out.println("null response
> > > injected");
> > > > > > > > > > > > >>>> >     } else {
> > > > > > > > > > > > >>>> >       System.out.println("Ctx @PostConstruct
> > > > Response:
> > > > > > > > > > > > >>>> > "+response.getStatus());
> > > > > > > > > > > > >>>> >     }
> > > > > > > > > > > > >>>> >   }
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> >   @PreDestroy
> > > > > > > > > > > > >>>> >   public void preDestroy() {
> > > > > > > > > > > > >>>> >     System.out.println("Ctx
> @PreDestroy:"+this);
> > > > > > > > > > > > >>>> >     ServletResponse localResp =
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>>
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > ((org.apache.openejb.rest.ThreadLocalHttpServletResponse)response).get();
> > > > > > > > > > > > >>>> >     if (null == localResp) {
> > > > > > > > > > > > >>>> >       System.out.println("null response
> injected
> > > at
> > > > > > > > > > preDestroy");
> > > > > > > > > > > > >>>> >     } else {
> > > > > > > > > > > > >>>> >       System.out.println("Ctx @PreDestroy
> > > Response:
> > > > > > > > > > > > >>>> > "+response.getStatus());
> > > > > > > > > > > > >>>> >     }
> > > > > > > > > > > > >>>> >   }
> > > > > > > > > > > > >>>> > }
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > I had to resort to casts to
> > > > > > ThreadLocalHttpServletRequest
> > > > > > > to
> > > > > > > > > > test
> > > > > > > > > > > > the
> > > > > > > > > > > > >>>> > injected proxies, since calling any method on
> a
> > > > proxy
> > > > > > > > pointing
> > > > > > > > > > > null
> > > > > > > > > > > > >>>> > triggers an NPE, to display traces.
> > > > > > > > > > > > >>>> > When the two @Context annotated fields are
> > present
> > > > in
> > > > > > the
> > > > > > > > > > Service
> > > > > > > > > > > > >>>> class, I
> > > > > > > > > > > > >>>> > do get traces like this:
> > > > > > > > > > > > >>>> > Ctx @PostConstruct:Ctx: service
> > > > > > > > > > > > >>>> > Ctx @PostConstruct Response: 200
> > > > > > > > > > > > >>>> > Ctx @PreDestroy:Ctx: service
> > > > > > > > > > > > >>>> > null response injected at preDestroy
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > and when the two fields are commented out in
> the
> > > > > Service
> > > > > > > > > class,
> > > > > > > > > > > the
> > > > > > > > > > > > >>>> traces
> > > > > > > > > > > > >>>> > are:
> > > > > > > > > > > > >>>> > null request injected
> > > > > > > > > > > > >>>> > Ctx @PostConstruct:Ctx: null
> > > > > > > > > > > > >>>> > null response injected
> > > > > > > > > > > > >>>> > Ctx @PreDestroy:Ctx: null
> > > > > > > > > > > > >>>> > null response injected at preDestroy
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > I tested this behavior with 1.5.1, 1.5.2 and
> > > todays
> > > > > > 1.6.0
> > > > > > > > > > > snapshot,
> > > > > > > > > > > > >>>> and got
> > > > > > > > > > > > >>>> > the very same behavior.
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > Any suggestions on how I could make this work
> ?
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>> > Best regards,
> > > > > > > > > > > > >>>> > antoine
> > > > > > > > > > > > >>>> >
> > > > > > > > > > > > >>>>
> > > > > > > > > > > > >>>
> > > > > > > > > > > > >>>
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to