nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
jp.ossc.nimbus.service.connection.TransactionSynchronizerServiceは、データベースへの更新トランザクションを記録し、記録したトランザクションを別のデータベースに発行する事でデータベース間のテーブル同期を行うサービスです。
データベースへの更新トランザクションを記録するのは、このサービスではなく、WrappedConnectionFactoryServiceを使って、java.sql.ConnectionをラップしたTransactionLoggingConnectionです。
更新トランザクションを記録するテーブルは、TRANSACTION_LOGとTRANSACTION_PARAMS_LOGテーブルです。テーブル名はサービス定義で変更可能です。
TRANSACTION_LOGテーブルのスキーマは以下です。
列名 | 型 | 内容 |
SEQNO | VARCHAR | 更新トランザクションの発行順序を示す通番 |
QUERY | CLOB | 発行したSQL |
QUERY_TYPE | INTEGER | 発行したSQLの種類。 1:静的SQL 2:埋め込みSQL 3:ストアドプロシジャ |
UPDATE_TIME | TIMESTAMP | 更新時刻 |
UPDATE_USER | VARCHAR | 更新ユーザ。デフォルトでは更新ホスト名 |
TRANSACTION_PARAMS_LOGテーブルのスキーマは以下です。
列名 | 型 | 内容 |
SEQNO | VARCHAR | 更新トランザクションの発行順序を示す通番 |
PARAM_INDEX | INTEGER | 埋め込みパラメータのインデックス |
PARAM_NAME | VARCHAR | 埋め込みパラメータのパラメータ名 |
PARAM_TYPE | INTEGER | 埋め込みパラメータのjava.sq.Type値 |
PARAM_LENGTH | INTEGER | BLOBやCLOBなどの可変長データだった場合のデータ長 |
PARAM | BLOB | 埋め込みパラメータ |
このサービスは、TransactionLoggingConnectionが、データベースに記録した更新トランザクションを使って、別のデータベースに対して、更新トランザクションを発行します。
このサービスは、複合的なサービスで、以下のサービスを下位サービスとして使用します。
下位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.connection.ConnectionFactory | java.sql.Connectionを取得する |
jp.ossc.nimbus.service.transaction.TransactionManagerFactory | javax.transaction.TransactionManagerを取得する |
以下に簡単なサービス定義を示します。
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE server PUBLIC
- "-//Nimbus//DTD Nimbus 1.0//JA"
- "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
- <server>
- <manager>
- <!-- データベースを同期するTransactionSynchronizerサービス -->
- <service name="TransactionSynchronizer"
- code="jp.ossc.nimbus.service.connection.TransactionSynchronizerService">
- <!-- 同期元のデータベースのConnectionFactoryサービス名を設定する -->
- <attribute name="SourceConnectionFactoryServiceName">#ConnectionFactory1</attribute>
- <!-- 同期先のデータベースのConnectionFactoryサービス名を設定する -->
- <attribute name="DestinationConnectionFactoryServiceName">#ConnectionFactory2</attribute>
- </service>
- <!-- JDBCドライバ経由でConnectionを取得するConnectionFactoryサービス -->
- <service name="ConnectionFactory1"
- code="jp.ossc.nimbus.service.connection.JDBCConnectionFactoryService">
- <attribute name="DriverName">org.hsqldb.jdbcDriver</attribute>
- <attribute name="ConnectionURL">jdbc:hsqldb:./db1/localDB</attribute>
- <attribute name="UserName">sa</attribute>
- <attribute name="Password"></attribute>
- </service>
- <!-- JDBCドライバ経由でConnectionを取得するConnectionFactoryサービス -->
- <service name="ConnectionFactory2"
- code="jp.ossc.nimbus.service.connection.JDBCConnectionFactoryService">
- <attribute name="DriverName">org.hsqldb.jdbcDriver</attribute>
- <attribute name="ConnectionURL">jdbc:hsqldb:./db2/localDB</attribute>
- <attribute name="UserName">sa</attribute>
- <attribute name="Password"></attribute>
- </service>
- <!-- ラップしたConnectionを取得するConnectionFactoryサービス -->
- <service name="TransactionLoggingConnectionFactory"
- code="jp.ossc.nimbus.service.connection.WrappedConnectionFactoryService">
- <attribute name="ConnectionFactoryServiceName">#ConnectionFactory1</attribute>
- <attribute name="ConnectionWrapperClassName">jp.ossc.nimbus.util.sql.TransactionLoggingConnection</attribute>
- <attribute name="ConnectionWrapperProperties">
- <object code="java.util.LinkedHashMap">
- <attribute name="Sequence">
- <service-ref>#Sequence</service-ref>
- </attribute>
- </object>
- </attribute>
- <depends>ConnectionFactory1</depends>
- <depends>Sequence</depends>
- </service>
- <service name="Sequence"
- code="jp.ossc.nimbus.service.sequence.StringSequenceService">
- <attribute name="format">TIME_SEQ(yyyyMMddHHmmss,3)</attribute>
- </service>
- </manager>
- </server>