失敗
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 を /server/default/lib ディレクトリにコピーします。
(2) データソースの接続設定
MySQL データソースの接続設定ファイル (mysql-ds.xml) を作成します。
1. /docs/examples/jca/mysql-ds.xml を /server/default/deploy ディレクトリにコピーします。
2. jndi-name 要素の値を MySqlDS から DefaultDS に変更します。
3. connection-url 、user-name 、password 要素の値を変更します。
<?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. /docs/examples/jms/mysql-jdbc2-service.xml を /server/default/deploy/jms ディレクトリにコピーします。
2. データソース名を MySqlDS から DefaultDS に変更します。
<?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. /server/default/deploy/hsqldb-ds.xml を名前変更または削除します。
2. /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 要素の値を使用します。 以下に、簡単なサンプルを示します。
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 : 過去~未来においても一意になる識別子) サービスの設定ファイル。 |
