Tôi đang cố gắng tìm ra lý do tại sao phương thức @Asynchronous trong EJB của tôi không thực sự được gọi không đồng bộ. Tôi đang chạy trên JBoss AS 7 bằng cách sử dụng CDI (với beans.xml) trong một dự án JSF2 với bao bì đơn giản .war được sản xuất bởi Maven.@ Không đồng bộ không dẫn đến việc gọi async không đồng bộ của phương thức EJB trong JBossAS7
EJB được đóng gói trong một chiến tranh cùng với các hạt được quản lý JSF2 tương tác với nó. Đó là một EJB đơn giản @Stateless. Nó được sử dụng bằng cách tiêm nó (thông qua @Inject) vào một bean được quản lý JSF2 gọi phương thức @Asynchronous của nó.
Thay vì lời gọi phương thức @Asynchronous trả về tương lai ngay lập tức, nó thực hiện đồng bộ như thể đó là cuộc gọi trực tiếp không được trả lời thông thường. Điều này đúng cho dù tôi sử dụng giao diện không có giao diện cục bộ hoặc giao diện doanh nghiệp địa phương để gọi EJB.
@Asynchronous chỉ được hỗ trợ cho @Remote beans? Nếu vậy, nó có thể hoạt động trong bao bì .war hoặc tôi có phải đóng gói một bình EJB trong một EAR chỉ để có được tính năng này không?
đang Giản vì dụ, với mỗi lớp trong cùng một gói trong một .WAR:
public interface SomeEJB {
public Future<Void> doSomething();
}
@Stateless
@Local(SomeEJB.class)
public class SomeEJBImpl implements SomeEJB {
@Asynchronous
@Override
public Future<Void> doSomething() {
// Spend a while doing work
// then:
return new AsyncResult<Void>(null);
}
}
@Named
@RequestScoped
public class JSFBean {
@Inject private transient SomeEJB someEJB;
private Future<Void> progress;
// Called from JSF2, starts work and re-displays page
public String startWorkAction() {
// This call SHOULD return a Future immediately. Instead it blocks
// until doWork() completes.
progress = someEJB.doWork();
}
public Boolean isDone() {
return progress != null && progress.isDone();
}
}
Bắt đầu giống như @Asynchronous không được triển khai trong JBoss AS 7 (như 7.0.2) - một lần nữa, các dấu hiệu triển khai Java EE 6 vẫn còn lỗi và không đầy đủ sau khi phát hành thông số kỹ thuật. Thở dài. Nó sẽ được tốt đẹp để phát hành một cảnh báo hoặc một cái gì đó không SILENTLY FAIL. –
Bạn có thể bật một số tính năng EJB3.1 theo mặc định với cấu hình xem trước độc lập trong AS 7.0.2. Gọi là: "bin/standalone.sh --server-config = standalone-preview.xml" –