[Seasar-user:1814] Re: 暗黙的なトランザクション? (was Re: PostgreSQL セッションの分断)

Koichi Kobayashi koichik
2005年 4月 15日 (金) 01:22:42 JST


小林 (koichik) です.

On Thu, 14 Apr 2005 14:46:11 +0900
加藤太朗 <[E-MAIL ADDRESS DELETED]> wrote:

> えーと、どんな思想(く〜すでしたっけ?)をお持ちになられても、
> 自由だと思いますが「我ら」と私まで括るのはやめて。別に

大丈夫です.「我ら」に加藤さんが含まれているかどうかは
未定義 (笑) です.
「dicon 時代を生きる我ら」という表現は,最初の投稿の冒頭

> > えと,S2Dao の実装をどうすべきという話とは別件 && 加藤さんに対しての
> > レスというより ML を見ている dicon 時代の皆さんへのつぶやきです.

に起因しています.話しかけている対象が「dicon 時代の皆さん」
なので,「dicon 時代を生きる我ら」なのです.
まぁ,今読み返してみると
文法的に間違ってはいないが,表現に甘いところがある
かな? ML を見ている人全員が dicon 時代に生きている人だ,
とも読めちゃう?
気持ち的には ML を見ている人の中にいるであろう,dicon 時代を
生きている人につぶやいてみたかっただけです.なので,

> 「俺はdicon時代を生きている」なんて思ってもいないし。

ということであれば,丸ごと無視して頂いてもよかったのです.
きっかけは加藤さんに頂きましたが,加藤さん一人に語りかけた
つもりも加藤さんにレスを要求したつもりもなかったので.
最初の投稿では引用も控えめにしたつもりでしたし.

> 空気に異臭がまじっているのに、外(dicon)から脱臭剤を置くのが
> DICON時代を生きる我らにふさわしいと聞こえてしまいます。
> 異臭の元を絶ったほうが、誤って脱臭剤を置き忘れても問題が起きません。

最後の一文に同意です.
が,異臭の元に対する分析・判断はいろいろあるかもしれません.
こういう例え話は苦手なのでうまく意図が伝わるか分かりませんが,
異臭の元は何かと何かが化学反応して発生しているとしましょう.
例えば一つは S2Dao の実装であり,もう一つは暗黙のトランザクションです.
どちらかを取り除けば異臭は発生しなくなります.どちらを取り除きますか?
両方ですか? という感じ.

暗黙のトランザクションは S2Dao とだけでなく,その他のものとも
化学反応して異臭を放つ可能性が高いものです.
ですから,S2Dao をどうするかという話とは別に,暗黙の
トランザクションは取り除くべきだという話をしたわけです.

そして私が S2Dao での対応に積極的に賛成しない (反対もしませんけど)
のは,それによって暗黙のトランザクションを使っても問題にならない
状況が増えてしまうことになり,「異臭の元を絶つ」というよりもむしろ
新たな「脱臭剤」を追加するだけ,という印象を受けるためです.

# 同じ「異臭の元」「脱臭剤」という表現を使っていても,
# そのイメージしているところは私と加藤さんとで全然違いそう.
# 加藤さんの言う「元」は物理的なソースを表しているような気配が.

> 「トランザクションを入れ忘れたのが悪い」というのはその通りでしょう。
> で、ミスの防衛策は?それを「後の祭り」にすることで、誰が得して
> 誰が幸せになるのでしょうか?誰も幸せにならないと思います。

そこで,S2DBCP で例外吹っ飛ばすっていうのが個人的には望ましいです.
# そうすれば S2TestCase でうっかり Tx 付け忘れた時でも間違いに
# 気づきやすいような気のせいが...

結局のところ,「トランザクションを入れ忘れた」場合に
正しく動作するかどうかはケースバイケースでしかないわけです.
S2Dao に手を入れることで加藤さんが問題にしているケースは
救われるかもしれませんが,全てのケースを救えるわけではありません.
それならいっそのこと,「トランザクションを入れ忘れた」場合には
まるっきり DB にアクセスできなくて,入れ忘れを早期発見できる方が
より defensive で望ましいというのが私の考え方です.
# なので,S2Dao をどうするかはあまり関心がない.

実は,ひそかに S2JCA なんてものをちょこちょこやっているのですが,
# Sandbox に提案するレベルにすらなっていない.っていうか最後まで
# やるかわからないから怖くて提案できない.
そいつのコネクションプールでは JTA によるグローバルトランザクションが
開始されていなければ例外を吹っ飛ばすのがデフォです.
# S2JCA の目的は S2JMS のインフラなので,コネクションプールの主な対象は
# JMS コネクションなのですが,対応する ManagedConnectionFactory 書けば
# JDBC コネクションも扱えるようになるはず... 書けば...

> で、ちょっと試したらなぜか動かない…というのが発端だったんで。
> この「ちょっと試す」の時点で、サービス層の分離なんてやってい
> なかったために、こんな話題に発展しちゃったんですね。

たぶん,ちょっと試すのにも S2TestCase を使うのが吉かと.
もちろん 〜Tx() で.

> 言われてみれば無駄な手間隙ですね。個人的にはS2DAOが良くなる事に何の
> メリットもありませんから。コミッタとは違うスタンスで応援したかったのですが、

やっぱり蛇足でしたね,すみません.m(__)m
その意味の「手間暇」ではないのですけどね... まぁいいや.

念のために書いておきますが,私は S2Dao のコミッタではありません.
それから,私は加藤さんの応援に反対はしていません (賛成もしてないけど).
加藤さんの主題とは違う話をしたかっただけです.

> MLへの発言の持っていき方に、どうも私は難がありますね。

というか,私とは化学反応しやすいという感じ? (苦笑)
この場合,「どちらかを取り除く」という解決策はちょっと勘弁ですね.(^^;
# 「両方取り除く」も勘弁.
中和剤 (誰?) を交えることで異臭を発生させずに混ぜることが出来るとか,
あるいは混ぜる温度を下げると大丈夫だったりとか,一工夫すればきっと...


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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