S2Factory for FDS2(Beta2)
FDS2(Flex Data Services 2)とSeasar 2/S2Flex2 を統合するものです。
概要
FDS2 s2Factoryは、fds2(Flex Data Services 2)と、DIxAOPコンテナであるSeasar2に登録されたコンポーネントを呼び出すことを可能にするFactoryです。
FDS2で用意されているFactory Mechanismを利用してS2Flex2の処理部分を呼び出します。
flex.messaging.FlexFactoryを実装したRemotingServiceInvokerを用意することでFDS2からs2flex2のロジック呼び出しを可能にしています。
機能
- FDS 2の設定ファイルに記述されたserviceをもとにS2Containerに登録されているコンポーネントを呼び出します。
- RemotingService(meta/Annotation)の有無による呼び出しコンポーネントの制限
- アノテーションによるSessionからデータのimport,SessionへのデータExportをサポート
ダウンロード
akabanaのサイトよりdownloadすることができます。
また、ソースリポジトリより最新のものをチェックアウトすることも可能です。
前提条件
FDS s2Factoryを利用するには以下のものを必要とします。
その他S2Flex2/S2Containerで必要なものを一緒にdeployする必要があります。
インストール
FDS用のS2Factoryをインストールして使用するには
jarの配置
s2flex2/S2Containerを利用する上で必要なファイルをコピーします。
- aopalliance-1.0.jar
- geronimo-jta_1.0.1B_spec-1.0.jar
- javassist-3.0.jar
- log4j-1.2.13.jar
- ognl-2.6.7.jar
- s2-extension-2.4.x.jar
- s2-framework-2.4.x.jar
- s2-fds-s2factory-b2.jar
- s2-flex2-1.0.x.jar
web.xmlの更新
S2flex2を利用する為に必要な設定を追加します。
web.xmlに以下の記述を追加します。
filterの設定
<filter> <filter-name>s2filter</filter-name> <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class> </filter> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
上記設定を追加したweb.xmlをresources以下にサンプルとして用意しています。
factoryを利用する設定(services-config.xml)
services-config.xmlに以下の設定を追加します。
追加する場所は、<services-config>タグの下になります。
<factories> <factory id="s2" class="org.seasar.flex2.rpc.remoting.service.fds2.factory.Seasar2Factory" /> </factories>
上記のservices-config.xmlの記述例をresources以下にサンプルとして用意しています。
使い方
サービスの追加
remoting-config.xmlにFlexクライアントから呼び出すserviceの設定を追加します。
以下はaddServiceというサービスを設定する場合の例です。
<destination id="addService"> <properties> <factory>s2</factory> </properties> </destination>
factoryタグにservices-config.xmlで指定したFactoryのIDを指定します。
remotingServiceを使ったServiceの呼び出し制限
S2flex2同様Flex2 クライアントから呼び出すことのできるServiceコンポーネントを制限することができます。
FDS2では、設定されたコンポーネント以外は呼び出すことができないようになっています。
S2Flex2を通じてS2Containerに登録されたコンポーネントを呼び出す際には、RemotingServiceが設定されていなければなりません。
RemotingServiceは以下の方法で登録することが可能です。
- アノテーション(JDK5.0)
- 定数アノテーション(JDK1.4.x)
いづれの方法でも登録されていないときには、AutoRegisterでも、SmartDeployでのCustomizerでもServiceクラスにMeta情報が登録されません。
RemotingSericeが設定されていないServiceは、Flexクライアントから呼び出すことができません。
通常FDS2 ではremoting-config.xmlにSevriceを記述すれば呼び出す事が可能になりますが、S2Factoryを利用するときには、remoting-config.xmlに加えてRemotingServiceが定義されている必要があります。
アノテーション
JDK5.0のときには、アノテーションを利用してRemotingServiceを指定することができます。
例)
@RemotingService public class AddServiceImpl implements AddService { : : }
上記のRemotingServiceは、S2lex2-tigerに含まれています。
アノテーションで設定するときには、S2Flex2とともにS2flex2-tigerを一緒にご利用ください。
flex2-fds-exampleはこのアノテーションを利用してFlex 2クライアントからServiceとして呼び出せるようにしています。
定数アノテーション
JDK1.4環境では、定数アノテーションを指定することで、ServiceとしてFlex 2クライアントから呼び出すことが可能になります。
また、JDK5.0環境においても、S2Flex2-tigerがクラスパス上に無いときには、定数アノテーションで指定します。
例)
public class AddServiceImpl implements AddService { public static final String REMOTING_SERVICE = "addService"; : : }
RemotingServiceの登録
アノテーションまたは、定数アノテーションでService単位に設定した後、Containerに登録する必要があります。
登録するには、以下の方法があります。
- Customizerによる登録
- AutoRegisterによる登録
Customizerによる登録
S2 Container 2.4から導入されたSmartDeployを利用するには、Customizerを利用します。customizer.dicon
<component name="remotingServiceCustomizer" class="org.seasar.flex2.rpc.remoting.service.customizer.RemotingServiceCustomizer"> </component>
AutoRegisterによる登録
diconファイルで、以下のように指定します。
<component class="org.seasar.flex2.rpc.remoting.service.autoregister.FileSystemRemotingServiceAutoRegister"> <initMethod name="addClassPattern"> <arg>"examples.flex2"</arg> <arg>".*ServiceImpl"</arg>> </initMethod> <initMethod name="addClassPattern"> <arg>"examples.flex2"</arg> <arg>".*FacadeImpl"</arg> </initMethod> </component>
addClassPatternで指定するのは、第一引数がrootになるパッケージ、第二引数が登録するクラスパターンになります。
上記の例では、example.flex2から始まるパッケージでServiceImplで終わるクラスを登録します。