2013年4月19日金曜日

JBoss As 7 のDataSource設定方法

JBossは、大変優れたオープンソースなのですが、あまり多くの参考になる資料がなかなか見つかりません。
海外のサイトにはなかなか多くのヒントがいっぱいあるのですが、何分英語で・・・(汗)
なので、ここでは私がネットサーフィンをして調べたJBoss As 7でのDataSourceのOracle10g と MySql5.5の設定方法をここに記載します。

JBossのDataSourceの管理は、JCAが行っており、データベースへの接続には大きく分けて2通りあります。

  • DataSource:1相コミット
  • XA-Datasource:2相コミット
上記の接続では設定方法が違う ので、ここではそれぞれの設定の仕方をメモしておきます。

前提条件
  • oracle 10g driver : ojdbc14.jar
  • MySQL 5.5 driver ; mysql-connector-5.1.XX-bin.jar
  • JBoss 7.1.1 Final
  • Windows XP SP3 Pro 32bit
  • Eclipse 4.2 JUNO
  • Java 1.7.XX
変数定義
  • JBOSS_HOME:JBossがインストールされているフォルダ

ドライバの設置

Oracle10g編

  1. ドライバをOracleのホームページでダウンロードしてきます。
    Oracle10g JDBCドライバダウンロード画面
    Oracle10g JDBCドライバダウンロード画面

    ここではojdbc14.jarを選択します。
  2. ${JBOSS_HOME}\modules\com\に「oracle」フォルダを作成します。
  3. ${JBOSS_HOME}\modules\com\に「main」という名前のフォルダを作成します。
  4. 上記で作成したmainフォルダの直下にダウンロードしたドライバをコピーします。
  5. ${JBOSS_HOME}\modules\com\h2database\h2\main\にある「module.xml」をコピーし、ドライバーをコピーしたフォルダに貼り付けます。
  6. コピーしたファイルを開き以下の項目を修正します。
    • name="com.h2database.h2"→ name="com.oracle"
    • <resource-root path="h2-1.3.161.jar"> →<resource-root path="ojdbc14.jar"/>
    <module name="com.oracle" xmlns="urn:jboss:module:1.1">
      <resources>
        <resource-root path="ojdbc14.jar">
      </resource-root></resources>
      <dependencies>
        <module name="javax.api">
        <module name="javax.transaction.api">
        <module name="javax.servlet.api" optional="true">
      </dependencies>
    </module>
    

MYSQL5.5編

  1. ドライバを最新のMySQLのホームページでダウンロードしてきます。
  2. ${JBOSS_HOME}\modules\com\に「mysql」フォルダを作成します。
  3. ${JBOSS_HOME}\modules\com\に「main」という名前のフォルダを作成します。
  4. 上記で作成したmainフォルダの直下にダウンロードしたドライバをコピーします。
  5. ${JBOSS_HOME}\modules\com\h2database\h2\main\にある「module.xml」をコピーし、ドライバーをコピーしたフォルダに貼り付けます。
  6. コピーしたファイルを開き以下の項目を修正します。
    • name="com.h2database.h2"→ name="com.mysql"
    • <resource-root path="h2-1.3.161.jar"> →<resource-root path="mysql-connector-5.1.XX-bin.jar"/>
    <module name="com.mysql" xmlns="urn:jboss:module:1.1">
      <resources>
        <resource-root path="mysql-connector-5.1.XX-bin.jar">
      </resource-root></resources>
      <dependencies>
        <module name="javax.api">
        <module name="javax.transaction.api">
        <module name="javax.servlet.api" optional="true">
      </dependencies>
    </module>
    

ドライバのデプロイの設定

設置したドライバをJBOSSに認識させ、起動時にデプロイさせます。
JBOSSは以下の2つのモードに分かれており、今回はStandaloneモードに関して記載します。
  • standalone:単一ノードで利用する場合に使う
  • domain:複数のJBOSSのインスタンスをグループ化して統合管理する場合に使用する
JBOSSの設定はstandalone.xmlに一元管理されており、今回はここにDataSource・XA-Datasourceの設定を記載します。
尚、各設定内容のプロパティの設定こちら(RedHatのホームページ)に詳しく記載してあります。
その中の抜粋
  1. datasource:
    • <jndi-name>:DataSourceがバインドされるJNDI名
    • <user-name>:データソースへの接続作成時に使用されるユーザ名
    • <password>:Datasourceへの接続が作成される際に使用するパスワード
    • <transaction-isolation>:接続のデフォルトトランザクション分離
    • <prefill>:接続プールに最小接続数を事前に入力を試みるかを指定します。
    • <max-pool-size>:プール内で接続可能な最大数
    • <min-pool-size>:プールで保存される最小接続数
  2. xa-datasource:
    • <interleaving>:XA接続ファクトリのインターリービングを有効にします。
    • <pad-xid>:Xidのパッディングを行うかどうか
    • <is-same-rm-override>:javax.transaction.xa.XAResource.isSameRMクラスがtrueあるいはfalseのどちらかを返すか
    • <wrap-xa-resource>:org.jboss.tm.XAResourceWrapperインスタンスのXAResourceをラップするかどうか
      注)trueにするとojdbc14の場合commit時エラーになる。
    • <check-valid-connection-sql>:プール接続の妥当性を確認するSQL。
      注)これを設定しないとDBが停止した時、既に接続したコネクションがあると、getConnectionの時にはエラーがでず、SQL発行時にエラーがでる。

