3

Jboss 6 に Web アプリケーションをデプロイしています。JDK 6、jSF、および Primefaces を使用しています。

ビジネス層に完了までに長い時間がかかるメソッドがあります。
メソッドが何をしているかのログを Web ページに表示できるようにしたいと考えています。これは、私がしようとしているものの簡略化されたバージョンです:

/* 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ます。textArea数秒ごとに更新するために、primefaces poll を使用します。
問題はmsgBuffer、ejb メソッドが終了した後にのみ更新されることです。log メソッドが呼び出されますが、への変更msgBufferは ejb が終了した後にのみ Web Bean スレッドに表示されます。msgBuffervolatile にして、ログとメソッドを同期しようとしgetMsgBufferましたが、うまくいきませんでした。
誰でもこれを解決する方法を知っていますか?

4

0 に答える 0