Can't you just switch to DS?

2014-02-11 18:46 GMT+01:00 Leonardo Uribe <lu4...@gmail.com>:

> Hi
>
> CDI implementations does not require to provide anything to JSF in
> order to make @FlowScoped to work. The code has been tested against
> OWB and Weld and it works in both cases.
>
> But the flow stuff relies on the new ClientWindow API, and that could
> cause a conflict with CODI, because CODI provides a solution for this
> part too. In fact, the solution introduced in the standard comes from
> CODI.
>
> In your particular case, the best option is provide a custom
> ClientWindowFactory / ClientWindow that implements
> ClientWindow.getId() method and grab the value generated by CODI.
> Theorically there is no need of the custom PhaseListener, because the
> "attachWindow" step is done in CODI. I haven't tried it but I suppose
> a custom ClientWindow will work.
>
> regards,
>
> Leonardo Uribe
>
> 2014-02-11 11:56 GMT-05:00 l.pe...@senat.fr <l.pe...@senat.fr>:
> > On 11/02/2014 14:51, l.pe...@senat.fr wrote:
> >>
> >> On 11/02/2014 10:28, l.pe...@senat.fr wrote:
> >>>
> >>> On 11/02/2014 03:30, Leonardo Uribe wrote:
> >>
> >>
> >> [...]
> >>>>
> >>>> @FlowScoped annotation is for CDI only, so it will not work for JSF
> >>>> managed beans. In your case, I believe the bean is instantiated but it
> >>>> is not stored in any context, so once is created is discarded, giving
> >>>> the impression that the bean is working but it is not.
> >>>>
> >>>> In MyFaces it is possible to create a custom flow scope annotation for
> >>>> other containers that works just like @FlowScoped, implementing
> >>>> org.apache.myfaces.spi.FacesFlowProvider SPI interface. You are
> >>>> already in CDI, so you don't need to bother about that.
> >>>>
> >>>> I have seen @Named annotation working with Spring, so it is not
> >>>> something specific for CDI, but @FlowScoped depends of CDI API.
> >>>
> >>> I am using CODI 1.0.5 (I heavily use its @ViewAccessScoped annotation)
> >>> with OpenWebBeans 1.2.1.
> >>>
> >>> So, I thought  was ok on the CDI side...
> >>>
> >>> ...but after reading your mail, it seems to me that this CDI
> >>> implementation was provided before JSF 2.2 release, and so that it
> must not
> >>> include proper @FacesFlow support.
> >>>
> >>> Should I switch to another implementation, like DeltaSpike ?
> >>>
> >>> I must have misunderstood your mail from Sep 26 2013 (
> >>>
> http://myfaces.10567.n7.nabble.com/JSF-2-2-status-amp-snapshot-usage-td115852.html
> >>> ) inviting us to try Faces Flows in MyFaces 2.2.
> >>
> >> After some debugging, I found that :
> >> * beans are discovered and processed ok by
> >> org.apache.myfaces.flow.cdi.FlowScopeCDIExtension
> >> * -flow.xml is detected and processed with no errors ;
> >> * if I use an empty -flow.xml file, an exception is raised line 716 of
> >> org.apache.myfaces.config.DefaultFacesConfigurationProvider (on
> >> facesConfig.getFacesFlowDefinitions().add(flow); )
> >> * if I add a breakpoint in
> >> org.apache.myfaces.flow.FlowHandlerImpl#clientWindowTransition, I can
> see :
> >> ** my flow registered in _flowMapById (with "flow1" key)
> >> ** my flow registered in _flowMapByDocumentId (with an empty key)
> >> ** that _facesFlowProvider is null
> >
> >
> > ok, I think I got it. And, as I feared, it seems to be CODI related.
> >
> > In JSF2.2, a call to
> >
> >                 //JSF 2.2: attach window
> >                 _lifecycle.attachWindow(facesContext);
> >
> > has been added line 193 of javax.faces.webapp.FacesServlet
> >
> > When you use CODI, _lifecycle is an instance of
> >
> >
> org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper
> >
> > This wrapper has been designed for JSF 2.0 and 2.1. So, it does not wrap
> the
> > call to attachWindow. And Lifecycle#attachWindow, which does nothing, is
> > called.
> >
> > Later, when JSf tries to find my @FlowScoped bean, it fails in
> >
> > org.apache.myfaces.flow.FlowHandlerImpl#getCurrentFlow , because client
> > windos is null
> >
> > (line 165 and following) :
> >         ClientWindow clientWindow =
> > context.getExternalContext().getClientWindow();
> >         if (clientWindow == null)
> >         {
> >             return null;
> >         }
> >
> > So, I guess that I have to write a custom PhaseListener to solve this
> little
> > glitch.
> >
> > If you have a better solution, I will gladly take it.
> >
> >
> > Best regards,
> >
> > Ludovic
> > |
> > | AVANT D'IMPRIMER, PENSEZ A L'ENVIRONNEMENT.
> > |
> >
>

Reply via email to