3
我有一個Web應用程序部署在Jboss 6中。我使用的是JDK 6,jSF和Primefaces。如何實現偵聽器到EJB異步調用
我在業務層有一個方法需要很長時間才能完成。
我希望能夠在網頁上顯示該方法正在做什麼的日誌。這裏是什麼即時通訊試圖簡化版本:
/* interface to log processing */
interface StatusListener {
void log(String msg);
}
/* Business class */
@Stateless
class Service {
@Asynchronous
public void doProcessing(StatusListener listener) {
for (int i = 0; i < 1000000; i++) {
processItem(i);
listener.log("processando item " + n);
}
}
}
/* JSF backing bean class */
@Named
public class WebBean implements StatusListener {
private @EJB Service service;
private StringBuffer msgBuffer;
public void doProcessing() {
service.doProcessing(this);
}
@Override
public void log(String msg) {
msgBuffer.append(msg + "\n");
}
public StringBuffer getMsgBuffer() {
return msgBuffer;
}
}
在我的XHTML我有一個textArea
,其價值指向msgBuffer
。我使用primefaces輪詢來每隔幾秒更新textArea
。
問題是msgBuffer
只在ejb方法結束後才更新。日誌方法被調用,但對msgBuffer
的更改僅在ejb完成後纔可見到Web Bean線程。我試圖使msgBuffer
易失性和同步的日誌和getMsgBuffer
方法,但沒有奏效。
任何人都有任何線索如何解決這個問題?