Menu Close
14.2. JDBC ロックシステムの使用
概要
JDBC ロッキングメカニズムは、Red Hat Fuse インスタンスが別のマシンに存在するフェイルオーバーデプロイメントを対象としています。
このシナリオでは、マスターインスタンスはデータベースでホストされるロッキングテーブルのロックを保持します。マスターでロックが失われた場合、待機しているスレーブプロセスがロックテーブルにアクセスできるようになり、そのコンテナーを完全に起動します。
JDBC ドライバーのクラスパスへの追加
JDBC ロッキングシステムでは、JDBC ドライバーは、マスター/スレーブセットアップの各インスタンスのクラスパス上にある必要があります。以下のように JDBC ドライバーをクラスパスに追加します。
-
JDBC ドライバーの JAR ファイルを、各 Red Hat Fuse インスタンスの
ESBInstallDir/lib/ext
ディレクトリーにコピーします。 CLASSPATH
変数に JDBC ドライバー JAR が含まれるように、bin/karaf
起動スクリプトを変更します。たとえば、JDBC JAR ファイル
JDBCJarFile.jar
の場合、以下のように起動スクリプトを変更できます(*NIX オペレーティングシステム上)。... # Add the jars in the lib dir for file in "$KARAF_HOME"/lib/karaf*.jar do if [ -z "$CLASSPATH" ]; then CLASSPATH="$file" else CLASSPATH="$CLASSPATH:$file" fi done CLASSPATH="$CLASSPATH:$KARAF_HOME/lib/JDBCJarFile.jar"
注記MySQL ドライバー JAR または PostgreSQL ドライバー JAR を追加する場合は、karaf
-
接頭辞でドライバー JAR の名前を変更する必要があります。それ以外の場合は、Apache Karaf がハングし、ドライバーが見つからなかったことがログに記録されます。
JDBC ロックシステムの設定
JDBC ロックシステムを設定するには、以下のように、マスター /スレーブデプロイメント内の各インスタンスの etc/system.properties
ファイルを更新します。
例14.2 JDBC ロックファイルの設定
karaf.lock=true karaf.lock.class=org.apache.karaf.main.lock.DefaultJDBCLock karaf.lock.level=50 karaf.lock.delay=10000 karaf.lock.jdbc.url=jdbc:derby://dbserver:1527/sample karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=30
この例では、sample という名前のデータベースが存在しない場合はそれが作成されます。ロックテーブルを取得する最初の Red Hat Fuse インスタンスはマスターインスタンスです。データベースへの接続が失われた場合、マスターインスタンスは正常なシャットダウンを試行し、データベースサービスが復元する際にスレーブインスタンスをマスターにすることができます。以前のマスターは手動で再起動する必要があります。
Oracle での JDBC ロッキングの設定
JDBC ロックシナリオで Oracle をデータベースとして使用する場合は、etc /system.properties
ファイルの karaf.lock.class
プロパティーが org.apache.karaf.main.lock.OracleJDBCLock
を指す必要があります。
それ以外の場合は、以下のように system.properties
ファイルをセットアップで通常通りに設定します。
例14.3 Oracle の JDBC ロックファイルの設定
karaf.lock=true karaf.lock.class=org.apache.karaf.main.lock.OracleJDBCLock karaf.lock.jdbc.url=jdbc:oracle:thin:@hostname:1521:XE karaf.lock.jdbc.driver=oracle.jdbc.OracleDriver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=30
karaf.lock.jdbc.url
には、アクティブな Oracle システム ID(SID)が必要です。これは、この特定のロックを使用する前に、データベースインスタンスを手動で作成する必要があります。
Derby での JDBC ロッキングの設定
JDBC ロックシナリオで Derby をデータベースとして使用する場合は、etc /system.properties
ファイルの karaf.lock.class
プロパティーが org.apache.karaf.main.lock.DerbyJDBCLock
を指す必要があります。たとえば、以下のように system.properties
ファイルを設定できます。
例14.4 Derby の JDBC ロックファイルの設定
karaf.lock=true karaf.lock.class=org.apache.karaf.main.lock.DerbyJDBCLock karaf.lock.jdbc.url=jdbc:derby://127.0.0.1:1527/dbname karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=30
MySQL での JDBC ロッキングの設定
JDBC ロックシナリオで MySQL をデータベースとして使用する場合は、etc /system.properties
ファイルの karaf.lock.class
プロパティーが org.apache.karaf.main.lock.MySQLJDBCLock
を指す必要があります。たとえば、以下のように system.properties
ファイルを設定できます。
例14.5 MySQL の JDBC ロックファイルの設定
karaf.lock=true karaf.lock.class=org.apache.karaf.main.lock.MySQLJDBCLock karaf.lock.jdbc.url=jdbc:mysql://127.0.0.1:3306/dbname karaf.lock.jdbc.driver=com.mysql.jdbc.Driver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=30
PostgreSQL での JDBC ロッキングの設定
JDBC ロックシナリオで PostgreSQL をデータベースとして使用する場合は、etc /system.properties
ファイルの karaf.lock.class
プロパティーが org.apache.karaf.main.lock.PostgreSQLJDBCLock
を指す必要があります。たとえば、以下のように system.properties
ファイルを設定できます。
例14.6 PostgreSQL の JDBC ロックファイルの設定
karaf.lock=true karaf.lock.class=org.apache.karaf.main.lock.PostgreSQLJDBCLock karaf.lock.jdbc.url=jdbc:postgresql://127.0.0.1:5432/dbname karaf.lock.jdbc.driver=org.postgresql.Driver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=0
JDBC ロッククラス
現在、以下の JDBC ロッククラスが Apache Karaf によって提供されます。
org.apache.karaf.main.lock.DefaultJDBCLock org.apache.karaf.main.lock.DerbyJDBCLock org.apache.karaf.main.lock.MySQLJDBCLock org.apache.karaf.main.lock.OracleJDBCLock org.apache.karaf.main.lock.PostgreSQLJDBCLock