- 1 名前:デフォルトの名無しさん [2009/03/17(火) 20:48:19 ]
- 一部で話題になっている国産オープンソースDIコンテナSeasar V2(略してS2)。
ってどうよ?みんなもう使ってるの? 使用経験とか、実戦配備情報とか、つかえねーよボケ、とかいろいろ書いてね。 本家 seasar.org www.seasar.org/ Seasar Projectグループ seasarproject.g.hatena.ne.jp/ ひがやすをblog d.hatena.ne.jp/higayasuo/ 前スレ その1 pc5.2ch.net/test/read.cgi/tech/1092044210/ その2 pc5.2ch.net/test/read.cgi/tech/1098885253/ その3 pc8.2ch.net/test/read.cgi/tech/1102862221/ その4 pc8.2ch.net/test/read.cgi/tech/1119608621/ その5 pc8.2ch.net/test/read.cgi/tech/1135986150/ その6 pc8.2ch.net/test/read.cgi/tech/1148204750/ その7 pc8.2ch.net/test/read.cgi/tech/1153060167/ その8 pc10.2ch.net/test/read.cgi/tech/1165531719/ その9 pc11.2ch.net/test/read.cgi/tech/1170674234/ その10 pc11.2ch.net/test/read.cgi/tech/1176050197/ その11 pc11.2ch.net/test/read.cgi/tech/1190846507/ その12 pc11.2ch.net/test/read.cgi/tech/1203122931/ その13 pc11.2ch.net/test/read.cgi/tech/1215962870/ その14 pc11.2ch.net/test/read.cgi/tech/1224157275/
- 113 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:18:15 ]
- >>108
s2のHP見たがそんな記載はどこにもないんだが…
- 114 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:35:04 ]
- このプロダクトが生まれた歴史みたいなのを公式に記述してる所なんて普通無いのでは
スリムサンのblogでも追うがよろし
- 115 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 15:59:38 ]
- >>114
公式HP載ってないからblog見ろって意味不明
- 116 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:06:44 ]
- 開発者がインタビューでこぼれ話として語ることはあっても、
公式サイトでいちいち、こういう理由があったからこの製品は作られたのです みたいな表明している製品はあんまないだろって話じゃないの? だから作者のblogでも見れば書いてるんじゃないの?って事でさ。
- 117 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:12:45 ]
- 日本の事情に合わせては知らんが開発を始めた経緯はmlのこのスレ見れ
ml.seasar.org/archives/seasar-user/2004-January/000325.html 既存の洋物じゃ不満な部分はこれかな ml.seasar.org/archives/seasar-user/2004-January/000328.html
- 118 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:32:57 ]
- >>117
ソースあり(´▽`*) だが日本固有の事情ではないね >>108はどこから日本の事情って勘違いしちゃってるんだ?
- 119 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:43:20 ]
- Strutsに絡めないと企業で使われないからって
S2StrutsやSAStrutsをメインに据えたのは日本の事情だぜ
- 120 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:50:06 ]
- 設定ファイルを書かせると間違えるから自動バインディングをデフォにしたのも
日本固有の事情かもしれん
- 121 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:51:58 ]
- とりあえず意見を否定する前に作者のblogを一通り見るくらいしてくれたまえ
MLも公式サイトも作者の私物じゃないんだから独り言は垂れ流されてないんだからさ
- 122 名前:デフォルトの名無しさん [2009/05/23(土) 17:37:00 ]
- Slim3はGAE専用?
S2JDBCみたいなO/Rマッパ搭載なし? GAEなんぞしばらく使う予定無いんだがな…
- 123 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 17:44:54 ]
- いやだからスリムサンのブログに書いてるだろ
- 124 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 17:51:08 ]
- このスレの趣旨を分かってないやつが増えたな
ここはスリムサンやデブや代表理事をヲチして突っ込むスレなんだよ ブログのヲチもしない素人はすっこんでろ
- 125 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:24:17 ]
- おまえこそすっこめ
- 126 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:25:07 ]
- blog見るの面倒じゃん。
見るだけの根拠もないしな それに日本の事情って定義も曖昧だしな 誰か何か言えば否定とかキャパ狭すぎ 大したスキルないこと丸わかりな感じ 絡んでるのがそんな奴しかいないプロダクトに見切りをつけはじめた 人に素人っていう奴が実は一番何もわかってたりするわな
- 127 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:26:29 ]
- >>126
>人に素人っていう奴が実は一番何もわかってたりするわな 人に素人っていう奴が実は一番何もわかってなかったりするわな だろw
- 128 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 18:29:37 ]
- >>127
突っ込み速っ!!!
- 129 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 19:31:55 ]
- >>127
実は褒めているんだよw
- 130 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 20:16:10 ]
- (1)公式見る
(2)MLを見る (3)コミッタのblogなどを見る (4)MLやblogで質問する ってのが普通なのであって 匿名掲示板で一方的に不満たらたらくだ巻いてるのはだいたい情弱なんだよ
- 131 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 20:32:31 ]
- あとあれだな
個人的な中傷だったり、詳しい人に反論されてフルボッコになるのが嫌で 公に意見できなかったりする感じのがここに集まってるな
- 132 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 20:51:52 ]
- あとあれだな
個人的な中傷だったり、詳しい人に反論されてフルボッコにされた誰かを ヲチして楽しんでる感じのがマ板に集まってるな
- 133 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 20:55:01 ]
- 時間があったのでSAStrutsをさ、とりあえずサンプルを動かして見ている段階なんだけど、
雛型の作成であれば、Doltengによって雛型を作成できることから、それほどクラス設計は悩まなくてもいい事が解った。 S2JDBCとS2Daoについては、S2JDBCはどうやらDaoを必要としないケースでのデータベースアクセスに使用するものだね。 僕は、Daoをさ、画面単位に持ちたいから、どちらかといえばS2Daoを使用したいね。O/Rマッピングツールと同様に、 DaoやDTOを自動生成できるツールもあるみたいで、なかなか便利だなって思っていました。 Daoの仕様について、僕はprepareStatementを使用したものが主流だと思っているんだけど、prepareStatementでも、 SQL文をプロパティファイルに記述し外出しすることにより、依存性の注入は可能だよね? S2Daoの使用も見てみましたが、こちらはSQLファイル単位で外出し、引数に関してはARGSアノテーションを使用する。 S2Daoにおいて依存性の注入の方式が、クラス名+メソッド名と同じファイルのSQLが呼び出される?で実現するようで、 正直に言って、ちょっとびっくりしました。dao.diconにはDaoクラス名は設定するけど、 メソッドとSQLファイルに関連する定義されていない。これがAOPと呼ばれる処理に該当するんだろうね。 AOPに関してはもう少し検証しなければ、正確には把握できない。また、DTOに関しては、 テーブル定義そのままをDTOに保持する事になることから、処理速度が心配になりつつも、 いずれにしても、わりとコアな内容の仕様なんで、僕なんかこういうの見てぞくぞくするので、好きだけどね。
- 134 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:27:09 ]
- ひがやすを blogみたが
社会やら個人に対する否定&文句ばっかじゃんw
- 135 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 01:40:34 ]
- >>133
△クラス名+メソッド名と同じファイルのSQLが呼び出される?で実現するようで、 ○Daoメソッド実行時に、クラス名+メソッド名と同じ名称を持つSQLファイルが呼び出される。
- 136 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:51:57 ]
- 現状に満足してる奴は新しい物を生み出せないからな
不満があるから自分で何か違う物を作ろうとする
- 137 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:26:38 ]
- キリッ
- 138 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 07:06:40 ]
- だっておwwwっw
- 139 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 07:14:36 ]
- クスクス
- 140 名前:デフォルトの名無しさん [2009/05/24(日) 08:15:40 ]
- で、結局、slim3の通常のrdbms操作は何使えばいいのさ
- 141 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:49:15 ]
- >>134
>>136 どうなんだろうね。JavaEEに関して悲観的になっているのが、少し気になるね。 GAEに意識が集中しているようで、もちろん僕よりも業界や幅広い技術的な情報を収集している人だろうけど、 完全にさ、Struts系のフレームワークを捨てるとなるとさ、僕なんか少しがっかりしちゃうよね。 新しい事に挑戦するとこは悪いことではないので否定はしないけど、Struts系のフレームワークを 完全に捨てる方針は、もう少し慎重に判断してもらいたいと思いますね。
- 142 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:13:39 ]
- >>140
GAE/JでRDBは使えないから心配するな >>141 GAE/J専用フレームワークSlim3でStrutsを捨てただけ SAStrutsが捨てられたわけじゃない
- 143 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:25:51 ]
- 日本語読解力が弱い人が多いと思う
だからMLで聞けないで掲示板で一方的に懸念を表明する
- 144 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:03:33 ]
- >>142
そうですか。GAEに関しては調べましたが、僕の視点からはPHPと同レベルに見え、 スクリプトレベルの開発環境と判断。したがって、僕の視点からはGAEは軽視しますね。 僕としては企業用のコアなJavaEEの方が、好きだけどね。 仮にSeasarがGoogleとの互換性を重視するあまりに、軽量なJavaを選択するのであれば、 僕としてはSpringに移行する事も想定に入れなければならない。
- 145 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:04:49 ]
- スリムサンがテストで対応してる環境に対して
それは方向性が違う俺たちは捨てられたとか騒ぐなよ アホかお前ら
- 146 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:06:36 ]
- >>144
僕はバカ まで読んだ
- 147 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:10:39 ]
- 好きなら文句言わずにJavaEE使ってればいいと思うんだけど
- 148 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:16:28 ]
- GAEがPHPと同レベルって笑うところ?笑えないけど
- 149 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:21:39 ]
- slim3はseasarじゃないって知らない人がいるね
- 150 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:23:35 ]
- アホだから直接スリムサンのblogで質問したりMLに投げたりできないんだろ
違いますよ何言ってるんですかって1秒で言われて終わりになるのが 自分でも解ってるから
- 151 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:25:28 ]
- >>147
ひがやすを氏が、SeasarとSlim3のプロジェクトを兼務しているので、論理が倒錯する局面が発生するので、 ユーザーとしては、そういう時に若干戸惑うかもしれないね。
- 152 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:31:28 ]
- >>144
Seasar2もSpringもJ2EEに対するアンチテーゼとして生まれ、 当時は軽量コンテナと呼ばれていた これ豆知識な
- 153 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:12:07 ]
- どなたかSeaser.NETをお使いの方いらっしゃいませんか?
利用実績がある程度あればプロジェクト採用になるのですが・・・
- 154 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:47:40 ]
- >>153
どうなんだろうね。僕はJavaしかやったことがないで、解らないけど誰か.NET詳しい人います? .netでもさ、S2Daoと同じ仕様なんで、例えばデータベースアクセスの際にVersionNoやTimestampによる 排他制御が実装されている。僕は.netでもSeasarを使う利便性は高いと思うけどね。
- 155 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:55:05 ]
- .NETならS2よりEnterprise Libraryのほうが提案しやすいけどな
- 156 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:55:34 ]
- >>153
うちではQuillつかってるよ。 DotNetって標準のWindowsFormsじゃあちょいとばかり非力だし 生のAdo.Netは使いにくいし、LinQforAdo.Netはカオスだし S2Dao+Quillコンテナは、なんだかんだで便利。 まあ個人的にはDBアクセスはIBatis.Netのほうがいいじゃんって気もするけど。
- 157 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:13:19 ]
- >>141
嫌いなら別に使わなくていいと思う。 Servlet/JSPやJTAもJavaEEだから使うのやめればいいのに。 1からサーブレットAPIもどきから作るといいと思う。
- 158 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:15:03 ]
- みんなでGAE/Jすりゃ怖くないってか
- 159 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:36:24 ]
- GAE はまだまだ趣味レベルとしか見られないな
- 160 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:54:04 ]
- GAEのJava自体がまだテスト段階なんだから当たり前だと思うが
- 161 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:19:12 ]
- >>154 155 156
サンクス、助かります(;´Д`) Enterprise Libraryはあまり馴染みがないのですが、 MS謹製ならちょっと考えようと思います
- 162 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:47:19 ]
- >>153
そういやSpringにも.NET版があるけど、どれ位使われているのかな?
- 163 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:56:22 ]
- >>162
それは、spring板の人に聞いてよ。でもさ、僕の視点では国産DIを利用した方がいいよ。付随するSAStrutsも高機能だからね。 前々、から言おうと思っていたけどさ、DAOクラスでさ、排他制御も書けない人がspringなんて使っても意味ないよ。
- 164 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:08:23 ]
- .NET版にもSAStrutsがあるのか。初耳だ。
- 165 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:06:10 ]
- ないよ
ってか事例だったらMLで聞いたら嫌でも殺到するのになんでまたこんな所で
- 166 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:08:33 ]
- PHP版はMapleとかあるけど、.NET版はかなり放置プレーだな
- 167 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:11:26 ]
- 僕はJavaそしてSeasarを推薦するよ。S2Daoについて、僕が解りやすく説明するよ?
VersionNoでの排他制御に関しては、PrimaryKeyに属する行の内容を更新する際に、 VersionNoが自分の取得したVersionNoと異なるケースでは、他のユーザーが同じ行を先に更新している事になるので、正確な排他ができる。 Timestampでの排他制御に関しては、PrimaryKeyに属する行の内容を更新する際に、 Timestampが自分の取得したTimestampと異なるケースでは、他のユーザーが同じ行を先に更新している事になるので、正確な排他ができる。 Webシステムにおいては、多数の人が同時に同じDBにアクセスする事になるので、排他制御が抜けているシステムは致命的になる。
- 168 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:20:42 ]
- しかしながら、S2Daoの排他制御は不完全である。
理想としては、画面表示のselect時にVersionNoとTimestampを取得する仕様が好ましい。 今のS2Dao仕様では、Daoレベルでのデータベース更新の瞬間的な排他制御はできる。 そうではなくて、画面表示のselect時にVersionNoとTimestampを取得し、 「画面単位」で排他制御を行うのが正しい。S2Daoの排他制御もまた素人臭い。
- 169 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:36:38 ]
- カンファレンスにキシダタンでないかなぁ
- 170 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:40:23 ]
- >>168の訂正
失礼、ActionクラスからselectしDTOからActionFormに詰め替え際に、VersionNoあるいはTimestampもActionFormにsetする。 データベース更新時は、ActionFormからDTOに詰め替えする際に、select時に取得したVersionNoあるいはTimestampを DTOに設定する事で、画面単位での排他制御が実現できる。
- 171 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 03:07:04 ]
- これができていないWebシステムはゴミだ。
- 172 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 03:29:32 ]
- 若干混乱したので要約すると、
>>167○この概念はSeasarの公式にも書かれているので正しい 僕はJavaそしてSeasarを推薦するよ。S2Daoについて、僕が解りやすく説明するよ? VersionNoでの排他制御に関しては、PrimaryKeyに属する行の内容を更新する際に、 VersionNoが自分の取得したVersionNoと異なるケースでは、他のユーザーが同じ行を先に更新している事になるので、正確な排他ができる。 Timestampでの排他制御に関しては、PrimaryKeyに属する行の内容を更新する際に、 Timestampが自分の取得したTimestampと異なるケースでは、他のユーザーが同じ行を先に更新している事になるので、正確な排他ができる。 Webシステムにおいては、多数の人が同時に同じDBにアクセスする事になるので、排他制御が抜けているシステムは致命的になる。 >>168×これは僕の認識の誤りである可能性が高い しかしながら、S2Daoの排他制御は不完全である。 理想としては、画面表示のselect時にVersionNoとTimestampを取得する仕様が好ましい。 今のS2Dao仕様では、Daoレベルでのデータベース更新の瞬間的な排他制御はできる。 そうではなくて、画面表示のselect時にVersionNoとTimestampを取得し、 「画面単位」で排他制御を行うのが正しい。S2Daoの排他制御もまた素人臭い。 >>170○S2Daoの振る舞いが以下の使用に適合していれば、理想的な排他制御になる。検証してみなければ解らないが、暫定でできると仮定。 失礼、ActionクラスからselectしDTOからActionFormに詰め替え際に、VersionNoあるいはTimestampもActionFormにsetする。 データベース更新時は、ActionFormからDTOに詰め替えする際に、select時に取得したVersionNoあるいはTimestampを DTOに設定する事で、画面単位での排他制御が実現できる。 >>171○ゴミです これができていないWebシステムはゴミだ。
- 173 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 11:43:47 ]
- あ、いっぱい進んでる。
Rails使ったことないんだけど、 Railsはどのあたりが本質的で面白いか聞きたいのだけど、、、。
- 174 名前:デフォルトの名無しさん [2009/05/25(月) 19:12:26 ]
- やべえ…
排他バカにみんな呆れて、過疎ってきた
- 175 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 00:31:44 ]
- >>168は楽観的ロック知らないのかなと思った
あと更新に失敗したら再度トランザクションやりなおしさせる処理が抜けてるシステムも多い 楽観的ロックは開発者に負担を強いるからね
- 176 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 00:41:32 ]
- >>168の言ってるのが楽観的ロックに見えるけど?
- 177 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 01:26:32 ]
- 通常の楽観的ロックはトランザクション開始前に取得したものを使う
- 178 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 03:25:49 ]
- >>175
更新用データ取得時にバージョンカラムの値も取得しておいて 画面上ではhidden値にでも入れておいて 更新するときのBeanにその値を詰めておくだけだろ アップデート文はFWが自動発行してくれるんだし この程度を負担とか言っていたら、何も任せられないよ
- 179 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 08:16:32 ]
- >>178
負担ってのはどう考えても更新失敗時の例外処理の面倒さだろ。
- 180 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 13:34:25 ]
- 節子、それ楽観ロックやない、悲観ロックや
- 181 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 13:54:48 ]
- >>178 が言っていることも楽観的ロックだと思うけど?
悲観的ロックというのは、その画面を誰かが開いている間、 ロックテーブルとかにレコードを入れて、他のユーザは強制的に入れないようにするような手法だと思っています。
- 182 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:26:02 ]
- そうだね。S2Daoによる楽観的ロックを行い、
後はさ、ユーザーに最終更新日によって確認してもらうのがいいよね。 楽観的ロックでもさ、多数のユーザーが同時に同じ操作を行った際には、 エラーメッセージによって、PrimaryKeyや名称を表示して、 「他のユーザーが同じ操作を行っています。 しばらく待つかまたはシステム管理者にお問い合わせください。」等の メッセージとしてユーザーに対するお知らせが可能になるよね。 但し、この排他制御はユーザーが同時に同じ操作を行ったケースなんで、 5分前や1時間前に更新されたケースに関しては、 最終更新日の表示によってユーザーに気をつけてもらうしかなかなか方法がないよね。 もちろん、間に承認システムやバッチ処理があれば、 承認者が重複等の異常に気づくことも可能ではあるし、 そういった方式を取ることもあると思いますが、 後はさ、お金が絡む対象も存在するのでログテーブルも必要でしょう。 こういう事も考えていくとさ、僕なんかはやっぱりJavaEEを採用する方がいいと思うけどね。 単純でリスクの少ないWebアプリであれば、何を使用してもいいと思うけど、 実際に企業用のWebシステムとなると、こういう事もきちんと実装しないと正常稼働しないからね。 もちろん、僕はさ、ほらIT志望の大学生なんで、まだ皆さんよりは詳しくはないんですが、 話がSEよりになってしまっているので、プログラミング技術よりの話を展開していくのがいいと思いますし、 実際に、Webシステム作って排他制御とAOPを検証してみるよ。
- 183 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:12:59 ]
- 5分前だろうが1時間前だろうが、更新用に取得したデータを
他に誰も更新していない状態で自分が更新したときにだけ成功するのだから関係ない あと、JavaEEで楽観的排他をサポートしているのはJPAだが、 基本的にやってることは同じだから特に違いはない
- 184 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:22:47 ]
- >>178がいってるのはアプリケーションコントロールのロックな
更新時には悲観的ロックかもしれない
- 185 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:25:23 ]
- >>181
おいおい このスレでわかりやすい嘘つくんじゃない
- 186 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:49:34 ]
- >>183
そうだね。DBの仕様が通信販売や予約システム等の早い者勝ちの仕様であれば、 あるいは銀行等の常に上書きされべき対象であれば、楽観的ロックだけで済む問題だけど、 民間企業用のさ、顧客に対する情報の更新等は、複数の担当者が重複して入力する可能性もあるので、 それは楽観的ロックだけでは、回避できないって話だよ。
- 187 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:52:55 ]
- >>183の追記
失礼、銀行のDBであれば参照用からマスターへの更新の際には、整合性チェックも含め 間に、承認やバッチ処理が必要だけどね。わかりやすく表現しただけなんで、そこの差異は理解して貰えると思います。
- 188 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:55:50 ]
- ジミ・ヘンドリックス
グリーン・デイ ニルヴァーナ チャック・ベリー エルヴィス・プレスリー ローリング・ストーンズ
- 189 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:02:18 ]
- ロックしないのに楽観的ロックって言葉が変だよね
ビールじゃないのに第三のビールみたいでさ
- 190 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:04:42 ]
- >>186
こういったケースでは、楽観的ロックだけでは回避できないので、画面に表示されている最終更新日によって、 ユーザーに変更していいのかを判断してもらいたい。また、間に承認システムやバッチ処理があれば、 重複した際に、承認者によって、どちらが正なのかを判断してらわなければならないということですよ。 その問題は、同時にシステム管理者への問い合わせとして、誰がいつどのDBを変更したかを把握しなければならないので、 ログテーブルも必要でしょう。と、僕がおっしゃってるわけですよ。
- 191 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:15:52 ]
- >>188そっちのロックじゃねぇ
- 192 名前:181 mailto:sage [2009/05/26(火) 22:19:35 ]
- >>185
え、ちがうの?? ○楽観的ロック: ・画面表示(HTML 表示時)に、そのレコードの version_id なり最終更新日時を hidden で持たしておく ・HTML にデータを入力して submit 後、サーバサイドに渡ってきた version_id や 最終更新日時 を where 句にして select * from HOGE where 受注番号 = **** and versin_id = {画面から渡ってきたもの} for update して、レコードが取得できればそのまま update 文で更新 レコードが取得できなければ、version_id がインクリメントされていることが考えられるので、 画面に「他のユーザがすでに更新しました。データを再検索してください」 こんな感じ ○悲観的ロック: ある画面を開いた時点で、その画面に排他制御をかけ、誰も入れなくする (業務仕様上、その画面が編集するテーブルは、その画面でしか更新できないことが条件) だとおもっていたよ。 誰か添削してくれ
- 193 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:34:31 ]
- >>192
いちいちせぇctしないでうpだてすりゃいいだろjk
- 194 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:41:29 ]
- >>190の追記
楽観的ロックでも悲観的ロックでも、同じ振る舞いになる。
- 195 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:02:58 ]
- >>192
悲観的ロックがすごいな 俺ならそんなシステム使いたいと思わない >>194 俺も回避できないからどうリカバリーするかを考える方が好きだ
- 196 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:04:30 ]
- >>192
それはアプリケーション制御の話。つまりただの仕様であり運用方法。 通常楽観的ロックや悲観的ロックというのはDBアクセスで読み込み中心ならば ロックをかけないようにしよう、後から来たほうはトランザクションをリトライさせればいいんじゃね? というお話だからミリ秒単位のお話。 だからリトライ制御等がはいってないのは楽観的ロックですらなく、書き込みもそれなりにあるのならば 普通に悲観的ロックをかけたほうが良い。 よくあるATMでの振込みと引落の同時アクセスを考えてみると良い。 ただ、読み込みでロックかけるようなDBなら楽観的ロックのほうが有利にはなりやすい可能性あり。 楽観的ロックというのはデータベースのロックを積極的に利用しようという話ではないので 開発者側に負担を強いる方法。楽観的であれ短い時間だろうが更新時にはどうせロックかけるので 実はアクセス順序を意識しないとデッドロックの可能性が普段から意識する悲観的ロックより 大幅に増える。IF文等によりアクセスするテーブルや行が変わる可能性があるからね。
- 197 名前:181 mailto:sage [2009/05/26(火) 23:05:15 ]
- >>195
おっしゃるとおりなので、悲観的ロックをかける場所は、 たとえば「年次締めバッチ起動画面」など、重要で、誰か一人しか使えなくすべき画面にのみに適用し、 普通のところは、 >>192 の楽観的ロックを使う、と思っているのですが。
- 198 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:12:33 ]
- I do not recommend that you use Teeda if you could not read the document.
(´;ω;) カワイソス
- 199 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:13:01 ]
- なんで今更こんな話題で盛り上がってる?
POEAA読めば終わりだろ?読んでないの?素人?
- 200 名前:デフォルトの名無しさん [2009/05/26(火) 23:36:49 ]
- >>199
たまには動物園に行きたくなるだろ?
- 201 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:42:34 ]
- >>193
俺もupdateのwhere句に条件加えればいいじゃんと思うんだが
- 202 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:57:59 ]
- >>199
まあそういうな s2コミッタ=素人 s2ユーザ=ど素人 なんだからさw
- 203 名前:181 mailto:sage [2009/05/26(火) 23:58:45 ]
- >>193 >>201
select .... for update してレコードが取得できたかどうかをせずに、 いきなり update 文を実行した場合、 update 文の結果(PreapredStetement#exeucte())で、0 が返って来た場合、 version_id がずれて更新できなかったのか、 そもそも、当該受注番号のレコードが、一瞬先に別ユーザによって消されたのかわからない。 select .... for update してレコードが取得できたかチェックしておいて、レコードが得られなかったら、 「他のユーザがすでに更新しました or 他のユーザがそのデータを消しました」 とエラーメッセージを出すことが出来る。 とここまで書いたが、いきなり update 文を実行して、update 文の結果が 0 だったら、 同じようなメッセージを出せばいいのか。 画面で、ユーザにもう一度画面を開いてもらい、当該受注番号のレコードが消されたら、 画面を開き直したときに、そのレコードは現れなくなるし。
- 204 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:20:41 ]
- おやすみ僕ちゃんw
- 205 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:33:30 ]
- 一生懸命にたくさんの長文を書いてくれたけど、
どうしてJavaEEのほうがいいという結論に達したのか、全然わからなかった。
- 206 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:35:25 ]
- ぶっちゃけどれでもいいよね
実装が違うだけで目的は同じなんだから JavaEEでもできるだろうけど他でもできるわけで だからといってJavaEEが最高ってことにはならん
- 207 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 00:38:23 ]
- 僕ちゃんがJavaEEわかってるわけないに1票
- 208 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 03:10:52 ]
- >>203
実際のところ、楽観的排他制御対応を謳っているFWはほとんど UPDATE文にバージョンカラム値を条件に加えて、結果が0だったらエラーにする実装をしている 更新なのか削除なのかは、エラー後に再検索して判断する そもそも「楽観的排他」は「あまり起こらない」ことを前提として、起こった場合は最初からやり直し という方針で採用されることが多いから、SELECT FOR UPDATEを使う実装は少ないと思う (オプションによって、一度空更新してトランザクション的なロックをかけたり・・・とかはあるけど)
- 209 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 05:59:32 ]
- >>196ありがとう
楽観的ロックでは、1つのトランザクションで複数のテーブルまたは複数のレコードを更新する際には、 デッドロックやそれに伴うデータの不整合になる危険性がある。したがって、1つのトランザクションで 1つのテーブルと1つのレコードを更新する事によりデッドロックの回避が可能になりますが、 これに基づいてDB設計と画面設計は相当慎重に行うべきである。また、S2Daoの排他制御は楽観的ロックなんで、 標準的なDaoクラスでDriverManager.getConnection().setAutoCommit(false)の設定をして SelectForUpdateによる悲観的ロックを採用した方がシンプルでいいかもしれないね。 加えて、1つのトランザクションで複数のテーブルまたは複数のレコードを更新するケースでは、 rollbackを行えば、データの不整合は改善されるが、Webシステムで更新順序によるデッドロックの回避が できるのかについては、現時点では僕の把握ではできないと思ってる。
- 210 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 06:15:43 ]
- >>209の追加
要約すると、 ・1つのテーブルと1つのレコードを更新する仕様にする(デッドロックが起きないケース) ・デッドロックが起きた際には、rollbackよって回復する(デッドロックをrollbackによって回復するケース)
- 211 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 07:42:20 ]
- SelectForUpdateによる悲観的ロック()笑
やはりこの程度の認識だったのか・・・
- 212 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 08:33:38 ]
- select for updateで悲観的ロックになると思ってたのかよ。
- 213 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 08:41:39 ]
- 悲観的ロックだろうが楽観的ロックだろうが、
複数テーブルを更新するときはFOR UPDATEを付けるし、 設計次第ではデッドロックも起きる。 そこは悲観的・楽観的とは関係ないんだよ。僕ちゃん。
|

|