Re: [jira] @PreDestroy, Servlet API,

2007-03-12 Thread djencks

This thread seems to have died down.

I've tried to start a new thread on a related proposal I've come up with
while thinking about how to integrate MyFaces into geronimo, the subject is
Proposal for annotation processing and there's a related jira issue
https://issues.apache.org/jira/browse/MYFACES-1559

It's possibly my mail is messed up so I may have to repost the proposal as a
reply to this message.

many thanks
david jencks



Bernd Bohmann wrote:
 
 What is wrong with
 
 http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/DefaultAnnotationProcessor.java
 
 ?
 
 big snip
 
 

-- 
View this message in context: 
http://www.nabble.com/%40PreDestroy%2C-Servlet-API%2C-tf3284592.html#a9437097
Sent from the My Faces - Dev mailing list archive at Nabble.com.



Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann

Hello Dennis,

why we should look at the RI?

Can we use this Interface

http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/AnnotationProcessor.html?

Why you don't like to import javax.annotation. in the code. If the 
annotation are missing in the container the annotations in the managed 
bean would be meaningless. But maybe the annotation are required by the 
servlet spec.


Why you create a own class for each Listener?


Regards


Bernd







Dennis Byrne wrote:

As much as I agree w/ you about how better things would be if this were in
the spec, and as much as I hate to bow down here, I am actually OK with
using com.sun.faces.spi.InjectionProvider as the parameter in MyFaces as
well ... for the sake of users.  If anyone has a problem w/ it, we can go
with org.apache.myfaces.InjectionProvider.

Dennis Byrne

On 3/2/07, Mathias Brökelmann [EMAIL PROTECTED] wrote:


The RI looks for com.sun.faces.spi.InjectionProvider for a class
name which implements this interface. It would have been very nice if
this is part of the spec. But that is not the case so we need to find
a way to support any kind of j2ee container. IMO injecting j2ee
resources without knowing where these resources can be found is not
possible. Therefore myfaces should call an InjectionProvider which
simply do this job.

2007/3/3, Dennis Byrne [EMAIL PROTECTED]:
 Are any of these class names or context params start w/ 
javax.faces?  If

 so, we can move the conversation back into the issue tracker and I'll
close
 the @PostConstruct issue once Paul says it's good to go.  I don't see
the
 point of the system property though.

 Dennis Byrne


 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, 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

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


Hello Dennis,

why we should look at the RI?



I'd prefer doing things that is compatible with them.  This is easier on the
users and it makes passing TCK smoother.

Can we use this Interface



http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/AnnotationProcessor.html
?



I'd prefer something that would work on other Servlet containers.  I am open
to ideas.

Why you don't like to import javax.annotation. in the code. If the

annotation are missing in the container the annotations in the managed
bean would be meaningless. But maybe the annotation are required by the
servlet spec.



I didn't do this for users who were using @PostConstruct in their managed
beans, I did this to avoid ClassDefNotFoundErrors for users who *didn't* use
@PostConstruct.  However Paul has already pointed out in this thread that
this is not  realistic, since Servlet 2.5 requires these annotations.

Why you create a own class for each Listener?



Regards



Bernd







Dennis Byrne wrote:
 As much as I agree w/ you about how better things would be if this were
in
 the spec, and as much as I hate to bow down here, I am actually OK
with
 using com.sun.faces.spi.InjectionProvider as the parameter in MyFaces as
 well ... for the sake of users.  If anyone has a problem w/ it, we can
go
 with org.apache.myfaces.InjectionProvider.

 Dennis Byrne

 On 3/2/07, Mathias Brökelmann [EMAIL PROTECTED] wrote:

 The RI looks for com.sun.faces.spi.InjectionProvider for a class
 name which implements this interface. It would have been very nice if
 this is part of the spec. But that is not the case so we need to find
 a way to support any kind of j2ee container. IMO injecting j2ee
 resources without knowing where these resources can be found is not
 possible. Therefore myfaces should call an InjectionProvider which
 simply do this job.

 2007/3/3, Dennis Byrne [EMAIL PROTECTED]:
  Are any of these class names or context params start w/
 javax.faces?  If
  so, we can move the conversation back into the issue tracker and I'll
 close
  the @PostConstruct issue once Paul says it's good to go.  I don't see
 the
  point of the system property though.
 
  Dennis Byrne
 
 
  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
   

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann

Hello Dennis,

I think the interface has nothing to do with tomcat. Would the interface 
meet your requirements?


If yes, I would suggest following:

Create a AnnotationProcessorFactory which return as default an 
AnnotationProcessor who is a copy of the tomcat 
DefaultAnnotationProcessor(the code has no dependency to other tomcat 
code). I think the factory should return a suitable AnnotationProcessor 
based on which Annotations are present in the classpath.


