Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x

2013-04-04 Thread Gerhard Petracek
hi adrian,

we can do EXTCDI-308 easily, but basically it isn't an issue of codi ->
please file an issue for WAS8.

regards,
gerhard



http://www.irian.at

Your JSF/JavaEE powerhouse -
JavaEE Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces


2013/4/3 Adrian Gonzalez 

> Just created :
>  * https://issues.apache.org/jira/browse/EXTCDI-307 (EAR support for
> JBoss)
>  * https://issues.apache.org/jira/browse/EXTCDI-308 (EAR support for WAS)
> and attached the corresponding patches.
>
> Please note that these patches doesn't cover support for all the CODI
> modules (I've tested EAR support only for the JSF module).
>
> Regards,
> Adrian
>
>
> - Mail original -
> De : Adrian Gonzalez 
> À : MyFaces Discussion 
> Cc :
> Envoyé le : Mercredi 3 avril 2013 11h52
> Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
>
> Hello,
>
> I just resolved java.lang.NullPointerException: null on Websphere
> (8.0.0.4) (see [2] below).
>
> This issue was due :
> When a client calls a method with package level access on a CDI bean, WAS
> 8.0.0.4 doesn't execute the interceptor chain.
> The call is executed directly on the javassist class (and @Inject fields
> are null in the javassist class - so we get the NPE).
> For now, just setting method visibility to public on
> both JsfRequestLifecycleBroadcaster#broadcastBeforeEvent et
> JsfRequestLifecycleBroadcaster#broadcastAfterEvent resolves this issue.
>
>
> Question is : bug located in Websphere or in CODI ?
> In other workds, does CDI 1.0 supports calling methods with package level
> access ?
> I looked at the CDI spec, but didn't find anything on this matter.
> Interceptor spec 1.1 supports it (from chapter Method interceptors :
> 'Around-invoke methods can have public, private, protected, or package
> level access. An
> around-invoke method must not be declared as final or static.')
> If it's in WAS, I can open a PMR for this.
>  I will open 2 tickets for EAR support : one for JBoss and another one for
> Websphere and attach both patches.
> Sounds good ?
>
>
> Best regards,
> Adrian
>
>
>
>
>
>
> 
> De : Adrian Gonzalez 
> À : MyFaces Discussion ; Mark Struberg <
> strub...@yahoo.de>
> Envoyé le : Mardi 26 mars 2013 17h22
> Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
>
> Hello,
>
> Sorry for the late feedback.
> Currently struggling on making it work with Websphere 8 (as Denis before)
> before sending a patch.
>
> I've corrected locally the IllegalAccessError on DefaultBeanEntryFactory
> [1] (just making DefaultBeanEntryFactory  public corrects the issue).
> Now I get only the NullPointerException
> on JsfRequestLifecycleBroadcaster.broadcastBeforeEvent [2].
> I know I could set classloader to APPLICATION, but as Denis said, it is
> not officially supported by Websphere.
> So I prefer to modify CODI's code (if possible) to be able to use it on
> WAS.
>
> I don't have anymore time this week to work on these issues, so I'll
> follow up next week.
>
> Thanks,
> Adrian
>
>
> [1]
> [3/26/13 16:52:53:494 CET] 00bc
> webappE
> com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet
> Error]-[Faces Servlet]: java.lang.RuntimeException: by
> java.lang.IllegalAccessError:
>
> org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.DefaultBeanEntryFactory
> at
> javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:509)
>
> at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
>
> at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
>
> at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)
>
> [2] java.lang.NullPointerException: null
>
> at
>
> org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.JsfRequestLifecycleBroadcaster.broadcastBeforeEvent(JsfRequestLifecycleBroadcaster.java:58)
> ~[myfaces-extcdi-bundle-jsf20-1.0.5.nxs1-SNAPSHOT.jar:1.0.5.nxs1-SNAPSHOT]
>
> at
>
> org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.JsfRequestLifecyclePhaseListener.beforePhase(JsfRequestLifecyclePhaseListener.java:56)
> ~[myfaces-extcdi-bundle-jsf20-1.0.5.nxs1-SNAPSHOT.jar:1.0.5.nxs1-SNAPSHOT]
>
> at
>
> org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:76)
> ~[com.ibm.ws.jsf.myfaces.jar:na]
>
> at
>
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:159)
> ~[com.ibm.ws.jsf.myfaces.jar:na]
>
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
> ~[com.ibm.ws.jsf.myfaces.jar:na]
>
> at
>
> org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:101)
> ~[myfaces-extcdi-bundle-jsf20-1.0.5.nxs1-SNAPSHOT.jar:1.0.5.nxs1-SNAPSHOT]
>
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
> ~[javax.j2ee.jsf.jar:na]
>
> 
> De : Mark Struberg 
> À : M

Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x

