i think that injecting beans in faces-config doesnt make any sense if you
have to inject them manually later in java code. i have abandonend this
approach and now im using old fashion way: MyBeanFactory that provides
spring managed beans - im calling factory's method in every backingbean's
action that needs access to bussines logic tier. i know that my
presentation is coupled with spring but whatever... i wont ever need to
change it:P
MyBeanFactory implements ApplicationAware so using it is really trivial.
Yeah, that sounds smart!
Gerald/Ingo, can you add that to our wiki?
Maybe others run into the desater?
On 9/25/06, Ingo Düppe <[EMAIL PROTECTED]> wrote:
Hi Gerald,
this sound to be a smart little solution.
But how did you get the spring bean factory. At the point of
deserialization I don't have any FacesContext or ServletContext
reference to initialize the BeanFactory?
Regards
Ingo
Gerald Müllan schrieb:
> 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>
>>
>>
>>
>>
>>
>
>