8.6.1. 使用するRDBMSの変更手順¶
目次
Nablarchのアーキタイプを使用して作成したプロジェクトは、 初期状態ではH2 Database Engine (以下H2)を使用するように設定されている。
別のRDBMSを使用するように設定変更する手順を記述する。
8.6.1.1. 前提¶
以下を前提とする。
- 各アーキタイプから生成した直後のプロジェクトを対象とする。
- RDBMSには、接続に使用するユーザや、スキーマが作成済みであること。また、RDBMS上のユーザには適切な権限が付与済みであること。
8.6.1.2. Mavenリポジトリへのファイル登録¶
8.6.1.2.1. JDBCドライバの登録¶
使用するJDBCドライバについては、以下のいずれかを満たす必要がある。
- Mavenのセントラルリポジトリに登録されている。
- プロジェクトのMavenリポジトリに登録されている。
- ローカルのMavenリポジトリに登録されている。
ここでは、Mavenのセントラルリポジトリに公開されていないJDBCドライバについて、ローカルのMavenリポジトリにJDBCドライバを登録する方法を説明する。手順中のドライバのバージョンについては適宜読み替えること。
重要
- JDBCドライバはCI環境構築までに、プロジェクトのMavenリポジトリに登録することを強く推奨する。
- 以降でJDBCドライバの入手方法についても説明する。JDBCドライバを入手する際には、ライセンスを確認した上で入手すること。
8.6.1.2.1.1. H2¶
H2の場合、JDBCドライバはMavenのセントラルリポジトリに公開されているため登録は不要である。
8.6.1.2.1.2. Oracle¶
Oracleの場合、JDBCドライバはMavenのセントラルリポジトリに公開されているため登録は不要である。
8.6.1.2.1.3. PostgreSQL¶
PostgreSQLの場合、JDBCドライバはMavenのセントラルリポジトリに公開されているため登録は不要である。
8.6.1.2.1.4. DB2¶
DB2のJDBCドライバはMavenのセントラルリポジトリに公開されていないため、ローカルのMavenリポジトリに登録する必要がある。
JDBCドライバをWebから取得する場合は、以下のサイトから入手する。
配布サイトの名前 | URL |
---|---|
IBM DB2 JDBC Driver Versions and Downloads - Japan |
http://www-01.ibm.com/support/docview.wss?uid=swg21363866 (外部サイト、英語) |
以下に、入手したJDBCドライバをローカルのMavenリポジトリに登録するコマンドの例を示す。
mvn install:install-file -DgroupId=com.ibm -DartifactId=db2jcc4 -Dversion=10.5.0.7 -Dpackaging=jar -Dfile=db2jcc4.jar
8.6.1.2.1.5. SQLServer¶
SQLServerの場合、JDBCドライバはMavenのセントラルリポジトリに公開されているため登録は不要である。
8.6.1.3. ファイル修正¶
8.6.1.3.1. propertiesファイルの修正¶
env.properties内の以下の箇所を修正する。
プロパティ名 | 説明 | 使用するプロジェクト/モジュール |
---|---|---|
nablarch.connectionFactory. jndiResourceName |
JNDIでDataSourceを取得する際のリソース名 |
|
nablarch.db.jdbcDriver | JDBCドライバのクラス名 |
|
nablarch.db.url | データベースの接続URL |
|
nablarch.db.user | データベースアクセスユーザ名 |
|
nablarch.db.password | データベースアクセスユーザのパスワード |
|
nablarch.db.schema | 接続するスキーマ名 |
|
アーキタイプからプロジェクトを生成した直後は、「JNDIからコネクションを取得する環境のpropertiesファイル」に以下が該当する。
プロジェクト種別 | JNDIからコネクションを取得する環境のpropertiesファイル |
---|---|
|
|
|
なし |
アーキタイプからプロジェクトを生成した直後は、「ローカルにコネクションプールを作成する環境のpropertiesファイル」に以下が該当する。
プロジェクト種別 | ローカルにコネクションプールを作成する環境のpropertiesファイル |
---|---|
|
|
|
|
|
|
以下に、ローカルにコネクションプールを作成する環境のpropertiesファイル設定例を示す。
8.6.1.3.1.1. H2の設定例(デフォルト)¶
nablarch.db.jdbcDriver=org.h2.Driver
nablarch.db.url=jdbc:h2:./h2/db/SAMPLE
nablarch.db.user=SAMPLE
nablarch.db.password=SAMPLE
nablarch.db.schema=PUBLIC
8.6.1.3.1.2. Oracleの設定例¶
nablarch.db.jdbcDriver=oracle.jdbc.driver.OracleDriver
# jdbc:oracle:thin:@ホスト名:ポート番号:データベースのSID
nablarch.db.url=jdbc:oracle:thin:@localhost:1521/xe
nablarch.db.user=sample
nablarch.db.password=sample
nablarch.db.schema=sample
8.6.1.3.1.3. PostgreSQLの設定例¶
nablarch.db.jdbcDriver=org.postgresql.Driver
# jdbc:postgresql://ホスト名:ポート番号/データベース名
nablarch.db.url=jdbc:postgresql://localhost:5432/postgres
nablarch.db.user=sample
nablarch.db.password=sample
nablarch.db.schema=sample
8.6.1.3.1.4. DB2の設定例¶
nablarch.db.jdbcDriver=com.ibm.db2.jcc.DB2Driver
# jdbc:db2://ホスト名:ポート番号/データベース名
nablarch.db.url=jdbc:db2://localhost:50000/SAMPLE
nablarch.db.user=sample
nablarch.db.password=sample
nablarch.db.schema=sample
8.6.1.3.1.5. SQL Serverの設定例¶
nablarch.db.jdbcDriver=com.microsoft.sqlserver.jdbc.SQLServerDriver
# jdbc:sqlserver://ホスト名:ポート番号;instanceName=インスタンス名
nablarch.db.url=jdbc:sqlserver://localhost:1433;instanceName=SQLEXPRESS
nablarch.db.user=SAMPLE
nablarch.db.password=SAMPLE
nablarch.db.schema=SAMPLE
重要
DBによっては、ユーザ名、パスワード、スキーマの大文字小文字を区別する。
DBに設定した通りに、propertiesファイルにも設定すること。
8.6.1.3.1.6. コンテナの本番環境設定¶
コンテナ用のプロジェクトでは、プロファイルによる環境設定の切り替えは行わない。
代わりに、アプリケーションを動かす環境のOS環境変数を使って、 env.properties
に宣言した設定値を上書きする。
したがって、OS環境変数を設定していない環境では src/main/resources/env.properties
に書かれた設定がそのまま使用される。
本番等のコンテナ環境で動かすときは、OS環境変数を使って nablarch.db.url
などの環境依存値を適切に上書きしなければならない。
OS環境変数で設定を上書きする方法については、 OS環境変数を使って環境依存値を上書きする を参照。
また、プロファイルではなくOS環境変数で設定を切り替えるようにしている理由については、 The Twelve-Factor App の III. 設定 (外部サイト)を参照。
8.6.1.3.2. pom.xmlファイルの修正¶
8.6.1.3.2.1. (本番環境でJNDIからコネクションを取得するプロジェクトの場合)profiles要素内¶
profiles要素内で、JDBCドライバの依存関係が記述されている箇所を修正する。
補足
本番環境でJNDIからコネクションを取得するプロジェクトの場合、ローカルでコネクションプールを作るときだけ明示的に依存関係に入れる必要があるので、profiles要素内に記載されている。
(JNDIからコネクションを取得する場合は、APサーバのクラスローダから、JDBCドライバを取得できるはずである。)
以下、データベース毎の設定例を記述する。
8.6.1.3.2.1.1. H2の設定例(デフォルト)¶
<profiles>
<!-- 中略 -->
<profile>
<!-- 中略 -->
<dependencies>
<!-- 中略 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>runtime</scope>
</dependency>
<!-- 中略 -->
</dependencies>
</profile>
8.6.1.3.2.1.2. Oracleの設定例¶
<profiles>
<!-- 中略 -->
<profile>
<!-- 中略 -->
<dependencies>
<!-- 中略 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
<scope>runtime</scope>
</dependency>
<!-- 中略 -->
</dependencies>
</profile>
8.6.1.3.2.1.3. PostgreSQLの設定例¶
<profiles>
<!-- 中略 -->
<profile>
<!-- 中略 -->
<dependencies>
<!-- 中略 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1207</version>
<scope>runtime</scope>
</dependency>
<!-- 中略 -->
</dependencies>
</profile>
8.6.1.3.2.1.4. DB2の設定例¶
<profiles>
<!-- 中略 -->
<profile>
<!-- 中略 -->
<dependencies>
<!-- 中略 -->
<dependency>
<groupId>com.ibm</groupId>
<artifactId>db2jcc4</artifactId>
<version>10.5.0.7</version>
<scope>runtime</scope>
</dependency>
<!-- 中略 -->
</dependencies>
</profile>
8.6.1.3.2.1.5. SQLServerの設定例¶
<profiles>
<!-- 中略 -->
<profile>
<!-- 中略 -->
<dependencies>
<!-- 中略 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.4.1.jre8</version>
<scope>runtime</scope>
</dependency>
<!-- 中略 -->
</dependencies>
</profile>
8.6.1.3.2.2. (本番環境でローカルにコネクションプールを作成するプロジェクトの場合)dependencies要素内¶
dependencies要素内で、JDBCドライバの依存関係が記述されている箇所を修正する。
デフォルトで記述されているdependency要素の例を示す。
<dependencies>
<!-- TODO: プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。 -->
<!-- 中略 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>runtime</scope>
</dependency>
<!-- 中略 -->
</dependencies>
dependency要素内の各要素については、(本番環境でJNDIからコネクションを取得するプロジェクトの場合)profiles要素内 と同じように記述する。
8.6.1.3.3. (本番環境でJNDIからコネクションを取得するプロジェクトの場合)コンポーネント設定ファイル (src/main/resources/)¶
本番環境でJNDIからコネクションを取得するプロジェクトの場合、src/main/resourcesに配置しているコンポーネント設定ファイルにプロジェクトが使用するデータベースのDialectクラスが定義されている。 各プロジェクトのコンポーネント設定ファイル名は以下となる。
プロジェクト種別 | コンポーネント設定ファイル名 |
---|---|
ウェブ | web-component-configuration.xml |
RESTfulウェブサービス | rest-component-configuration.xml |
上記ファイルの以下の設定を変更する。
<!-- ダイアレクト設定 -->
<!-- 使用するDBに合わせてダイアレクトを設定すること -->
<component name="dialect" class="nablarch.core.db.dialect.H2Dialect" />
Nablarchには以下のDialectクラスが用意されている。使用するデータベースに対応したDialectクラスに修正すること。
データベース | Dialectクラス |
---|---|
Oracle | nablarch.core.db.dialect.OracleDialect |
PostgreSQL | nablarch.core.db.dialect.PostgreSQLDialect |
DB2 | nablarch.core.db.dialect.DB2Dialect |
SQL Server | nablarch.core.db.dialect.SqlServerDialect |
8.6.1.3.4. (本番環境でローカルにコネクションプールを作成するプロジェクトの場合)data-source.xml (src/main/resources/)¶
本番環境でローカルにコネクションプールを作成するプロジェクトの場合、data-source.xmlにプロジェクトが使用するデータベースのDialectクラスが記述されている。
このDialectクラスを、使用するデータベースに対応したDialectクラスに修正する。
使用するDialectクラスは、(本番環境でJNDIからコネクションを取得するプロジェクトの場合)コンポーネント設定ファイル (src/main/resources/) と同一である。
8.6.1.3.5. unit-test.xml (src/test/resources)¶
テスティングフレームワークが使用するデータベースの設定が記述されている。
デフォルトは以下のように汎用のDB設定になっている。
Oracleを使用する場合は、記述を修正する。
<!-- TODO: 使用するDBに合せて設定してください。 -->
<!-- Oracle用の設定 -->
<!--
<import file="nablarch/test/test-db-info-oracle.xml"/>
-->
<!-- 汎用のDB設定 -->
<component name="dbInfo" class="nablarch.test.core.db.GenericJdbcDbInfo">
<property name="dataSource" ref="dataSource"/>
<property name="schema" value="${nablarch.db.schema}"/>
</component>
8.6.1.4. Nablarchが使用するテーブル作成とデータの投入¶
8.6.1.4.1. テーブル作成¶
各プロジェクトの以下のディレクトリに、RDBMS別にDDLを用意している。 このDDLを実行することで、Nablarchが使用するテーブルの作成ができる。
- db/ddl/
補足
DB2の場合、create.sqlの先頭に接続先データベースと、使用スキーマが記述されているので書きかえてからDDLを実行する。
DDLの実行は、「DB2 コマンド・ウィンドウ」上で以下を実行する。
db2 -tvf "C:\develop\myapp-web\db\ddl\db2\create.sql"
補足
gsp-dba-maven-plugin[1]使用時は、以下のコマンドでgsp-dba-maven-pluginを実行すればテーブルが作成される。
mvn -P gsp clean generate-resources
[1] | gsp-dba-maven-pluginを使用するためには、別途設定が必要である。 設定については gsp-dba-maven-plugin(DBA作業支援ツール)の初期設定方法 を参照。 |
8.6.1.4.2. データの投入¶
各プロジェクトの以下のディレクトリに、データのInsert文を用意している。 このInsert文を実行することで、Nablarchが使用するデータのInsertができる。
- db/data/
補足
DB2の場合、data.sqlの先頭に接続先データベースと使用スキーマを記述してから、SQLを実行する。
以下に接続先データベースと使用スキーマの記述例を示す。
CONNECT TO SAMPLE2;
SET SCHEMA sample;
DDLの実行は、「DB2 コマンド・ウィンドウ」上で以下を実行する。
db2 -tvf "C:\develop\myapp-web\db\data\data.sql"