アットウィキロゴ
備忘録@ ウィキ
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

備忘録@ ウィキ

Transactionサンプル

最終更新:

syusei

- view
メンバー限定 登録/ログイン

Transactionサンプル

applicationContext.xml

<beans>
 <bean id="myAction" class="com.app.TestAction">
  <property name="jdbcTemplate><ref bean="jdbcTemplate"/></property>
 </bean>

 <!-- jdbcTemplateの定義 -->
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <property name="dataSource"><ref local="dataSource"/></property>
 </bean>

 <!-- コネクションプーリングの定義 -->
 <bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
  <property name="dataSource"><ref bean="xaDataSource"/></property>
 </bean>

 <!-- XAデータソース -->
 <bean id="xaDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
  <property name="transactionManager"><ref bean="jotm"/></property>
  <property name="driverName"><value>org.postgresql.Driver</value></property>
  <property name="url"><value>jdbc:postgresql://host:port/db?user=xxx&amp;password=xxx</value></property>
 </bean>

 <!-- JOTM -->
 <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>

 <!-- SpringのUserTransaction -->
 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
  <property name="userTransaction"><ref bean="jotm"/></property>
 </bean>

 <!-- Base DAO -->
 <bean id="sampledb_dao" class="com.app.SampleDbDAO">
  <property name="jdbcTemplate"><ref bean="jdbcTemplate"/></property>
 </bean>

</beans>


Java Source

// DAO
final BaseDAO dao = (BaseDAO)wac.getBean("sampledb_dao");

// プログラミングによるトランザクション制御
PlatformTransactionManager txManager = (PlatformTransactionManager)wac.getBean("transactionManager");

// TransactionTemplateを使用する
TransactionTemplate txTemplate = new TransactionTemplate(txManager);
txTemplate.execute(new TransactionCallbackWithoutResult() {
   @Override
   protected void doInTransactionWithoutResult(TransactionStatus status) {
       dao.insertData("hoge1", "Yaaaahooooo!!!");
       dao.insertData("hoge2", "Hyaaaaaaaaa!!!");
       
       // rollback
       status.setRollbackOnly();
   }
});
/*        
// トランザクションの属性設定
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

// トランザクションの開始
TransactionStatus status = txManager.getTransaction(def);

// DAO呼び出し(更新)
dao.insertData("hoge", "Really?");
dao.insertData("hoge2", "Happy!");

// ロールバック
txManager.rollback(status);
*/









最近更新されたスレッド
ウィキ募集バナー