Ho un bean CDI @RequestScoped che voglio trasformare in un EJB per ottenere transazioni dichiarative. (Sono su EJB 3.1, Java EE 6)Stato di passaggio tra i metodi EJB/@RequestScoped e @Stateless
Attualmente sto passando lo stato tra le subroutine, supponendo che l'istanza sia utilizzata solo in una singola richiesta. Se aggiungo @Stateless
ora quell'ipotesi cambierebbe.
Ad esempio, voglio fare qualcosa di simile
@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();
}
}
Suppongo che il sopra non lavoro-è corretto?
Sto contemplando due alternative:
- Uso @Stateful invece di @Stateless, insieme con @Named e @RequestScoped.
- Mantieni @Stateless e utilizza la mappa
EJBContext.getContextData
per sostituire le variabili di istanza.
Quale è meglio? E c'è qualche altra alternativa a cui non sto pensando? (Oltre ad aspettare Java EE 7 o passare a Spring. :-))
Usando '@ Stateful' può essere un eccesso di abilità. Hai preso in considerazione l'utilizzo del bean Stateless normale e del bean gestito '@ ConversationScoped' per passare gli stati? –
come funzionerebbe? Renderebbe EJB '@ Stateless' quindi' @ Inject' un bean CDI? Questo bean CDI potrebbe essere '@ RequestScoped'? – wrschneider
Manterrei il bean come '@ Stateless' e useremo il bean' @ ConversationScoped' per passare variabili da pagine a pagine. Dai un'occhiata a questo [articolo] (http://blog.goyello.com/2011/06/08/jee6-cdi-and-conversation-scope/) sulla creazione guidata. –