Tengo un bean CDI @RequestScoped que quiero convertir en un EJB para obtener transacciones declarativas. (Estoy en EJB 3.1, Java EE 6)Estado de paso entre métodos EJB/@RequestScoped y @Stateless
Actualmente, estoy pasando el estado entre subrutinas, bajo el supuesto de que la instancia solo se utiliza en una sola solicitud. Si agrego @Stateless
ahora esa suposición cambiaría.
Por ejemplo, quiero hacer algo como
@Stateless
@Named
@RequestScoped
public class Foo {
private String var1; // can't use instance vars in @Stateless?
private String var2;
public void transactionForRequest() {
var1 = value;
var2 = value;
....
subroutine();
}
}
Asumo lo anterior no de obra es correcto?
estoy contemplando dos alternativas:
- Uso @Stateful en lugar de @Stateless, junto con @Named y @RequestScoped.
- Mantenga @Stateless y use el mapa
EJBContext.getContextData
para reemplazar variables de instancia.
Cual es mejor? ¿Y hay alguna otra alternativa en la que no estoy pensando? (Además de esperar a Java EE 7 o cambiar a Spring. :-))
Uso de '@ Stateful' puede ser una habilidad-terminado. ¿Ha considerado usar el frijol normal sin estado y el frijol administrado '@ ConversationScoped' para pasar estados? –
¿Cómo funcionaría esto? ¿Haría el EJB '@ Stateless' luego' @ Inject' un bean CDI? ¿Podría este CDI ser '@ RequestScoped'? – wrschneider
Mantendría el bean como '@ Stateless' y usaré el bean' @ ConversationScoped' para pasar variables de páginas a páginas. Consulte este [artículo] (http://blog.goyello.com/2011/06/08/jee6-cdi-and-conversation-scope/) sobre cómo crear el asistente. –