- PR -

Spring トランザクションについて

1
投稿者投稿内容
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2007-04-11 20:48
みーちくです。

現在下記の構成でアプリを作成しております。
Springは、始めたばかりですので、参考書をまねて
作成している状態です。

下記のように設定した場合、コミットはされるのですが、
ロールバックがされません。
コード:
<bean id="dataSourceTargetSelect" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/test/select" />
</bean>
<bean id="dataSourceTargetUpdate" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/test/update" />
</bean>



また、下記のように設定した場合、ロールバックはされるのですが、
コミットはされません。
コード:
<bean id="dataSourceSelect" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
  <property name="targetDataSource"><ref local="dataSourceTargetSelect"/></property>
  <property name="defaultAutoCommit"><value>false</value></property>
</bean>
<bean id="dataSourceUpdate" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
  <property name="targetDataSource"><ref local="dataSourceTargetUpdate"/></property>
  <property name="defaultAutoCommit"><value>false</value></property>
</bean>



Springのトランザクション管理は、どのようになっているのでしょうか?
宜しくお願い致します。

構成:WindowsXP,Eclipse3.2,Spring2.2,MySQL5.0,JDK5.0
fuifui
会議室デビュー日: 2007/04/12
投稿数: 1
投稿日時: 2007-04-12 00:46
Springはさわったことがないので単なる戯言です。

通常JDBCなどではAutoCommitプロパティがTRUEに設定されている場合、
変更処理を行う文の実行後に自動的にコミットされます。(ディフォルト)
逆にAutoCommitプロパティをFALSEに設定した場合は明示的にコミット処理を
する必要があります。

最初の例ではAutoCommitされているためロールバックされず、
次の例ではAutoCommitプロパティがFALSEに設定されているため
自動でコミットされないのではないでしょうか。

そんなの百も承知で、Springのトランザクションの分離レベルや
トランザクションの振る舞いの詳細が知りたいとかいうレベルの
話でしたら、お邪魔しました。
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2007-04-12 13:39
LazyConnectionDataSourceProxyを使用している意味はありますか?

DataSourceProxyは既存のプログラムの改修作業などで、どうしても使わなければいけない
場合のみの利用が好ましいとされているみたいです。
(TransactionAwareDataSourceProxyなどを見ると)

トランザクション管理はTransactionTemplateやPlatformTransactionManagerを
見ると、幸せになれるかも?
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2007-04-12 14:42
みーちくです。

fuifuiさん、フライトさん
返信ありがとうございました。

LazyConnectionDataSourceProxyは、defaultAutoCommit=false
に設定したかったので、使用しております。

また、いろいろ設定ファイルを修正してみのですが、
正規表現での記述が間違っていたようです。
xxxxServiceがある場合、下記のように正規表現で記述していのですが、
これを、Bean名称をちゃんと記述した場合、ちゃんと動作しました。
「*InsertService*,*UpdateService*」→「UserInsertService,UserUpdateService」

Springはむずかしいですね
TransactionTemplate、PlatformTransactionManagerを調べてみます。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)