Mathias, me and Paul were discussing the future of this feature.  For the
most part we were in agreement.  I appreciate your input, but it did not
gain traction w/ anyone.  You then went ahead and committed a bunch of code.


IMO, you have not been a good team member today Bernd.  Please assign the
issue to yourself.

Thank you very much for your interest in getting us closer to a
1.2implementation.

Dennis Byrne

On 3/3/07, Bernd Bohmann <[EMAIL PROTECTED]> wrote:

??? Yes, I know it.

Dennis Byrne wrote:
> Are you under the impression that our 1.2 branch didn't already handle
> @PostConstruct and @PreDestroy?  Looks like the left hand doesn't know
what
> the right hand is doing here.
>
> Dennis Byrne
>
> On 3/3/07, Bernd Bohmann <[EMAIL PROTECTED]> wrote:
>>
>> Just added an implementation of the annotation handling based on the
>> tomcat implementation.
>>
>> Bernd
>>
>> Dennis Byrne wrote:
>> > I added a comment
>> >
>> http://blogs.sun.com/rlubke/entry/jsf_ri_1_2_and#comment-1172947192023.
>> >
>> > Two more ideas.  Ryan mentions applications using facelets, jsf 1.2and
>> > servlet 2.4.  Unless I'm missing something, there's one reason to use
>> > annotation.getName().equals("javax.annotation.PostConstruct") rather
>> than
>> > annotation.class == PostConstruct.class.  Also, the tomcat guys are
>> > processing annotations even when the method is marked private.
>> >
>> > Dennis Byrne
>> >
>> > On 3/3/07, Paul McMahan <[EMAIL PROTECTED]> wrote:
>> >>
>> >> OK, I think the RI also recently added the META-INF/services
>> >> technique.  But I don't know how reliable this sun blog entry is:
>> >>     http://tinyurl.com/yrrjs2
>> >>
>> >> Best wishes,
>> >> Paul
>> >>
>> >> On 3/2/07, Mathias Brökelmann <[EMAIL PROTECTED]> wrote:
>> >> > The RI uses two ways to lookup the implementation of the vendor
>> >> > specific implementation of the InjectionProvider. They first try
to
>> >> > use a web context init param and if that is not configured they
>> simply
>> >> > use a system property. Both keyed by the class name of the
>> >> > InjectionProvider interface.
>> >> >
>> >> > 2007/3/2, Paul McMahan <[EMAIL PROTECTED]>:
>> >> > > I think Mathias' suggestion is right on.  I haven't looked at
the
>> RI
>> >> > > code but I read somewhere that it passes the name of
>> >> > > InjectionProviders via entries in META-INF/services.  If MyFaces
>> used
>> >> > > a similar approach I think it should work OK for Geronimo and
just
>> >> > > about any other container that supports injection,  And it
should
>> >> also
>> >> > > make MyFaces more interchangeable with the RI.
>> >> > >
>> >> > > Best wishes,
>> >> > > Paul
>> >> > >
>> >> > > On 3/2/07, Dennis Byrne <[EMAIL PROTECTED]> wrote:
>> >> > > > Similar to what Mathias mentioned?
>> >> > > >
>> >> > > >
>> http://issues.apache.org/jira/browse/MYFACES-1246#action_12475337
>> >> > > >
>> >> > > > It's not much work (on our side) but it sounds pretty vendor
>> >> specific.
>> >> > > > Again, I don't have a better solution.  Mathias writes "which
is
>> >> implemented
>> >> > > > by j2ee containers".  I wonder if each container will end up
>> >> looking
>> >> for
>> >> > > > different interfaces.  How would MyFaces find Geronimo's
>> >> implementation ?  A
>> >> > > > context parameter?  A for loop like this ...
>> >> > > >
>> >> > > > String[] providers = new
>> String[]{"org,apache.geronimo.DIProvider
>> ",
>> >> > > > "com.bea.DIProvider", "org.jboss.DIProvider"}
>> >> > > >
>> >> > > > for(String clazz : providers){
>> >> > > >   try{
>> >> > > >     return ClassUtils.load (clazz)
>> >> > > >   }catch(){}
>> >> > > > }
>> >> > > >
>> >> > > > Dennis Byrne
>> >> > > >
>> >> > > >
>> >> > > > On 3/1/07, Paul McMahan <[EMAIL PROTECTED]> wrote:
>> >> > > > > OK, I think your interpretation of the spec makes sense and
>> >> there's
>> >> > > > > one particular aspect we should discuss a little further.
>> >> > > > >
>> >> > > > > The container doesn't know which classes are managed beans
so
>> it
>> >> > > > > wouldn't know when to intercept the instantiation process to
>> >> perform
>> >> > > > > injection.  What would you all think about MyFaces
>> providing an
>> >> > > > > interface that containers could implement to perform
injection
>> on
>> >> a
>> >> > > > > managed bean when MyFaces brings that bean into
service?  This
>> >> would
>> >> > > > > allow MyFaces to maintain control of the timing while
allowing
>> >> the
>> >> > > > > container to scan for annotations and handle injection when
>> >> prompted
>> >> > > > > to do so.
>> >> > > > >
>> >> > > > > Best wishes,
>> >> > > > > Paul
>> >> > > > >
>> >> > > > >
>> >> > > > > On 2/26/07, Dennis Byrne <[EMAIL PROTECTED]> wrote:
>> >> > > > > > I know the specs can be vague sometimes, but I don't
>> interpret
>> >> the first
>> >> > > > > > paragraph of section 5.4 as meaning the JSF
>> implementation is
>> >> > > > responsible
>> >> > > > > > for @EJB, @Resources, etc.  The JSF spec specifically
>> mentions
>> >> "the
>> >> > > > > > container to inject references".  If Geronimo can
intercept
>> the
>> >> > > > > > instantiation of these classes in the classloader
(something
>> I
>> >> know
>> >> > > > nothing
>> >> > > > > > about right now), I think we are all good here.  Wouldn't
>> >> MyFaces then
>> >> > > > be
>> >> > > > > > observing the requirements (in plain java) around
>> >> @PostConstruct
>> >> after
>> >> > > > > > Geronimo had injected the resources?
>> >> > > > > >
>> >> > > > > > I think the JSF impl is only responsible for
@PostConstruct
>> and
>> >> > > > @Predestroy.
>> >> > > > > >  This makes sense because scoped (request, session,
>> >> application)
>> >> are the
>> >> > > > > > only candidates for this, and it would be more awkward to
do
>> >> that from
>> >> > > > the
>> >> > > > > > container. I say all of this in an open manner, so anyone
>> feel
>> >> free to
>> >> > > > > > discuss.
>> >> > > > > >
>> >> > > > > > You're point about javax.annotation being in the Servlet
>> 2.5is
>> >> taken.
>> >> > > > I
>> >> > > > > > totally missed that.
>> >> > > > > >
>> >> > > > > >
>> >> > > > > > Dennis Byrne
>> >> > > > > >
>> >> > > > > > On 2/26/07, Paul McMahan <[EMAIL PROTECTED]> wrote:
>> >> > > > > > > Actually by "dependency injection" I'm specifically
>> referring
>> >> to the
>> >> > > > > > > portion of the JSF spec that discusses injecting
resources
>> >> where
>> >> > > > > > > certain annotations are found in a managed bean.  So,
>> while
>> >> scanning
>> >> > > > > > > for the @PreConstruct and @PostDestroy annotations
MyFaces
>> >> would also
>> >> > > > > > > scan for @EJB, @Resource, @WebServiceRef, etc and then
>> time
>> >> the
>> >> > > > > > > invocation of @PreConstruct and @PostDestroy to support
>> the
>> >> injection.
>> >> > > > > > >
>> >> > > > > > > Tomcat provides an example of how this can be done.  The
>> >> following
>> >> > > > > > > class scans for annotations when a web app starts:
>> >> > > > > > >
>> >> > > > > >
>> >> > > >
>> >>
>>
http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java
>>
>> >>
>> >> > > > > > >
>> >> > > > > > > And then this class handles the injection and calling
the
>> >> > > > > > > PostConstruct and PreDestroy methods when an servlet,
>> filter,
>> >> or
>> >> > > > > > > listener is brought into service:
>> >> > > > > > >
>> >> > > > > >
>> >> > > >
>> >>
>>
http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/DefaultAnnotationProcessor.java
>>
>> >>
>> >> > > > > > >
>> >> > > > > > > Would it make sense for MyFaces to follow a similar
>> approach
>> >> for
>> >> > > > > > > managed beans?  Also, I'm curious why you're hoping to
>> avoid
>> >> importing
>> >> > > > > > > classes from javax.annotation classes since servlet
>> >> 2.5containers are
>> >> > > > > > > required to support them.  Is this so that MyFaces 1.2can
>> >> support
>> >> > > > > > > servlet 2.4 containers?
>> >> > > > > > >
>> >> > > > > > > Best wishes,
>> >> > > > > > > Paul
>> >> > > > > > >
>> >> > > > > > > On 2/26/07, Dennis Byrne <[EMAIL PROTECTED]> wrote:
>> >> > > > > > > > I ended up going with Servlet/Request/Context
attribute
>> >> listeners
>> >> > > > for
>> >> > > > > > > > @PreDestroy.  This did not involve importing
>> >> > > > > > javax.annotation.PreDestroy, so
>> >> > > > > > > > people w/out application servers don't have to worry
>> about
>> >> > > > > > > > ClassDefNotFoundErrors.  This also keeps us compatible
>> with
>> >> the
>> >> > > > > > reference
>> >> > > > > > > > implementation in terms of timing, although I really
>> wish
>> >> they'd
>> >> > > > change
>> >> > > > > > the
>> >> > > > > > > > wording in the spec.
>> >> > > > > > > >
>> >> > > > > > > > Dennis Byrne
>> >> > > > > > > >
>> >> > > > > > > >
>> >> > > > > > > > On 2/26/07, Paul McMahan <[EMAIL PROTECTED]>
wrote:
>> >> > > > > > > > > Sorry if I'm behind on this discussion but what are
>> the
>> >> current
>> >> > > > > > > > > thoughts on how dependency injection will be
>> implemented
>> >> for
>> >> > > > managed
>> >> > > > > > > > > beans?  The reason I'm curious is because PreDestroy
>> and
>> >> > > > PostConstruct
>> >> > > > > > > > > annotations are used to deal with injected
resources,
>> so
>> >> from a
>> >> > > > timing
>> >> > > > > > > > > perspective it would be important to process all
these
>> >> annotations
>> >> > > > > > > > > accordingly.
>> >> > > > > > > > >
>> >> > > > > > > > > Best wishes,
>> >> > > > > > > > > Paul
>> >> > > > > > > > >
>> >> > > > > > > > > On 2/24/07, Dennis Byrne < [EMAIL PROTECTED]> wrote:
>> >> > > > > > > > > > I'm weighing options about invoking @PreDestroy
>> methods
>> >> > > > > > (@PostConstruct
>> >> > > > > > > > is
>> >> > > > > > > > > > done BTW).  I haven't made up my mind yet but
here's
>> >> where I'm
>> >> > > > at on
>> >> > > > > > > > this.
>> >> > > > > > > > > >
>> >> > > > > > > > > > As far as *when* this happens, the request is
easy,
>> in
>> >> > > > > > > > > > FacesServelet.service(). Session and app scope are
>> more
>> >> > > > difficult
>> >> > > > > > > > decisions.
>> >> > > > > > > > > > A new
>> >> > > > > > HttpSessionActivationListener.attributeRemoved
>> >> > > > > > > > and a
>> >> > > > > > > > > > new
>> >> > > > > > ServletContextAttributeListener.attributeRemoved ()
>> >> > > > > > > > seem
>> >> > > > > > > > > > like nice solutions, but this doesn't meet the
spec
>> >> requirements
>> >> > > > for
>> >> > > > > > > > 5.4.1.
>> >> > > > > > > > > > The methods have to be invoked *before* the bean
is
>> >> pulled from
>> >> > > > > > scope
>> >> > > > > > > > and
>> >> > > > > > > > > > the servlet API does not provide a
>> >> > > > > > > > > >
>> >> > > > > > > >
>> >> > > > > >
>> >> > > > ServletContextAttributeListener.attribute_WILL_BE_Removed()
>> >> > > > > > > > > > or a
>> >> > > > > > > > > >
>> >> > > > > > HttpSessionActivationListener.attribute_WILL_BE_Removed
>> >> > > > > > > > ().
>> >> > > > > > > > > >  Also, I say *new* ServletContextAttributeListener
>> and
>> >> because
>> >> > > > > > > > > > StartupServletContextListener (already in code
base)
>> >> implements
>> >> > > > > > > > > > ServletContextListener, not
>> >> > > > > > > > > > ServletContextAttributeListener.
>> >> > > > > > > > > >
>> >> > > > > > > > > > The other side of the problem is *how* to invoke
>> each
>> >> > > > @PreDestroy
>> >> > > > > > > > method,
>> >> > > > > > > > > > much easier.  Iterating over the attributes at
each
>> >> scope level
>> >> > > > is
>> >> > > > > > > > trivial,
>> >> > > > > > > > > > and so is determining if the bean's class is a
>> managed
>> >> bean
>> >> > > > class.
>> >> > > > > > But
>> >> > > > > > > > this
>> >> > > > > > > > > > does not mean the *instance* was placed there by
the
>> >> JSF
>> >> > > > > > implementation.
>> >> > > > > > > > > > Using a list (at each level of scope) to track
>> managed
>> >> instances
>> >> > > > > > solves
>> >> > > > > > > > the
>> >> > > > > > > > > > problem, as long as you sync on the session (only
>> one
>> >> time per
>> >> > > > > > session)
>> >> > > > > > > > in
>> >> > > > > > > > > > order to avoid concurrency issues; it also means
>> three
>> >> more data
>> >> > > > > > > > structures
>> >> > > > > > > > > > in memory.
>> >> > > > > > > > > >
>> >> > > > > > > > > > --
>> >> > > > > > > > > > Dennis Byrne
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > > >
>> >> > > > > > > >
>> >> > > > > > > > --
>> >> > > > > > > > Dennis Byrne
>> >> > > > > > >
>> >> > > > > >
>> >> > > > > >
>> >> > > > > >
>> >> > > > > > --
>> >> > > > > > Dennis Byrne
>> >> > > > >
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > > --
>> >> > > > Dennis Byrne
>> >> > >
>> >> >
>> >> >
>> >> > --
>> >> > Mathias
>> >> >
>> >>
>> >
>> >
>> >
>>
>
>
>




--
Dennis Byrne

Reply via email to