技術情報

GroupSession

ユーザーサポートH2 Database Engineの概要
GroupSession無料版ユーザーの方へ、開発に関する技術情報を公開しています。

H2 Database Engineの概要

H2の特徴

・Javaで作成されている
・フリーで利用できる
・高速に動作する(*1)
・コンパクトなファイルサイズ(1MB程度)
・複数の起動モード(*2)

*1:公式ページに処理性能の比較表が掲載されています。
*2:組み込みモード、サーバモード、クラスタモードがあります(GroupSessionは組み込みモードで動作しています)。

技術情報

GroupSessionを開発する過程で調査したH2に関する技術情報をご紹介します。

Javaプログラムから組み込みモードで使用する

JavaプログラムからH2 を組み込み(Embedded)モードで使用するため「jdbc:h2:[file:][<path>]<databaseName>」形式の接続文字列を生成しています。
GroupSessionでは接続文字列と設定ファイル(dataSource.xml、connectOption.properties)を元にデータソースを生成しています。

JavaプログラムからH2を組み込みモードで使用する例

//データベースコネクションを取得するサンプルクラス
public static void main(String[] args) throws Exception {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection(
"jdbc:h2:file:{H2Database設置フォルダ}¥db¥gs2db¥gs2db;",
"username",
"password");
//
// プログラムコード
//
}


dataSource.xml、connectOption.propertiesを使用したコーディング例(DataSource使用)

//データベースコネクションを取得するサンプルクラス
public static void main(String[] args) {
/** データソース */
private static DataSource ds__ = null;

GSH2Util dbUtil = new GSH2Util();
String dbPath = "{H2Database設置フォルダ}¥db¥gs2db";

DataSourceModel dsModel = new DataSourceModel();
dsModel.setUrl(dbUtil.createUrl(dbPath));
//セッター部分省略---------------//

DataSource ds__ = createDataSource(dsModel);
Connection con = ds.getConnection();
}


//データベースコネクションを取得するサンプルクラス
public static void main(String[] args) {
/** データソース */

GSH2Util dbUtil = new GSH2Util();
String dbPath = "{H2Database設置フォルダ}¥db¥gs2db";

//dataSource.xmlからDataSourceの情報を取得
DataSourceModel dsModel = new DataSourceModel();
dsModel.setUrl(dbPath);

//セッター部分省略---------------//

DataSource ds = createDataSource(dsModel);
Connection con = ds.getConnection();
}


/** ロギングクラス */
private static Log log__ = LogFactory.getLog(GSH2Util.class);
/** DB PORT */
private static final int DB_PORT__ = 9092;
/** DB名 */
private static final String DB_NAME__ = "gs2db";

/** 接続文字列オプション */
private static String jdbcUrlOption__ = null;

static {

//H2Database 接続オプションを取得する
try {
ResourceBundle optionResource = ResourceBundle.getBundle("connectOption");

Enumeration keys = optionResource.getKeys();

StringBuffer sb = new StringBuffer("");
while (keys.hasMoreElements()) {
String key = keys.nextElement();
String value = optionResource.getString(key);

if (!StringUtil.isNullZeroString(value)) {
sb.append(";").append(key).append("=").append(value);
}
}
jdbcUrlOption__ = sb.toString();

} catch (Exception e) {
log__.info("H2 Database 接続オプションなし", e);
}
}

/**
* DB接続文字列を作成する
* @param rootPath アプリケーションのルートパス
* @return db url
*/
public String createUrl(String rootPath) {
String dbDir = GsDataSourceFactory.getDbDir(rootPath);
String url = "jdbc:h2:" + dbDir + DB_NAME__ + File.separator + DB_NAME__;

//接続文字列にオプションを追加
url += jdbcUrlOption__;

log__.debug("db_url==>" + url);
return url;
}


//データソースを生成します
public static DataSource createDataSource(DataSourceModel dsModel) {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName(dsModel.getDriverClassName());
bds.setUrl(dsModel.getUrl());
bds.setUsername(dsModel.getUser());
bds.setPassword(dsModel.getPass());
bds.setValidationQuery(dsModel.getValidationQuery());
bds.setDefaultReadOnly(dsModel.isDefaultReadOnly());
bds.setDefaultAutoCommit(dsModel.isDefaultAutoCommit());
bds.setMaxIdle(dsModel.getMaxIdle());
bds.setMaxActive(dsModel.getMaxActive());
bds.setMaxWait(dsModel.getMaxWait());

bds.setRemoveAbandoned(true);
bds.setRemoveAbandonedTimeout(600);
return bds;
}

H2 オプション

H2をサーバモード、組み込みモードで使用する際に数多くのオプションの中から用途に合わせて設定することができます。
下記表で数多くある設定項目の中からGroupSessionで使用しているオプションをご紹介します。
設定ファイル connectOption.properties にこれらを記述しています。

オプション 内容
設定値 初期値
LOCK_MODE テーブルロックについての設定を行います。
0=READ_UNCOMMITTED,
1=SERIALIZABLE, 2=SYSTEM LOCK,
3=READ_COMMITTED
LOCK_MODE=1
LOCK_TIMEOUT テーブルロックタイムアウト時間の設定を行います。
ミリ秒で指定します。 LOCK_TIMEOUT=1000
DEFAULT_LOCK_TIMEOUT 新しいセッションに使用されるデフォルトテーブルロックタイムアウト時間の設定を行います。
ミリ秒で指定します。 DEFAULT_LOCK_TIMEOUT=1000
MULTI_THREADED マルチスレッドでの使用についての設定を行います。
1=マルチスレッド、0=シングルスレッド MULTI_THREADED=0
IFEXISTS DBをオープンした時に指定パスが存在しない場合に新しいDBを作成するか設定を行います。
TRUE=作成する、FALSE=作成しない IFEXISTS=TRUE
AUTOCOMMIT Auto Commit設定を行います。
ON=有効、OFF=無効 AUTOCOMMIT=OFF
DB_CLOSE_ON_EXIT VMが終了した時、データベースを終了するかを設定を行います。
TRUE=終了する、FALSE=終了しない
DB_CLOSE_ON_EXIT=FALSE
CACHE_SIZE H2 Databaseのキャッシュサイズ。
  CACHE_SIZE=32768
MAX_LENGTH_INPLACE_LOB BLOB、CLOBのin-place設定
  MAX_LENGTH_INPLACE_LOB=10240
CACHE_TYPE H2 Databaseのキャッシュアルゴリズム。
  CACHE_TYPE=SOFT_LRU
MVCC Multi-Version Concurrency Control (MVCC) についての設定を行います。
TRUE=有効にする、FALSE=無効にする MVCC=FALSE

H2 データタイプ

H2 では主要なデータタイプをサポートしています。詳細は[H2公式ホームページ]を参照してください。
下記表で数多くあるデータタイプの中からGroupSessionで使用しているデータタイプをご紹介します。

タイプ 内容
INT Type INT | INTEGER | MEDIUMINT | INT4 | SIGNED
VARCHAR Type {VARCHAR | LONGVARCHAR | VARCHAR2 | NVARCHAR | NVARCHAR2 |
VARCHAR_CASESENSITIVE}[( precisionInt )]
TIMESTAMP Type {TIMESTAMP | DATETIME | SMALLDATETIME}
LOB Type {BLOB | CLOB}


TOP