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

Reply via email to