2013-04-04 Thread Mark Struberg
> but basically it isn't an issue of codi ->
> please file an issue for WAS8.

+1 might probably be a problem of WAS using EJB proxies for CDI beans.

LieGrue,
strub




- Original Message -
> From: Gerhard Petracek 
> To: MyFaces Discussion ; Adrian Gonzalez 
> 
> Cc: 
> Sent: Thursday, April 4, 2013 11:06 AM
> Subject: Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
> 
> hi adrian,
> 
> we can do EXTCDI-308 easily, but basically it isn't an issue of codi ->
> please file an issue for WAS8.
> 
> regards,
> gerhard
> 
> 
> 
> http://www.irian.at
> 
> Your JSF/JavaEE powerhouse -
> JavaEE Consulting, Development and
> Courses in English and German
> 
> Professional Support for Apache MyFaces
> 
> 
> 2013/4/3 Adrian Gonzalez 
> 
>>  Just created :
>>   * https://issues.apache.org/jira/browse/EXTCDI-307 (EAR support for
>>  JBoss)
>>   * https://issues.apache.org/jira/browse/EXTCDI-308 (EAR support for WAS)
>>  and attached the corresponding patches.
>> 
>>  Please note that these patches doesn't cover support for all the CODI
>>  modules (I've tested EAR support only for the JSF module).
>> 
>>  Regards,
>>  Adrian
>> 
>> 
>>  - Mail original -
>>  De : Adrian Gonzalez 
>>  À : MyFaces Discussion 
>>  Cc :
>>  Envoyé le : Mercredi 3 avril 2013 11h52
>>  Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
>> 
>>  Hello,
>> 
>>  I just resolved java.lang.NullPointerException: null on Websphere
>>  (8.0.0.4) (see [2] below).
>> 
>>  This issue was due :
>>  When a client calls a method with package level access on a CDI bean, WAS
>>  8.0.0.4 doesn't execute the interceptor chain.
>>  The call is executed directly on the javassist class (and @Inject fields
>>  are null in the javassist class - so we get the NPE).
>>  For now, just setting method visibility to public on
>>  both JsfRequestLifecycleBroadcaster#broadcastBeforeEvent et
>>  JsfRequestLifecycleBroadcaster#broadcastAfterEvent resolves this issue.
>> 
>> 
>>  Question is : bug located in Websphere or in CODI ?
>>  In other workds, does CDI 1.0 supports calling methods with package level
>>  access ?
>>  I looked at the CDI spec, but didn't find anything on this matter.
>>  Interceptor spec 1.1 supports it (from chapter Method interceptors :
>>  'Around-invoke methods can have public, private, protected, or package
>>  level access. An
>>  around-invoke method must not be declared as final or static.')
>>  If it's in WAS, I can open a PMR for this.
>>   I will open 2 tickets for EAR support : one for JBoss and another one for
>>  Websphere and attach both patches.
>>  Sounds good ?
>> 
>> 
>>  Best regards,
>>  Adrian
>> 
>> 
>> 
>> 
>> 
>> 
>>  
>>  De : Adrian Gonzalez 
>>  À : MyFaces Discussion ; Mark Struberg <
>>  strub...@yahoo.de>
>>  Envoyé le : Mardi 26 mars 2013 17h22
>>  Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
>> 
>>  Hello,
>> 
>>  Sorry for the late feedback.
>>  Currently struggling on making it work with Websphere 8 (as Denis before)
>>  before sending a patch.
>> 
>>  I've corrected locally the IllegalAccessError on 
> DefaultBeanEntryFactory
>>  [1] (just making DefaultBeanEntryFactory  public corrects the issue).
>>  Now I get only the NullPointerException
>>  on JsfRequestLifecycleBroadcaster.broadcastBeforeEvent [2].
>>  I know I could set classloader to APPLICATION, but as Denis said, it is
>>  not officially supported by Websphere.
>>  So I prefer to modify CODI's code (if possible) to be able to use it on
>>  WAS.
>> 
>>  I don't have anymore time this week to work on these issues, so 
> I'll
>>  follow up next week.
>> 
>>  Thanks,
>>  Adrian
>> 
>> 
>>  [1]
>>  [3/26/13 16:52:53:494 CET] 00bc
>>  webapp        E
>>  com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet
>>  Error]-[Faces Servlet]: java.lang.RuntimeException: by
>>  java.lang.IllegalAccessError:
>> 
>> 
> org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.DefaultBeanEntryFactory
>>                  at
>>  javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:509)
>> 
>>  at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
>> 
>>  at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
>> 
>>  at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)
>> 
>>  [2] java.lang.NullPointerException: null
>> 
>>  at
>> 
>> 
> org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.JsfRequestLifecycleBroadcaster.broadcastBeforeEvent(JsfRequestLifecycleBroadcaster.java:58)
>>  ~[myfaces-extcdi-bundle-jsf20-1.0.5.nxs1-SNAPSHOT.jar:1.0.5.nxs1-SNAPSHOT]
>> 
>>  at
>> 
>> 
> org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.JsfRequestLifecyclePhaseListener.beforePhase(JsfRequestLifecyclePhaseListener.java:56)
>>  ~[myfaces-extcdi-bundle-jsf20-1.0.5.nxs1-SNAPSHOT.jar:1.0.5.nxs1-SNAPSHOT]
>> 
>>  at
>> 
>> 
> org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefor

