- Category -

HOME > 失敗レポート > JBoss > JBoss 4.2 - デフォルトのデータソースを MySQL に変更する

JBoss 4.2 - デフォルトのデータソースを MySQL に変更する

作成日時:2007/05/14  更新日時:2007/05/14

失敗

JBoss AS 4.2.0 が GA (Generally Available) リリースされたのに伴い、JBoss を最新バージョンに移行しました。 移行作業を行っていると、以前の失敗 (デフォルトのデータソースを MySQL に変更しようとして、JMS が動かなくなった!) が思い出されます。

今回は、その失敗について振り返ってみます。 ただし、各ソフトウェアは 2007 年 5 月 14 日時点の最新バージョンを使用しています。

環境

このレポートは、以下の環境について記述したものです。

JDK JDK 6 Update 1
AP サーバ JBoss Application Server 4.2.0 GA
DBMS MySQL 5.0.41 Community Server
JDBC ドライバ MySQL Connector/J 5.0.5

原因

JBoss AS では、デフォルトのデータソースに HSQLDB (ピュア Java の軽量 DB) を使用しています。 この HSQLDB を別のデータベースに変更するには、複数の設定ファイルを作成/編集/削除する必要があります。

なお、私が犯した失敗は HSQLDB 設定ファイル (hsqldb-ds.xml および hsqldb-jdbc2-service.xml) を削除せず、そのまま放置していたことです。

解決策

JBoss のデータソースを MySQL に変更する手順を説明します。

本稿では、JBoss のサーバインスタンスに default を使用しています。 他のサーバインスタンスをご使用の場合は、ご使用中の環境に合わせて適宜読み替えてください。

【注意】
以下の説明では、デフォルトのデータソースを HSQLDB から MySQL に変更します。 既存のデータソースに加えて、MySQL のデータソースを追加するのではないことにご注意ください。

(1) JDBC ドライバの配置

MySQL の JDBC ドライバをライブラリとして配置します。

1. mysql-connector-java-5.0.5-bin.jar を ${JBOSS_HOME}/server/default/lib ディレクトリにコピーします。

(2) データソースの接続設定

MySQL データソースの接続設定ファイル (mysql-ds.xml) を作成します。

1. ${JBOSS_HOME}/docs/examples/jca/mysql-ds.xml を ${JBOSS_HOME}/server/default/deploy ディレクトリにコピーします。
2. jndi-name 要素の値を MySqlDS から DefaultDS に変更します。
3. connection-url 、user-name 、password 要素の値を変更します。

[mysql-ds.xml]
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>DefaultDS</jndi-name>
    <connection-url>jdbc:mysql://ホスト名:ポート番号/データベース名</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>ユーザ名</user-name>
    <password>パスワード</password>
    <exception-sorter-class-name>
      org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
    </exception-sorter-class-name>

    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

(3) JMS 永続マネージャの設定

JMS の永続マネージャが MySQL を使用するように設定します。

1. ${JBOSS_HOME}/docs/examples/jms/mysql-jdbc2-service.xml を ${JBOSS_HOME}/server/default/deploy/jms ディレクトリにコピーします。
2. データソース名を MySqlDS から DefaultDS に変更します。

[mysql-jdbc2-service.xml] 変更箇所のみを抜粋
<?xml version="1.0" encoding="UTF-8"?>
<server>

  … DestinationManager、MessageCache に関する設定は省略 …

  <mbean code="org.jboss.mq.pm.jdbc2.PersistenceManager"
    name="jboss.mq:service=PersistenceManager">
    <depends optional-attribute-name="ConnectionManager">
      jboss.jca:service=DataSourceBinding,name=DefaultDS
    </depends>
    <attribute name="SqlProperties">… SQL は省略 …</attribute>
    <attribute name="RecoverMessagesChunk">1</attribute>
  </mbean>

</server>

(4) HSQLDB 設定ファイルの名前変更

HSQLDB の設定ファイルを名前変更または削除します。

1. ${JBOSS_HOME}/server/default/deploy/hsqldb-ds.xml を名前変更または削除します。
2. ${JBOSS_HOME}/server/default/deploy/jms/hsqldb-jdbc2-service.xml を名前変更または削除します。

以上の設定で、JBoss のデフォルトのデータソースを MySQL に変更することができます。
ただし、EJB 3.0 の Entity Bean を使用する場合は、別途 persistence.xml を作成する必要があります。 詳しくは『JBoss 4.2 - Entity Bean の永続化に MySQL を使用する』を参照してください。

補足 1

■ **-ds.xml の jndi-name 要素

JNDI でデータソースをルックアップするには、**-ds.xml の jndi-name 要素の値を使用します。

以下に、簡単なサンプルを示します。

[Java] javax.sql.DataSource の取得
InitialContext ctx = new InitialContext();
DataSource ds = (javax.sql.DataSource) ctx.lookup("java:/DefaultDS");

補足 2

■ データソース名を DefaultDS 以外にする場合

JBoss の各サービスの設定ファイルは、データソース名を DeaultDS と記述しています。 データソース名を DefaultDS から変更する場合は、それらの設定ファイルと整合性をとる必要があります。

以下に、データソース名として DefaultDS を参照している設定ファイルの一部を挙げます。

conf/login-config.xml 各サービス/アプリケーションのログインに関する設定ファイル。
conf/standardjbosscmp-jdbc.xml CMP の設定ファイル。
deploy/ejb-deployer.xml EJB デプロイヤの設定ファイル。
deploy/schedule-manager-service.xml スケジューリング・サービスの設定ファイル。
deploy/uuid-key-generator.sar/
META-INF/jboss-service.xml
UUID (Universally Unique IDentifier : 過去~未来においても一意になる識別子) サービスの設定ファイル。

関連レポート