Seasar DI Container with AOP

S2OpenAMFを使うと、Seasar2とOpenAMFが連動するようになります。これによりMacromedia FlashからSeasar2のコンポーネントを簡単に呼び出す事ができるようになります。コンポーネントの呼び出しは、Flashからインターフェース名またはコンポーネント名を指定するだけで呼び出す事ができます。

セットアップ

S2と同様にJDK1.4以上が必要です。サンプルは、TomcatTomcat Pluginを使うことを前提にしています。あらかじめインストールして置いてください。S2OpenAMFVxxx.jarを解凍してできたs2openamfディレクトリをEclipseに丸ごとインポートしてください。S2OpenAMFのコンパイル環境は以上でセットアップ完了です。サンプルはS2OpenAMFExampleVxxx.jarとして別途用意されているので、ダウンロードして解凍してください。解凍してできたs2openamf-exampleディレクトリをEclipseに丸ごとインポートしてください。s2openamf-exampleプロジェクトを右クリックしてプロパティ->Tomcatを選びます。Tomcatプロジェクトであるをチェックし(チェックがついている場合、適用ボタンをクリック)、アプリケーションURIを/S2OpenAMFとします。プロジェクトをビルド後にTomcatを再起動して、ブラウザからhttp://localhost:8080/S2OpenAMF/にアクセスすると足し算, 汎用リモーティングテスターのサンプルを動作させることができます。

使い方

下記説明はS2OpenAMFExampleに含まれる設定ファイルを使用していただく事により、省略が可能です。
  • Seasar2をダウンロード
  • OpenAMFをダウンロード
  • S2OpenAMFをダウンロード
  • 全てのJARとプロパティファイル等をEclipseのプロジェクトに追加
  • OpenAMF付属のopenamf-config.xmlにS2OpenAMFのServiceInvokerを追記
  • OpenAMF付属のweb.xmlにSeasar2.0.6のweb.xmlの内容を追記

openamf-config.xml(OpenAMF付属のものに追記)

〜略〜
<!-- Uncomment this to enable EJB invoker
<invoker>
    <name>EJB</name>
    <class>org.openamf.invoker.EJBServiceInvoker</class>
</invoker>
-->
<invoker>
    <name>Seasar2</name>
    <class>org.seasar.extension.openamf.S2ServiceInvoker</class>
</invoker>
<invoker>
    <name>Java</name>
    <class>org.openamf.invoker.JavaServiceInvoker</class>
</invoker>
〜略〜

web.xml(OpenAMF付属のものに追記)

S2Containerを取得するサーブレットFlashから呼び出すコンポーネントが定義されたdiconファイルを指定します。
〜略〜
<servlet>
    <servlet-name>s2servlet</servlet-name>
    <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
    <init-param>
        <param-name>configPath</param-name>
        <param-value>s2-openamf-sample.dicon</param-value>
    </init-param>
    <load-on-startup/>
</servlet>
<servlet-mapping>
    <servlet-name>s2servlet</servlet-name>
    <url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
〜略〜

あとはTomcatの設定等ですがここでは割愛します。Seasar2のマニュアルも合わせてどうぞ。

Javaのコーディング

Seasar2のドキュメントを参考にS2ContainerにFlashから呼び出すコンポーネントを登録してください。

Flashのコーディング

従来どおりのFlash Remotingのコーディング方法となんら変わりません。serviceの所がコンポーネント名でも呼び出せるという所だけ違います。基本的な手順は以下の通り。Remoting Connectorを使用することもできます。

NetServicesオブジェクトを使った例

NetServices.setDefaultGatewayUrl(gatewayUrl);
var serviceConnection = NetServices.createGatewayConnection();
var serviceObject = serviceConnection.getService(service, callback);
serviceObject.methodName(arguments1, arguments2, ...);

サンプルの説明

・calculator.swf
計算機のサンプルです。上ふたつのテキストボックスに数字を入力し、テストボタンをクリックすると下のテキストボックスに答えが表示されます。

・rmtg_tester.swf
Flash Remotingのアプリケーションを汎用的にテストするサンプルです。Seasar2の場合の説明をします。

gatewayUrl OpenAMFのゲートウェイへのURL。
通常http://domainName/contextName/gatewayとなります。
method メソッド名
コンポーネントのメソッド名を指定します。
service コンポーネント名、又はインターフェースのフルパッケージ名
コンポーネント定義XMLファイルで指定したname又はインターフェースのフルパッケージ名を入力します。
arguments 引数
コンポーネントへ渡す引数を3つまで入力できます。残念ながらプリミティブ型しか渡せません。

※serviceにPOJOへのフルパッケージ名を入力すると通常のPOJOも呼び出せます。

それぞれを入力し終わったら[Trigger !]ボタンをクリックすることで、テキストエリアに結果が表示されます。戻り値が無いものは何も出ません。エラーの場合もメッセージが表示されます。右端にある[date test]、[calculator test]ボタンはそれぞれのコンポーネントを呼び出す情報を設定するボタンです。クリックすると必要な情報が自動的に入力されますので[Trigger !]ボタンを押すことにより実行できます。(実は計算機は3つ目の数字を入れても動作します)