2016-11-24 3 views
0

AWS SWFが新しく、いくつかのアクティビティ、ワークフロー、ワークフロースターターを作成しようとしています。 私は多くの例を見つけました。彼らの助けを借りて、今ではドメインを登録し、いくつかのアクティビティを作成してワークフローを作成することができましたが、私はワークフローの実行を開始するプログラムを書くことができません。swfスタータープログラムの作成方法

誰かが私をここで助けることができますか?以下は、今までの私のコードです:

ActivityWorker.java:

@Activities 
@ActivityRegistrationOptions(
    defaultTaskHeartbeatTimeoutSeconds = FlowConstants.NONE, 
    defaultTaskScheduleToCloseTimeoutSeconds = 300, 
    defaultTaskScheduleToStartTimeoutSeconds = FlowConstants.NONE, 
    defaultTaskStartToCloseTimeoutSeconds = 300) 
public interface ActivityWorker { 
@Activity(name = "swftest1", version = "1.0") 
@ExponentialRetry(
     initialRetryIntervalSeconds=10, 
     backoffCoefficient=1, 
     maximumAttempts=5) 
public String print() throws IOException; 


@Activity(name = "swftest2", version = "1.0") 
@ExponentialRetry(
     initialRetryIntervalSeconds=10, 
     backoffCoefficient=1, 
     maximumAttempts=5) 
public String print2() throws IOException; 

} 

ActivityWorkerImpl.java

public class ActivityWorkerImpl implements ActivityWorker{ 

@Override 
public String print() throws IOException { 
    System.out.println("Hello.."); 
    return "Printing.."; 
} 

@Override 
public String print2() throws IOException { 
    System.out.println("Hello.."); 
    return "Printing2.."; 
} 
} 

Worker.java

@Workflow 
@WorkflowRegistrationOptions(
    defaultExecutionStartToCloseTimeoutSeconds = 600, 
    defaultTaskStartToCloseTimeoutSeconds = 300) 
public interface Worker { 
@Execute(version = "1.0", name="worker1") 
public void greet(); 

} 

WorkerImpl.java

public class WorkerImpl implements Worker{ 

private final ActivityWorkerImpl actWorkerImpl = new ActivityWorkerImpl(); 

@Override 
public void greet() { 
    new TryCatchFinally() { 
     @Override 
     protected void doTry() throws Throwable { 
      String res= downloadFromS3(); 
      System.out.println("res.."+res); 
     } 

     @Override 
     protected void doCatch(Throwable e) throws Throwable { 
      throw e; 
     } 

     @Override 
     protected void doFinally() throws Throwable { 
      // noop 
     } 
    }; 
} 


@Asynchronous 
private String downloadFromS3() throws IOException { 
    return this.actWorkerImpl.print(); 
} 

} 

Host.java

public class ActivityHost { 

    public static void main(String[] args) throws Exception { 

      String domain = "test1"; 
      String taskListToPoll = "HelloWorldList"; 

     ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); 

     String swfAccessId = "myid"; 
     String swfSecretKey = "mysecretekey"; 
     AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); 

     AmazonSimpleWorkflow swf = new AmazonSimpleWorkflowClient(awsCredentials, config); 

     ActivityWorker activityworker = new ActivityWorker(swf, domain, taskListToPoll); 
     //adding activity 
     activityworker.addActivitiesImplementation(new ActivityWorkerImpl()); 

     activityworker.start(); 

     //adding workflow 
     WorkflowWorker worker = new WorkflowWorker(swf,domain, taskListToPoll); 

     worker.addWorkflowImplementationType(WorkerImpl.class); 

     worker.start(); 
    } 

} 

Host.javaを実行しているAftere、私はAWSコンソールに私の活動やワークフローを見ることができていますが、私は把握することはできませんよ、私のワークフローをトリガーする方法。

誰かが私を助けてくれますか?

答えて

0

は、ワークフローの実行を開始するために生成された外部クライアントを使用します。

WorkerClientExternalFactory f = new WorkerClientExternalFActory (swf, domain); 
WorkerClientExternal w = f.getClient(); 
w.greet(); 

は、私は、彼らが様々なシナリオの例を終了する作業端を含むので、AWSの流れ枠組みExamplesRecipesを通過するお勧めします。

コードには、@Asynchronousメソッドがあり、Stringを返します。このメソッドはvoidまたはPromiseを返す必要があるため、許可されていません。ワークフローコードはアクティビティ実装を直接参照してはならず、生成されたクライアントを介してのみ参照してください。

編集: 注釈プロセッサによって工場とクライアントが生成されます。コード生成を有効にするには"Setting up the AWS Flow Framework for Java"文書の指示に従ってください。

+0

ありがとうございました。私は同じ例を引用していました。私はhelloworldの例をチェックし、WorkflowExecutionStarter.javaクラスではBookingWorkflowClientExternalFactory clientFactoryを参照しています。これはsrcフォルダ内ではありません。どこから来たのか分かりません... – user3541321

+0

私は、セットアップの指示。 –

関連する問題