cool, txs! Will review those 2 new modules (bv + servlet) later today.
LieGrue, strub ----- Original Message ----- > From: Christian Kaltepoth <christ...@kaltepoth.de> > To: dev@deltaspike.apache.org > Cc: > Sent: Thursday, 13 June 2013, 7:09 > Subject: Re: Servlet module prototype > > I just pushed the code upstream. > > I'll close the issues I created for tracking the basic requirements for the > module. We can then create new ones for everything we want to implement on > top of that. > > > > > 2013/6/11 John D. Ament <john.d.am...@gmail.com> > >> +1 as well, looks good to me. >> >> >> On Tue, Jun 11, 2013 at 12:12 PM, Mark Struberg <strub...@yahoo.de> > wrote: >> >> > +1 let's move forward! >> > >> > Otherwise we will spend way too much time with discussions and too > less >> > with productive hacking ;) >> > >> > LieGrue, >> > strub >> > >> > >> > >> > >> > ----- Original Message ----- >> > > From: Christian Kaltepoth <christ...@kaltepoth.de> >> > > To: dev@deltaspike.apache.org >> > > Cc: >> > > Sent: Tuesday, 11 June 2013, 17:29 >> > > Subject: Re: Servlet module prototype >> > > >> > > Hey all, >> > > >> > > I finished the modifications I proposed in my last mail. The code > is >> now >> > > split up into different filters and listeners for each job. I > think >> this >> > > makes the code much cleaner an maintainable. You can have a look > at the >> > > branch here: >> > > >> > > https://github.com/chkal/deltaspike/tree/servlet >> > > >> > > Especially this package: >> > > >> > > >> > >> > https://github.com/chkal/deltaspike/tree/servlet/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl >> > > >> > > For now I registered all the listeners in web-fragment.xml: >> > > >> > > >> > >> > https://github.com/chkal/deltaspike/blob/servlet/deltaspike/modules/servlet/impl/src/main/resources/META-INF/web-fragment.xml >> > > >> > > If you all agree, I could rebase and merge the current state into > the >> > > Apache repository. >> > > >> > > After I merged it, we could discuss how to implement ways to > disable >> > parts >> > > of the functionality. Either by implementing a dynamic > registration >> using >> > > ServletInitializers or by using Deactivatable. >> > > >> > > What do you think? >> > > >> > > Christian >> > > >> > > >> > > >> > > 2013/6/8 Christian Kaltepoth <christ...@kaltepoth.de> >> > > >> > >> Hey John, >> > >> >> > >> thank you very much for sharing your thoughts on this. It is > very >> > >> interesting for me to hear about the feedback your got from > Solder >> > users. >> > >> And I think we should definitely address the issues you > pointed out. >> > >> >> > >> So my idea would be the following. I could start separating > the >> filter >> > and >> > >> the listeners into distinct classes with explicit functions. > For >> > example >> > >> one filter for managing everything that is required for the > injection >> > of >> > >> servlet objects and one filter for sending the events. >> > >> >> > >> After I'm done with this and if everybody agrees on the > new >> structure, >> > > I >> > >> could merge the current state into the main repository. > After that we >> > could >> > >> think about and work on an approach to partially disable >> functionality >> > >> which should be easy to implement with this new structure. >> > >> >> > >> What do you think? >> > >> >> > >> >> > >> >> > >> >> > >> 2013/6/7 John D. Ament <john.d.am...@gmail.com> >> > >> >> > >> Hi Christian, >> > >>> >> > >>> Actually I was going to respond this morning but got > side tracked. >> > >>> >> > >>> Anyways, I agree that the servlet module needs to > provide all of >> this >> > >>> functionality, however I think we need to make sure that > it's more >> > >>> scalable >> > >>> than the way this worked in solder/seam3. The biggest > gripe I hear >> > > from >> > >>> people about seam3 was that it was all or nothing. It > was difficult >> > to >> > >>> activate only portions of the functionality. I think we > started to >> do >> > >>> that >> > >>> in DS with the deactivateable function but there are > certain places >> > > where >> > >>> it makes sense to deactivate in other ways. >> > >>> >> > >>> What I'm suggesting is that we: >> > >>> >> > >>> 1. Separate the listeners out - can we have two > listeners, one for >> the >> > >>> context listener and one for the session listener. >> > >>> 2. Come up with some way that the filters can be more > manageable. >> For >> > >>> example, maybe I'm only interested in request, not > response. Maybe >> > > I only >> > >>> want Initialized and not Destroyed. This way we > don't have to fire >> > > the >> > >>> event every single request. This is probably a good > case for >> > >>> deactivatable, but more at the class feature level. >> > >>> 3. Come up with a way to make this not automatically > installed, even >> > if >> > >>> you >> > >>> include the servlet module in your archive. if metadata > complete is >> > > the >> > >>> best option, we should just document the use of metadata > complete to >> > >>> disable the installation. >> > >>> >> > >>> John >> > >>> >> > >>> >> > >>> On Fri, Jun 7, 2013 at 11:23 AM, Christian Kaltepoth > < >> > >>> christ...@kaltepoth.de >> > >>> > wrote: >> > >>> >> > >>> > Sorry, I think my mail wasn't very clear. Sorry > for the >> > > confusion. :) >> > >>> > >> > >>> > The servlet module provides two features: the > injection of servlet >> > >>> objects >> > >>> > and the propagation of servlet events. It makes > sense that the >> > > request >> > >>> > events can be disabled. But IMHO the producers that > allow >> > > injection of >> > >>> > servlet objects is a fundamental feature of the > servlet module >> > > without >> > >>> any >> > >>> > performance overhead and should therefore not be > deactivateable. >> > >>> > >> > >>> > The filter implemented in the servlet modules does > two things: >> > >>> > >> > >>> > - It stores the request and the response in a > ThreadLocal. The >> > >>> producer >> > >>> > methods use this ThreadLocal to access the > request/response. So >> > > the >> > >>> > request/response injection requires this filter > to work >> > > correctly. >> > >>> > - The filter also propagates the servlet events > to the CDI >> > > event bus. >> > >>> > This is something that should be deactivatable. >> > >>> > >> > >>> > The same applies to things like the > ServletContextListener. This >> > > one >> > >>> stores >> > >>> > the ServletContext in a map for each context class > loader and it >> > > sends >> > >>> the >> > >>> > events for it's construction and destruction to > the event bus, >> > > while >> > >>> only >> > >>> > the latter one should be deactivateable. >> > >>> > >> > >>> > What I wanted to say in my previous mail is that we > cannot use a >> > >>> > ServletContainerInitializer >> > >>> > which register the filter only if the servlet > events are not >> > > disabled, >> > >>> > because this would not only disable the servlet > events but also >> > > break >> > >>> the >> > >>> > injection of the request/response into CDI beans. >> > >>> > >> > >>> > So I think it would make sense to always register > the filter using >> > >>> > web-fragment.xml. Additionally we could control if > the events are >> > > fired >> > >>> or >> > >>> > not using the config resolver approach that you > talked about. But >> > > the >> > >>> > ThreadLocal management should always be active so > that the >> > > injection of >> > >>> > request/response works like expected. >> > >>> > >> > >>> > To sum it up: IMHO we will _always_ need the > filters and the >> > > listeners >> > >>> in >> > >>> > the servlet module, but we should allow to disable > certain parts >> > > of >> > >>> their >> > >>> > functionality. >> > >>> > >> > >>> > I hope this makes everything a bit clearer. :) >> > >>> > >> > >>> > Christian >> > >>> > >> > >>> > >> > >>> > >> > >>> > >> > >>> > 2013/6/7 Romain Manni-Bucau > <rmannibu...@gmail.com> >> > >>> > >> > >>> > > If a user deactivate it it means it > doesn't it the >> > > feature so no need >> > >>> of >> > >>> > > any thread local. If a module needs it it can > just override >> > > the >> > >>> > > configuration to force it (through config > resolver) so i >> > > still think >> > >>> my >> > >>> > > proposal was possible and better than having > it always on (if >> > > i missed >> > >>> > sthg >> > >>> > > just push a bit more your explanations > please). >> > >>> > > >> > >>> > > *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/6/7 Christian Kaltepoth > <christ...@kaltepoth.de> >> > >>> > > >> > >>> > > > @Romain: >> > >>> > > > >> > >>> > > > The filter and the listeners do not only > send the events >> > > but also >> > >>> > manage >> > >>> > > > the ThreadLocals required for the > producers. So >> > > currently it is >> > >>> > required >> > >>> > > to >> > >>> > > > have the filter and the listeners > configured for the >> > > injection to >> > >>> work. >> > >>> > > > That's why I think that it makes > sense to always >> > > have the filter and >> > >>> > > > listeners in place and just don't > send the events if >> > > the user >> > >>> disabled >> > >>> > > > them. And of cause one could use > ConfigResolver for >> > > that. >> > >>> > > > >> > >>> > > > @Mark: >> > >>> > > > >> > >>> > > > So you say that firing events is > expensive even if there >> > > are no >> > >>> > observers >> > >>> > > > listening? >> > >>> > > > >> > >>> > > > Generally I like the idea of having > DeltaSpike >> > > automatically detect >> > >>> > that >> > >>> > > > certain features can be disabled because > they are not >> > > used. So if >> > >>> > nobody >> > >>> > > > listens for servlet events, the filter > could simply >> > > never send them. >> > >>> > > > >> > >>> > > > >> > >>> > > > >> > >>> > > > >> > >>> > > > 2013/6/7 Gerhard Petracek >> > > <gerhard.petra...@gmail.com> >> > >>> > > > >> > >>> > > > > the general jira-issue for it is > [1]. >> > >>> > > > > >> > >>> > > > > regards, >> > >>> > > > > gerhard >> > >>> > > > > >> > >>> > > > > [1] >> > > https://issues.apache.org/jira/browse/DELTASPIKE-349 >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > 2013/6/7 Mark Struberg > <strub...@yahoo.de> >> > >>> > > > > >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > > > Gerhard and me thought about > this for quite a >> > > few other >> > >>> features as >> > >>> > > > well. >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > > > Event firing is indeed a bit > expensive. Thus >> > > we might add a >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > > > Map<Class<? extends > Deactivatable> >> > > /*the 'feature'*/, >> > >>> Set<Class<?>> >> > >>> > > > > > /*types which get observed*/ >> > >>> > > > > > >> > >>> > > > > > and utilize @Observes > ProcessObserverMethod to >> > > check whether >> > >>> there >> > >>> > > is a >> > >>> > > > > > need to activate this feature > at all. >> > >>> > > > > > >> > >>> > > > > > In short: if there is no > ObserverMethod which >> > > @Observes ? >> > >>> extends >> > >>> > > > > > ServletResponse or > ServletResponse then we >> > > don't need to fire >> > >>> any >> > >>> > CDI >> > >>> > > > > > event. Not sure if this is > needed though or >> > > whether the >> > >>> Containers >> > >>> > > are >> > >>> > > > > > smart enough to optimize this > away themselfs >> > > (with a negative >> > >>> cache >> > >>> > > > kind >> > >>> > > > > of >> > >>> > > > > > thingy). >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > > > LieGrue, >> > >>> > > > > > strub >> > >>> > > > > > >> > >>> > > > > > >> ________________________________ >> > >>> > > > > > > From: Christian Kaltepoth >> > > <christ...@kaltepoth.de> >> > >>> > > > > > >To: > dev@deltaspike.apache.org >> > >>> > > > > > >Cc: Mark Struberg >> > > <strub...@yahoo.de> >> > >>> > > > > > >Sent: Friday, 7 June 2013, > 8:22 >> > >>> > > > > > >Subject: Re: Servlet module > prototype >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > >I think Nicklas and John > fear that firing >> > > events for each >> > >>> > > > > > request/response could lead to > performance >> > > issues!?! >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > >But I'm not sure if > there will be a >> > > noticeable performance >> > >>> impact >> > >>> > if >> > >>> > > > > > there are no observers for the > events. I >> > > don't think that >> > >>> firing an >> > >>> > > > event >> > >>> > > > > > that nobody observes is > expensive. >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > >And I also think that > Solder didn't >> > > provide any way to disable >> > >>> > these >> > >>> > > > > > events (correct me if I'm > wrong). Or has >> > > there been any reports >> > >>> > > > regarding >> > >>> > > > > > Solder's performance? >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > >2013/6/7 Romain Manni-Bucau >> > > <rmannibu...@gmail.com> >> > >>> > > > > > > >> > >>> > > > > > >Hi >> > >>> > > > > > >> >> > >>> > > > > > >>in fact i don't get > why you would >> > > like to be able to >> > >>> deactivate >> > >>> > it. >> > >>> > > > > > >>Basically it is a web > *module* so if >> > > it is here it is either >> > >>> > needed >> > >>> > > > by >> > >>> > > > > a >> > >>> > > > > > >>dep or you explicitely > imported it so >> > > you want it. So >> > >>> basically a >> > >>> > > > > > >>configurable (through > ConfigResolver) >> > >>> ServletContainerInitializer >> > >>> > > is >> > >>> > > > > just >> > >>> > > > > > >>what we need to be able > to deactivate >> > > not needed listeners. >> > >>> Other >> > >>> > > > > config >> > >>> > > > > > >>can break modules > relying on it so it >> > > could prevent lib to use >> > >>> > this >> > >>> > > > > > module. >> > >>> > > > > > >> >> > >>> > > > > > >>*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/6/7 Christian > Kaltepoth >> > > <christ...@kaltepoth.de> >> > >>> > > > > > >> >> > >>> > > > > > >>> The servlet module > doesn't >> > > work at all without the filter >> > >>> and >> > >>> > the >> > >>> > > > > > >>> listeners. So I > think it >> > > absolutely makes sense to include >> > >>> them >> > >>> > > in >> > >>> > > > a >> > >>> > > > > > >>> web-fragment.xml > inside the >> > > servlet-impl module. If >> > >>> something >> > >>> > > like >> > >>> > > > > > >>> filter/listener > ordering is an >> > > issue for users, they can >> > >>> still >> > >>> > > set >> > >>> > > > > > >>> > "metadata-complete" and >> > > manually add the required entries >> > >>> into >> > >>> > > > their >> > >>> > > > > > own >> > >>> > > > > > >>> web.xml. Or they > could use >> > > <absolute-ordering>. >> > >>> > > > > > >>> >> > >>> > > > > > >>> But I agree that > it should be >> > > possible to disable the events >> > >>> > (all >> > >>> > > > > > events or >> > >>> > > > > > >>> perhaps just the > request/response >> > > events?). The question is >> > >>> > which >> > >>> > > > way >> > >>> > > > > > the >> > >>> > > > > > >>> user should use to > configure >> > > this. Of cause we could also >> > >>> use a >> > >>> > > > > servlet >> > >>> > > > > > >>> context parameter. > Something >> > > like: >> > >>> > > > > > >>> >> > >>> > > > > > >>> > <context-param> >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > >> > > > <param-name>org.apache.deltaspike.DISABLE_SERVLET_EVENTS</param-name> >> > >>> > > > > > >>> >> > > <param-value>true</param-value> >> > >>> > > > > > >>> > </context-param> >> > >>> > > > > > >>> >> > >>> > > > > > >>> But DeltaSpike > already provides a >> > > mechanism for disabling >> > >>> > > features >> > >>> > > > > > which is >> > >>> > > > > > >>> part of the core > module and is >> > > already used in various other >> > >>> > > > places. >> > >>> > > > > > If we >> > >>> > > > > > >>> allow users to > deactivate >> > > features, we should be consistent >> > >>> in >> > >>> > > how >> > >>> > > > > > users >> > >>> > > > > > >>> can do it. >> > >>> > > > > > >>> >> > >>> > > > > > >>> Is it correct that > there is >> > > currently no implementation of >> > >>> > > > > > ClassDeactivator >> > >>> > > > > > >>> in DeltaSpike at > all? What about >> > > adding an implementation >> > >>> that >> > >>> > > uses >> > >>> > > > > > servlet >> > >>> > > > > > >>> context parameters > to the servlet >> > > module? Wouldn't this be a >> > >>> > nice >> > >>> > > > > > >>> enhancement? This > way users could >> > > either use "simple" >> > >>> servlet >> > >>> > > > context >> > >>> > > > > > >>> parameters or they > could use some >> > > other more flexible way if >> > >>> > they >> > >>> > > > > want >> > >>> > > > > > to. >> > >>> > > > > > >>> >> > >>> > > > > > >>> Christian >> > >>> > > > > > >>> >> > >>> > > > > > >>> >> > >>> > > > > > >>> >> > >>> > > > > > >>> >> > >>> > > > > > >>> 2013/6/6 John D. > Ament >> > > <john.d.am...@gmail.com> >> > >>> > > > > > >>> >> > >>> > > > > > >>> > What if the > web-fragment.xml >> > > were in a separate JAR? >> > >>> > > > > > >>> > Deactivatable > is a custom >> > > solution, I'd love to avoid >> > >>> using >> > >>> > it. >> > >>> > > > > > >>> > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> > On Thu, Jun > 6, 2013 at 11:03 >> > > AM, Christian Kaltepoth < >> > >>> > > > > > >>> > > christ...@kaltepoth.de >> > >>> > > > > > >>> > > wrote: >> > >>> > > > > > >>> > >> > >>> > > > > > >>> > > @John, > @Nicklas: >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > I agree > that it should >> > > be possible to disable the >> > >>> servlet >> > >>> > > > events. >> > >>> > > > > > But I >> > >>> > > > > > >>> > > think we > should >> > > automatically register the filter and >> > >>> the >> > >>> > > > > listeners >> > >>> > > > > > >>> using >> > >>> > > > > > >>> > > > web-fragment.xml >> > > because they are required for the >> > >>> > injection >> > >>> > > to >> > >>> > > > > > work >> > >>> > > > > > >>> > > > correctly. >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > > Isn't this a >> > > perfect use case for Deactivatable? We >> > >>> could >> > >>> > > > simply >> > >>> > > > > > >>> define a >> > >>> > > > > > >>> > > dummy > implementation of >> > > Deactivatable which can be used >> > >>> to >> > >>> > > > > disable >> > >>> > > > > > just >> > >>> > > > > > >>> > the >> > >>> > > > > > >>> > > events. > We already do >> > > something with GlobalAlternative: >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/apache/deltaspike/blob/master/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/GlobalAlternative.java#L26 >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/apache/deltaspike/blob/master/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/extension/ExcludeExtension.java#L91 >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > What > about this: >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > public > interface >> > > ServletEventBridge implements >> > >>> > > Deactivatable >> > >>> > > > { >> > >>> > > > > } >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > > Thoughts? >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > > Christian >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > 2013/6/6 > John D. Ament >> > > <john.d.am...@gmail.com> >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > > > > I'd prefer if >> > > we simply didn't include the >> > >>> > web-fragment.xml >> > >>> > > > and >> > >>> > > > > > >>> instead >> > >>> > > > > > >>> > > > > provided >> > > instructions on the wiki on how to enable >> > >>> them. >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > > On > Thu, Jun 6, >> > > 2013 at 4:37 AM, Nicklas Karlsson < >> > >>> > > > > > nicka...@gmail.com >> > >>> > > > > > >>> > >> > >>> > > > > > >>> > > > > wrote: >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > > >> I would also >> > > drop the @Web-annotation, I think. BTW, >> > >>> > can >> > >>> > > > the >> > >>> > > > > > >>> > > > >> >> > > request/reponse lifecycle events be disabled? I >> > >>> would >> > >>> > > > assume >> > >>> > > > > > that >> > >>> > > > > > >>> > there >> > >>> > > > > > >>> > > > is >> > >>> > > > > > >>> > > > >> a lot of >> > > firing going off for an ajax-application >> > >>> and >> > >>> > > they >> > >>> > > > > > >>> observers >> > >>> > > > > > >>> > > will >> > >>> > > > > > >>> > > > >> have to be >> > > resolved even if there are no >> > >>> observers(?) >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> On Thu, Jun >> > > 6, 2013 at 11:25 AM, Mark Struberg < >> > >>> > > > > > strub...@yahoo.de> >> > >>> > > > > > >>> > > > > wrote: >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> > Nice >> > > work! >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> > The @Web >> > > Qualifier looks a bit odd, but will turn >> > >>> out >> > >>> > > > into >> > >>> > > > > > the >> > >>> > > > > > >>> > > broader >> > >>> > > > > > >>> > > > >> > >> > > discussion about how to implement features which >> > >>> > might >> > >>> > > > get >> > >>> > > > > > >>> 'added' >> > >>> > > > > > >>> > in >> > >>> > > > > > >>> > > > >> > future >> > > specs. >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> > LieGrue, >> > >>> > > > > > >>> > > > >> > strub >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> > ----- >> > > Original Message ----- >> > >>> > > > > > >>> > > > >> > > >> > > From: Christian Kaltepoth < >> > >>> christ...@kaltepoth.de> >> > >>> > > > > > >>> > > > >> > > To: >> > > "deltaspike-...@incubator.apache.org" < >> > >>> > > > > > >>> > > > >> > >> > > deltaspike-...@incubator.apache.org> >> > >>> > > > > > >>> > > > >> > > Cc: >> > >>> > > > > > >>> > > > >> > > >> > > Sent: Thursday, 6 June 2013, 6:56 >> > >>> > > > > > >>> > > > >> > > >> > > Subject: Servlet module prototype >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > Hey >> > > all, >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > I >> > > spent some time working on a first version of >> > >>> the >> > >>> > > > > servlet >> > >>> > > > > > >>> > module. >> > >>> > > > > > >>> > > > All >> > >>> > > > > > >>> > > > >> > the >> > >>> > > > > > >>> > > > >> > > >> > > basic features are finished now and therefore I >> > >>> > think >> > >>> > > > its >> > >>> > > > > > time >> > >>> > > > > > >>> to >> > >>> > > > > > >>> > > ask >> > >>> > > > > > >>> > > > >> for >> > >>> > > > > > >>> > > > >> > > >> > > some feedback. >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > I >> > > pushed the code to the "servlet" branch on my >> > >>> > > github >> > >>> > > > > > repo: >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > >>> https://github.com/chkal/deltaspike/tree/servlet >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > The >> > > servlet module provides two major features: >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > * >> > > Injection of servlet various objects >> > >>> > > > > > >>> > > > >> > > * >> > > Servlet lifecycle events >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > The >> > > producers are using the qualifier @Web to >> > >>> avoid >> > >>> > > > > > conflicts >> > >>> > > > > > >>> > with >> > >>> > > > > > >>> > > > CDI >> > >>> > > > > > >>> > > > >> > 1.1. >> > >>> > > > > > >>> > > > >> > > We >> > > could discuss whether some other name for the >> > >>> > > > > qualifier >> > >>> > > > > > fits >> > >>> > > > > > >>> > > > > better. >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > See >> > > the following classes from the tests to get >> > >>> an >> > >>> > > idea >> > >>> > > > > of >> > >>> > > > > > what >> > >>> > > > > > >>> > can >> > >>> > > > > > >>> > > > be >> > >>> > > > > > >>> > > > >> > > >> > > injected: >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/chkal/deltaspike/blob/servlet/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/ServletObjectInjectionBean.java >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/chkal/deltaspike/blob/servlet/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/ServletContextInjectionTest.java >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > The >> > > lifecycle events are fired using the >> > >>> qualifiers >> > >>> > > > > > >>> @Initialized >> > >>> > > > > > >>> > or >> > >>> > > > > > >>> > > > >> > > >> > > @Destroyed just like in Seam Solder. I also >> > >>> added >> > >>> > the >> > >>> > > > > @Web >> > >>> > > > > > >>> > > > qualifier >> > >>> > > > > > >>> > > > to >> > >>> > > > > > >>> > > > >> > all >> > >>> > > > > > >>> > > > >> > > >> > > events, but we could discuss whether this is >> > >>> really >> > >>> > > > > > necessary. >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > The >> > > following classes show which events can be >> > >>> > > > observed: >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/chkal/deltaspike/blob/servlet/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/request/RequestResponseEventsObserver.java >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/chkal/deltaspike/blob/servlet/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/session/SessionEventsObserver.java >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > >> > >>> > > > > > >>> > > > >> >> > >>> > > > > > >>> > > > >> > >>> > > > > > >>> > > >> > >>> > > > > > >>> > >> > >>> > > > > > >>> >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> >> > > >> > >> > https://github.com/chkal/deltaspike/blob/servlet/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsObserver.java >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > One >> > > thing that I'm not quite happy with is the >> > >>> way >> > >>> > > the >> > >>> > > > > > >>> > > > ServletContext >> > >>> > > > > > >>> > > > >> > > >> > > injection works. I'm currently using a map that >> > >>> > > stores >> > >>> > > > > the >> > >>> > > > > > >>> > > > >> >> > > ServletContext >> > >>> > > > > > >>> > > > >> > > for >> > > each context class loader. IMHO this is >> > >>> better >> > >>> > > than >> > >>> > > > > > using >> > >>> > > > > > >>> > > > >> > > >> > > HttpServletRequest.getServletContext() as it >> > >>> also >> > >>> > > works >> > >>> > > > > for >> > >>> > > > > > >>> > threads >> > >>> > > > > > >>> > > > >> > outside >> > >>> > > > > > >>> > > > >> > > of >> > > a request (like schedulers for example). I >> > >>> also >> > >>> > > > wanted >> > >>> > > > > > to >> > >>> > > > > > >>> > avoid >> > >>> > > > > > >>> > > > >> using >> > >>> > > > > > >>> > > > >> > > the >> > > CDI application scope for storing the >> > >>> > > > ServletContext >> > >>> > > > > to >> > >>> > > > > > >>> avoid >> > >>> > > > > > >>> > > > >> > problems >> > >>> > > > > > >>> > > > >> > > >> > > regarding different implementations of the >> > >>> scope in >> > >>> > > > > regard >> > >>> > > > > > to >> > >>> > > > > > >>> EAR >> > >>> > > > > > >>> > > > >> > > >> > > packaging. I would be very interested in hearing >> > >>> > your >> > >>> > > > > > thoughts >> > >>> > > > > > >>> on >> > >>> > > > > > >>> > > > > this. >> > >>> > > > > > >>> > > > >> > :) >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > One >> > > other thing. As I currently don't use any >> > >>> > Servlet >> > >>> > > > 3.0 >> > >>> > > > > > >>> > features, >> > >>> > > > > > >>> > > > the >> > >>> > > > > > >>> > > > >> > > >> > > module depends on the Servlet 2.5 API. Do you >> > >>> think >> > >>> > > it >> > >>> > > > > > makes >> > >>> > > > > > >>> > sense >> > >>> > > > > > >>> > > to >> > >>> > > > > > >>> > > > >> > still >> > >>> > > > > > >>> > > > >> > > >> > > support Servlet 2.5 or should we require at >> > >>> least >> > >>> > > > Servlet >> > >>> > > > > > 3.0? >> > >>> > > > > > >>> > > > >> > > >> > >>> > > > > > >>> > > > >> > > >> > > Looking forward to your feedback. Especially I >> > >>> > would >> > >>> > > > like >> > >>> > > > > > to >> > >>> > > > > > >>> know >> > >>> > > > > > >>> > > if >> > >>> > > > > > >>> > > > >> you >> > >>> > > > > > >>> > > > >> > > >> > > think that the code should be merged into the >> > >>> > > upstream >> > >>> > > > > > >>> > repository. >> > >>> > > > > > >>> > > :) >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > > >> > >>> > > > >> > >>> > > > -- >> > >>> > > > Christian Kaltepoth >> > >>> > > > Blog: http://blog.kaltepoth.de/ >> > >>> > > > Twitter: http://twitter.com/chkal >> > >>> > > > GitHub: https://github.com/chkal >> > >>> > > > >> > >>> > > >> > >>> > >> > >>> > >> > >>> > >> > >>> > -- >> > >>> > Christian Kaltepoth >> > >>> > Blog: http://blog.kaltepoth.de/ >> > >>> > Twitter: http://twitter.com/chkal >> > >>> > GitHub: https://github.com/chkal >> > >>> > >> > >>> >> > >> >> > >> >> > >> >> > >> -- >> > >> Christian Kaltepoth >> > >> Blog: http://blog.kaltepoth.de/ >> > >> Twitter: http://twitter.com/chkal >> > >> GitHub: https://github.com/chkal >> > >> >> > >> >> > > >> > > >> > > -- >> > > Christian Kaltepoth >> > > Blog: http://blog.kaltepoth.de/ >> > > Twitter: http://twitter.com/chkal >> > > GitHub: https://github.com/chkal >> > > >> > >> > > > > -- > Christian Kaltepoth > Blog: http://blog.kaltepoth.de/ > Twitter: http://twitter.com/chkal > GitHub: https://github.com/chkal >