У меня есть бин CDI @RequestScoped, который я хочу превратить в EJB для получения декларативных транзакций.(Я нахожусь на EJB 3.1, Java EE 6)
В настоящее время я передаю состояние между подпрограммами, предполагая, что экземпляр используется только в одном запросе.Если я добавлю @Stateless
сейчас, это предположение изменится.
Например, я хочу сделать что-то вроде
@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();
}
}
Я предполагаю, что вышеописанное не работает - это правильно?
Я рассматриваю две альтернативы:
- Используйте @Stateful вместо @Stateless вместе с @Named и @RequestScoped.
- Оставьте @Stateless и используйте
EJBContext.getContextData
map для замены переменных экземпляра.
Что лучше?И есть ли какая-то другая альтернатива, о которой я не думаю?(Кроме того, дождитесь Java EE 7 или переключитесь на Spring.: -))