この特集のトップページへ
Chapter 5:ビジネスロジック層の構築

head2.gif 5.4.2 COM+のトランザクション機構
 COM+のトランザクション機構は,MS DTC(Microsoft分散トランザクションコーディネータ)と呼ばれるデータベースのトランザクション機構と連携する形で実装されている(Fig.5-21)。

Fig.5-21 COM+のトランザクション機構とMS DTC
fig5_21.gif

 

●MS DTCの概要
 MS DTCは,データベースのトランザクションをサポートするための機構で,もともとSQL Server 6.5に搭載されていたものである。MTSやCOM+でもMS DTCの機能を使ってトランザクション処理をする。MS DTCは,分散されたトランザクション機能をサポートし,サーバーをまたぐようなトランザクション処理も実現可能である。

 COM+は,トランザクション範囲が作成されたときに,MS DTCに対してトランザクションの開始を通知する。Fig.5-21で重要な点は,COM+がトランザクション処理をするのではなく,COM+はMS DTCにトランザクション処理を依頼するだけだという点である。そのため,COM+のトランザクション処理を使うためには,MS DTCに対応したデータベースと,MS DTCに対応したデータベースドライバを使う必要がある。

 MS DTCに対応しているデータベースとしては,たとえば,次のような製品がある。

  • Microsoft SQL Server 6.5,7.0(MSDEも含む)
  • Oracle 7.3,Oracle 8
  • IBM DB2
  • Informix
  • Sybase SQL Server

One Point!MS DTCに対応していれば,トランザクション処理の対象となるものは,データベース製品でなくともかまわない。代表的なものとしては,Windows 2000 Serverに標準搭載されるメッセージサービスであるMSMQ(Microsoft Message Queue)がある。そのため,データベースという名称を使うのではなく,より汎用的な名称として「リソースマネージャ」という用語が用いられることもある。

 

●MS DTCの設定
 MS DTCは,デフォルトの状態でWindows 2000上で動作している。よって,特別な設定をしなくとも,COM+のトランザクション機能を利用することができる。しかし,MS DTCを停止させたり,別のサーバーで動作しているMS DTCを利用するように設定したりすることもできる。

注意MS DTCは,Windows 2000の基幹サービスとして利用されているので,むやみに停止させるとWindows 2000の動作に支障をきたすおそれもあるので注意してほしい。

 MS DTCの設定を変更するには,コンポーネントサービス管理ツールの[コンピュータ]−[マイコンピュータ]を右クリックし,表示されたメニューから[プロパティ]を選択する(Fig.5-22)。

Fig.5-22 [コンピュータ]−[マイコンピュータ]のプロパティを開く
fig5_22.gif

 MS DTCの設定は,開いたプロパティダイアログボックスの[MSDTC]ページで実施する(Fig.5-23)。

Fig.5-23 [MSDTC]ページ
fig5_23.gif

 デフォルトでは,[ローカルコーディネータを使用する]が有効になっており,自分のコンピュータで動作しているMS DTCが使われる。もし別のサーバーで動作しているMS DTCを利用したいのであれば,[ローカルコーディネータを使用する]を解除し,[リモートホスト]のところにMS DTCが動作しているサーバーの名前を入力する。その場合,このコンピュータでMS DTCを動作させておく必要はなくなるので,下にある[停止]ボタンを押してMS DTCを停止させてしまってもよいが,Windows 2000の場合,COM+以外にもさまざまなところでMS DTCが使われているので推奨できない。

 ところで,[マイコンピュータ]のプロパティで,もう1つ設定しておきたいところがある。それは,[オプション]ページに存在するトランザクションタイムアウトの値である(Fig.5-24)。デフォルトでは60秒に設定されていて,トランザクションが60秒以内に完了しなければ,失敗したものとみなされる。複雑な処理をする場合や,サーバーの負担が重くて時間内にトランザクションが完了しないおそれがある場合には,この値を長く設定することで,問題を解決できる。

Fig.5-24 [オプション]ページ
fig5_24.gif

 ただし筆者は,トランザクションタイムアウトの値を長くして,トランザクションにかかる時間を長くすることを推奨しているわけではない。トランザクションにかかる時間が長くなればなるほど,ほかのクライアントが待たされる時間も長くなるので,パフォーマンスは低下する。よって開発者は,トランザクションが完了するまでの時間が極力短くなるように実装すべきである。あくまでも,トランザクションタイムアウトの値を長くするというのは応急処置であり,トランザクションの完了までに長い時間を必要とするのであれば,プログラム側での速度向上を図ったり,サーバーを強化したりするなど,トランザクション完了までの時間が短くなるように対処すべきである。

prevpg.gif Chapter 5-1 17/23 nextpg.gif