更新前の状態が表示される
unipaasからxpa4.6.1 PT2へ移行しました。
unipaasでは親タスク トランザクション開始 P=レコード前の前、子タスクで明細入力という階層のプログラムでは明細入力で変更をしても親タスクの確定をしていない状態では、他の端末からは変更する前の状態が表示されていました。
xpaからは明細入力を変更した瞬間に、他の端末より変更された状態で表示されてしまいます。
これをunipaasのようにさせるにはどうしたらいいのでしょうか?
ちなみにrollbackすると表示は戻るのでトランザクションが効いていない訳では無さそうですが。
-
親のトランザクションモードと子のトランザクションモードは、それぞれどのような設定になっていますか?特に子タスクの設定が大きな要因となります。
-
子タスクはトランザクションモード:W=親と同一 トランザクション開始:P=レコード前の前です。
トランザクションは親に倣うものとばかり思っておりましたが、違いましたでしょうか?
ちなみにDBはMSSQLです。
-
子タスクのトランザクションモードが「親と同一」であれば、親がコミットされるまでは通常では他の端末からは見えないはずですね。ただし、DBMSの分離レベルの設定がどこかでダーティリードの設定になっていると、トランザクション中のデータも他の端末から見えることになります。問題は、その設定がどこでなされているかなのですが、何か心当たりはありませんか?DBMS側の設定も含めてです。
-
返信ありがとうございます。
親のトランザクションモードをP=物理からD=遅延にしたらそうなりました。
確かに遅延はそのように使うものだと言われればそうかも知れません。
ただ、unipaasではP=物理でもそうなっていたので、気になります。
物理から遅延にした場合に注意しなければならないことは何かございますでしょうか?
DBMSはunipaas、xpaとも同じものを使用してチェックしたのでDBMSの違いではなさそうです。
unipaasとxpaの違いはデータベース特性のデータベース情報にONLINE_ARRAY_FETCHING=N LimitLinkToSingleFetch=Nと記述しています(xpa側)
-
すいませんでした。その通りでした。
unipaasはDBMS特性の分離レベルが1になっていました。
ご面倒をお掛けしました。
-
親が「物理」で子が「親と同一」であれば、子が終了してもDB側のトランザクションはコミットされていませんので、そうなりますね。
「物理」を「遅延」にしたら他の端末から見えたとすると、DB側ではなく、Magic側のダーティリード(キャッシュ)が効いているという動作になりますね。
遅延はトランザクションもキャッシュも、すべてがMagicの配下で動作しますので、いろいろな設定ができます。
マジック社主催の「RIAトレーニング(3日間)」では、これらについて徹底的に解説してくれていますので、そのセミナーを受講されるのもいいかもしれませんね。
-
> unipaasはDBMS特性の分離レベルが1になっていました。
やはり、分離レベルの設定だったんですね。よかったです。
マジック社主催のRIAトレーニング(3日間)では、この分離レベルについても徹底的に解説してくれていますので、超お勧めですよ。
-
分離レベル「0」は、俗に「ダーティリード」とか呼ばれているのですが、個人的な考えでは「ダーティ」どころか、「クリア」って感じな透明性がありますね。
Magicもこちらをデフォルトにしているわけですから。
サインインしてコメントを残してください。
コメント
8件のコメント