Maybe we can make the AnnotationProcessor configurable.

If you like I would add this code to 1.2.

Regards

Bernd




Re: @PreDestroy, Servlet API,

2007-03-03 Thread Paul McMahan

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.5 is 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.5 containers are
 required to support them.  Is this so that MyFaces 1.2 can support
 servlet 2.4 containers?

 Best wishes,
 Paul

 On 2/26/07, Dennis Byrne [EMAIL PROTECTED] 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

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.2 and
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.5 is
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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann
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.2 and
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.5 is
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:
 

  

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

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.2 and
 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, 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann

??? 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.2 and
 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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

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
  

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann

Sorry,
I ask you if it's ok to add the code.
I get no answer then I asume it's ok to add my idea.

It's only a different possible implementation.
If you don't like it you can remove it.
Is anything wrong with the code?

Bernd



Dennis Byrne wrote:

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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann

Just revert my commit

Dennis Byrne wrote:

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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Mathias Brökelmann

No code in myfaces (or any other apache project) is owned by someone.
That is important for a healthy and moving community. Bernds
submission was a little bit fast but sometimes a complex issue is
better understand if we can look at the code - no matter if that is
the solution we finally have.

I wasn't aware that tomcat already has something like an
AnnotationProcessor which defines exactly that kind of
InjectionProvider which the RI uses. But it perfectly matches our
requirements.

How about this solution:

We define a myfaces specific interface of an
AnnotationProcessor/InjectionProvider which will be used throughout
the code in myfaces. The initialization code lookups an implementation
for that interface. If there is nothing found (through context param,
META-INF/service, etc.) we implement some fallback strategies to
either looking for a InjectionProvider implementation for suns RI or
if that also fails we try to lookup container specific implementations
like tomcats AnnotationProcessor implementation. If all fails we
supply a default implementation which only handles @PostConstruct and
@PreDestroy annotations - I don't think that it is possible to inject
any resource w/o knowing how to lookup these.


2007/3/3, Bernd Bohmann [EMAIL PROTECTED]:

Sorry,
I ask you if it's ok to add the code.
I get no answer then I asume it's ok to add my idea.

It's only a different possible implementation.
If you don't like it you can remove it.
Is anything wrong with the code?

Bernd



Dennis Byrne wrote:
 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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

I don't hold anything against you.  Ultimately I feel like this is a
lose-lose situation for MyFaces because where things stand now, you are
likely to feel as though your efforts on that branch are not appreciated.
They are.

Ryan has responded ...
http://blogs.sun.com/rlubke/entry/jsf_ri_1_2_and#comment-1172947192000

Dennis Byrne

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


Sorry,
I ask you if it's ok to add the code.
I get no answer then I asume it's ok to add my idea.

It's only a different possible implementation.
If you don't like it you can remove it.
Is anything wrong with the code?

Bernd



Dennis Byrne wrote:
 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

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

On 3/3/07, Mathias Brökelmann [EMAIL PROTECTED] wrote:


No code in myfaces (or any other apache project) is owned by someone.
That is important for a healthy and moving community. Bernds
submission was a little bit fast but sometimes a complex issue is
better understand if we can look at the code - no matter if that is
the solution we finally have.



I hope you did not get the idea that this was about territory here.

How about this solution:


We define a myfaces specific interface of an
AnnotationProcessor/InjectionProvider which will be used throughout
the code in myfaces. The initialization code lookups an implementation
for that interface. If there is nothing found (through context param,
META-INF/service, etc.) we implement some fallback strategies to
either looking for a InjectionProvider implementation for suns RI or
if that also fails we try to lookup container specific implementations
like tomcats AnnotationProcessor implementation. If all fails we
supply a default implementation which only handles @PostConstruct and
@PreDestroy annotations - I don't think that it is possible to inject
any resource w/o knowing how to lookup these.



This sounds very similar to what Ryan just talked about in his blog.  Bernd,
if are happy w/ this and still interested, feel free to go forward with
this.  If you still want to, I ask that the default implementation uses the
annotation name, rather than the annotation.  This gives Tomcat 5.5/Facelets
users fewer headaches.

Do either of you have a problem w/ the context listener doing a classpath
search for well known injection providers?  I meet a lot of devs who find
JSF too configuration heavy.

Bernd if you don't get around to doing this, I will just end up doing it
sometime next week.

2007/3/3, Bernd Bohmann [EMAIL PROTECTED]:

 Sorry,
 I ask you if it's ok to add the code.
 I get no answer then I asume it's ok to add my idea.

 It's only a different possible implementation.
 If you don't like it you can remove it.
 Is anything wrong with the code?

 Bernd



 Dennis Byrne wrote:
  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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Bernd Bohmann

Hello Dennis,

