Se ho una richiesta ambito CDI fagiolo iniettato in un @MessageDriven
bean utilizzando JMS, come sotto, posso supporre che un dato Foo
esempio sarà usato solo da un singolo onMessage
invocazione alla volta ?@RequestScoped CDI iniezione nel fagiolo @MessageDriven
In altre parole, nell'esempio qui sotto, posso tranquillamente utilizzare variabili membro nell'oggetto Foo
per memorizzare lo stato di tutti subroutine, analogamente ad un bean gestito JSF @RequestScoped
?
noti che è ok se stesso Foo
oggetto viene riciclato in modo sequenziale da una onMessage
chiamata al successivo, purché ogni MessageDrivenBean
esempio ha il proprio Foo
esempio tale che l'elaborazione due richieste contemporaneamente verrebbe isolato.
@MessageDriven
public class MessageDrivenBean implements MessageListener {
@Inject
private Foo foo;
public void onMessage(Message m) {
foo.doSomething();
}
}
@Named
@RequestScoped
public class Foo {
private String property;
public void doSomething() {
property = ...;
}
}
Fantastico. Questo è esattamente ciò che speravo, e ho confermato mettendo un contatore di istanze sull'oggetto iniettato. (Non stava facendo questo all'inizio e si è scoperto che ho importato l'annotazione '@ RequestScoped' da javax.faces invece del giusto javax.enterprise.) – wrschneider