FlexFactoryの拡張

FlexFactoryはFlexのリモートオブジェクトを使った通信の際のあて先インスタンスを返す処理を拡張する際に利用するクラス。
このFlexFactoryの拡張の仕方について。

FlexFactoryクラスを継承し、FlexFactoryのインタフェースであるcreateFactoryInstanceとlookupをoverrideする。
services-config.xmlとremoting-config.xmlの記述の仕方は参考ページの通り。
2つのファイルで設定したプロパティ値はそれぞれinitializeメソッドとcreateFactoryInstanceメソッドで参照できる。

remoting-config.xmlで設定したあて先のプロパティを確認してみるコード。

public FactoryInstance createFactoryInstance(final String id, final ConfigMap prop)
{
       Set s = prop.propertyNames();
       System.out.println("set:"+ s);
       Iterator iterator=s.iterator();
       while(iterator.hasNext()){
           String key=(String)iterator.next();
           System.out.println("elem:"+ prop.getPropertyAsString(key, "value not found")); 
       }
...FactoryInstanceを返す処理。省略
}

createFactoryInstanceメソッドのパラメータのConfigMapはremoting-config.xmlのdesitination/propertiesタグで指定したパラメータを持っていて、デフォルトではfactory,source,scopeが設定されている。
あて先ごとに異なったプロパティの種類と値を設定することができ、アプリケーション初期化時に設定したあて先の分だけ呼び出された。
EJBなどFactory内のインスタンスのキャッシュの設定や、APサーバごとのJNDI名の設定などに利用できるかもしれない。

と思ったが、アプリケーションのプリロード時に、使っていないタグをチェックし、存在した場合はエラーになるので、ユーザが自由にタグを追加して動的に読み込むという使い方は推奨されないのかもしれない。上記のようにConfigMapの全要素をトラバースする処理を入れておくとエラーの回避はできた。

参考。
http://livedocs.adobe.com/flex/201_jp/html/ent_services_config_097_26.html
http://www.adobe.com/livedocs/flex/2_jp/fds2javadoc/flex/messaging/FlexFactory.html