should i readd the other possible implementation? :-)
But I should write my own TestCases.

I think it should be possible to use the PostConstruct and PreDestroy 
Annotations with tomcat 5.5 and facelets. When a InitialContext is 
available we should try resource injection, too. But it should be 
possible to add a own Provider for a container.


The AnnotationProcessor/InjectionProvider are very similar. I don't like 
to define a new myfaces Interface for this use case. I would prefer the 
org.apache.AnnotationProcessor because is not tomcat specific and an 
apache implementation. Until we find a final solution we should only 
copy the code.


It's no problem to use the annotation name instead of using the class. 
But personal i prefer the class.


Regards

Bernd


Dennis Byrne wrote:

On 3/3/07, Mathias Brökelmann [EMAIL PROTECTED] wrote:


No code in myfaces (or any other apache project) is owned by someone.
That is important for a healthy and moving community. Bernds
submission was a little bit fast but sometimes a complex issue is
better understand if we can look at the code - no matter if that is
the solution we finally have.



I hope you did not get the idea that this was about territory here.

How about this solution:


We define a myfaces specific interface of an
AnnotationProcessor/InjectionProvider which will be used throughout
the code in myfaces. The initialization code lookups an implementation
for that interface. If there is nothing found (through context param,
META-INF/service, etc.) we implement some fallback strategies to
either looking for a InjectionProvider implementation for suns RI or
if that also fails we try to lookup container specific implementations
like tomcats AnnotationProcessor implementation. If all fails we
supply a default implementation which only handles @PostConstruct and
@PreDestroy annotations - I don't think that it is possible to inject
any resource w/o knowing how to lookup these.



This sounds very similar to what Ryan just talked about in his blog.  
Bernd,

if are happy w/ this and still interested, feel free to go forward with
this.  If you still want to, I ask that the default implementation uses the
annotation name, rather than the annotation.  This gives Tomcat 
5.5/Facelets

users fewer headaches.

Do either of you have a problem w/ the context listener doing a classpath
search for well known injection providers?  I meet a lot of devs who find
JSF too configuration heavy.

Bernd if you don't get around to doing this, I will just end up doing it
sometime next week.

2007/3/3, Bernd Bohmann [EMAIL PROTECTED]:

 Sorry,
 I ask you if it's ok to add the code.
 I get no answer then I asume it's ok to add my idea.

 It's only a different possible implementation.
 If you don't like it you can remove it.
 Is anything wrong with the code?

 Bernd



 Dennis Byrne wrote:
  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 

Re: @PreDestroy, Servlet API,

2007-03-03 Thread Remy Maucherat

Bernd Bohmann wrote:
The AnnotationProcessor/InjectionProvider are very similar. I don't like 
to define a new myfaces Interface for this use case. I would prefer the 
org.apache.AnnotationProcessor because is not tomcat specific and an 
apache implementation. Until we find a final solution we should only 
copy the code.


I just had a look at InjectionProvider, and somehow the API is identical 
to AnnotationProcessor. It did not start that way, and I did not look at 
InjectionProvider at all (so I suppose it means the API makes sense :D). 
The interface is used by Catalina (the Servlet container) and also 
Jasper (Jasper gets the implementation using a specific context attribute).


Unfortunately, I don't see a way to do non proprietary 
annotation/injection processing, since the component that has to do it 
(JSP or JSF) cannot possibly get the configuration (which could define 
overrides, etc). Since I suppose you'll want to support all containers, 
that's a problem. (It would have been solved if the servlet spec had 
defined an interface like InjectionProvider in javax.servlet, of course.)


It's no problem to use the annotation name instead of using the class. 
But personal i prefer the class.


Rémy


Re: @PreDestroy, Servlet API,

2007-03-03 Thread Dennis Byrne

Unfortunately, I don't see a way to do non proprietary
annotation/injection processing, since the component that has to do it
(JSP or JSF) cannot possibly get the configuration (which could define
overrides, etc). Since I suppose you'll want to support all containers,
that's a problem. (It would have been solved if the servlet spec had
defined an interface like InjectionProvider in javax.servlet, of course.)



This is going to go down in the same category as inter Portlet communication
and j2ee 1.4 web services deployment.


It's no problem to use the annotation name instead of using the class.
 But personal i prefer the class.

Rémy





--
Dennis Byrne


Re: @PreDestroy, Servlet API,

2007-03-03 Thread Jacob Hookom
There were a few of us that wanted to push back on the WebTier EG around 
annotation support over the fact that there wasn't a clear API 
provided-- yet oddly enough, everyone is ending up with basically the 
same API :-)


My hope is that the WebBeans JSR can bring some solidarity around this 
through an injection API which other 'legacy' APIs can simply defer to 
(Similar to ELResolver).


