You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by brunoaranda <br...@gmail.com> on 2010/07/01 12:55:30 UTC

Problems with orchestra and JSF 2

Hi,

I am having some troubles with orchestra maintaining some beans in
"conversation access" scope. First, could someone explain me why the beans
constructor is called multiple times? In my app I have multiple beans with
the same conversation name and when I access one of the other beans from my
bean, it seems as it is picking a new instance. The same scenario works fine
using "session" beans, but of course then I lose all the nice transaction
management from Orchestra. Anyone with an idea where I can I look? How is
people dealing with JPA and transactions scoping multiple requests in JSF 2?

I am having another issue as well. Even if I have one bean, the data seems
not to be in the model when I click on a button that invokes a method in
that bean. For this specific case, I have a <f:metadata> section with a
viewParam. I can see the param being set in the update model phase, but the
bean's existing data seems to be lost? For sure, I must be doing something
wrong but I am unable to see what.

Thanks!

Bruno

Re: Problems with orchestra and JSF 2

Posted by Bruno Aranda <br...@gmail.com>.
I see, maybe we could just add some kind of warning, because the side
effects are confusing and it is difficult to know where is the problem?

Bruno

On 2 July 2010 22:03, Martin Koci <ma...@aura.cz> wrote:

> Hi,
>
> I have same problem with CDI a it's conversation.
> Please see my comment on
> https://issues.apache.org/jira/browse/MYFACES-2688
>
> Best regards,
>
> Martin Kočí
>
> Leonardo Uribe píše v Pá 02. 07. 2010 v 13:31 -0500:
> > Hi
> >
> > It is not a problem related to orchestra. JSF implementation does not
> decode
> > request with enctype="multipart/form-data". Other user reported this on:
> >
> > https://issues.apache.org/jira/browse/MYFACES-2688
> >
> > For decode that kind of requests it is necessary to use a filter or a
> > FacesContextWrapper. Tomahawk is one option (using ExtensionFilter or
> > TomahawkFacesContextWrapper), but Trinidad and other jsf libraries
> usually
> > has filters that do that.
> >
> > regards,
> >
> > Leonardo Uribe
> >
> > 2010/7/2 Bruno Aranda <br...@gmail.com>
> >
> > > Hi! I have finally manager to create a very simple test case for my
> > > problem.
> > >
> > > My issue with data loss seems to be related to the enctype of the form
> > > (multipart/form-data) and the fact that I am loading data using a
> > > preRenderView event.
> > >
> > > To reproduce this problem, create a test page:
> > >
> > > <html xmlns="http://www.w3.org/1999/xhtml"
> > >      xmlns:h="http://java.sun.com/jsf/html"
> > >      xmlns:f="http://java.sun.com/jsf/core"
> > >      xmlns:ui="http://java.sun.com/jsf/facelets">
> > >
> > > <f:view contentType="text/html">
> > >
> > >    <h:body>
> > >
> > >        <h:form prependId="false" enctype="multipart/form-data">
> > >
> > >            <f:metadata>
> > >                <f:event type="preRenderView"
> > > listener="#{playgroundController.load}"/>
> > >            </f:metadata>
> > >
> > >            <h:inputText value="#{playgroundController.car.colour}"/>
> > >            <h:inputText value="#{playgroundController.car.make}"/>
> > >
> > >            <h:outputText value="#{playgroundController.car}"/>
> > >
> > >            <h:commandButton value="Talk"
> > > actionListener="#{playgroundController.talk}"/>
> > >        </h:form>
> > >
> > >    </h:body>
> > >
> > > </f:view>
> > > </html>
> > >
> > > With a backing bean behind:
> > >
> > > @Controller
> > > @Scope( "conversation.access" )
> > > public class PlaygroundController implements Serializable {
> > >
> > >    private Car car;
> > >
> > >    public PlaygroundController() {
> > >        System.out.println("\nNEW PLAY INSTANCE
> > > "+Integer.toHexString(hashCode())+"\n");
> > >    }
> > >
> > >    public void load() {
> > >        System.out.println("\nLOAD
> "+Integer.toHexString(hashCode())+"\n");
> > >        car = new Car();
> > >    }
> > >
> > >    public void talk(ActionEvent evt) {
> > >        System.out.println("CAR: "+car);
> > >    }
> > >
> > >    public Car getCar() {
> > >        return car;
> > >    }
> > >
> > >    public void setCar(Car car) {
> > >        this.car = car;
> > >    }
> > > }
> > >
> > >
> > > If the enctype is multipart/form-data, when I click on the submit
> button,
> > > the bean will be instantiated again and the load method won't be
> called...
> > > throwing an ugly exception. If the enctype is the default, everything
> works
> > > as expected and the method "talk(ActionEvent evt)" will print the car
> in
> > > the
> > > console as expected.
> > >
> > > I am using multipart/form-data because I wanted to upload some files. I
> can
> > > see it is troublesome... anyone could explain me why?
> > >
> > > Thanks!
> > >
> > > Bruno
> > >
> > >
> > > On 1 July 2010 17:09, Bruno Aranda <br...@gmail.com> wrote:
> > >
> > > > Hi,
> > > >
> > > > No I do not use portlets. I am now writing a simple test case, to see
> if
> > > I
> > > > can reproduce it. With the simplest case, everything is working as
> > > expected,
> > > > so there has to be some conflict with the rest of the application
> (e.g.
> > > > Spring 3 proxies, the transaction manager or something else). I am
> > > > investigating to see if I can reproduce it...
> > > >
> > > > The conversationContext is fine in both scenarios...
> > > >
> > > > Bruno
> > > >
> > > >
> > > > On 1 July 2010 16:50, Mario Ivankovits <ma...@ops.co.at> wrote:
> > > >
> > > >> Heya!
> > > >>
> > > >> Please check the url parameter conversationContext has been added to
> > > each
> > > >> and every url.
> > > >>
> > > >> If it is missing, a new context will be created each request and
> then a
> > > >> new
> > > >> bean will be created too.
> > > >>
> > > >> Now you sure would like to know why it is missing ... if it is
> missing.
> > > >>
> > > >> Hmmm ... do you use portlets or such?
> > > >>
> > > >>
> > > >> Ciao,
> > > >> Mario
> > > >>
> > > >> PS: Sorry for top-posting, Mail-Client oddities ... :)
> > > >>
> > > >> -----Ursprüngliche Nachricht-----
> > > >> Von: Bruno Aranda [mailto:brunoaranda@gmail.com]
> > > >> Gesendet: Donnerstag, 01. Juli 2010 14:42
> > > >> An: MyFaces Discussion
> > > >> Betreff: Re: Problems with orchestra and JSF 2
> > > >>
> > > >> What I can see as well after putting a method with the
> @PostConstruct
> > > >> annotation, is that this method is called every request, as if the
> > > >> conversation didn't exist before, which is not true.
> > > >>
> > > >> I am outputting the orchestra logs in the console, and I can see:
> > > >>
> > > >> 2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG
> (DebugPhaseListener,40) -
> > > >> Before phase: RESTORE_VIEW(1)
> > > >> 2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) -
> > > start
> > > >> conversation:general
> > > >>
> > > >> NEW INSTANCE PUBCONTROLLER HASH: 9f720d
> > > >>
> > > >> ==== POST CONS PUB === 9f720d
> > > >>
> > > >> NEW INSTANCE PUBCONTROLLER HASH: 147f75
> > > >> NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8
> > > >>
> > > >> 2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) -
> put
> > > >> bean
> > > >> to conversation:org.springframework.beans.factory.support.Dispo
> > > >> sableBeanAdapter@25394361
> > > >>
> > > >>
> > >
> (bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchest
> > > >> raScope$1@17167e6
> > > >> )
> > > >> 2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) -
> put
> > > >> bean
> > > >> to conversation:org.apache.myfaces.orchestra.conversation.sprin
> > > >>
> > > >>
> > >
> g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apa
> > > >> che.myfaces.orchestra.conversation.spring.PersistenceContextClos
> > > >> er@81f22c)
> > > >> 2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) -
> put
> > > >> bean
> > > >> to conversation:publicationController(bean=uk.ac.ebi.intact.edi
> > > >> tor.controller.curate.publication.PublicationController@9f720d)
> > > >> 2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG
> (DebugPhaseListener,35) -
> > > >> After phase: RESTORE_VIEW(1)
> > > >> ...
> > > >>
> > > >> The bean is called "publicationController", which should be
> maintained
> > > in
> > > >> a
> > > >> conversation called "general". And I see this every request. This is
> the
> > > >> bean class annotations:
> > > >>
> > > >> @Controller
> > > >> @Scope( "conversation.access" )
> > > >> @ConversationName( "general" )
> > > >> public class PublicationController extends AnnotatedObjectController
> {
> > > >> ...}
> > > >>
> > > >> I fail to see why the bean is not re-used as the conversation is not
> > > >> ended.
> > > >>
> > > >> And then, if I let the conversation expire, I see the message as
> many
> > > >> times
> > > >> as instances have been created (three requests in my case to the
> same
> > > >> page...).
> > > >>
> > > >> 2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
> > > >> (Conversation,311) - destroy conversation:general
> > > >> 2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
> > > >> (Conversation,311) - destroy conversation:general
> > > >> 2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
> > > >> (Conversation,311) - destroy conversation:general
> > > >>
> > > >> So I am not sure what is happening here :(
> > > >>
> > > >> Bruno
> > > >>
> > > >> On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:
> > > >>
> > > >> > I see, yes, that could explain it as Spring is creating proxies
> all
> > > over
> > > >> > the place to make some of the annotations work. However I am not
> doing
> > > >> > anything in the constructors, but for instance, if I set a
> property on
> > > a
> > > >> > backing bean (conversation.access scope), when I click on a button
> > > that
> > > >> > value seems to have been lost, as if I was accessing another
> object...
> > > >> > probably something to do with proxies as well and orchestra?
> > > >> >
> > > >> > Thanks!
> > > >> >
> > > >> > Bruno
> > > >> >
> > > >> >
> > > >> > On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
> > > >> >
> > > >> >> Hi Bruno!
> > > >> >>
> > > >> >> > First, could someone explain me why the
> > > >> >> > beans constructor
> > > >> >> is called multiple times?
> > > >> >>
> > > >> >> What you see might  be an effect of proxies.
> > > >> >> Usually if a subclassing proxy gets initialised, the constructor
> of
> > > the
> > > >> >> proxied class gets called.
> > > >> >> This is the reason why it's not suggested to use constructors for
> > > >> >> initialisations at all but instead use
> > > >> >> @PostConstruct (resp @PreDestroy instead of finalize)
> > > >> >>
> > > >> >> LieGrue,
> > > >> >> strub
> > > >> >>
> > > >> >>
> > > >> >> ----- Original Message ----
> > > >> >> > From: brunoaranda <br...@gmail.com>
> > > >> >> > To: MyFaces Discussion <us...@myfaces.apache.org>
> > > >> >> > Sent: Thu, July 1, 2010 12:55:30 PM
> > > >> >> > Subject: Problems with orchestra and JSF 2
> > > >> >> >
> > > >> >> > Hi,
> > > >> >>
> > > >> >> I am having some troubles with orchestra maintaining some beans
> > > >> >> > in
> > > >> >> "conversation access" scope. First, could someone explain me why
> the
> > > >> >> > beans
> > > >> >> constructor is called multiple times? In my app I have multiple
> beans
> > > >> >> > with
> > > >> >> the same conversation name and when I access one of the other
> beans
> > > >> from
> > > >> >> > my
> > > >> >> bean, it seems as it is picking a new instance. The same scenario
> > > works
> > > >> >> > fine
> > > >> >> using "session" beans, but of course then I lose all the nice
> > > >> >> > transaction
> > > >> >> management from Orchestra. Anyone with an idea where I can I
> > > >> >> > look? How is
> > > >> >> people dealing with JPA and transactions scoping multiple
> > > >> >> > requests in JSF 2?
> > > >> >>
> > > >> >> I am having another issue as well. Even if I have one
> > > >> >> > bean, the data seems
> > > >> >> not to be in the model when I click on a button that
> > > >> >> > invokes a method in
> > > >> >> that bean. For this specific case, I have a
> > > >> >> > <f:metadata> section with a
> > > >> >> viewParam. I can see the param being set in
> > > >> >> > the update model phase, but the
> > > >> >> bean's existing data seems to be lost? For
> > > >> >> > sure, I must be doing something
> > > >> >> wrong but I am unable to see
> > > >> >> > what.
> > > >> >>
> > > >> >> Thanks!
> > > >> >>
> > > >> >> Bruno
> > > >> >>
> > > >> >>
> > > >> >>
> > > >> >>
> > > >> >
> > > >>
> > > >
> > > >
> > >
>
>
>

Re: Problems with orchestra and JSF 2

Posted by Martin Koci <ma...@aura.cz>.
Hi,

I have same problem with CDI a it's conversation. 
Please see my comment on
https://issues.apache.org/jira/browse/MYFACES-2688

Best regards,

Martin Kočí

Leonardo Uribe píše v Pá 02. 07. 2010 v 13:31 -0500:
> Hi
> 
> It is not a problem related to orchestra. JSF implementation does not decode
> request with enctype="multipart/form-data". Other user reported this on:
> 
> https://issues.apache.org/jira/browse/MYFACES-2688
> 
> For decode that kind of requests it is necessary to use a filter or a
> FacesContextWrapper. Tomahawk is one option (using ExtensionFilter or
> TomahawkFacesContextWrapper), but Trinidad and other jsf libraries usually
> has filters that do that.
> 
> regards,
> 
> Leonardo Uribe
> 
> 2010/7/2 Bruno Aranda <br...@gmail.com>
> 
> > Hi! I have finally manager to create a very simple test case for my
> > problem.
> >
> > My issue with data loss seems to be related to the enctype of the form
> > (multipart/form-data) and the fact that I am loading data using a
> > preRenderView event.
> >
> > To reproduce this problem, create a test page:
> >
> > <html xmlns="http://www.w3.org/1999/xhtml"
> >      xmlns:h="http://java.sun.com/jsf/html"
> >      xmlns:f="http://java.sun.com/jsf/core"
> >      xmlns:ui="http://java.sun.com/jsf/facelets">
> >
> > <f:view contentType="text/html">
> >
> >    <h:body>
> >
> >        <h:form prependId="false" enctype="multipart/form-data">
> >
> >            <f:metadata>
> >                <f:event type="preRenderView"
> > listener="#{playgroundController.load}"/>
> >            </f:metadata>
> >
> >            <h:inputText value="#{playgroundController.car.colour}"/>
> >            <h:inputText value="#{playgroundController.car.make}"/>
> >
> >            <h:outputText value="#{playgroundController.car}"/>
> >
> >            <h:commandButton value="Talk"
> > actionListener="#{playgroundController.talk}"/>
> >        </h:form>
> >
> >    </h:body>
> >
> > </f:view>
> > </html>
> >
> > With a backing bean behind:
> >
> > @Controller
> > @Scope( "conversation.access" )
> > public class PlaygroundController implements Serializable {
> >
> >    private Car car;
> >
> >    public PlaygroundController() {
> >        System.out.println("\nNEW PLAY INSTANCE
> > "+Integer.toHexString(hashCode())+"\n");
> >    }
> >
> >    public void load() {
> >        System.out.println("\nLOAD "+Integer.toHexString(hashCode())+"\n");
> >        car = new Car();
> >    }
> >
> >    public void talk(ActionEvent evt) {
> >        System.out.println("CAR: "+car);
> >    }
> >
> >    public Car getCar() {
> >        return car;
> >    }
> >
> >    public void setCar(Car car) {
> >        this.car = car;
> >    }
> > }
> >
> >
> > If the enctype is multipart/form-data, when I click on the submit button,
> > the bean will be instantiated again and the load method won't be called...
> > throwing an ugly exception. If the enctype is the default, everything works
> > as expected and the method "talk(ActionEvent evt)" will print the car in
> > the
> > console as expected.
> >
> > I am using multipart/form-data because I wanted to upload some files. I can
> > see it is troublesome... anyone could explain me why?
> >
> > Thanks!
> >
> > Bruno
> >
> >
> > On 1 July 2010 17:09, Bruno Aranda <br...@gmail.com> wrote:
> >
> > > Hi,
> > >
> > > No I do not use portlets. I am now writing a simple test case, to see if
> > I
> > > can reproduce it. With the simplest case, everything is working as
> > expected,
> > > so there has to be some conflict with the rest of the application (e.g.
> > > Spring 3 proxies, the transaction manager or something else). I am
> > > investigating to see if I can reproduce it...
> > >
> > > The conversationContext is fine in both scenarios...
> > >
> > > Bruno
> > >
> > >
> > > On 1 July 2010 16:50, Mario Ivankovits <ma...@ops.co.at> wrote:
> > >
> > >> Heya!
> > >>
> > >> Please check the url parameter conversationContext has been added to
> > each
> > >> and every url.
> > >>
> > >> If it is missing, a new context will be created each request and then a
> > >> new
> > >> bean will be created too.
> > >>
> > >> Now you sure would like to know why it is missing ... if it is missing.
> > >>
> > >> Hmmm ... do you use portlets or such?
> > >>
> > >>
> > >> Ciao,
> > >> Mario
> > >>
> > >> PS: Sorry for top-posting, Mail-Client oddities ... :)
> > >>
> > >> -----Ursprüngliche Nachricht-----
> > >> Von: Bruno Aranda [mailto:brunoaranda@gmail.com]
> > >> Gesendet: Donnerstag, 01. Juli 2010 14:42
> > >> An: MyFaces Discussion
> > >> Betreff: Re: Problems with orchestra and JSF 2
> > >>
> > >> What I can see as well after putting a method with the @PostConstruct
> > >> annotation, is that this method is called every request, as if the
> > >> conversation didn't exist before, which is not true.
> > >>
> > >> I am outputting the orchestra logs in the console, and I can see:
> > >>
> > >> 2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG (DebugPhaseListener,40) -
> > >> Before phase: RESTORE_VIEW(1)
> > >> 2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) -
> > start
> > >> conversation:general
> > >>
> > >> NEW INSTANCE PUBCONTROLLER HASH: 9f720d
> > >>
> > >> ==== POST CONS PUB === 9f720d
> > >>
> > >> NEW INSTANCE PUBCONTROLLER HASH: 147f75
> > >> NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8
> > >>
> > >> 2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) - put
> > >> bean
> > >> to conversation:org.springframework.beans.factory.support.Dispo
> > >> sableBeanAdapter@25394361
> > >>
> > >>
> > (bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchest
> > >> raScope$1@17167e6
> > >> )
> > >> 2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) - put
> > >> bean
> > >> to conversation:org.apache.myfaces.orchestra.conversation.sprin
> > >>
> > >>
> > g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apa
> > >> che.myfaces.orchestra.conversation.spring.PersistenceContextClos
> > >> er@81f22c)
> > >> 2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) - put
> > >> bean
> > >> to conversation:publicationController(bean=uk.ac.ebi.intact.edi
> > >> tor.controller.curate.publication.PublicationController@9f720d)
> > >> 2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG (DebugPhaseListener,35) -
> > >> After phase: RESTORE_VIEW(1)
> > >> ...
> > >>
> > >> The bean is called "publicationController", which should be maintained
> > in
> > >> a
> > >> conversation called "general". And I see this every request. This is the
> > >> bean class annotations:
> > >>
> > >> @Controller
> > >> @Scope( "conversation.access" )
> > >> @ConversationName( "general" )
> > >> public class PublicationController extends AnnotatedObjectController {
> > >> ...}
> > >>
> > >> I fail to see why the bean is not re-used as the conversation is not
> > >> ended.
> > >>
> > >> And then, if I let the conversation expire, I see the message as many
> > >> times
> > >> as instances have been created (three requests in my case to the same
> > >> page...).
> > >>
> > >> 2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
> > >> (Conversation,311) - destroy conversation:general
> > >> 2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
> > >> (Conversation,311) - destroy conversation:general
> > >> 2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
> > >> (Conversation,311) - destroy conversation:general
> > >>
> > >> So I am not sure what is happening here :(
> > >>
> > >> Bruno
> > >>
> > >> On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:
> > >>
> > >> > I see, yes, that could explain it as Spring is creating proxies all
> > over
> > >> > the place to make some of the annotations work. However I am not doing
> > >> > anything in the constructors, but for instance, if I set a property on
> > a
> > >> > backing bean (conversation.access scope), when I click on a button
> > that
> > >> > value seems to have been lost, as if I was accessing another object...
> > >> > probably something to do with proxies as well and orchestra?
> > >> >
> > >> > Thanks!
> > >> >
> > >> > Bruno
> > >> >
> > >> >
> > >> > On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
> > >> >
> > >> >> Hi Bruno!
> > >> >>
> > >> >> > First, could someone explain me why the
> > >> >> > beans constructor
> > >> >> is called multiple times?
> > >> >>
> > >> >> What you see might  be an effect of proxies.
> > >> >> Usually if a subclassing proxy gets initialised, the constructor of
> > the
> > >> >> proxied class gets called.
> > >> >> This is the reason why it's not suggested to use constructors for
> > >> >> initialisations at all but instead use
> > >> >> @PostConstruct (resp @PreDestroy instead of finalize)
> > >> >>
> > >> >> LieGrue,
> > >> >> strub
> > >> >>
> > >> >>
> > >> >> ----- Original Message ----
> > >> >> > From: brunoaranda <br...@gmail.com>
> > >> >> > To: MyFaces Discussion <us...@myfaces.apache.org>
> > >> >> > Sent: Thu, July 1, 2010 12:55:30 PM
> > >> >> > Subject: Problems with orchestra and JSF 2
> > >> >> >
> > >> >> > Hi,
> > >> >>
> > >> >> I am having some troubles with orchestra maintaining some beans
> > >> >> > in
> > >> >> "conversation access" scope. First, could someone explain me why the
> > >> >> > beans
> > >> >> constructor is called multiple times? In my app I have multiple beans
> > >> >> > with
> > >> >> the same conversation name and when I access one of the other beans
> > >> from
> > >> >> > my
> > >> >> bean, it seems as it is picking a new instance. The same scenario
> > works
> > >> >> > fine
> > >> >> using "session" beans, but of course then I lose all the nice
> > >> >> > transaction
> > >> >> management from Orchestra. Anyone with an idea where I can I
> > >> >> > look? How is
> > >> >> people dealing with JPA and transactions scoping multiple
> > >> >> > requests in JSF 2?
> > >> >>
> > >> >> I am having another issue as well. Even if I have one
> > >> >> > bean, the data seems
> > >> >> not to be in the model when I click on a button that
> > >> >> > invokes a method in
> > >> >> that bean. For this specific case, I have a
> > >> >> > <f:metadata> section with a
> > >> >> viewParam. I can see the param being set in
> > >> >> > the update model phase, but the
> > >> >> bean's existing data seems to be lost? For
> > >> >> > sure, I must be doing something
> > >> >> wrong but I am unable to see
> > >> >> > what.
> > >> >>
> > >> >> Thanks!
> > >> >>
> > >> >> Bruno
> > >> >>
> > >> >>
> > >> >>
> > >> >>
> > >> >
> > >>
> > >
> > >
> >



Re: Problems with orchestra and JSF 2

Posted by Leonardo Uribe <lu...@gmail.com>.
Hi

It is not a problem related to orchestra. JSF implementation does not decode
request with enctype="multipart/form-data". Other user reported this on:

https://issues.apache.org/jira/browse/MYFACES-2688

For decode that kind of requests it is necessary to use a filter or a
FacesContextWrapper. Tomahawk is one option (using ExtensionFilter or
TomahawkFacesContextWrapper), but Trinidad and other jsf libraries usually
has filters that do that.

regards,

Leonardo Uribe

2010/7/2 Bruno Aranda <br...@gmail.com>

> Hi! I have finally manager to create a very simple test case for my
> problem.
>
> My issue with data loss seems to be related to the enctype of the form
> (multipart/form-data) and the fact that I am loading data using a
> preRenderView event.
>
> To reproduce this problem, create a test page:
>
> <html xmlns="http://www.w3.org/1999/xhtml"
>      xmlns:h="http://java.sun.com/jsf/html"
>      xmlns:f="http://java.sun.com/jsf/core"
>      xmlns:ui="http://java.sun.com/jsf/facelets">
>
> <f:view contentType="text/html">
>
>    <h:body>
>
>        <h:form prependId="false" enctype="multipart/form-data">
>
>            <f:metadata>
>                <f:event type="preRenderView"
> listener="#{playgroundController.load}"/>
>            </f:metadata>
>
>            <h:inputText value="#{playgroundController.car.colour}"/>
>            <h:inputText value="#{playgroundController.car.make}"/>
>
>            <h:outputText value="#{playgroundController.car}"/>
>
>            <h:commandButton value="Talk"
> actionListener="#{playgroundController.talk}"/>
>        </h:form>
>
>    </h:body>
>
> </f:view>
> </html>
>
> With a backing bean behind:
>
> @Controller
> @Scope( "conversation.access" )
> public class PlaygroundController implements Serializable {
>
>    private Car car;
>
>    public PlaygroundController() {
>        System.out.println("\nNEW PLAY INSTANCE
> "+Integer.toHexString(hashCode())+"\n");
>    }
>
>    public void load() {
>        System.out.println("\nLOAD "+Integer.toHexString(hashCode())+"\n");
>        car = new Car();
>    }
>
>    public void talk(ActionEvent evt) {
>        System.out.println("CAR: "+car);
>    }
>
>    public Car getCar() {
>        return car;
>    }
>
>    public void setCar(Car car) {
>        this.car = car;
>    }
> }
>
>
> If the enctype is multipart/form-data, when I click on the submit button,
> the bean will be instantiated again and the load method won't be called...
> throwing an ugly exception. If the enctype is the default, everything works
> as expected and the method "talk(ActionEvent evt)" will print the car in
> the
> console as expected.
>
> I am using multipart/form-data because I wanted to upload some files. I can
> see it is troublesome... anyone could explain me why?
>
> Thanks!
>
> Bruno
>
>
> On 1 July 2010 17:09, Bruno Aranda <br...@gmail.com> wrote:
>
> > Hi,
> >
> > No I do not use portlets. I am now writing a simple test case, to see if
> I
> > can reproduce it. With the simplest case, everything is working as
> expected,
> > so there has to be some conflict with the rest of the application (e.g.
> > Spring 3 proxies, the transaction manager or something else). I am
> > investigating to see if I can reproduce it...
> >
> > The conversationContext is fine in both scenarios...
> >
> > Bruno
> >
> >
> > On 1 July 2010 16:50, Mario Ivankovits <ma...@ops.co.at> wrote:
> >
> >> Heya!
> >>
> >> Please check the url parameter conversationContext has been added to
> each
> >> and every url.
> >>
> >> If it is missing, a new context will be created each request and then a
> >> new
> >> bean will be created too.
> >>
> >> Now you sure would like to know why it is missing ... if it is missing.
> >>
> >> Hmmm ... do you use portlets or such?
> >>
> >>
> >> Ciao,
> >> Mario
> >>
> >> PS: Sorry for top-posting, Mail-Client oddities ... :)
> >>
> >> -----Ursprüngliche Nachricht-----
> >> Von: Bruno Aranda [mailto:brunoaranda@gmail.com]
> >> Gesendet: Donnerstag, 01. Juli 2010 14:42
> >> An: MyFaces Discussion
> >> Betreff: Re: Problems with orchestra and JSF 2
> >>
> >> What I can see as well after putting a method with the @PostConstruct
> >> annotation, is that this method is called every request, as if the
> >> conversation didn't exist before, which is not true.
> >>
> >> I am outputting the orchestra logs in the console, and I can see:
> >>
> >> 2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG (DebugPhaseListener,40) -
> >> Before phase: RESTORE_VIEW(1)
> >> 2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) -
> start
> >> conversation:general
> >>
> >> NEW INSTANCE PUBCONTROLLER HASH: 9f720d
> >>
> >> ==== POST CONS PUB === 9f720d
> >>
> >> NEW INSTANCE PUBCONTROLLER HASH: 147f75
> >> NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8
> >>
> >> 2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) - put
> >> bean
> >> to conversation:org.springframework.beans.factory.support.Dispo
> >> sableBeanAdapter@25394361
> >>
> >>
> (bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchest
> >> raScope$1@17167e6
> >> )
> >> 2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) - put
> >> bean
> >> to conversation:org.apache.myfaces.orchestra.conversation.sprin
> >>
> >>
> g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apa
> >> che.myfaces.orchestra.conversation.spring.PersistenceContextClos
> >> er@81f22c)
> >> 2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) - put
> >> bean
> >> to conversation:publicationController(bean=uk.ac.ebi.intact.edi
> >> tor.controller.curate.publication.PublicationController@9f720d)
> >> 2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG (DebugPhaseListener,35) -
> >> After phase: RESTORE_VIEW(1)
> >> ...
> >>
> >> The bean is called "publicationController", which should be maintained
> in
> >> a
> >> conversation called "general". And I see this every request. This is the
> >> bean class annotations:
> >>
> >> @Controller
> >> @Scope( "conversation.access" )
> >> @ConversationName( "general" )
> >> public class PublicationController extends AnnotatedObjectController {
> >> ...}
> >>
> >> I fail to see why the bean is not re-used as the conversation is not
> >> ended.
> >>
> >> And then, if I let the conversation expire, I see the message as many
> >> times
> >> as instances have been created (three requests in my case to the same
> >> page...).
> >>
> >> 2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
> >> (Conversation,311) - destroy conversation:general
> >> 2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
> >> (Conversation,311) - destroy conversation:general
> >> 2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
> >> (Conversation,311) - destroy conversation:general
> >>
> >> So I am not sure what is happening here :(
> >>
> >> Bruno
> >>
> >> On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:
> >>
> >> > I see, yes, that could explain it as Spring is creating proxies all
> over
> >> > the place to make some of the annotations work. However I am not doing
> >> > anything in the constructors, but for instance, if I set a property on
> a
> >> > backing bean (conversation.access scope), when I click on a button
> that
> >> > value seems to have been lost, as if I was accessing another object...
> >> > probably something to do with proxies as well and orchestra?
> >> >
> >> > Thanks!
> >> >
> >> > Bruno
> >> >
> >> >
> >> > On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
> >> >
> >> >> Hi Bruno!
> >> >>
> >> >> > First, could someone explain me why the
> >> >> > beans constructor
> >> >> is called multiple times?
> >> >>
> >> >> What you see might  be an effect of proxies.
> >> >> Usually if a subclassing proxy gets initialised, the constructor of
> the
> >> >> proxied class gets called.
> >> >> This is the reason why it's not suggested to use constructors for
> >> >> initialisations at all but instead use
> >> >> @PostConstruct (resp @PreDestroy instead of finalize)
> >> >>
> >> >> LieGrue,
> >> >> strub
> >> >>
> >> >>
> >> >> ----- Original Message ----
> >> >> > From: brunoaranda <br...@gmail.com>
> >> >> > To: MyFaces Discussion <us...@myfaces.apache.org>
> >> >> > Sent: Thu, July 1, 2010 12:55:30 PM
> >> >> > Subject: Problems with orchestra and JSF 2
> >> >> >
> >> >> > Hi,
> >> >>
> >> >> I am having some troubles with orchestra maintaining some beans
> >> >> > in
> >> >> "conversation access" scope. First, could someone explain me why the
> >> >> > beans
> >> >> constructor is called multiple times? In my app I have multiple beans
> >> >> > with
> >> >> the same conversation name and when I access one of the other beans
> >> from
> >> >> > my
> >> >> bean, it seems as it is picking a new instance. The same scenario
> works
> >> >> > fine
> >> >> using "session" beans, but of course then I lose all the nice
> >> >> > transaction
> >> >> management from Orchestra. Anyone with an idea where I can I
> >> >> > look? How is
> >> >> people dealing with JPA and transactions scoping multiple
> >> >> > requests in JSF 2?
> >> >>
> >> >> I am having another issue as well. Even if I have one
> >> >> > bean, the data seems
> >> >> not to be in the model when I click on a button that
> >> >> > invokes a method in
> >> >> that bean. For this specific case, I have a
> >> >> > <f:metadata> section with a
> >> >> viewParam. I can see the param being set in
> >> >> > the update model phase, but the
> >> >> bean's existing data seems to be lost? For
> >> >> > sure, I must be doing something
> >> >> wrong but I am unable to see
> >> >> > what.
> >> >>
> >> >> Thanks!
> >> >>
> >> >> Bruno
> >> >>
> >> >>
> >> >>
> >> >>
> >> >
> >>
> >
> >
>

Re: Problems with orchestra and JSF 2

Posted by Bruno Aranda <br...@gmail.com>.
Hi! I have finally manager to create a very simple test case for my problem.

My issue with data loss seems to be related to the enctype of the form
(multipart/form-data) and the fact that I am loading data using a
preRenderView event.

To reproduce this problem, create a test page:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

<f:view contentType="text/html">

    <h:body>

        <h:form prependId="false" enctype="multipart/form-data">

            <f:metadata>
                <f:event type="preRenderView"
listener="#{playgroundController.load}"/>
            </f:metadata>

            <h:inputText value="#{playgroundController.car.colour}"/>
            <h:inputText value="#{playgroundController.car.make}"/>

            <h:outputText value="#{playgroundController.car}"/>

            <h:commandButton value="Talk"
actionListener="#{playgroundController.talk}"/>
        </h:form>

    </h:body>

</f:view>
</html>

With a backing bean behind:

@Controller
@Scope( "conversation.access" )
public class PlaygroundController implements Serializable {

    private Car car;

    public PlaygroundController() {
        System.out.println("\nNEW PLAY INSTANCE
"+Integer.toHexString(hashCode())+"\n");
    }

    public void load() {
        System.out.println("\nLOAD "+Integer.toHexString(hashCode())+"\n");
        car = new Car();
    }

    public void talk(ActionEvent evt) {
        System.out.println("CAR: "+car);
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }
}


If the enctype is multipart/form-data, when I click on the submit button,
the bean will be instantiated again and the load method won't be called...
throwing an ugly exception. If the enctype is the default, everything works
as expected and the method "talk(ActionEvent evt)" will print the car in the
console as expected.

I am using multipart/form-data because I wanted to upload some files. I can
see it is troublesome... anyone could explain me why?

Thanks!

Bruno


On 1 July 2010 17:09, Bruno Aranda <br...@gmail.com> wrote:

> Hi,
>
> No I do not use portlets. I am now writing a simple test case, to see if I
> can reproduce it. With the simplest case, everything is working as expected,
> so there has to be some conflict with the rest of the application (e.g.
> Spring 3 proxies, the transaction manager or something else). I am
> investigating to see if I can reproduce it...
>
> The conversationContext is fine in both scenarios...
>
> Bruno
>
>
> On 1 July 2010 16:50, Mario Ivankovits <ma...@ops.co.at> wrote:
>
>> Heya!
>>
>> Please check the url parameter conversationContext has been added to each
>> and every url.
>>
>> If it is missing, a new context will be created each request and then a
>> new
>> bean will be created too.
>>
>> Now you sure would like to know why it is missing ... if it is missing.
>>
>> Hmmm ... do you use portlets or such?
>>
>>
>> Ciao,
>> Mario
>>
>> PS: Sorry for top-posting, Mail-Client oddities ... :)
>>
>> -----Ursprüngliche Nachricht-----
>> Von: Bruno Aranda [mailto:brunoaranda@gmail.com]
>> Gesendet: Donnerstag, 01. Juli 2010 14:42
>> An: MyFaces Discussion
>> Betreff: Re: Problems with orchestra and JSF 2
>>
>> What I can see as well after putting a method with the @PostConstruct
>> annotation, is that this method is called every request, as if the
>> conversation didn't exist before, which is not true.
>>
>> I am outputting the orchestra logs in the console, and I can see:
>>
>> 2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG (DebugPhaseListener,40) -
>> Before phase: RESTORE_VIEW(1)
>> 2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) - start
>> conversation:general
>>
>> NEW INSTANCE PUBCONTROLLER HASH: 9f720d
>>
>> ==== POST CONS PUB === 9f720d
>>
>> NEW INSTANCE PUBCONTROLLER HASH: 147f75
>> NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8
>>
>> 2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) - put
>> bean
>> to conversation:org.springframework.beans.factory.support.Dispo
>> sableBeanAdapter@25394361
>>
>> (bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchest
>> raScope$1@17167e6
>> )
>> 2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) - put
>> bean
>> to conversation:org.apache.myfaces.orchestra.conversation.sprin
>>
>> g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apa
>> che.myfaces.orchestra.conversation.spring.PersistenceContextClos
>> er@81f22c)
>> 2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) - put
>> bean
>> to conversation:publicationController(bean=uk.ac.ebi.intact.edi
>> tor.controller.curate.publication.PublicationController@9f720d)
>> 2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG (DebugPhaseListener,35) -
>> After phase: RESTORE_VIEW(1)
>> ...
>>
>> The bean is called "publicationController", which should be maintained in
>> a
>> conversation called "general". And I see this every request. This is the
>> bean class annotations:
>>
>> @Controller
>> @Scope( "conversation.access" )
>> @ConversationName( "general" )
>> public class PublicationController extends AnnotatedObjectController {
>> ...}
>>
>> I fail to see why the bean is not re-used as the conversation is not
>> ended.
>>
>> And then, if I let the conversation expire, I see the message as many
>> times
>> as instances have been created (three requests in my case to the same
>> page...).
>>
>> 2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
>> (Conversation,311) - destroy conversation:general
>> 2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
>> (Conversation,311) - destroy conversation:general
>> 2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
>> (Conversation,311) - destroy conversation:general
>>
>> So I am not sure what is happening here :(
>>
>> Bruno
>>
>> On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:
>>
>> > I see, yes, that could explain it as Spring is creating proxies all over
>> > the place to make some of the annotations work. However I am not doing
>> > anything in the constructors, but for instance, if I set a property on a
>> > backing bean (conversation.access scope), when I click on a button that
>> > value seems to have been lost, as if I was accessing another object...
>> > probably something to do with proxies as well and orchestra?
>> >
>> > Thanks!
>> >
>> > Bruno
>> >
>> >
>> > On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
>> >
>> >> Hi Bruno!
>> >>
>> >> > First, could someone explain me why the
>> >> > beans constructor
>> >> is called multiple times?
>> >>
>> >> What you see might  be an effect of proxies.
>> >> Usually if a subclassing proxy gets initialised, the constructor of the
>> >> proxied class gets called.
>> >> This is the reason why it's not suggested to use constructors for
>> >> initialisations at all but instead use
>> >> @PostConstruct (resp @PreDestroy instead of finalize)
>> >>
>> >> LieGrue,
>> >> strub
>> >>
>> >>
>> >> ----- Original Message ----
>> >> > From: brunoaranda <br...@gmail.com>
>> >> > To: MyFaces Discussion <us...@myfaces.apache.org>
>> >> > Sent: Thu, July 1, 2010 12:55:30 PM
>> >> > Subject: Problems with orchestra and JSF 2
>> >> >
>> >> > Hi,
>> >>
>> >> I am having some troubles with orchestra maintaining some beans
>> >> > in
>> >> "conversation access" scope. First, could someone explain me why the
>> >> > beans
>> >> constructor is called multiple times? In my app I have multiple beans
>> >> > with
>> >> the same conversation name and when I access one of the other beans
>> from
>> >> > my
>> >> bean, it seems as it is picking a new instance. The same scenario works
>> >> > fine
>> >> using "session" beans, but of course then I lose all the nice
>> >> > transaction
>> >> management from Orchestra. Anyone with an idea where I can I
>> >> > look? How is
>> >> people dealing with JPA and transactions scoping multiple
>> >> > requests in JSF 2?
>> >>
>> >> I am having another issue as well. Even if I have one
>> >> > bean, the data seems
>> >> not to be in the model when I click on a button that
>> >> > invokes a method in
>> >> that bean. For this specific case, I have a
>> >> > <f:metadata> section with a
>> >> viewParam. I can see the param being set in
>> >> > the update model phase, but the
>> >> bean's existing data seems to be lost? For
>> >> > sure, I must be doing something
>> >> wrong but I am unable to see
>> >> > what.
>> >>
>> >> Thanks!
>> >>
>> >> Bruno
>> >>
>> >>
>> >>
>> >>
>> >
>>
>
>

Re: Problems with orchestra and JSF 2

Posted by Bruno Aranda <br...@gmail.com>.
Hi,

No I do not use portlets. I am now writing a simple test case, to see if I
can reproduce it. With the simplest case, everything is working as expected,
so there has to be some conflict with the rest of the application (e.g.
Spring 3 proxies, the transaction manager or something else). I am
investigating to see if I can reproduce it...

The conversationContext is fine in both scenarios...

Bruno

On 1 July 2010 16:50, Mario Ivankovits <ma...@ops.co.at> wrote:

> Heya!
>
> Please check the url parameter conversationContext has been added to each
> and every url.
>
> If it is missing, a new context will be created each request and then a new
> bean will be created too.
>
> Now you sure would like to know why it is missing ... if it is missing.
>
> Hmmm ... do you use portlets or such?
>
>
> Ciao,
> Mario
>
> PS: Sorry for top-posting, Mail-Client oddities ... :)
>
> -----Ursprüngliche Nachricht-----
> Von: Bruno Aranda [mailto:brunoaranda@gmail.com]
> Gesendet: Donnerstag, 01. Juli 2010 14:42
> An: MyFaces Discussion
> Betreff: Re: Problems with orchestra and JSF 2
>
> What I can see as well after putting a method with the @PostConstruct
> annotation, is that this method is called every request, as if the
> conversation didn't exist before, which is not true.
>
> I am outputting the orchestra logs in the console, and I can see:
>
> 2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG (DebugPhaseListener,40) -
> Before phase: RESTORE_VIEW(1)
> 2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) - start
> conversation:general
>
> NEW INSTANCE PUBCONTROLLER HASH: 9f720d
>
> ==== POST CONS PUB === 9f720d
>
> NEW INSTANCE PUBCONTROLLER HASH: 147f75
> NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8
>
> 2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) - put
> bean
> to conversation:org.springframework.beans.factory.support.Dispo
> sableBeanAdapter@25394361
>
> (bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchest
> raScope$1@17167e6
> )
> 2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) - put
> bean
> to conversation:org.apache.myfaces.orchestra.conversation.sprin
>
> g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apa
> che.myfaces.orchestra.conversation.spring.PersistenceContextClos
> er@81f22c)
> 2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) - put
> bean
> to conversation:publicationController(bean=uk.ac.ebi.intact.edi
> tor.controller.curate.publication.PublicationController@9f720d)
> 2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG (DebugPhaseListener,35) -
> After phase: RESTORE_VIEW(1)
> ...
>
> The bean is called "publicationController", which should be maintained in a
> conversation called "general". And I see this every request. This is the
> bean class annotations:
>
> @Controller
> @Scope( "conversation.access" )
> @ConversationName( "general" )
> public class PublicationController extends AnnotatedObjectController {
> ...}
>
> I fail to see why the bean is not re-used as the conversation is not ended.
>
> And then, if I let the conversation expire, I see the message as many times
> as instances have been created (three requests in my case to the same
> page...).
>
> 2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
> (Conversation,311) - destroy conversation:general
> 2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
> (Conversation,311) - destroy conversation:general
> 2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
> (Conversation,311) - destroy conversation:general
>
> So I am not sure what is happening here :(
>
> Bruno
>
> On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:
>
> > I see, yes, that could explain it as Spring is creating proxies all over
> > the place to make some of the annotations work. However I am not doing
> > anything in the constructors, but for instance, if I set a property on a
> > backing bean (conversation.access scope), when I click on a button that
> > value seems to have been lost, as if I was accessing another object...
> > probably something to do with proxies as well and orchestra?
> >
> > Thanks!
> >
> > Bruno
> >
> >
> > On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
> >
> >> Hi Bruno!
> >>
> >> > First, could someone explain me why the
> >> > beans constructor
> >> is called multiple times?
> >>
> >> What you see might  be an effect of proxies.
> >> Usually if a subclassing proxy gets initialised, the constructor of the
> >> proxied class gets called.
> >> This is the reason why it's not suggested to use constructors for
> >> initialisations at all but instead use
> >> @PostConstruct (resp @PreDestroy instead of finalize)
> >>
> >> LieGrue,
> >> strub
> >>
> >>
> >> ----- Original Message ----
> >> > From: brunoaranda <br...@gmail.com>
> >> > To: MyFaces Discussion <us...@myfaces.apache.org>
> >> > Sent: Thu, July 1, 2010 12:55:30 PM
> >> > Subject: Problems with orchestra and JSF 2
> >> >
> >> > Hi,
> >>
> >> I am having some troubles with orchestra maintaining some beans
> >> > in
> >> "conversation access" scope. First, could someone explain me why the
> >> > beans
> >> constructor is called multiple times? In my app I have multiple beans
> >> > with
> >> the same conversation name and when I access one of the other beans from
> >> > my
> >> bean, it seems as it is picking a new instance. The same scenario works
> >> > fine
> >> using "session" beans, but of course then I lose all the nice
> >> > transaction
> >> management from Orchestra. Anyone with an idea where I can I
> >> > look? How is
> >> people dealing with JPA and transactions scoping multiple
> >> > requests in JSF 2?
> >>
> >> I am having another issue as well. Even if I have one
> >> > bean, the data seems
> >> not to be in the model when I click on a button that
> >> > invokes a method in
> >> that bean. For this specific case, I have a
> >> > <f:metadata> section with a
> >> viewParam. I can see the param being set in
> >> > the update model phase, but the
> >> bean's existing data seems to be lost? For
> >> > sure, I must be doing something
> >> wrong but I am unable to see
> >> > what.
> >>
> >> Thanks!
> >>
> >> Bruno
> >>
> >>
> >>
> >>
> >
>

Re: Problems with orchestra and JSF 2

Posted by Mario Ivankovits <ma...@ops.co.at>.
Heya!

Please check the url parameter conversationContext has been added to each
and every url.

If it is missing, a new context will be created each request and then a new
bean will be created too.

Now you sure would like to know why it is missing ... if it is missing.

Hmmm ... do you use portlets or such?


Ciao,
Mario

PS: Sorry for top-posting, Mail-Client oddities ... :)

