このディスカッションで説明したソリューションを使用して、BackgroundJobManager を JSF Bean クラス内の内部クラスとして実装しました。また、BackgroundJobManager のスケジュールされた時間に実行されるスレッドとして、ABCTask (これも内部クラス) を作成しました。メッセージを JSF ページにプッシュする必要がありますが、タスク クラス ABCTask からプッシュすると NPE が発生します。同じことが外側の Bean でも機能するので、この内部クラスと Bean のコンテキストに関係があると確信しています。誰かがこれに対する解決策を知っていれば幸いです。
私の内部クラスコードは以下の通りです:
public class ABCTask implements Runnable {
public ABCTask() {
}
@Override
public void run() {
setTimeoutOccuredFlag(true);
try {
if (getActiveControlledAgent().isEventLogRunning()) {
getActiveControlledAgent().setEventLogRunning(false);
}
printTimeoutMessage();
logger_o.fine("Now leaving the ABCTask ...");
} catch (Exception e) {
logger_o.error("An error while idling "+e.getMessage());
}
}
}
$printTimeoutMessage() は次のとおりです。
void printTimeoutMessage() {
FacesUtils.addErrorMessage(MESSAGES.getString("common.timeoutOccured"));
}