JBossESB でplaceholderを利用する

JBossESBでplaceholderってどう利用するんだろうと思って調べてみた。
するとこんなページを発見。
PropertiesService |JBoss Developer

どうやらJBossAS内にSystemPropertiesServiceなるものが存在し、それを「${JBOSS_HOME}/server//deploy/properties-service.xml」に定義するのが王道のようだ。

この方法で実施しようと思ったんだけどさらに調べてみると
How to using propertyService to substitute para... |JBoss Developer
なるページを発見。
どうやらデプロイされたアプリケーションのロード順によってはproperties-service.xmlの設定が効かないことがあるらしいので、「${JBOSS_HOME}/server//conf/jboss-service.xml」に定義する方がいいよ、とのこと。
(ここに定義しておくと必ず「${JBOSS_HOME}/server//deploy」配下のものより先にロードされるため)

JBossESBも「${JBOSS_HOME}/server//deploy」にデプロイされて動作するため、これは困る。。。
ということで、今回はひとまず「${JBOSS_HOME}/server//conf/jboss-service.xml」に定義することとした。

jboss-service.xml

<mbean code="org.jboss.varia.property.SystemPropertiesService" name="me:service=MyProperties">
    <attribute name="Properties">
        test.value=Hello
    </attribute>
</mbean>

jboss-esb.xml

<action name="SystemPrintln" class="org.jboss.soa.esb.actions.SystemPrintln">
    <property name="message" value="${test.value}" />
</action>

これで無事JBossESBでplaceholderが扱えた。



また、jboss-service.xml

<mbean code="org.jboss.varia.property.SystemPropertiesService" name="me:service=MyProperties">
    <attribute name="URLList">
        ./conf/xxx.properties,
        /home/hoge/conf/yyy.properties
    </attribute>
</mbean>

のようにカンマ区切りでプロパティファイルを定義すると、外部ファイルから値を取得することもできる。
こっちの方が用途が多そうだな〜



【2012/05/30 追記】
このままだと
「${JBOSS_HOME}/server//deploy/properties-service.xml
「${JBOSS_HOME}/server//conf/jboss-service.xml
の2箇所にSystemPropertiesServiceが存在することとなり、JBoss起動時にエラーが発生する。
そのため、
「${JBOSS_HOME}/server//deploy/properties-service.xml
に元々ある定義はコメントアウトするべき。