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編
- ドライバをOracleのホームページでダウンロードしてきます。
Oracle10g JDBCドライバダウンロード画面
ここではojdbc14.jarを選択します。 - ${JBOSS_HOME}\modules\com\に「oracle」フォルダを作成します。
- ${JBOSS_HOME}\modules\com\に「main」という名前のフォルダを作成します。
- 上記で作成したmainフォルダの直下にダウンロードしたドライバをコピーします。
- ${JBOSS_HOME}\modules\com\h2database\h2\main\にある「module.xml」をコピーし、ドライバーをコピーしたフォルダに貼り付けます。
- コピーしたファイルを開き以下の項目を修正します。
- 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編
- ドライバを最新のMySQLのホームページでダウンロードしてきます。
- ${JBOSS_HOME}\modules\com\に「mysql」フォルダを作成します。
- ${JBOSS_HOME}\modules\com\に「main」という名前のフォルダを作成します。
- 上記で作成したmainフォルダの直下にダウンロードしたドライバをコピーします。
- ${JBOSS_HOME}\modules\com\h2database\h2\main\にある「module.xml」をコピーし、ドライバーをコピーしたフォルダに貼り付けます。
- コピーしたファイルを開き以下の項目を修正します。
- 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のインスタンスをグループ化して統合管理する場合に使用する
尚、各設定内容のプロパティの設定こちら(RedHatのホームページ)に詳しく記載してあります。
その中の抜粋
- datasource:
- <jndi-name>:DataSourceがバインドされるJNDI名
- <user-name>:データソースへの接続作成時に使用されるユーザ名
- <password>:Datasourceへの接続が作成される際に使用するパスワード
- <transaction-isolation>:接続のデフォルトトランザクション分離
- <prefill>:接続プールに最小接続数を事前に入力を試みるかを指定します。
- <max-pool-size>:プール内で接続可能な最大数
- <min-pool-size>:プールで保存される最小接続数
- 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共通
- ${JBOSS_HOME}\standalone\configurationフォルダの「standalone.xml」をテキストエディタで開き、「datasources」で検索します。
- デフォルトでサンプルデータソースの書き方として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;
0 コメント:
コメントを投稿