JDBC支援サービス jp.ossc.nimbus.service.connection.TransactionSynchronizerService

jp.ossc.nimbus.service.connection.TransactionSynchronizerServiceは、データベースへの更新トランザクションを記録し、記録したトランザクションを別のデータベースに発行する事でデータベース間のテーブル同期を行うサービスです。

データベースへの更新トランザクションを記録するのは、このサービスではなく、WrappedConnectionFactoryServiceを使って、java.sql.ConnectionをラップしたTransactionLoggingConnectionです。
更新トランザクションを記録するテーブルは、TRANSACTION_LOGとTRANSACTION_PARAMS_LOGテーブルです。テーブル名はサービス定義で変更可能です。
TRANSACTION_LOGテーブルのスキーマは以下です。

列名内容
SEQNOVARCHAR更新トランザクションの発行順序を示す通番
QUERYCLOB発行したSQL
QUERY_TYPEINTEGER発行したSQLの種類。
1:静的SQL
2:埋め込みSQL
3:ストアドプロシジャ
UPDATE_TIMETIMESTAMP更新時刻
UPDATE_USERVARCHAR更新ユーザ。デフォルトでは更新ホスト名

TRANSACTION_PARAMS_LOGテーブルのスキーマは以下です。

列名内容
SEQNOVARCHAR更新トランザクションの発行順序を示す通番
PARAM_INDEXINTEGER埋め込みパラメータのインデックス
PARAM_NAMEVARCHAR埋め込みパラメータのパラメータ名
PARAM_TYPEINTEGER埋め込みパラメータのjava.sq.Type値
PARAM_LENGTHINTEGERBLOBやCLOBなどの可変長データだった場合のデータ長
PARAMBLOB埋め込みパラメータ

このサービスは、TransactionLoggingConnectionが、データベースに記録した更新トランザクションを使って、別のデータベースに対して、更新トランザクションを発行します。

このサービスは、複合的なサービスで、以下のサービスを下位サービスとして使用します。

下位サービスインタフェース用途
jp.ossc.nimbus.service.connection.ConnectionFactoryjava.sql.Connectionを取得する
jp.ossc.nimbus.service.transaction.TransactionManagerFactoryjavax.transaction.TransactionManagerを取得する

以下に簡単なサービス定義を示します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <manager>
  7. <!-- データベースを同期するTransactionSynchronizerサービス -->
  8. <service name="TransactionSynchronizer"
  9. code="jp.ossc.nimbus.service.connection.TransactionSynchronizerService">
  10. <!-- 同期元のデータベースのConnectionFactoryサービス名を設定する -->
  11. <attribute name="SourceConnectionFactoryServiceName">#ConnectionFactory1</attribute>
  12. <!-- 同期先のデータベースのConnectionFactoryサービス名を設定する -->
  13. <attribute name="DestinationConnectionFactoryServiceName">#ConnectionFactory2</attribute>
  14. </service>
  15. <!-- JDBCドライバ経由でConnectionを取得するConnectionFactoryサービス -->
  16. <service name="ConnectionFactory1"
  17. code="jp.ossc.nimbus.service.connection.JDBCConnectionFactoryService">
  18. <attribute name="DriverName">org.hsqldb.jdbcDriver</attribute>
  19. <attribute name="ConnectionURL">jdbc:hsqldb:./db1/localDB</attribute>
  20. <attribute name="UserName">sa</attribute>
  21. <attribute name="Password"></attribute>
  22. </service>
  23. <!-- JDBCドライバ経由でConnectionを取得するConnectionFactoryサービス -->
  24. <service name="ConnectionFactory2"
  25. code="jp.ossc.nimbus.service.connection.JDBCConnectionFactoryService">
  26. <attribute name="DriverName">org.hsqldb.jdbcDriver</attribute>
  27. <attribute name="ConnectionURL">jdbc:hsqldb:./db2/localDB</attribute>
  28. <attribute name="UserName">sa</attribute>
  29. <attribute name="Password"></attribute>
  30. </service>
  31. <!-- ラップしたConnectionを取得するConnectionFactoryサービス -->
  32. <service name="TransactionLoggingConnectionFactory"
  33. code="jp.ossc.nimbus.service.connection.WrappedConnectionFactoryService">
  34. <attribute name="ConnectionFactoryServiceName">#ConnectionFactory1</attribute>
  35. <attribute name="ConnectionWrapperClassName">jp.ossc.nimbus.util.sql.TransactionLoggingConnection</attribute>
  36. <attribute name="ConnectionWrapperProperties">
  37. <object code="java.util.LinkedHashMap">
  38. <attribute name="Sequence">
  39. <service-ref>#Sequence</service-ref>
  40. </attribute>
  41. </object>
  42. </attribute>
  43. <depends>ConnectionFactory1</depends>
  44. <depends>Sequence</depends>
  45. </service>
  46. <service name="Sequence"
  47. code="jp.ossc.nimbus.service.sequence.StringSequenceService">
  48. <attribute name="format">TIME_SEQ(yyyyMMddHHmmss,3)</attribute>
  49. </service>
  50. </manager>
  51. </server>


JDBC