S2Flex2のrc-3とともにS2Flex2-Componentsも(ひっそりと)バージョンアップいたしました。
- サービス呼び出し時にAsyncTokenを返すようにしました。
- 接続するサーバ設定の指定をこれまでのflex-service.xmlから変更し、flexアプリケーションと同一階層にあるgatewayを呼び出すように変更しました。
サービス呼び出し時にAsyncTokenを返すようにしました。
サーバ側のサービスを呼び出したときにこれまではvoidで何も返していませんでしたが、AsyncTokenを返すようにしました。 これまでCairngormなどと連携して使用するときに不便だー!などいわれていたのですが、やっと対応できました。接続するサーバの指定方法の変更
これまでのs2flex2-componentsは、gatewayの指定をコンポーネントの属性で指定するか、コンパイルオプションで指定する(--service=flex-service.xml)の2つでした。今回のバージョンアップでコンパイルオプションで指定する方法から変更しました。
akabana-user:44にもあるようにconfigType属性を追加し、コンパイルオプションで指定する方法は、利用しなくなりました。
gatewayを指定する方法は以下のようになります。
gatewayUrl属性を利用する。
<s2:Flex2Service gatewayUrl="http://localhost:8080/flex2_example/gateway" ..../>直接gatewayをタグの中で指定する方法です。この方法を使うと、deployする先にあわせて、修正してswfを再生成(コンパイル)する必要があります。
swfファイルと同一階層にあるgatewayを呼び出す。
デフォルトでは、swfファイルと同一階層にあるgatewayを呼び出すことになります。 例) http://localhost:8080/flex2_example/bin/add.swf 上記の例ですとgatewayのURLは以下のようになります。 http://localhost:8080/flex2_example/bin/gatewayflex2_example/bin/gatewayはこれまでの設定ではS2Flex2で受けるようになっていないので、web.xmlのservletMappingを変更することで対応可能になります。
<servlet>
<servlet-name>gateway</servlet-name>
<servlet-class>org.seasar.flex2.rpc.remoting.RemotingGateway</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>gateway</servlet-name>
<url-pattern>/bin/gateway</url-pattern>
</servlet-mapping>
あとは、swfをContextルート直下に置くという手もあります。
欠点としては、サーバ連携するswfが点在すると、その分servlet-mappingを追加する必要があります。
でも一度決めてしまえば設定を追加することなく、gatewayのURLを指定することができるようになります。
flashvarsを利用する。
configTypeをflashvarsとして指定することでhtmlから指定することも可能です。 mxmlで以下のようにconfigTypeを指定します。 <s2:Flex2Service configType=&qout;flashvars&qout;..../>あとはhtmlファイルでdestination単位でflashvarsから指定します。
flashvars=&qout;addService=http://localhost:8080/flex/gateway&checkService=http://localhost:8080/flex2_example/gateway&
今後の推奨パターンとしては
・Webアプリケーションの直下にswfを置くまたは一箇所に集めて、servletMappingを追加する。
・RemotingGatewayサーブレットの名前をgatewayにする
と考えています。
この記事に対するコメント