(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ファイルの内にを書くとdestinationsが利用可能になる。

こんな感じ

<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のソースを読んでみます。