myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul McMahan <paulmcma...@gmail.com>
Subject Re: external api change OK for myfaces-impl 1.2.1?
Date Tue, 13 Nov 2007 03:06:31 GMT
Bernd,

My understanding of the JSF 1.2 spec is that annotation processing  
for managed beans pertains to the injection of JavaEE managed  
resources.   Now Bernhard raises a good point which is that for JSF  
developers a more practical use of the term "injection" could also  
mean the initialization of managed bean properties from their  
application config file, and they would expect this initialization to  
also work in conjunction with the @PostConstruct annotation.  While  
that behavior is not prescribed by the spec, I agree that MyFaces  
users would intuitively expect it to work that way.

His patch enforces this functionality by factoring the implicit  
handling of @PostConstruct annotations out of the newInstance()  
method and placing MyFaces in explicit control over when that one  
particular type of annotation should be processed.   However, I think  
a goal of the LifecycleProvider interface has been and should remain  
to be providing a clean separation for delegating annotation  
processing to the container, and that MyFaces should assist rather  
than orchestrate the overall process of resource injection for this  
one special case.   I think that the advantages of this approach are  
that it keeps MyFaces more insulated from future changes to the  
annotation processing specs and it makes MyFaces more portable by  
giving more flexibility to the container.   I also believe that  
further advantages of this approach will become apparent as standards  
such as web beans emerge, where the EJB and ManagedBean component  
models are unified.

Best wishes,
Paul



On Nov 12, 2007, at 2:46 PM, Bernd Bohmann wrote:

> Hello Paul,
>
> what is wrong with Bernhards patch?
>
> Instead of handling all of the annotation processing in
>
> LifecycleProvider.newInstance(String className)
>
> he suggest to add a method
>
> LifecycleProvider.postConstruct(Object obj)
>
> this method is called after the properties are injected by the
> annotation provider and the managed bean properties from the jsf impl.
>
> Why we should delegate the injection of the none annotation based
> managed bean properties to the LifecycleProvider? This must be
> implemented by Geronimo and the MyFaces Default LifecycleProvider.
> I would prefer only one place for the old style managed bean  
> properties
> injection.
>
> Regards
>
> Bernd
>
> Paul McMahan schrieb:
>> The LifecycleProvider interface was introduced in MyFaces core  
>> 1.2.0 as
>> an integration point that allows Java EE containers to handle  
>> annotation
>> processing for JSF managed beans.  In order to help containers invoke
>> @PostConstruct methods more consistently with the Java EE RI  
>> (glassfish)
>> we are discussing changing this API in:
>>     https://issues.apache.org/jira/browse/MYFACES-1761
>>
>> I attached a patch (MYFACES-1761-01.diff) to that JIRA that would  
>> change
>> a method signature from :
>>    LifecycleProvider.newInstance(String className)
>>  to
>>    LifecycleProvider.newInstance(ManagedBean beanConfig)
>>
>> The only known implementer of the LifecycleProvider interface  
>> (outside
>> of MyFaces itself) is the Geronimo project, which is in favor of this
>> change.   Are there any concerns with changing this external api  
>> in the
>> upcoming 1.2.1 maintenance release?
>>
>> BTW, this patch also refactors ManagedBeanBuilder into
>> ManageBeanInitializer so that the existing code in that class can  
>> still
>> be used to initialize managed properties.   Unless I am mistaken
>> ManagedBeanBuilder was not intended to be externally overridden or
>> extended, so refactoring it should not affect our users.
>>
>>
>> Best wishes,
>> Paul
>>


Mime
View raw message