myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gerald Müllan" <bierbra...@gmail.com>
Subject Re: managed-beans, spring references, and serializable
Date Mon, 25 Sep 2006 17:12:52 GMT
Hi,

we have been faced with the same problem in our application.

You have to take care that after deserialization the spring beans are
injected the "normal" way. We did this by marking spring beans as
transient, like you did:

private transient ServiceBean _serviceBean;

//Setter

Letting serialize the spring bean only brings back some nonsense and
no spring object you can deal with.

So we implemented the method readResolve() (called after
deserialization) in the managed bean:

public Object readResolve() throws ObjectStreamException
{
   return TransientFieldsInjector.inject(this);
}

The injector has to get the bean from the spring BeanFactory and call
the corresponding setter in the managed bean to inject it "manually".
You have to do little reflection stuff, but only a few loc.

Maybe there are also other solutions. We did it and it works very fine
in combination
with t:saveState.

Hope this helps,

cheers,

Gerald

On 9/25/06, Ingo Düppe <mailing-lists@dueppe.com> wrote:
> Hi,
>
> I have a conceptional question. Within my application I define a
> managed-bean "registrationController" that gets a reference to a spring
> bean "registrationService" by the jsf property injection. The spring
> bean is stateless and is not serializable, so I need to define the field
> reference in "registrationController" as transient. This prevents me for
> getting NotSerializableException.
>
> But what happens if the session is reloaded, will jsf reinject the
> properties?
> Is there any recommended way how to deal with this.
>
> The obvious way to make the service bean serializable doesn't seem to
> work, because a whole data access layer is bound to the service bean.
>
> Or do I need to clearly separate. All managed-beans that have a
> reference to the service layer need to be scoped as application (or
> maybe as request) and only the value objects or entities are allowed to
> be stored in the session scope.
>
> Regards,
> Ingo
>
> Here is an example of my configuration:
>     <managed-bean>
>         <managed-bean-name>registrationController</managed-bean-name>
>
> <managed-bean-class>org.openuss.security.registration.RegistrationController</managed-bean-class>
>         <managed-bean-scope>session</managed-bean-scope>
>         <managed-property>
>             <property-name>service</property-name>
>             <value>#{registrationService}</value>
>         </managed-property>
>     </managed-bean>
>
>
>
>
>


-- 
http://www.irian.at

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

Professional Support for Apache MyFaces

Mime
View raw message