Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
System
>
TERASOLUNA Framework
>
Forums
>
Open Discussion
>
トランザクション境界について
TERASOLUNA Framework
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Subversion
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Wiki
FrontPage
Title index
Recent changes
Doc Mgr
List Docs
Communication
Forums
List of Forums
Open Discussion (1277)
Mailing Lists
list of ML
terasoluna-information
News
Forums:
Open Discussion
(Thread #19971)
Return to Thread list
RSS
トランザクション境界について (2008-09-22 16:20 by
matsumotoa
#38957)
Reply
Create ticket
ServerFWのブランクプロジェクトのトランザクション境界についてです。
現在配布されている設定では、以下のようになっています。
・ thin番
DAOのメソッド単位
(例)
・ UpdateDAO.execute*
・ QueryDAO.execute*
・ rich版
*BLogic, *Serviceのメソッド単位
(例)
・ TestBLogic.insert*
・ TestService.update*
・ TestService.*(readOnly)
ブランクのままならば、振る舞い(propagation設定)がREQUIREDであるため、(同一スレッド内で実行される)1ビジネスロジック、1トランザクションで実行されると思います。
しかし、その他の設定(REQUIRES_NEWなど)を行った場合、上記の境界では1ビジネスロジック、1トランザクションが保障されません。
上記を踏まえて、質問です。
この境界で、設定が行われている理由は何でしょうか?特に理由がないならば、利便性を考えるならば、ブランクのトランザクション境界をBLogic単位としておくべきではないでしょうか?
Reply to #38957
×
Subject
Body
Reply To Message #38957 > ServerFWのブランクプロジェクトのトランザクション境界についてです。 > > 現在配布されている設定では、以下のようになっています。 > ・ thin番 > DAOのメソッド単位 > (例) > ・ UpdateDAO.execute* > ・ QueryDAO.execute* > ・ rich版 > *BLogic, *Serviceのメソッド単位 > (例) > ・ TestBLogic.insert* > ・ TestService.update* > ・ TestService.*(readOnly) > > ブランクのままならば、振る舞い(propagation設定)がREQUIREDであるため、(同一スレッド内で実行される)1ビジネスロジック、1トランザクションで実行されると思います。 > しかし、その他の設定(REQUIRES_NEWなど)を行った場合、上記の境界では1ビジネスロジック、1トランザクションが保障されません。 > > 上記を踏まえて、質問です。 > この境界で、設定が行われている理由は何でしょうか?特に理由がないならば、利便性を考えるならば、ブランクのトランザクション境界をBLogic単位としておくべきではないでしょうか?
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: トランザクション境界について (2008-09-22 17:00 by
kimuraku
#38958)
Reply
Create ticket
DAOにもトランザクション境界を設けている理由は、業務要件によっては
ActionやControllerから直接DAOを呼び出さざるを得ない場合もあることを想定して、
トランザクションが全くかからなくなってしまう事態を防ぐためです。
もちろん開発時に適切なトランザクション境界とモードを設定すれば上記のような
事態は避けられますが、ブランクプロジェクトとして提供する上では
デフォルトの設定として以下を定義しておく方針にしています。
・DAOのトランザクション境界の定義
・BLogicのトランザクション境界の定義
・PROPERGATION=REQUIRED(これによりBLogicのトランザクション境界が優先される)
とはいえ現在のブランクプロジェクトの設定には、以下の問題がありますね。。。
・トランザクション対象のメソッドにexecute/insert/update/delete/selectが
定義されているが、execute以外のメソッドはDAOにもBLogicにも存在しない。
・Web版のcommonContext.xmlがコメントアウトされているため、このままでは
BLogicにトランザクションがかからない
・Rich版のDAOに対するトランザクションの設定がされていない。
開発時に必ず手が入る部分であるとは言え、推奨設定をした上で提供すべきだと思います。
次回リリース時に対応します。
Reply to
#38957
Reply to #38958
×
Subject
Body
Reply To Message #38958 > DAOにもトランザクション境界を設けている理由は、業務要件によっては > ActionやControllerから直接DAOを呼び出さざるを得ない場合もあることを想定して、 > トランザクションが全くかからなくなってしまう事態を防ぐためです。 > > もちろん開発時に適切なトランザクション境界とモードを設定すれば上記のような > 事態は避けられますが、ブランクプロジェクトとして提供する上では > デフォルトの設定として以下を定義しておく方針にしています。 > ・DAOのトランザクション境界の定義 > ・BLogicのトランザクション境界の定義 > ・PROPERGATION=REQUIRED(これによりBLogicのトランザクション境界が優先される) > > とはいえ現在のブランクプロジェクトの設定には、以下の問題がありますね。。。 > > ・トランザクション対象のメソッドにexecute/insert/update/delete/selectが > 定義されているが、execute以外のメソッドはDAOにもBLogicにも存在しない。 > ・Web版のcommonContext.xmlがコメントアウトされているため、このままでは > BLogicにトランザクションがかからない > ・Rich版のDAOに対するトランザクションの設定がされていない。 > > 開発時に必ず手が入る部分であるとは言え、推奨設定をした上で提供すべきだと思います。 > > 次回リリース時に対応します。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: トランザクション境界について (2008-09-22 17:13 by
matsumotoa
#38959)
Reply
Create ticket
kimurakuさま
早急な回答をありがとうございます。
DAO単位の境界設定の存在意義がよくわかりました。
DAO単位での(業務用件によりますが)propagation設定はREQUIREDが推奨ということですね。(REQUIRES_NEWにすると、ビジネスロジック内で1トランザクションにならないため)
基本、以下のような設定で運用しようと思います。
・QueryDAO.*→propagation=required, read-only=true
・UpdateDAO.*,StoredProcedureDAO.*→propagation=required, read-only=false
ありがとうございました。
Reply to
#38958
Reply to #38959
×
Subject
Body
Reply To Message #38959 > kimurakuさま > > 早急な回答をありがとうございます。 > DAO単位の境界設定の存在意義がよくわかりました。 > DAO単位での(業務用件によりますが)propagation設定はREQUIREDが推奨ということですね。(REQUIRES_NEWにすると、ビジネスロジック内で1トランザクションにならないため) > > 基本、以下のような設定で運用しようと思います。 > ・QueryDAO.*→propagation=required, read-only=true > ・UpdateDAO.*,StoredProcedureDAO.*→propagation=required, read-only=false > > ありがとうございました。 > >
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: トランザクション境界について (2008-09-22 21:22 by
yggd
#38969)
Reply
Create ticket
誤解を招くかもしれませんので念のため・・・
TERASOLUNA(Spring)フレームワークの機能的な話題
として、「REQUIREDは推奨」という結論は正しくありません。
REQUIRED 以外のトランザクション属性を「使ってはいけない」、
あるいは「使ってもいいけどお勧めしない」という意味では
ないからです。
ましてや REQUIRES_NEW は、REQUIREDの代替でもありません。
# ご承知のこととは存じますが・・・
トランザクション属性で REQUIRED を使う機会は圧倒的に多い
のですが、この話題は特に概念的であるため、
当事者以外は混乱します。
説明としては、「1トランザクション境界内で実行するものは
REQUIRED を指定すること、REQUIRED を使わなくてはいけない」
くらいでよいと思います。
ところで、REQUIRED 以外にしなければならない
(言い換えるとトランザクション境界を別管理したい)
ケースが、業務要件としてどれほどあるのかがあまり
思いつきません。
「こういうときに、REQUIRED 以外にすることを検討した」
という話題は、意外と情報が不足しているので、
よろしければご教示いただければ幸いです。
(その少ない例ですが思いつくものとしては・・・)
実行ログをDBに吐く場合など、ビジネスロジック内の業務エラーによりロールバックした場合でも、
ログ出力は auto-commit のように振舞いたい、etc...
Reply to
#38957
Reply to #38969
×
Subject
Body
Reply To Message #38969 > 誤解を招くかもしれませんので念のため・・・ > > TERASOLUNA(Spring)フレームワークの機能的な話題 > として、「REQUIREDは推奨」という結論は正しくありません。 > > REQUIRED 以外のトランザクション属性を「使ってはいけない」、 > あるいは「使ってもいいけどお勧めしない」という意味では > ないからです。 > ましてや REQUIRES_NEW は、REQUIREDの代替でもありません。 > # ご承知のこととは存じますが・・・ > > トランザクション属性で REQUIRED を使う機会は圧倒的に多い > のですが、この話題は特に概念的であるため、 > 当事者以外は混乱します。 > > 説明としては、「1トランザクション境界内で実行するものは > REQUIRED を指定すること、REQUIRED を使わなくてはいけない」 > くらいでよいと思います。 > > > > ところで、REQUIRED 以外にしなければならない > (言い換えるとトランザクション境界を別管理したい) > ケースが、業務要件としてどれほどあるのかがあまり > 思いつきません。 > > 「こういうときに、REQUIRED 以外にすることを検討した」 > という話題は、意外と情報が不足しているので、 > よろしければご教示いただければ幸いです。 > > (その少ない例ですが思いつくものとしては・・・) > 実行ログをDBに吐く場合など、ビジネスロジック内の業務エラーによりロールバックした場合でも、 > ログ出力は auto-commit のように振舞いたい、etc...
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: トランザクション境界について (2008-09-29 19:23 by
matsumotoa
#39069)
Reply
Create ticket
フォローありがとうございます。
現プロジェクトでは、各設定を承知の上でREQUIRED_NEWを
使用しています。
その「こういうときに、REQUIRED 以外にすることを検討した」についてです。
現在の案件では、以下の要件により、REQUIRED_NEWを使用しました。
・オンラインバッチ(サーバ上で動作するバッチ)で利用
・バッチにより処理されるデータは、他のWebAPからも参照されるが、その際にできる限り最新のデータを取得したいため、処理単位ごとにコミットする必要がある。
・バッチにより処理されるデータは、毎日更新されるが、エラーが出た場合でも正常処理された処理単位のデータはコミットしたい。
こんな感じです。
Reply to
#38969
Reply to #39069
×
Subject
Body
Reply To Message #39069 > フォローありがとうございます。 > 現プロジェクトでは、各設定を承知の上でREQUIRED_NEWを > 使用しています。 > > > その「こういうときに、REQUIRED 以外にすることを検討した」についてです。 > 現在の案件では、以下の要件により、REQUIRED_NEWを使用しました。 > ・オンラインバッチ(サーバ上で動作するバッチ)で利用 > ・バッチにより処理されるデータは、他のWebAPからも参照されるが、その際にできる限り最新のデータを取得したいため、処理単位ごとにコミットする必要がある。 > ・バッチにより処理されるデータは、毎日更新されるが、エラーが出た場合でも正常処理された処理単位のデータはコミットしたい。 > > こんな感じです。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel