読者です 読者をやめる 読者になる 読者になる

かとじゅんの技術日誌

技術の話をするところ

素のJdbcManagerあります

ここにあります。

http://sourceforge.jp/projects/sisioh/svn/view/altair/?root=sisioh

sisioh-jdbc-jpa-exampleがサンプルなんですが、

  • sisioh-commons
  • sisioh-factory-enhancer
  • sisioh-jdbc-commons
  • sisioh-jdbc-datasource
  • sisioh-jdbc-transaction
  • sisioh-jdbc-dbcp
  • sisioh-jdbc-jpa

が必要です。

サンプルコードは以下のようになります。

  • 汎用コンテナであるContainerAdapterに依存しないように修正。
  • ファクトリファクトリを導入して???FactoryImplが登場しないようにしました。多少コードが見やすくなったかな。
  • ログ出力部分はメッセージが一部しかメッセージが出力されないので、徐々に直します(^^;
/**
 * @author j5ik2o
 */
public class Sample {
	
	/**
	 * メインメソッド
	 * 
	 * @param args プログラム引数
	 */
	public static void main(String[] args) {
		try {
			SisiohJdbc sisiohJdbc = SisiohJdbc.newInstance();
			
			// トランザクションマネージャの初期化
			TransactionManagerFactory tmf = sisiohJdbc.newFactory(TransactionManagerFactory.class);
			TransactionManager transactionManager = tmf.newTransactionManager();
			
			// トランザクションアダプターの初期化
			TransactionManagerAdapter transactionManagerAdapter =
					new JTATransactionManagerAdapter(new UserTransactionImpl(transactionManager), transactionManager);
			
			// トランザクション同期レジストリの初期化
			TransactionSynchronizationRegistryFactory tsrf =
					sisiohJdbc.newFactory(TransactionSynchronizationRegistryFactory.class, transactionManager);
			TransactionSynchronizationRegistry syncRegistry = tsrf.newTransactionSynchronizationRegistry();
			
			// 分散データソースの初期化
			XADataSourceFactory xdsf =
					sisiohJdbc.newFactory(XADataSourceFactory.class, "org.postgresql.Driver",
							"jdbc:postgresql://localhost:5432/sisioh?schema=sisioh", "postgres", "");
			XADataSource xaDataSource = xdsf.newXADataSource();
			
			// コネクションプールの初期化
			ConnectionPoolFactory cpf =
					sisiohJdbc.newFactory(ConnectionPoolFactory.class, xaDataSource, transactionManager);
			ConnectionPool connectionPool = cpf.newConnectionPool();
			
			// データソースの初期化
			DataSourceFactory dsf = sisiohJdbc.newFactory(DataSourceFactory.class, connectionPool);
			DataSource dataSource = dsf.newDataSource();
			
			// JdbcManagerの初期化
			JdbcManagerFactory jmf =
					sisiohJdbc.newFactory(JdbcManagerFactory.class, dataSource, transactionManagerAdapter,
							syncRegistry, new Postgre81Dialect());
			JdbcManager jdbcManager = jmf.newJdbcManager();
			
			// トランザクション用インターセプタの初期化
			RequiredInterceptor ri = new RequiredInterceptor();
			ri.setTransactionControl(transactionManagerAdapter);
			
			// JdbcSampleにトランザクション管理用のAOPをかける
			FactoryEnhancer<JdbcSampleFactory> factoryEnhancer =
					new FactoryEnhancer<JdbcSampleFactory>(JdbcSampleFactory.class, // ファクトリのインターフェース
							JdbcSampleFactoryImpl.class, // 実装クラス
							new Enhance(new Pointcut(), ri));
			
			JdbcSampleFactory jdbcSampleFactory = factoryEnhancer.getEnhanced().newInstance();
			JdbcSample jdbcSample = jdbcSampleFactory.newJdbcSample(jdbcManager);
			
			jdbcSample.process();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (EnhanceException e) {
			e.printStackTrace();
		} finally {
			Disposer.dispose();
		}
	}
}