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 <[EMAIL PROTECTED]> 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

Reply via email to