Oracle10g・MySQL5.5共通

  1. ${JBOSS_HOME}\standalone\configurationフォルダの「standalone.xml」をテキストエディタで開き、「datasources」で検索します。
  2. デフォルトでサンプルデータソースの書き方としてExampleDSが定義されいるので、その下に以下を追記します。
    <subsystem xmlns="urn:jboss:domain:datasources:1.0">
      <datasources>
        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
          <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
          <driver>h2</driver>
          <security>
            <user-name>sa</user-name>
            <password>sa</password>
          </security>
        </datasource>
     <!-- DataSource ここから-->
    <datasource jta="true" jndi-name="java:jboss/datasources/myvmds" pool-name="myvmds" enabled="true" use-java-context="true">
        <connection-url>jdbc:mysql:URL</connection-url>
        <driver>mysql</driver>
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
        <pool>
            <min-pool-size>10</min-pool-size>
            <max-pool-size>20</max-pool-size>
            <prefill>true</prefill>
        </pool>
        <security>
            <user-name>ユーザ名</user-name>
            <password>パスワード</password>
        </security>
        <statement>
            <share-prepared-statements>true</share-prepared-statements>
        </statement>
    </datasource>
    <datasource jta="true" jndi-name="java:jboss/datasources/orclds" pool-name="orclds" enabled="true" use-java-context="true">
        <connection-url>jdbc:oracle:thin:@localhost:orcl</connection-url>
        <driver>oracle</driver>
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
        <pool>
            <min-pool-size>10</min-pool-size>
            <max-pool-size>20</max-pool-size>
            <prefill>true</prefill>
        </pool>
        <security>
            <user-name>ユーザ名</user-name>
            <password>パスワード</password>
        </security>
    </datasource>
    <!--DataSource ここまで -->
    <!-- xa-datasource ここから --> 
    <xa-datasource jndi-name="java:jboss/datasources/orclXAds" pool-name="orclXAds" enabled="true">
        <xa-datasource-property name="URL">
            jdbc:oracle:thin:@{ホスト名}:orcl
        </xa-datasource-property>
        <driver>oracle</driver>
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
        <xa-pool>
            <min-pool-size>1</min-pool-size>
            <max-pool-size>20</max-pool-size>
            <prefill>true</prefill>
        </xa-pool>
        <security>
            <user-name>ユーザ名</user-name>
            <password>パスワード</password>
        </security>
        <validation>
            <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
            <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
        </validation>
    </xa-datasource>
    <xa-datasource jndi-name="java:jboss/datasources/myXAds" pool-name="myXAds" enabled="true">
        <xa-datasource-property name="URL">
            jdbc:mysql://localhost:3306/{スキーマ}
        </xa-datasource-property>
        <driver>mysql</driver>
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
        <xa-pool>
            <min-pool-size>10</min-pool-size>
            <max-pool-size>20</max-pool-size>
            <prefill>true</prefill>
        </xa-pool>
        <security>
            <user-name>ユーザ</user-name>
            <password>パスワード</password>
        </security>
        <validation>
            <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
        </validation>
        <statement>
           <prepared-statement-cache-size>20</prepared-statement-cache-size>
        </statement>
    </xa-datasource> 
    <!-- xa-datasource ここまで--> 
    
        <drivers>
          <driver name="h2" module="com.h2database.h2">
            <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
          </driver>
          <!-- ここから --> 
          <driver name="mysql" module="com.mysql">
            <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
          </driver>
          <driver name="oracle" module="com.oracle">
            <driver-class>oracle.jdbc.OracleDriver</driver-class>
              <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
          </driver> 
          <!-- ここまで-->
        </drivers>
      </datasources>
    </subsystem>

データベース設定(Oracleのみ)

オラクルのみ以下の設定を行わなければ行けません。
参考:Red Hat Customer Potal
そこで、以下の権限を与える為に、SYS権限でオラクルにログインし、以下のSQLを実施する。
  • GRANT SELECT ON sys.dba_pending_transactions TO user;
  • GRANT SELECT ON sys.pending_trans$ TO user;
  • GRANT SELECT ON sys.dba_2pc_pending TO user;
  • GRANT EXECUTE ON dbms_system TO user;
以上によりJBoss As 7のデータソースの設定が完了です。

Written By : // 14:54
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。
Powered by Blogger.