How to programmatically instantiate a composite component or a tag component ?

2013-04-04 Thread l.pe...@senat.fr

Dear all,

how can I programatically instantiate a composite component or a tag 
component from a custom component ?


I proceed this way to instantiate a composite component, but I do not 
really like it as I use reflection to hijack 
FaceletViewDeclarationLanguage methods...


public UIComponent instantiateComposite(String namespace, String 
componentName) {

FacesContext ctx = FacesContext.getCurrentInstance();
Resource resource = 
ctx.getApplication().getResourceHandler().createResource( componentName 
+ ".xhtml", namespace );

UIComponent cc = ctx.getApplication().createComponent( ctx, resource );
UIPanel panel = (UIPanel) ctx.getApplication().createComponent( 
UIPanel.COMPONENT_TYPE );


// set the facelet's parent
cc.getFacets().put( UIComponent.COMPOSITE_FACET_NAME, panel );

FaceletFactory ff = (DefaultFaceletFactory) 
DefaultFaceletFactory.getInstance();

if(ff == null) {
FaceletViewDeclarationLanguage vdl = new 
FaceletViewDeclarationLanguage(ctx);


Method createCompiler = null;
Method createFaceletFactory = null;
try {
createCompiler = 
FaceletViewDeclarationLanguage.class.getDeclaredMethod("createCompiler",FacesContext.class);
createFaceletFactory = 
FaceletViewDeclarationLanguage.class.getDeclaredMethod("createFaceletFactory",FacesContext.class,org.apache.myfaces.view.facelets.compiler.Compiler.class);

createCompiler.setAccessible(true);
createFaceletFactory.setAccessible(true);
org.apache.myfaces.view.facelets.compiler.Compiler compiler 
= (org.apache.myfaces.view.facelets.compiler.Compiler) 
createCompiler.invoke(vdl, ctx);
ff = (FaceletFactory) createFaceletFactory.invoke(vdl, ctx, 
compiler);

} catch (IllegalAccessException ex) {
Logger.getLogger(SenatDataTableEntryDetail.class.getName()).log(Level.SEVERE, 
null, ex);

} catch (IllegalArgumentException ex) {
Logger.getLogger(SenatDataTableEntryDetail.class.getName()).log(Level.SEVERE, 
null, ex);

} catch (InvocationTargetException ex) {
Logger.getLogger(SenatDataTableEntryDetail.class.getName()).log(Level.SEVERE, 
null, ex);

} catch (NoSuchMethodException ex) {
Logger.getLogger(SenatDataTableEntryDetail.class.getName()).log(Level.SEVERE, 
null, ex);

} catch (SecurityException ex) {
Logger.getLogger(SenatDataTableEntryDetail.class.getName()).log(Level.SEVERE, 
null, ex);

}
}

try {
Facelet facelet = ff.getFacelet(resource.getURL());
facelet.apply( ctx, panel );
} catch ( IOException e ) {
e.printStackTrace();
}
return cc;
}

How can I do the same stuff in a cleanier way ?

And how can I instantiate a tag component  I mean a component declared 
the following way :



blah blah
myWonderfulTag
tags/mwl/myWonderfulTag.xhtml



in a taglib.

Thanks in advance,

Ludovic
PS : question also asked on stackoverflow : 
http://stackoverflow.com/questions/15813582/how-to-programmatically-instantiate-a-composite-component-or-a-tag-component



|
| AVANT D'IMPRIMER, PENSEZ A L'ENVIRONNEMENT.
|