14

Amazon SWFが本日リリースされました。Java / PHP /などでどのように使用するのが最善ですか?

現在の SDK サポートには含まれていないようです。私はそれが新しいことを知っていますが、それを使用する方法、またはすぐに使用するために次の SDK のいずれかにどのような変更を実装する必要があるかについて、誰かが良いリソースを持っていますか?

個人的には、Java & PHP SDK に興味があります...

更新されたリリースは、http: //aws.amazon.com/releasenotesでご覧いただけます。Bjorn に 感謝します。

4

6 に答える 6

73

AWS Flow Framework を使用して非同期ビジネス処理を実装するために、Amazon Simple Workflow Service (SWF) を使用しています。Maven を使用して開発ビルドをセットアップすることが重要でした。これにより、選択した IDE (IntelliJ IDEA) から簡単にビルドできるだけでなく、継続的インテグレーション用のテスト ビルドと、リリースおよびデプロイ用の運用ビルドを自動化できました。

私の時間のほとんどは、AspectJ を使用して作成された自動生成されたプロキシ クラスを取得することに費やされました。これは、バージョン 3.7 (Indigo) を使用していた Eclipse で最初に発生した問題であり、開発環境のセットアップに関するドキュメントのロード時とコンパイル時の両方のウィービング手順に従った後でも、クラスをうまく吹き飛ばすことができませんでした。アウト。直感で、ドキュメントには Eclipse 3.6 (Helios) を使用していると書かれていることを思い出したので、この特定のバージョンの Eclipse をダウンロードし、ロードタイム ウィービング アプローチを使用して再試行したところ、チャンピオンのように機能しました。これら 2 つのバージョン間の Eclipse ログを見ると、Eclipse 3.7 には依存関係がないことがわかりましたlog4jfreemarker. 私はIntelliJ IDEAユーザーの方が多いので、Eclipseでこれをさらにトラブルシューティングするためにあまり道を進むことは気にしませんでしたが、Eclipseを適切に動作させることは間違いなく可能だと確信しています.

pom.xml私の次の取り組みは、IntelliJ IDEA Maven プロジェクトを立ち上げて、プロキシ クラスの自動生成を有効にするために最小限の情報で実行することでした。手がかりは、開発環境のセットアップに関するドキュメントのロード時の織り込みに関する指示の最後の段落で、次のように述べられています。

コマンドラインからプロジェクトをビルドする場合は、aws-java-sdk-flow-build-tools-1.3.3.jar がクラスパスにあることを確認してください。この jar ファイルには、コードを生成するために実行する必要がある AWS Flow Framework アノテーション プロセッサが含まれています。例については、samples フォルダーに含まれている build.xml ファイルを参照してください。

私が間違っていない限り、私がこれまでに行った調査によると、aspectj-maven-pluginは現在、ロード時のウィービングをサポートしていません。ロード時のウィービングやJava エージェントとしての実行aop.xmlと連動したファイルの利用から脱却aspectjweaverし、このプラグインでサポートされているコンパイル時のウィービングに移行しました。AWS SDK for Java サポートを Eclipse に直接インストールしたときに、aws-java-sdk-flow-build-tools-1.3.3.jar依存関係にあるサポートが組み込まれたと思わずにはいられません。前述の手がかりを利用して、この JAR をローカルの Maven リポジトリにインストールしaws-java-sdk-flow-build-tools-1.3.3.jarた後、依存関係を含めることで、プロキシ クラスを吹き飛ばすことができました。pom.xmlこのエントリの残りの部分では、これを実現するために実行した手順の概要を説明します。

IntelliJ IDEA プロジェクトの作成

  1. IntelliJ IDEAアプリケーションを起動します。
  2. 新しいプロジェクトを作成します。
  3. プロジェクト名プロジェクト ファイルの場所を入力します。
  4. 選択タイプはMaven Moduleである必要があります。
  5. 次の画面で必要に応じて Maven プロパティを調整し、Finishをクリックします。
  6. を設定するには、以下のMavenの手順に従ってくださいpom.xml

AWS SDK for Java

