2016-08-25 9 views
2

私は、次のrunメソッドでcom.ibm.websphere.asynchbeans.Workを実装して自分のクラスを持っている:WebsphereのstartWorkタスクからさらに例外を渡すには?

@Override 
public void run() { 
    try { 
    agentManager.loadLibContent(agent); 
    } catch (Exception e) { 
    ErrorAnalizer.report(e); 
    log.error("some err: "+e.getMessage()); 
    //this.setStatus("error"); 
    //throw new RuntimeException(e); 
    } finally { 
    workLoadManager.delRunTask(getTaskHistory()); 
    } 
} 

この作業クラスはcom.ibm.websphere.asynchbeans.WorkManagerののstartWork(作業VAR1)メソッドに渡されます。

tryブロックで例外が発生すると、キャッチされてログに記録されますが、問題はありません。

しかし、 websphereのstartWorkを呼び出した最初のメソッドに到達するまで、その例外が上になるようにします。

どうすればよいですか?Runnableは、チェック例外をスローさせません。 RuntimeExceptionは役に立ちませんでした。それはstartWorkがどこかでそれを呑み込むようです。

この最初のメソッドが別のプロジェクトモジュールにあり、catchブロックから情報を渡して何らかの仕事をすることができないということは間違っています。

私はまた、自分のワーククラスでsetStatusを試してみましたが、後でそれを取得しますが、startWorkのように見えますが、渡されたオブジェクトを変更することはできません。

何か助けていただければ幸いです。ありがとうございました!あなたがWorkItem.getResultメソッドを使用する必要があります

答えて

3

:次に

MyWork myWork = ... 
WorkItem wi = wm.startWork(myWork); 
... 
try { 
    myWork = (MyWork)wi.getResult(); 
    ... 
} catch (WorkException e) { 
    Throwable cause = e.getCause(); 
    ... 
} 

は、2つのオプションがあります。

  1. があなたのrun方法でcatchブロックはインスタンスフィールドで例外を格納することができ、その後、 getResultを呼び出した後に取得できます。
  2. runメソッドはチェックされていない例外をスローし、キャッチされたWorkExceptionの原因として利用できるはずです。
1

提出asynchbeans Workの結果を取得するには、com.ibm.websphere.asynchbeans.WorkItemへの参照を格納し、それが正常に完了した場合、あなたの仕事の結果を返します、またはそれがスローされた例外をラップcom.ibm.websphere.asynchbeans.WorkExceptionがスローされますどのgetResult()を呼び出すことができます実装はWorkです。ここで

は一例です:

// Submit the work 
WorkItem workItem = workManager.startWork(new MyWork()); 

// Wait for the work to be done for up to 60s 
ArrayList<WorkItem> items = new ArrayList<WorkItem>(); 
boolean workFinished = workManager.join(items, WorkManager.JOIN_AND, 60*1000); 

if(workFinished) 
    try { 
    MyWork work = workItem.getResult(); 
    // if we get here, the work completed without errors 
    } catch(WorkException e) { 
    throw e.getCause(); // this will be the exception thrown by your Work impl 
    } 
else { 
    // the Work did not finish in 60s 
} 
関連する問題