並行して実行する必要がある 2 つのアクティビティ セットがあります。正常に完了した後、別の一連のアクティビティを実行したいと考えています。タスクを使用しましたが、機能していました。しかし、@Asynchronous アノテーションを使用した後、DecisionTaskTimedOut を取得していて、どのアクティビティも実行を開始しません。ターゲットで次のクラスを確認できるため、aspectj 構成は機能しています。
AsyncWorkflowImpl$AjcClosure1.class
AsyncWorkflowImpl$AjcClosure3.class
AsyncWorkflowImpl$AjcClosure5.class
非同期バージョン
public class AsyncWorkflowImpl implements AsyncWorkflow{
private AsyncActivitiesClient activitiesClient = new AsyncActivitiesClientImpl();
private Async2ActivitiesClient activitiesClient2 = new Async2ActivitiesClientImpl();
@Override
public void executeActivity() {
Promise<Integer> intermediateRes = null;
Promise<Integer> intermediateRes2 = null;
for(int i=0; i<5; i++){
intermediateRes = testIntermediate(Promise.asPromise(i), intermediateRes);
}
for(int i=0; i<5; i++){
intermediateRes2 = testIntermediate2(Promise.asPromise(i), intermediateRes2);
}
test(intermediateRes,intermediateRes2);
}
@Asynchronous
public Promise<Integer> testIntermediate(final Promise<Integer> i, Promise<Integer> res){
return activitiesClient.testAct1(i);
}
@Asynchronous
public Promise<Integer> testIntermediate2(final Promise<Integer> i, Promise<Integer> res){
return activitiesClient2.testAct1(i);
}
@Asynchronous
public void test(final Promise<Integer> res, final Promise<Integer> res2){
activitiesClient.testAct2();
}
}
タスク バージョン
public class AsyncWorkflowImpl implements AsyncWorkflow{
private AsyncActivitiesClient activitiesClient = new AsyncActivitiesClientImpl();
private Async2ActivitiesClient activitiesClient2 = new Async2ActivitiesClientImpl();
@Override
public void executeActivity() {
Promise<Integer> intermediateRes = null;
Promise<Integer> intermediateRes2 = null;
Settable<Integer> finalRes = new Settable<Integer>();
Settable<Integer> finalRes2 = new Settable<Integer>();
for(int i=0; i<5; i++){
intermediateRes = testIntermediate(i, intermediateRes);
}
for(int i=0; i<5; i++){
intermediateRes2 = testIntermediate2(i, intermediateRes2);
}
finalRes.chain(intermediateRes);
finalRes2.chain(intermediateRes2);
test(finalRes,finalRes2);
}
public Promise<Integer> testIntermediate(final Integer i, Promise<Integer> res){
final Settable<Integer> tempRes = new Settable<Integer>();
new Task(res){
@Override
protected void doExecute() throws Throwable {
tempRes.chain(activitiesClient.testAct1(i));
}
};
return tempRes;
}
public Promise<Integer> testIntermediate2(final Integer i, Promise<Integer> res){
final Settable<Integer> tempRes = new Settable<Integer>();
new Task(res){
@Override
protected void doExecute() throws Throwable {
tempRes.chain(activitiesClient2.testAct1(i));
}
};
return tempRes;
}
public void test(final Promise<Integer> res, final Promise<Integer> res2){
new Task(res, res2){
@Override
protected void doExecute() throws Throwable {
activitiesClient.testAct2();
}
};
}
}
アスペクト織りに問題はありますか?どんな提案でも大歓迎です。