[Seasar-user:21525] Re: [Doma]別フレームワークのトランザクション管理機能を使用する方法について

Kikuchi Yoko [E-MAIL ADDRESS DELETED]
2012年 12月 12日 (水) 20:22:07 JST


お世話になります。菊地です。

(2)について、
中村様が過去に検証されたSpring+JOTMのブログ(http://d.hatena.ne.jp/taedium/20050110/p1)を参考に
Spring+JOTM+DomaでJtaTransactionManagerを試してみたところ、
正常にトランザクション制御されることが確認できました。
(中村様、アドバイスありがとうございました。)

検証が十分とは言えない上、設定も正しいか怪しいですが、ロールバック・コミットの動作は確認できました。

●Spring設定ファイル
  <bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <constructor-arg ref="targetDataSource"/>
  </bean>
  <!-- xapoolのXADataSource -->
  <bean id="xaDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource"
destroy-method="shutdown">
    <property name="driverName" value="xxxDriver" />
    <property name="url" value="url"/>
    <property name="transactionManager" ref="jotm"/>
  </bean>
  <!-- xapoolのコネクションプーリング -->
  <bean id="targetDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"
destroy-method="shutdown">
    <property name="dataSource" ref="xaDataSource"/>
    <property name="user" value="user"/>
    <property name="password" value="password"/>
  </bean>
  <!-- JOTM(UserTransaction兼TransactionManager)生成FactoryBean:Spring2のソースをコピーして使用 -->
  <bean id="jotm" class="xxx.JotmFactoryBean">
    <property name="defaultTimeout" value="60000"/>
  </bean>
  <!-- SpringのTransactionManager -->
  <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="userTransaction" ref="jotm"/>
    <property name="allowCustomIsolationLevels" value="true" />
  </bean>
  <!-- Doma用Config -->
  <bean id="databaseConfig" class="xxx.DatabaseConfig"/>

●carol.properties(TOMCAT_HOME/lib に作成)
carol.protocols=jrmp
carol.start.jndi=false
carol.start.ns=false
carol.start.rmi=false


以上、ご報告まで。


> -----Original Message-----
> From: seasar-user-bounces @ ml.seasar.org [mailto:seasar-user-bounces @ ml.seasar.org] On Behalf Of
> Kikuchi Yoko
> Sent: Monday, December 10, 2012 3:15 PM
> To: seasar-user @ ml.seasar.org
> Subject: [Seasar-user:21523] Re: [Doma]別フレームワークのトランザクション管理機能を使用する方
> 法について
>
> 中村(taedium)様
>
> お世話になっております。菊地です。
>
> > 「上記DataSourceをラップして」というのは
> > org.springframework.jdbc.datasource.TransactionAwareDataSourceProxyを
> > 使っているということでしょうか?
> > TransactionAwareDataSourceProxyを使えば、
> > トランザクション中のコネクションはcloseされないと認識しています。
>
> Springの勉強不足で上記クラスを使用しておりませんでした。
> ローカルデータソース管理(BasicDataSource / DataSourceTransactionManager)の場合
> TransactionAwareDataSourceProxyの使用でトランザクション制御が正しく実行されることが確認できま
> した。
> ありがとうございます。
>
> JTATransactionManagerを利用した場合は、未だトランザクション制御が正しくできていません。
> SpringやJOTM側の設定が原因だと思いますので、勉強してみます。
>
> ご回答ありがとうございました。
>
> 以上です。
>
>
> > -----Original Message-----
> > From: seasar-user-bounces @ ml.seasar.org
> > [mailto:seasar-user-bounces @ ml.seasar.org] On Behalf Of Toshihiro
> > Nakamura
> > Sent: Friday, December 07, 2012 6:00 PM
> > To: seasar-user @ ml.seasar.org
> > Subject: [Seasar-user:21521] Re: [Doma]別フレームワークのトランザクション管理機能を使用する
>> > 法について
> >
> > 中村(taedium)です。
> >
> > > (1)
> > > DataSource:org.apache.commons.dbcp.BasicDataSource
> > > TransactionManager:org.springframework.jdbc.datasource.DataSourceTra
> > > nsactionManager
> > > AppConfig:上記DataSourceをラップして、トランザクション管理下のコネクションを返却する
> > >      DataSourceをDIコンテナから取得し返すよう実装
> >
> > 「上記DataSourceをラップして」というのは
> > org.springframework.jdbc.datasource.TransactionAwareDataSourceProxyを
> > 使っているということでしょうか?
> > TransactionAwareDataSourceProxyを使えば、
> > トランザクション中のコネクションはcloseされないと認識しています。
> > もしかすると、トランザクションが適切にかかっていないのかもしれませんね。
> >
> > まずは、Domaなしで適切に動くか確かめてみてはいかがでしょうか。
> >
> > On Fri, 7 Dec 2012 16:37:37 +0900
> > Kikuchi Yoko <kikuchi.yoko @ jp.fujitsu.com> wrote:
> >
> > > お世話になります。
> > > 菊地と申します。
> > >
> > > Doma 1.25.0 を利用させて頂いております。
> > >
> > > DomaとSpring(3.1.1)を連携しているのですが、
> > > Springのトランザクション管理機能を利用するとうまく動作しないため質問させてください。
> > >
> > > Springのトランザクションマネージャを利用して、Serviceクラス(Dao呼び出しクラス)の
> > > メソッド単位でトランザクション制御を行っています。
> > > このとき、トランザクション管理が正しく実行されずに困っています。
> > >
> > > 動作検証は以下の組み合わせを試しました。
> > >
> > > (1)
> > > DataSource:org.apache.commons.dbcp.BasicDataSource
> > > TransactionManager:org.springframework.jdbc.datasource.DataSourceTra
> > > nsactionManager
> > > AppConfig:上記DataSourceをラップして、トランザクション管理下のコネクションを返却する
> > >      DataSourceをDIコンテナから取得し返すよう実装
> > >
> > > 問題事象:トランザクション管理側でコミットやロールバックを実行しようとすると、
> > >      コネクションが既にcloseされているためエラーとなる。
> > >
> > > 予想原因:DaoImpl内で利用しているCommandクラスの実行(execute)メソッドで
> > >      必ずコネクションのcloseが行われるよう実装されてるためだと考えています。
> > >      (ModifyCommand#execute() L77 など)
> > >
> > > (2)
> > > DataSource:JOTMを利用しTomcat側で定義したDataSourceをルックアップ
> > > TransactionManager:org.springframework.transaction.jta.JtaTransactio
> > > nManager
> > > AppConfig:上記DataSourceをDIコンテナから取得し返すよう実装
> > >
> > > 問題事象:トランザクションに無関係なコネクションが使用され、
> > >      Daoメソッド終了時点でコミットされる。
> > >
> > >
> > > (1)について、Daoメソッドにてコネクションをcloseしない方法がありましたらご教授願います。
> > > (2)について、外部フレームワークでトランザクション管理する際の設定方法、Configの実装方法で
> > > 注意点などございましたらご教授願います。
> > >
> > > お手数おかけいたしますが、よろしくお願いいたします。
> > >
> > > 以上です。
> > >
> > > **************************************************
> > >  菊地庸子  (Kikuchi Yoko)
> > >  E-mail:kikuchi.yoko @ jp.fujitsu.com
> > > **************************************************
> > >
> > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > Seasar-user @ ml.seasar.org
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> > --
> > Toshihiro Nakamura <nakamura.toshihiro @ isid.co.jp>
> >
> > _______________________________________________
> > Seasar-user mailing list
> > Seasar-user @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-user
>
> **************************************************
>  菊地庸子  (Kikuchi Yoko)
>  E-mail:kikuchi.yoko @ jp.fujitsu.com
> **************************************************
>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


**************************************************
 菊地庸子  (Kikuchi Yoko)
 E-mail:kikuchi.yoko @ jp.fujitsu.com
**************************************************



Seasar-user メーリングリストの案内