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

Reply via email to