-----Ursprüngliche Nachricht-----
Von: Bruno Aranda [mailto:brunoaranda@gmail.com] 
Gesendet: Donnerstag, 01. Juli 2010 14:42
An: MyFaces Discussion
Betreff: Re: Problems with orchestra and JSF 2

What I can see as well after putting a method with the @PostConstruct
annotation, is that this method is called every request, as if the
conversation didn't exist before, which is not true.

I am outputting the orchestra logs in the console, and I can see:

2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG (DebugPhaseListener,40) -
Before phase: RESTORE_VIEW(1)
2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) - start
conversation:general

NEW INSTANCE PUBCONTROLLER HASH: 9f720d

==== POST CONS PUB === 9f720d

NEW INSTANCE PUBCONTROLLER HASH: 147f75
NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8

2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) - put bean
to conversation:org.springframework.beans.factory.support.Dispo
sableBeanAdapter@25394361
(bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchest
raScope$1@17167e6
)
2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) - put bean
to conversation:org.apache.myfaces.orchestra.conversation.sprin
g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apa
che.myfaces.orchestra.conversation.spring.PersistenceContextClos
er@81f22c)
2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) - put bean
to conversation:publicationController(bean=uk.ac.ebi.intact.edi
tor.controller.curate.publication.PublicationController@9f720d)
2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG (DebugPhaseListener,35) -
After phase: RESTORE_VIEW(1)
...