ワークフローとアクティビティの開発に必要なタイプを参照するには、AWS SDK for Java をダウンロードする必要があります。Mavendependencyを使用してプロジェクトとビルドにこのライブラリを含めることをお勧めしますが、ディレクトリaws-java-sdk-flow-build-toolsの下にあるライブラリを取得するには、このライブラリをダウンロードする必要があります。lib

SWF フロー構築ツール

AWS SDK for Javaのダウンロードには、ディレクトリaws-java-sdk-flow-build-tools-<version>.jarの下に JAR が含まれています。libこのライブラリにMaven を含めることができるようにするには、JAR をローカルのMavenリポジトリdependencyにインストールする必要があります。これを実現するには、AWS SDK ダウンロードのディレクトリから次を実行します。lib

mvn install:install-file 
    -Dfile=aws-java-sdk-flow-build-tools-<version>.jar 
    -DgroupId=com.amazonaws 
    -DartifactId=aws-java-sdk-flow-build-tools 
    -Dversion=<version> 
    -Dpackaging=jar 

注:上記のコマンドのトークンは、AWS SDK ダウンロードにある適切なバージョンに置き換えてください。

メイヴン

ファイルpom.xmlには次のものが含まれている必要がありますdependencies。異なるバージョンを使用して重大な変更が発生した場合に備えて、使用しているバージョン番号を含めました。

<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.11</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-flow-build-tools</artifactId>
        <version>1.3.3</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.18</version>
    </dependency>
</dependencies>

