目次へ

6.2. トランザクション管理の準備

Spring では org.springframework.transaction.PlatformTransactionManager インタフェースを実装する具象クラスとして JDBC, JDO, Hibernate, JTA それぞれに以下のクラスを用意しています。

  • org.springframework.jdbc.datasource.DataSourceTransactionManager
  • org.springframework.orm.jdo.JdoTransactionManager
  • org.springframework.orm.hibernate.HibernateTransactionManager
  • org.springframework.transaction.jta.JtaTransactionManager

JDBC を使用する場合には以下のように Bean 定義ファイルに設定します。

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
    <property name="driverClassName"><value>org.postgresql.Driver</value></property>
    <property name="url"><value>jdbc:postgresql://localhost:5432/Training</value></property>
    <property name="username"><value>postgres</value></property>
    <property name="password"><value></value></property>
    <property name="minIdle"><value>1</value></property>
  </bean>

  <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
  </bean>

org.springframework.jdbc.datasource.DataSourceTransactionManager の dataSource プロパティに javax.sql.DataSource を実装した任意の DataSource を設定するだけです。JDBC を使用する場合には 1つ注意点があります。それは Connection を取得する際にはorg.springframework.jdbc.datasource.DataSourceUtils クラスを使用しなければならないということです。以下のようにして Connection を取得します。

Connection conn = DataSourceUtils.getConnection(dataSource);

Spring がトランザクションを管理するために裏で Connection を管理しているので javax.sql.DataSource#getConnection() メソッドを直接呼び出し、Connection を取得してはいけません。また、Connection#close() メソッドを呼び出してもいけません。

JTA を使用する場合は以下のようにします。DataSourceTransactionManager とは異なり JtaTransactionManager は DataSource やその他のリソースについて知っている必要はありません。

  <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"><value>jdbc/webapp</value></property>
  </bean>
  <bean id="transactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager"/>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