Estoy usando Spring y JSF 2 para crear una aplicación web. Los objetos de negocio se mantienen en el recipiente de la primavera, y les inyectan en los beans gestionados mediante el @ManagedProperty, así:¿Cómo volver a inyectar un @ManagedProperty transitorio en la deserialización?
@ManagedBean
@ViewScoped
public class SomeMB implements Serializable {
private static final long serialVersionUID = 1L;
@Getter @Setter
@ManagedProperty("#{someService}")
private SomeService someService;
// ...
El problema es, me siguen dando un NotSerializableException
para una clase de primavera (ServiceLocatorFactoryBean) que está siendo utilizado por el SomeService bean.
Si lo hago transient
, ¿cómo podría hacer la reinyección después de la deserialización?
O, ¿cuáles serían otras formas de resolver este problema?
He estado leyendo varias otras preguntas similares aquí, pero no he encontrado ninguna que tratara exactamente con este problema.
FYI: este problema no existe cuando solo utiliza EJB de Java EE en lugar de Spring. – BalusC
@BalusC Sí, leí sobre eso en otras preguntas, lamentablemente aún no sé lo suficiente sobre EJB para usarlo (y no sé si podría convencer a los compañeros de trabajo de que me lo permitieran probar en este proyecto) . ¿Podría señalarme un buen recurso para aprender sobre esto, por cierto? – elias
No es tan difícil. Solo asegúrese de que su contenedor ya sea compatible con EJB (Glassfish, JBoss, Weblogic, etc.). Anote la clase de servicio con '@ Stateless' o' @ Stateful' e inyéctela por '@ EJB'. Eso es. No se requiere getter/setter por cierto. – BalusC