ファイルpom.xmlには、次のplugin. コードで使用するパッケージングとインターフェイスの命名規則に従うソース インクルード パターンを使用していますが、必ずしもこのようにする必要はありません。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.4</version>
    <configuration>
        <complianceLevel>1.5</complianceLevel>
        <showWeaveInfo>true</showWeaveInfo>
        <verbose>true</verbose>
        <sources>
            <source>
                <basedir>src/main/java</basedir>
                <includes>
                    <include>*/**/workflow/*Workflow.java</include>
                    <include>*/**/workflow/activities/*Activities.java</include>
                </includes>
            </source>
        </sources>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

上記のリストを含め、plugin少なくとも Maven を実行すると、IntelliJ IDEA のMaven プロジェクトツール ウィンドウ内のノードの下にノードが表示されるcompileことに気付くはずです。必要に応じて、プラグインのセクションの要素をオプションで追加または微調整することもできます。サポートされているさまざまな設定は、ここにある目標のドキュメントに記載されています。ソースディレクトリの下の適切な場所にファイルが生成されるように、まだプラグイン構成を微調整していませんが、これはかなり可能だと確信しています.aspectjPluginsconfigurationaspectj-maven-pluginaspectj:compile.java

外部ライブラリ

上記のリストのセットを含め、dependencies少なくとも Maven を実行すると、IntelliJ IDEAのプロジェクトツールウィンドウ内の外部ライブラリノードcompileの下にリストされている次の依存関係のセットに少なくとも気付くはずです。

  • com.amazonaws:aws-java-sdk-flow-build-tools
  • com.amazonaws:aws-java-sdk
  • コモンズ コーデック:コモンズ コーデック
  • commons-logging:commons-logging
  • org.apache.httpcomponents:httpclient
  • org.apache.httpcomponents:httpcore
  • org.aspectj:aspectjrt
  • org.codehaus.jackson:jackson-core-asl
  • org.codehaus.jackson:jackson-mapper-asl
  • org.freemarker:フリーマーカー

例 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>swf_example</groupId>
    <artifactId>swf_example</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.11</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-flow-build-tools</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.18</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.4</version>
                <configuration>
                    <complianceLevel>1.5</complianceLevel>
                    <showWeaveInfo>true</showWeaveInfo>
                    <verbose>true</verbose>
                    <sources>
                        <source>
                            <basedir>src/main/java</basedir>
                            <includes>
                                <include>*/**/workflow/*Workflow.java</include>
                                <include>*/**/workflow/activities/*Activities.java</include>
                            </includes>
                        </source>
                    </sources>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

ワークフローの定義

ワークフローを定義するには、次の条件を満たす Java インターフェイスを作成する必要があります。

  1. インターフェースには@Workflowアノテーションが付けられます。
  2. @Executeで注釈が付けられ、バージョンプロパティが設定されているインターフェイスに対して 1 つのメソッドが定義されます。
  3. インターフェイスの名前は、文字列Workflowで終わります。
  4. インターフェイスは、ワークフローで終わるパッケージの下にあります。

以下は、という名前のワークフロー インターフェースの例であり、ソース ディレクトリの下、およびパッケージ ディレクトリ構造の下にある、MyWorkflowという名前のファイルが含まれます。これらは必須ではなく、特定のニーズに依存するため、注釈やその他の付属品は含めていません。MyWorkflow.javasrc/main/javacom/some/package/workflow@WorkflowRegistrationOptions

package com.some.package.workflow;

import com.amazonaws.services.simpleworkflow.flow.annotations.Execute;
import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow;

@Workflow
public interface MyWorkflow {

    @Execute(version="1.0")
    void doWorkflow();

}

活動の定義

アクティビティを定義するには、次の基準を満たす Java インターフェースを作成する必要があります。

  1. インターフェイスには@Activitiesの注釈が付けられ、バージョンプロパティが設定されています。
  2. このインターフェースには、 Activitiesという文字列で終わる名前があります。
  3. インターフェイスは、ワークフロー/アクティビティで終わるパッケージの下にあります。

以下は、 という名前のアクティビティ インターフェースの例で、ソース ディレクトリの下にあり、パッケージ ディレクトリ構造の下にあるMyActivitiesという名前のファイルに含まれます。これらは必須ではなく、特定のニーズに依存するため、注釈やその他の付属品は含めていません。MyActivities.javasrc/main/javacom/some/package/workflow/activities@ActivityRegistrationOptions

package com.some.package.workflow.activities;

import com.amazonaws.services.simpleworkflow.flow.annotations.Activities;

@Activities(version="1.0")
public interface MyActivities {

    void doActivity1();
    void doActivity2();
    void doActivity3();

}

建物

ビルド プロセスが日常の開発と非開発環境 (テスト、本番など) で同じであることを確認するには、選択した開発ツールでMavenを介してビルドを実行する必要があります。aws-java-sdkおよびaws-java-sdk-flow-build-toolsJAR にはさまざまな側面が含まれており、ワークフローとアクティビティに組み込まれています。JAR には、ワークフローとアクティビティaws-java-sdk-flow-build-toolsを実行するために必要なプロキシ クラスを自動生成するために必要なメカニズムが含まれています。生成された最新のプロキシ クラスで作業していることを確認するには、ビルドの前に生成されたアーティファクトをきれいにして、不要なクラスや古いクラスを破棄するように注意する必要があります。これは、選択した開発ツールで次のコマンドまたは同等のコマンドを実行することで実現できます。

mvn clean install

showWeaveInfoプラグインで構成オプションを有効にしておくaspectj-maven-pluginと、ビルド出力に次のようなスニペットが表示されますが、この実行には単一のワークフローと単一のアクティビティしかないため、ここには数行の出力しかありません。

Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: AsynchronyDeciderAnnotationProcessor.process() invoked.
Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: Processing @Activities for MyActivities
Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: Processing @Workflow for MyWorkflow
Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: AsynchronyDeciderAnnotationProcessor.process() invoked.

自動生成されたプロキシ

ワークフローとアクティビティをコンパイルすると、次の自動生成プロキシ クラスのセットが作成されていることがわかります。これらのプロキシは、さまざまなアクティビティを呼び出したり、他のワークフロー内で子ワークフローを実行したり、最上位でワークフローを実行したりするために、ワークフロー内で使用されます。 注:次の箇条書きの文字列「Workflow」および「Activities」は、実際にはそれぞれ実際のワークフローおよびアクティビティ インターフェイスの名前であり、定義されたワークフローおよびアクティビティ インターフェイスごとに作成された次のクラスのセットが表示されます。

  • ワークフローClient.java
  • ワークフローClientExternal.java
  • ワークフローClientExternalFactory.java
  • ワークフローClientExternalFactoryImpl.java
  • ワークフローClientExternalImpl.java
  • ワークフローClientFactory.java
  • ワークフローClientFactoryImpl.java
  • ワークフローClientImpl.java
  • ワークフローSelfClient.java
  • ワークフローSelfClientImpl$1.java
  • ワークフローSelfClientImpl.java
  • アクティビティClient.java
  • アクティビティClientImpl.java

また、私が取り組んでいる開発環境の種類と、日々のコーディングに使用しているツールを明確にするために、いくつかの背景情報も含めています。

OS

Mac OS X version 10.7.3

ジャワ

java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11D50b)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)

メイヴン

Apache Maven 3.0.3 (r1075438; 2011-02-28 12:31:09-0500)
Maven home: /usr/share/maven
Java version: 1.6.0_29, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.7.3", arch: "x86_64", family: "mac"

IntelliJ IDEA (コミュニティ版)

IntelliJ IDEA 11.0.2
Build #IC111.277
Built on February 1, 2012
于 2012-03-13T03:02:21.010 に答える
4

これは、Java8 (JDK8) およびコンパイル時のウィービングで機能する最新の回答です。

問題は、maven コンパイラーがアノテーション処理を実行できることです。それがオンで、aspectj の場合、同じクラスを二重に作成しようとします。アノテーションを処理する (ワークフロー/アクティビティ クラスを生成する) ために Maven コンパイラをそのままにしておく方がよいでしょう。これは、aspectJ がそれらを作成する必要があるためです。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>       <!-- use this goal to weave all your main classes -->
                        <goal>test-compile</goal>  <!-- use this goal to weave all your test classes -->
                    </goals>
                </execution>
            </executions>
            <configuration>
                <complianceLevel>1.8</complianceLevel>
                <showWeaveInfo>true</showWeaveInfo>
                <verbose>true</verbose>
                <source>1.8</source>
                <target>1.8</target>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>com.amazonaws</groupId>
                        <artifactId>aws-java-sdk-swf-libraries</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
          <!-- This is important so we don't double process the annotations -->
                <proc>none</proc>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <verbose>true</verbose>
                <fork>true</fork>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
于 2016-03-09T00:37:47.680 に答える
3

今日、更新されたSDKを確認しましたか?約10時間前に新しいリリースがありました(少なくとも.NETの場合は1.4.3、2012年2月21日にリリースされました)。

http://aws.amazon.com/releasenotes/.NET/5023081835314406

于 2012-02-22T10:19:58.313 に答える
3

JAVA8 / AWS SDK 1.9.x を Maven および Eclipse で動作させることができました。この注目すべき例pedropaulovc/aws-flow-maven-eclipse-samples に従って、勇敢な Mircea の提案やその他のリワークを含む pom.xml を微調整しました。

結果の動作する pom.xmlをここで見つけることができます

更新された flow-build-tools も、aspectj プラグインのアスペクト ライブラリに追加する必要があったことに注意してください。そうしないと、Activity と Workflow impl のバージョン番号の注釈が正しく機能しません。

                <aspectLibraries>
                    <!-- for aspect weaving and swf versions -->
                    <aspectLibrary>
                        <groupId>com.amazonaws</groupId>
                        <artifactId>aws-java-sdk-swf-libraries</artifactId>
                    </aspectLibrary>
                    <aspectLibrary>
                        <groupId>com.amazonaws</groupId>
                        <artifactId>aws-java-sdk-flow-build-tools</artifactId>
                    </aspectLibrary>
                </aspectLibraries>

これが役立つことを願っています!

于 2015-04-19T21:11:28.670 に答える
3

数年後、このスレッドは、AWS SWF フローを Maven で動作させるのに大いに役立ちました。ただし、一部の側面は、このアプローチではそのままでは機能しません。私はすべての調査結果を集中させるために記事を書きました。PS: これで Java 1.8 を動作させるためのヒントがあれば幸いです。

于 2015-02-26T21:21:24.367 に答える