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 > > > > > > > > > > > > >>>> > > > > > > > > > > > > > >>>> > > > > > > > > > > > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >