Nếu tôi có yêu cầu hạt CDI được nhúng vào @MessageDriven
EJB sử dụng JMS, như dưới đây, tôi có thể giả định rằng bất kỳ trường hợp nào Foo
chỉ được sử dụng bởi một lần gọi onMessage
. ?@RequestSố CDI được nhúng vào hạt @MessageDriven
Nói cách khác, trong ví dụ dưới đây, tôi có thể sử dụng một cách an toàn biến thành viên trong đối tượng Foo
để lưu trữ trạng thái trên các trình con, tương tự với một bean được quản lý JSF @RequestScoped
?
Lưu ý rằng nó là ok nếu cùng một đối tượng Foo
được tái chế theo tuần tự từ một onMessage
cuộc gọi đến tiếp theo, miễn là mỗi MessageDrivenBean
dụ có Foo
dụ riêng của mình mà xử lý hai yêu cầu đồng thời sẽ bị cô lập.
@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 = ...;
}
}
Tuyệt vời. Đó là chính xác những gì tôi đã hy vọng, và tôi xác nhận bằng cách đặt một truy cập thể hiện trên đối tượng tiêm. (Lúc đầu không thực hiện điều này và hóa ra tôi đã nhập chú thích '@ RequestScoped' từ javax.faces thay vì javax.enterprise đúng). – wrschneider