(6)LCDS2.5ドキュメントを読む
添付のドキュメント(pdf)を読んでみます。
何かわかるかもしれません。
以下、
LiveCycle® Data Services Developer’s Guide(lcds_dev_guide.pdf)のchapter14[UsingFactories]を読んだ痕跡です。
FlexDataService destinationとDataManagementService destinationはともにjavaで書かれている。
デフォルトでLiveCycleDataServiceはこれらのインスタンスを生成する。
もしそれらがApplicationスコープなら、destinationを属性名としてServletContextの属性として保持される。
もしsessionスコープなら、FlexSessionに保持される。
destinationでattribute-idを指定するとどの属性に保持されるかを制御できる。
それによって1つ以上のdestinationが同じインスタンスを共有できる。
以下の例はattribute-idを含むdestinationの定義。
<destination id="WeatherService"> <properties> <source>weather.WeatherService</source> <scope>application</scope> <attribute-id>MyWeatherService</attribute-id> </properties> </destination>
この例では、Flexはweather.WeatherServiceクラスのインスタンスを生成する。
そして、WeatherServiceとMyWeatherServiceという名前とともにServletContextの属性のセットで保持する。
もし、同じattribute-idと同じjavaクラスを持つ、異なったdestinationを定義すると、Flexは同じコンポーネントインスタンスを使用する。
LiveCycle Data Servicesは、EJB と Springのようなコンポーネントをcreation / maintenanceするシステムと統合するのを許すためにFlexにあなた自身のコンポーネント作成とメンテナンスのシステムをプラグインできるfactoryメカニズムを提供する。
flex.messaging.FlexFactoryインターフェイスを実装するクラスを作成する。
このクラスは、特定のdestinationに対応したコンポーネントのFactoryインスタンスを生成するのに使用する。
FlexFactory実装は、LiveCycleDataServices構成ファイルから構成属性にアクセスすることができて、
また、FlexSessionとServletContextオブジェクトにアクセスすることができる。
以下の例が示すように、FlexFactoryのクラスを実装した後に、
services-config.xmlファイルの
こんな感じ
<factories> <factory id="spring" class="flex.samples.factories.SpringFactory" /> </factories>
Flexはあなたが指定するそれぞれのfactoryエレメントあたり一つのFlexFactoryインスタンスを生成する。
FlexはIDで
destination定義の特性の部分のfactoryエレメントを使用することで
そのfactoryを指定する各destinationにこの1つのグローバルなFlexFactory実装を使用します。
例えば、あなたのremoting-config.xmlファイルには、以下の1つと同様のdestinationがあるかもしれません:
<destination id="WeatherService"> <properties> <factory>spring</factory> <source>weatherBean</source> </properties> </destination>
factoryエレメントがstartupで遭遇するとき、
LiveCycle Data Servicesは、FlexFactory.createFactoryInstance()メソッドをコールする
そのメソッドはそれが構成で予想するソース値といかなる他の属性も得ます。
あなたがアクセスするどんな属性ConfigMapパラメタは、予想されるように著しく、構成誤りを引き起こしません。
したがって、あなたはこの様にデフォルトFlexconfigurationをextendすることができます。
Flexがこのdestinationにコンポーネントのインスタンスを必要とすると
destination に個々のインスタンスを検索するFactoryInstance.lookup()メソッドをよびます
任意で、factoryインスタンスは追加属性を取ることができる
方法は二つ
ひとつは、factoryを定義するとき、あなたはfactoryの定義の一部として付加的な属性を提供することができ
ます。
また、そのfactoryのインスタンスを定義するとき、あなたは、factoryインスタンスを作成する際に使用されるためにdestinationno
定義にあなた自身の属性を加えることができます。
以下の例に示します
<factories> <factory id="myFactoryId" class="myPackage.MyFlexFactory"> <properties> <myfactoryattributename>myfactoryattributevalue</myfactoryattributename> </properties> </factory> </factories>
あなたがこの構成のサンプルを使用するのは、Springでの開発時の場合です。
FlexFactory.initialize()を実装します。
public void initialize(String id, ConfigMap configMap){ System.out.println("**** MyFactory initialized with: " + configMap.getPropertyAsString("myfactoryattributename", "not set")); }
先の例のinitiallize()メソッドは、一つ目のStringの引数は属性名、二つ目はセットしなければデフォルト値が使用される。
以下の例のように、
それぞれのfactoryのインスタンスは、そのfactoryのインスタンスが定義されるとき使用された構成属性を
加えることができます。
<destination id="myDestination"> <properties> <source>mypackage.MyRemoteClass</source> <factory>myFactoryId</factory> <myfactoryinstanceattribute>myfoobar2value</myfactoryinstanceattribute> </properties> </destination>
以下の例のように、
FlexFactoryクラスの一部の実装であるcreateFactoryInstance()メソッド内で、
あなたはファクトリのインスタンスの属性にアクセスできる
public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { System.out.println("**** MyFactoryInstance instance initialized with myfactoryinstanceattribute=" + properties.getPropertyAsString("myfactoryinstanceattribute", "notset")); ….
なかなかのカタコトぶりに自分でも困ってしまいました。
flex.messaging.FlexFactoryインターフェイスを実装するクラスを作成して、
services-config.xmlに登録しましょうという話だと思うのですが。
次回は、これをもとにAKABANAのS2Factory for FDSのソースを読んでみます。