ここにあります。
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(); } } }