9.3.3. JDBCCacheLoader
JBossCache は、 ノードのステートをリレーショナルデータベースに保存およびロードする JDBC ベースのキャッシュローダー実装と配布されます。 実装クラスは
org.jboss.cache.loader.JDBCCacheLoader です。
現在の実装は 1 つのテーブルしか使用しません。テーブルの各行は 1 つのノードを表し、 3 つの列を含みます。
Fqnの列 (1 次キー列でもある)- ノードの内容の列 (属性と値のペア)
- 親
Fqnの列
Fqn は文字列として保存されます。 ノードの内容は BLOB として保存されます。
警告
JBoss Cache では
Fqn で使用されるオブジェクトのタイプに制限がありませんが、 このキャッシュローダー実装では Fqn にタイプ java.lang.String のオブジェクトのみが含まれる必要があります。 Fqn の長さも制限があります。 Fqn は 1 次キーであるため、 デフォルトの列タイプは、 使用するデータベースによって決められる最大長までのテキスト値を保存できる VARCHAR になります。
特定のデータベースシステムの設定については、 この wiki ページ を参照してください。
9.3.3.1. JDBCCacheLoader の設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
9.3.3.1.1. テーブルの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
テーブルと列の名前、および列タイプは以下のプロパティで設定できます。
- cache.jdbc.table.name - テーブル名です。
{schema_name}.{table_name}のように、 テーブルのスキーマ名を先頭に追加することができます。 デフォルト値は「jbosscache」です。 - cache.jdbc.table.primarykey - テーブルの 1 次キーの名前。デフォルト値は、「jbosscache_pk」です。
- cache.jdbc.table.create - true または false を設定できます。 起動時にテーブルを作成するかどうかを指定します。 true の場合、 テーブルが存在しないと作成されます。デフォルト値は true です。
- cache.jdbc.table.drop - true または false を設定できます。シャットダウン時にテーブルを破棄するかどうかを指定します。デフォルト値は true です。
- cache.jdbc.fqn.column - FQN の列名。デフォルト値は「fqn」です。
- cache.jdbc.fqn.type - FQN の列タイプ。デフォルト値は「varchar(255)」です。
- cache.jdbc.node.column - ノード内容の列名。デフォルト値は「node」です。
- cache.jdbc.node.type - ノード内容の列タイプ。デフォルト値は「blob」です。このタイプは使用するデータベースに対して有効なバイアンリデータタイプを指定する必要があります。
9.3.3.1.2. DataSource リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
管理された環境 (アプリケーションサーバーなど) で JBossCache を使用する場合は、使用する DataSource の JNDI 名を指定します。
- cache.jdbc.datasource - DataSource の JNDI 名。 デフォルト値は
java:/DefaultDSです。
9.3.3.1.3. JDBC ドライバ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
DataSource を使用しない場合は、JDBC ドライバを使用してデータベースアクセスを設定する以下のプロパティを持ちます。
- cache.jdbc.driver - 完全修飾 JDBC ドライバ名
- cache.jdbc.url - データベースに接続する URL
- cache.jdbc.user - データベースに接続するユーザー名
- cache.jdbc.password - データベースに接続するパスワード
9.3.3.1.4. c3p0 接続プーリング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
JBoss Cache は、 c3p0:JDBC DataSources/Resource Pools ライブラリをスタンドアロンで使用しているアプリケーションサーバー外部で実行している場合に JDBC 接続プーリングを実装します。 有効にするには、 次のプロパティを編集します。
- cache.jdbc.connection.factory - 接続ファクトリクラス名。 設定されていない場合、 標準のプールされていない実装がデフォルトとなります。 c3p0 プーリングを有効にするには、 c3p0 の接続ファクトリクラスを設定します。 次の例を参照してください。
同じキャッシュローダープロパティのセクションに任意の c3p0 パラメータを設定することも可能ですが、 必ずプロパティ名の先頭に「c3p0」を付けるようにしてください。 使用できるプロパティの一覧を検索するには、 c3p0:JDBC DataSources/Resource Pools に配布される c3p0 ライブラリバージョン向けの c3p0 ドキュメントを確認してください。 異なるプーリングパラメータを簡単に試せるようにするため、
-Dc3p0.maxPoolSize=20 のように JBoss Cache XML 設定ファイルのプロパティにある値を上書きし、 システムプロパティよりこれらのプロパティを設定することができます。 c3p0 プロパティが設定ファイルとシステムプロパティのいずれにも定義されていない場合、 c3p0 ドキュメントに記載されているデフォルト値が適用されます。
9.3.3.1.5. 設定例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下はデータベースとして Oracle を使用した JDBCCacheLoader の例です。 CacheLoaderConfiguration XML 要素には、 データベース関連の設定を定義する任意のプロパティセットが含まれます。
<loaders passivation="false" shared="false">
<preload>
<node fqn="/some/stuff"/>
</preload>
<!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
<loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
ignoreModifications="false" purgeOnStartup="false">
<properties>
cache.jdbc.table.name=jbosscache
cache.jdbc.table.create=true
cache.jdbc.table.drop=true
cache.jdbc.table.primarykey=jbosscache_pk
cache.jdbc.fqn.column=fqn
cache.jdbc.fqn.type=VARCHAR(255)
cache.jdbc.node.column=node
cache.jdbc.node.type=BLOB
cache.jdbc.parent.column=parent
cache.jdbc.driver=oracle.jdbc.OracleDriver
cache.jdbc.url=jdbc:oracle:thin:@localhost:1521:JBOSSDB
cache.jdbc.user=SCOTT
cache.jdbc.password=TIGER
</properties>
</loader>
</loaders>
全体の JDBC 接続を設定する代わりに、既存のデータソースの名前を指定できます。
<loaders passivation="false" shared="false">
<preload>
<node fqn="/some/stuff"/>
</preload>
<!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
<loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
ignoreModifications="false" purgeOnStartup="false">
<properties>
cache.jdbc.datasource=java:/DefaultDS
</properties>
</loader>
</loaders>
c3p0 JDBC 接続プーリングを使用したキャッシュローダーの設定例:
<loaders passivation="false" shared="false">
<preload>
<node fqn="/some/stuff"/>
</preload>
<!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
<loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
ignoreModifications="false" purgeOnStartup="false">
<properties>
cache.jdbc.table.name=jbosscache
cache.jdbc.table.create=true
cache.jdbc.table.drop=true
cache.jdbc.table.primarykey=jbosscache_pk
cache.jdbc.fqn.column=fqn
cache.jdbc.fqn.type=VARCHAR(255)
cache.jdbc.node.column=node
cache.jdbc.node.type=BLOB
cache.jdbc.parent.column=parent
cache.jdbc.driver=oracle.jdbc.OracleDriver
cache.jdbc.url=jdbc:oracle:thin:@localhost:1521:JBOSSDB
cache.jdbc.user=SCOTT
cache.jdbc.password=TIGER
cache.jdbc.connection.factory=org.jboss.cache.loader.C3p0ConnectionFactory
c3p0.maxPoolSize=20
c3p0.checkoutTimeout=5000
</properties>
</loader>
</loaders>