JBoss7にjdbcドライバをmoduleとして組み込んで利用する時の備忘録

タイトルにある通りです。JBoss7にはいくつかの方法でjdbcを登録してDataSourceの設定を行えるようですが、moduleとして組み込む方法をとりあえずメモ。

個人的に、Derbyと同じぐらいよく利用するDBにMySQLがあります。検索するとMySQLのデータソースをJBoss7に登録するための記事はいくつかヒットします。

特に「How to create an manage datasources in AS7」というタイトルの記事(英語)でかなり詳しくいくつかの方法が説明されているようなのですが、やりたいことはmoduleとして組み込めればいいだけで、なおかつ、XAトランザクションは使わないので、少し細かすぎるということもあり、上記記事を参考にMySQLのデータソースの設定を備忘録的に残そうかと思います。(あくまでも個人的な作業メモ程度のものですが・・・)

やることは、JBOSS_HOMEディレクトリのmodulesディレクトリ配下にmysqljdbcを配置するためのディレクトリの作成と、jarの配置、module.xmlの作成、standalone.xmlへの設定追加の4点です。

moduleディレクトリへのjarの配置とmodule.xmlの作成は上記記事を見ればわかるのでとりあえず省略。(modulesディレクトリ配下に階層作ってjar置いてmodule.xmlファイル作るだけなんでほぼ手順そのままです。)

module.xmlファイルの作成まで終わればstandalone.xmlに以下の記述を記載するだけです。(ドメインモードの場合はdomain.xmlに記載。XAは使わないから省略。)

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
    <datasources>
        ...
        <datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:mysql://[host]:[port]/[database]</connection-url>
            <new-connection-sql>[some new connection sql]</new-connection-sql>
            <driver>mysql</driver>
            <pool>
                <min-pool-size>[min pool size]</min-pool-size>
                <max-pool-size>[max pool size]</max-pool-size>
            </pool>
            <security>
                <user-name>[user]</user-name>
                <password>[password]</password>
            </security>
            <validation>
                <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"></exception-sorter>
                <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"></valid-connection-checker>
                <check-valid-connection-sql>[some check valid connection sql]</check-valid-connection-sql>
                <validate-on-match>true</validate-on-match>
                <background-validation>true</background-validation>
                <background-validation-millis>[some background validation millis]</background-validation-millis>
            </validation>
        </datasource>
        <drivers>
            ...
            <driver name="mysql" module="com.mysql.jdbc">
                   <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>
...

[XXX]は各環境で読み替えてください。JBossを起動して管理コンソールにアクセスしてDataSourceの一覧を見るとMySqlDSという名前のDataSourceが作成されていると思います。プールサイズの最大、最小値及びValidationも設定どおりに表示されていると思います。

persistence.xmlを以下のように作成して簡単なDBアクセスプログラムがDeployしたアプリケーションから実行できれば問題ないかと思います。

【persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="defaultPersistenceUnit">
        <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

あと、試しにDBをダウンさせて、その後起動させるとコネクションが正常に戻り更新も行えると思います。