The bean is called "publicationController", which should be maintained in a
conversation called "general". And I see this every request. This is the
bean class annotations:

@Controller
@Scope( "conversation.access" )
@ConversationName( "general" )
public class PublicationController extends AnnotatedObjectController {
...}

I fail to see why the bean is not re-used as the conversation is not ended.

And then, if I let the conversation expire, I see the message as many times
as instances have been created (three requests in my case to the same
page...).

2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
(Conversation,311) - destroy conversation:general
2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
(Conversation,311) - destroy conversation:general
2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
(Conversation,311) - destroy conversation:general

So I am not sure what is happening here :(

Bruno

On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:

> I see, yes, that could explain it as Spring is creating proxies all over
> the place to make some of the annotations work. However I am not doing
> anything in the constructors, but for instance, if I set a property on a
> backing bean (conversation.access scope), when I click on a button that
> value seems to have been lost, as if I was accessing another object...
> probably something to do with proxies as well and orchestra?
>
> Thanks!
>
> Bruno
>
>
> On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
>
>> Hi Bruno!
>>
>> > First, could someone explain me why the
>> > beans constructor
>> is called multiple times?
>>
>> What you see might  be an effect of proxies.
>> Usually if a subclassing proxy gets initialised, the constructor of the
>> proxied class gets called.
>> This is the reason why it's not suggested to use constructors for
>> initialisations at all but instead use
>> @PostConstruct (resp @PreDestroy instead of finalize)
>>
>> LieGrue,
>> strub
>>
>>
>> ----- Original Message ----
>> > From: brunoaranda <br...@gmail.com>
>> > To: MyFaces Discussion <us...@myfaces.apache.org>
>> > Sent: Thu, July 1, 2010 12:55:30 PM
>> > Subject: Problems with orchestra and JSF 2
>> >
>> > Hi,
>>
>> I am having some troubles with orchestra maintaining some beans
>> > in
>> "conversation access" scope. First, could someone explain me why the
>> > beans
>> constructor is called multiple times? In my app I have multiple beans
>> > with
>> the same conversation name and when I access one of the other beans from
>> > my
>> bean, it seems as it is picking a new instance. The same scenario works
>> > fine
>> using "session" beans, but of course then I lose all the nice
>> > transaction
>> management from Orchestra. Anyone with an idea where I can I
>> > look? How is
>> people dealing with JPA and transactions scoping multiple
>> > requests in JSF 2?
>>
>> I am having another issue as well. Even if I have one
>> > bean, the data seems
>> not to be in the model when I click on a button that
>> > invokes a method in
>> that bean. For this specific case, I have a
>> > <f:metadata> section with a
>> viewParam. I can see the param being set in
>> > the update model phase, but the
>> bean's existing data seems to be lost? For
>> > sure, I must be doing something
>> wrong but I am unable to see
>> > what.
>>
>> Thanks!
>>
>> Bruno
>>
>>
>>
>>
>

Re: Problems with orchestra and JSF 2

Posted by Bruno Aranda <br...@gmail.com>.
What I can see as well after putting a method with the @PostConstruct
annotation, is that this method is called every request, as if the
conversation didn't exist before, which is not true.

I am outputting the orchestra logs in the console, and I can see:

2010-07-01 14:05:32,729 [qtp33228489-20] DEBUG (DebugPhaseListener,40) -
Before phase: RESTORE_VIEW(1)
2010-07-01 14:05:32,823 [qtp33228489-20] DEBUG (Conversation,108) - start
conversation:general

NEW INSTANCE PUBCONTROLLER HASH: 9f720d

==== POST CONS PUB === 9f720d

NEW INSTANCE PUBCONTROLLER HASH: 147f75
NEW INSTANCE PUBCONTROLLER HASH: 1bbefe8

2010-07-01 14:05:32,844 [qtp33228489-20] DEBUG (Conversation,176) - put bean
to conversation:org.springframework.beans.factory.support.Dispo
sableBeanAdapter@25394361
(bean=org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchestraScope$1@17167e6
)
2010-07-01 14:05:32,846 [qtp33228489-20] DEBUG (Conversation,176) - put bean
to conversation:org.apache.myfaces.orchestra.conversation.sprin
g.PersistenceContextConversationInterceptor.PERSISTENCE_CONTEXT(bean=org.apache.myfaces.orchestra.conversation.spring.PersistenceContextClos
er@81f22c)
2010-07-01 14:05:32,847 [qtp33228489-20] DEBUG (Conversation,176) - put bean
to conversation:publicationController(bean=uk.ac.ebi.intact.edi
tor.controller.curate.publication.PublicationController@9f720d)
2010-07-01 14:05:32,853 [qtp33228489-20] DEBUG (DebugPhaseListener,35) -
After phase: RESTORE_VIEW(1)
...

The bean is called "publicationController", which should be maintained in a
conversation called "general". And I see this every request. This is the
bean class annotations:

@Controller
@Scope( "conversation.access" )
@ConversationName( "general" )
public class PublicationController extends AnnotatedObjectController {
...}

I fail to see why the bean is not re-used as the conversation is not ended.

And then, if I let the conversation expire, I see the message as many times
as instances have been created (three requests in my case to the same
page...).

2010-07-01 14:39:28,563 [Orchestra:ConversationWiperThread] DEBUG
(Conversation,311) - destroy conversation:general
2010-07-01 14:39:28,565 [Orchestra:ConversationWiperThread] DEBUG
(Conversation,311) - destroy conversation:general
2010-07-01 14:39:28,566 [Orchestra:ConversationWiperThread] DEBUG
(Conversation,311) - destroy conversation:general

So I am not sure what is happening here :(

Bruno

On 1 July 2010 13:27, Bruno Aranda <br...@gmail.com> wrote:

> I see, yes, that could explain it as Spring is creating proxies all over
> the place to make some of the annotations work. However I am not doing
> anything in the constructors, but for instance, if I set a property on a
> backing bean (conversation.access scope), when I click on a button that
> value seems to have been lost, as if I was accessing another object...
> probably something to do with proxies as well and orchestra?
>
> Thanks!
>
> Bruno
>
>
> On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:
>
>> Hi Bruno!
>>
>> > First, could someone explain me why the
>> > beans constructor
>> is called multiple times?
>>
>> What you see might  be an effect of proxies.
>> Usually if a subclassing proxy gets initialised, the constructor of the
>> proxied class gets called.
>> This is the reason why it's not suggested to use constructors for
>> initialisations at all but instead use
>> @PostConstruct (resp @PreDestroy instead of finalize)
>>
>> LieGrue,
>> strub
>>
>>
>> ----- Original Message ----
>> > From: brunoaranda <br...@gmail.com>
>> > To: MyFaces Discussion <us...@myfaces.apache.org>
>> > Sent: Thu, July 1, 2010 12:55:30 PM
>> > Subject: Problems with orchestra and JSF 2
>> >
>> > Hi,
>>
>> I am having some troubles with orchestra maintaining some beans
>> > in
>> "conversation access" scope. First, could someone explain me why the
>> > beans
>> constructor is called multiple times? In my app I have multiple beans
>> > with
>> the same conversation name and when I access one of the other beans from
>> > my
>> bean, it seems as it is picking a new instance. The same scenario works
>> > fine
>> using "session" beans, but of course then I lose all the nice
>> > transaction
>> management from Orchestra. Anyone with an idea where I can I
>> > look? How is
>> people dealing with JPA and transactions scoping multiple
>> > requests in JSF 2?
>>
>> I am having another issue as well. Even if I have one
>> > bean, the data seems
>> not to be in the model when I click on a button that
>> > invokes a method in
>> that bean. For this specific case, I have a
>> > <f:metadata> section with a
>> viewParam. I can see the param being set in
>> > the update model phase, but the
>> bean's existing data seems to be lost? For
>> > sure, I must be doing something
>> wrong but I am unable to see
>> > what.
>>
>> Thanks!
>>
>> Bruno
>>
>>
>>
>>
>

Re: Problems with orchestra and JSF 2

Posted by Bruno Aranda <br...@gmail.com>.
I see, yes, that could explain it as Spring is creating proxies all over the
place to make some of the annotations work. However I am not doing anything
in the constructors, but for instance, if I set a property on a backing bean
(conversation.access scope), when I click on a button that value seems to
have been lost, as if I was accessing another object... probably something
to do with proxies as well and orchestra?

Thanks!

Bruno

On 1 July 2010 13:22, Mark Struberg <st...@yahoo.de> wrote:

> Hi Bruno!
>
> > First, could someone explain me why the
> > beans constructor
> is called multiple times?
>
> What you see might  be an effect of proxies.
> Usually if a subclassing proxy gets initialised, the constructor of the
> proxied class gets called.
> This is the reason why it's not suggested to use constructors for
> initialisations at all but instead use
> @PostConstruct (resp @PreDestroy instead of finalize)
>
> LieGrue,
> strub
>
>
> ----- Original Message ----
> > From: brunoaranda <br...@gmail.com>
> > To: MyFaces Discussion <us...@myfaces.apache.org>
> > Sent: Thu, July 1, 2010 12:55:30 PM
> > Subject: Problems with orchestra and JSF 2
> >
> > Hi,
>
> I am having some troubles with orchestra maintaining some beans
> > in
> "conversation access" scope. First, could someone explain me why the
> > beans
> constructor is called multiple times? In my app I have multiple beans
> > with
> the same conversation name and when I access one of the other beans from
> > my
> bean, it seems as it is picking a new instance. The same scenario works
> > fine
> using "session" beans, but of course then I lose all the nice
> > transaction
> management from Orchestra. Anyone with an idea where I can I
> > look? How is
> people dealing with JPA and transactions scoping multiple
> > requests in JSF 2?
>
> I am having another issue as well. Even if I have one
> > bean, the data seems
> not to be in the model when I click on a button that
> > invokes a method in
> that bean. For this specific case, I have a
> > <f:metadata> section with a
> viewParam. I can see the param being set in
> > the update model phase, but the
> bean's existing data seems to be lost? For
> > sure, I must be doing something
> wrong but I am unable to see
> > what.
>
> Thanks!
>
> Bruno
>
>
>
>

Re: Problems with orchestra and JSF 2

Posted by Mark Struberg <st...@yahoo.de>.
Hi Bruno!

> First, could someone explain me why the 
> beans constructor 
is called multiple times?

What you see might  be an effect of proxies.
Usually if a subclassing proxy gets initialised, the constructor of the proxied class gets called.
This is the reason why it's not suggested to use constructors for initialisations at all but instead use
@PostConstruct (resp @PreDestroy instead of finalize)

LieGrue,
strub


----- Original Message ----
> From: brunoaranda <br...@gmail.com>
> To: MyFaces Discussion <us...@myfaces.apache.org>
> Sent: Thu, July 1, 2010 12:55:30 PM
> Subject: Problems with orchestra and JSF 2
> 
> Hi,

I am having some troubles with orchestra maintaining some beans 
> in
"conversation access" scope. First, could someone explain me why the 
> beans
constructor is called multiple times? In my app I have multiple beans 
> with
the same conversation name and when I access one of the other beans from 
> my
bean, it seems as it is picking a new instance. The same scenario works 
> fine
using "session" beans, but of course then I lose all the nice 
> transaction
management from Orchestra. Anyone with an idea where I can I 
> look? How is
people dealing with JPA and transactions scoping multiple 
> requests in JSF 2?

I am having another issue as well. Even if I have one 
> bean, the data seems
not to be in the model when I click on a button that 
> invokes a method in
that bean. For this specific case, I have a 
> <f:metadata> section with a
viewParam. I can see the param being set in 
> the update model phase, but the
bean's existing data seems to be lost? For 
> sure, I must be doing something
wrong but I am unable to see 
> what.

Thanks!

Bruno