It is tricky from a JSF standpoint, especially with session clustering-- 
but would WeakReference with your own ReferenceQueue fix this problem of 
associating the @PreDestroy event?


-- Jacob

Remy Maucherat wrote:

Bernd Bohmann wrote:
The AnnotationProcessor/InjectionProvider are very similar. I don't 
like to define a new myfaces Interface for this use case. I would 
prefer the org.apache.AnnotationProcessor because is not tomcat 
specific and an apache implementation. Until we find a final solution 
we should only copy the code.


I just had a look at InjectionProvider, and somehow the API is 
identical to AnnotationProcessor. It did not start that way, and I did 
not look at InjectionProvider at all (so I suppose it means the API 
makes sense :D). The interface is used by Catalina (the Servlet 
container) and also Jasper (Jasper gets the implementation using a 
specific context attribute).


Unfortunately, I don't see a way to do non proprietary 
annotation/injection processing, since the component that has to do it 
(JSP or JSF) cannot possibly get the configuration (which could define 
overrides, etc). Since I suppose you'll want to support all 
containers, that's a problem. (It would have been solved if the 
servlet spec had defined an interface like InjectionProvider in 
javax.servlet, of course.)


It's no problem to use the annotation name instead of using the 
class. But personal i prefer the class.


Rémy





Re: @PreDestroy, Servlet API,

2007-03-02 Thread Dennis Byrne

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.5 is
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.5 containers are
  required to support them.  Is this so that MyFaces 1.2 can 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 

Re: @PreDestroy, Servlet API,

2007-03-02 Thread Mathias Brökelmann

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.5 is 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.5 containers are
required to support them.  Is this so that MyFaces 1.2 can 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 

Re: @PreDestroy, Servlet API,

2007-03-02 Thread Dennis Byrne

Are any of these class names or context params start w/ javax.faces ?  If
so, we can move the conversation back into the issue tracker and I'll close
the @PostConstruct issue once Paul says it's good to go.  I don't see the
point of the system property though.

Dennis Byrne

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.5 is
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.2 can
support
 servlet 2.4 

Re: @PreDestroy, Servlet API,

2007-03-02 Thread Mathias Brökelmann

The RI looks for com.sun.faces.spi.InjectionProvider for a class
name which implements this interface. It would have been very nice if
this is part of the spec. But that is not the case so we need to find
a way to support any kind of j2ee container. IMO injecting j2ee
resources without knowing where these resources can be found is not
possible. Therefore myfaces should call an InjectionProvider which
simply do this job.

2007/3/3, Dennis Byrne [EMAIL PROTECTED]:

Are any of these class names or context params start w/ javax.faces ?  If
so, we can move the conversation back into the issue tracker and I'll close
the @PostConstruct issue once Paul says it's good to go.  I don't see the
point of the system property though.

Dennis Byrne


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.5 is
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 

Re: @PreDestroy, Servlet API,

2007-03-02 Thread Dennis Byrne

As much as I agree w/ you about how better things would be if this were in
the spec, and as much as I hate to bow down here, I am actually OK with
using com.sun.faces.spi.InjectionProvider as the parameter in MyFaces as
well ... for the sake of users.  If anyone has a problem w/ it, we can go
with org.apache.myfaces.InjectionProvider.

Dennis Byrne

On 3/2/07, Mathias Brökelmann [EMAIL PROTECTED] wrote:


The RI looks for com.sun.faces.spi.InjectionProvider for a class
name which implements this interface. It would have been very nice if
this is part of the spec. But that is not the case so we need to find
a way to support any kind of j2ee container. IMO injecting j2ee
resources without knowing where these resources can be found is not
possible. Therefore myfaces should call an InjectionProvider which
simply do this job.

2007/3/3, Dennis Byrne [EMAIL PROTECTED]:
 Are any of these class names or context params start w/ javax.faces?  If
 so, we can move the conversation back into the issue tracker and I'll
close
 the @PostConstruct issue once Paul says it's good to go.  I don't see
the
 point of the system property though.

 Dennis Byrne


 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 

Re: @PreDestroy, Servlet API,

2007-03-01 Thread Paul McMahan

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.5 is 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.5 containers are
 required to support them.  Is this so that MyFaces 1.2 can 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 

Re: @PreDestroy, Servlet API,

2007-02-26 Thread Paul McMahan

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


Re: @PreDestroy, Servlet API,

2007-02-26 Thread Dennis Byrne

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


Re: @PreDestroy, Servlet API,

2007-02-26 Thread Paul McMahan

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.5 containers are
required to support them.  Is this so that MyFaces 1.2 can 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


Re: @PreDestroy, Servlet API,

2007-02-26 Thread Dennis Byrne

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.5 is 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.5 containers are
required to support them.  Is this so that MyFaces 1.2 can 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