SWFを動かしてみる

なんかまわりがきちんとブログ書いているのを見て、たまには書いてやろうと思った次第です。訳あって、AWS Simple Work Flowを動かして色々検証しています。SWFを一言でいうなら、非同期かつノンブロッキングなやりとりが含まれる複数コンポーネント間でのワークフローを比較的楽に書くためのサービス。それなりに奥が深いのと、実際に日本語の情報が皆無なので、ひとまず動かすところまででも晒してみようと思います(先に続くかわからない・・・)。

動かす言語はJavaにするので、他言語の人はすまん。ちなみにフレームワークも利用します。AWSが出しているFlow Frameworkで、こいつはSWFを使うのを(多分)楽にしてくれる。SWF自体はワークフローサービス(というかワークフローに伴う状態管理サービスが実態に近い)なので、HTTPコールさえできればどの言語からも利用可能ではあるはず。ただし多分大変。誰かRubyとかPythonでやってる人がいたらぜひコードとかみたいです。

Flowのベーシックな仕組み

Flow FrameworkはJavaAPTAOPライブラリであるAspectJを使って、コードの自動生成とコードのバイトコードエンハンスを行います。なので、まずAPTおよびAspectJが動くようにEclipseの設定を行う必要があります。詳細はこちらを見てくださいな。

コンセプト図、これだけだと何かわからなそうだけど・・・w


環境構築

さて、まずは環境構築をします。必要なものは、

続きを読む

余談

というか次回書く余力がない場合のため(多分ないw)。Workflowの実装で、

	@Override
	public void doSome() {
		client.hoge();
		client.foo();
	}

と書くと、並列で実行され、hoge()とfoo()の順序はその順番にはならない。順序通りにしたい場合は、

	@Override
	public void doSome() {
		Promise<Void> hoge = client.hoge();
		executeFoo(hoge);
	}

	@Asynchronous
	void executeFoo(Promise<Void> hoge) {
		client.foo();
	}


こうです。PromiseはFutureみたいなもんだけど、ノンブロッキングで結果が戻るまで待たないFlowでの基本単位です。