AntでXAデータソースを動的に追加しちゃう方法

追記:
謎が2つ.ver9.0のドキュメント"http://e-docs.bea.com/wls/docs90/programming/ant_tasks.html"なのにスキーマがver8.1のもののままになってる.MBean Referenceを見るとver8.1からver9.0にかけてかなり一新されている.ドキュメントは本当に正しいのか? global-transactions-protocolが設定されないためデフォルトのOnePhaseCommitで動作していると思われるが,MySQL側のGeneral Logを見るとTwoPhaseCommitな動きをしているかのように見える.障害発生をエミュレートしたケースでも"prepare→rollback"かましてるし.意味分からん.

→まあブラックボックス的に見た場合には想定通りの正しい動きをしているのでこれで自分的にはこれでOKにしときます.これ以上これに時間投入は厳しいし.



#下のエントリとあわせてお読みください.

下に書いたbuild.xmlを以下のように拡張するとあら不思議,新しくドメインを生成してWebLogicをそれを使って起動させ,JMX経由で動的に設定までやってくれちゃう.

<taskdef name="wlserver" classname="weblogic.ant.taskdefs.management.WLServer"/>
<taskdef name="wlconfig" classname="weblogic.ant.taskdefs.management.WLConfig"/>  
<target name="startWebLogic">
    <delete dir="tmp"/>
    <mkdir dir="tmp"/>   
    <wlserver dir="tmp" host="127.0.0.1" port="7001" generateConfig="true" domainname="testDomain"
        servername="testServer" username="weblogic" password="weblogic" action="start"/>
    <wlconfig url="t3://localhost:7001" username="weblogic" password="weblogic">
       <query domain="testDomain" type="Server" name="testServer"
              property="testserver"/>   
       <create type="JDBCConnectionPool" name="mysql-xa-pool"
          property="mysqlxapool">
          <set attribute="CapacityIncrement" value="1"/>
          <set attribute="DriverName"
             value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
          <set attribute="InitialCapacity" value="1"/>
          <set attribute="MaxCapacity" value="10"/>
          <set attribute="RefreshMinutes" value="0"/>
          <set attribute="ShrinkPeriodMinutes" value="15"/>
          <set attribute="ShrinkingEnabled" value="true"/>
          <set attribute="TestConnectionsOnRelease" value="false"/>
          <set attribute="TestConnectionsOnReserve" value="false"/>
          <set attribute="URL"
             value="jdbc:mysql://localhost/test"/>
          <set attribute="Targets" value="${testserver}"/>
       </create>
       <create type="JDBCTxDataSource" name="MySQL XA DataSource">
          <set attribute="JNDIName" value="MysqlXA"/>
          <set attribute="PoolName" value="mysql-xa-pool"/>
          <set attribute="Targets" value="${testserver}"/>
       </create>
    </wlconfig>   
</target>

MySQL側で開通確認.

4 Connect     @localhost as anonymous on test
4 Query       SET NAMES latin1
4 Query       SET character_set_results = NULL
4 Query       SHOW VARIABLES
4 Query       SHOW COLLATION
4 Query       SET autocommit=1
4 Query       SET autocommit=0
4 Query       SET autocommit=0
4 Query       SHOW VARIABLES LIKE 'tx_isolation'
4 Query       SHOW VARIABLES LIKE 'tx_isolation'      
4 Query       rollback
4 Quit       

○○-ds.xmlをコピペするだけでデータソースをDeployしてくれるJBossのURLDeployScanner+RARDeployerに勝るとも劣らない(絶賛).WebLogic見直したよ.

あとは同じようにAntタスクでJ2EEモジュールをデプロイできれば完璧だな.