- - PR -
SpringのHibernateトランザクションについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-31 19:49
現在webアプリを作成しています。
あるDBに対してデータを取得して編集して更新というシステムなんですが、 SpringのHibernateDaoSupportを使用してのトランザクション処理を使用しているのですが どうもよくわかりません・・・。 設定は以下のようになっていまして <!-- Hibernate Transaction Manager 設定 --> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <!-- Facade 設定 --> <bean id="facadeTarget" class="test.ServiceImpl"> <property name="testiDao"> <ref bean="testDao"/> </property> </bean> <!-- Hibernate Transaction Manager 詳細設定 --> <bean id="facade" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref local="transactionManager"/> </property> <property name="target"> <ref local="facadeTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="get*">PROPAGATION_REQUIRED,ISOLATION_SERIALIZABLE</prop> <prop key="save*">PROPAGATION_REQUIRED,ISOLATION_SERIALIZABLE</prop> </props> </property> </bean> 1,test.ServiceImplのgetDataメソッド→testDaoのgetDataメソッドを呼び出し 2,1で取得したデータをjsfで編集 3,test.ServiceImplのsaveDataメソッド→testDaoのsaveDataメソッドを呼び出し この1〜3をまとめてトランザクションしたいのですが、 1は1、3は3で分かれてトランザクションしているような感じです。 このようなトランザクションを実装したい場合どうすればいいのでしょうか? よろしくお願いいたします | ||||
|
投稿日時: 2005-08-31 20:42
JSFで編集と言う事は、
1,test.ServiceImplのgetDataメソッド→testDaoのgetDataメソッドを呼び出し と 3,test.ServiceImplのsaveDataメソッド→testDaoのsaveDataメソッドを呼び出し の間にユーザの操作が介入すると言う事でしょうか? そうだとすると、1と3を1つのトランザクションの下で動かすのは無理があると思います。 ユーザの操作が介入すると言う事は... ・ユーザの操作にどれだけ時間がかかるかわからない。何分もかかるかもしれない。 →そんなに長い時間トランザクションをアクティブにしておくのは危険です。 と言うか、トランザクションがタイムアウトしてしまうと思います。 ・ユーザが操作せずにブラウザを閉じるかもしれない。 →トランザクションが完了できないことになります。 | ||||
|
投稿日時: 2005-08-31 21:36
ご返信ありがとうございます。 そうです、1,と3,の間にユーザの操作が入ります。 なるほど、やはり難しいですか・・ ユーザAがデータを取得して、Aが変更中にユーザBもデータを取得した場合 ユーザAが先に登録してもユーザBが編集して更新を行えばユーザAの更新は 意味がなくなってしまうのでそれを何とかできればいいのですが。 前に楽観的ロックについて質問させてもらいましたが DBの構成を変えなくては実現が難しいと返信をいただきましたが DBの構成はほかのシステムにも反映してるので変えることができません。 なにかいい方法があればいいんですが・・ |
1