Microsoft Transaction Server Readme

Microsoft Transaction Server (MTS) は、高性能でスケーラブルな企業向けアプリケーション、インターネット、イントラネット アプリケーションを容易に開発するための強力な開発環境です。Microsoft Transaction Server は、分散可能なコンポーネントをベースにしたアプリケーションを開発するためのアプリケーション プログラミング モデルを定義します。また、これらのアプリケーションを配置、管理するランタイム環境を提供します。

Readme では、マニュアルに記載されていない補足情報、MTS のこのリリースでの制限事項、および障害の報告方法について記述します。

注:  Microsoft Transaction Server 2.0 SP1 のオンライン ヘルプは、Windows NT Option Pack で提供される MTS ドキュメントに代わるものです。

補足情報および制限事項

障害の報告方法


補足情報および制限事項 (Readme)
補足情報および制限事項

ここでは、マニュアルに記載されていない補足情報、既知の問題、および制限事項について記述します。

Visual C++ 開発者のために提供される SecurityProperty および ObjectContext インターフェイス

Visual C++ を使う開発者は、SecurityProperty および ObjectContext インターフェイスを呼び出すことができます。SecurityProperty インターフェイスは、現在のオブジェクトの呼び出し元または作成元を判断するために使用されます。ObjectContext インターフェイスを使うと、次のようなことができます。

•	オブジェクトの作業が完了したことを宣言します。

•	トランザクションを、一時的または永続的にコミットしないようにします。

•	ほかの MTS オブジェクトのインスタンスを作成し、その作業を現在のオブジェクトのトランザクションのスコープに含めます。

•	呼び出し元が特定のロールに入っているかどうかを調べます。

•	セキュリティが有効かどうかを調べます。

•	オブジェクトがトランザクション内で実行中かどうかを調べます。

•	Microsoft Internet Information Server (IIS) 組み込みオブジェクトを検索します。

これらのインターフェイスは『Programmer's Guide』の「MTS Reference」には記載されていませんが、Visual Basic オブジェクトおよびメソッドが同じ機能を提供します。したがって、SecurityProperty および ObjectContext オブジェクトとメソッドの説明については、Visual Basic の節を参照してください。さらに Java コンポーネントは、新しい Java Context クラスをとおして SecurityProperty メソッドにアクセスできます。Context クラスの詳細については、『MTS Programmer's Reference』の Visual J++ の節を参照してください。

Alpha プラットフォームでは Oracle はサポートされない

MTS コンポーネントは、Alpha プラットフォームでは Oracle データベースと共にトランザクションに参加することはできません。

新しい Java Context クラス

Visual J++ を使うアプリケーションを作成する場合、IContextObject の代わりに新しい Context クラスを使用します。Context クラスを使うと、Visual J++ を使って次のようなことができます。

•	オブジェクトの作業が完了したことを宣言します。

•	トランザクションを、一時的または永続的にコミットしないようにします。

•	ほかの MTS オブジェクトのインスタンスを作成し、その作業を現在のオブジェクトのトランザクションのスコープに含めます。

•	呼び出し元が特定のロールに入っているかどうかを調べます。

•	セキュリティが有効かどうかを調べます。

•	オブジェクトがトランザクション内で実行中かどうかを調べます。

•	SecurityProperty メソッドをアクセスします。

新しいクラスの詳細については、「MTS Reference」の Visual J++ の節を参照してください。

ADO での ErrorInfo の使用

ADO は、ErrorInfo オブジェクトに置かれた情報を消去します。ここでは、この問題の対処方法を示します。コードで対処するには、エラー ハンドラによって実装する必要があります。

Visual Basic の場合、次のようなコードを使用します。

ErrorHandler:

' cleanup

If Not adoRS Is Nothing Then

Set adoRS = Nothing

End If

If Not adoConn Is Nothing Then

Set adoConn = Nothing

End If

Err.Raise Err.Number, "Bank.Account.Post", Err.Description

Exit Function

Visual C++ の場合、次のようなコードを使用します。

//

// 次の ADO はコードをクリーンアップするので、ErrorInfo を保存する

//

IErrorInfo * pErrorInfo = NULL;

GetErrorInfo(NULL, &pErrorInfo);

if (adoRsBalance) adoRsBalance->Release();

if (adoCoConnection) adoCoConnection->Release();

AtlReportError( CLSID_CAccount, pErrMsg, IID_IAccount, hr);

//

// エラーを TLS に書き戻す

//

SetErrorInfo(NULL, pErrorInfo);

Visual J++ の場合、次のようなコードを使用します。

if (adoRsBalance != null) {

if (adoRsBalance.getState() == ObjectStateEnum.adStateOpen)

adoRsBalance.Close();

ComLib.release (adoRsBalance);

}

if (adoConn != null) {

if (adoConn.getState() == ObjectStateEnum.adStateOpen)

adoConn.Close();

ComLib.release (adoConn);

}

注   Java では、ADO オブジェクトを明示的に解放するだけでなく、レコードセットおよび接続を明示的に閉じる必要があります。

マルチプロセッサ コンピュータで RDO 2.0 を使用するコンポーネントはアクセス違反を起こす可能性がある

RDO 2.0 を使用するコンポーネントを複数のクライアントが同時にアクセスした場合、アクセス違反が起こる可能性があります。これは、マルチプロセッサのサーバーで発生しています。この問題は、ADO を使用するコンポーネントでは発生していません。

Windows 95/98 では Java Sample Bank がコンパイルできない

Windows 95/98 で Visual J++ 1.1 以前のバージョンを使って Java Sample Bank コンポーネントをコンパイルするには、Account.idl ファイルで midl.exe を実行してから、SetJavaDev.bat を実行してください。Visual J++ 6.0 を使用する場合は、次の説明を参照してください。

Visual J++ 6.0 で Account.VJ サンプルをビルドする

バッチ ファイル SetJavaDev.bat は、Account.VJ サンプルをビルドするために適切なタイプ ライブラリとラッパー クラスを作成しますが、Visual J++ 1.1 以前のバージョンとともに使用します。Visual J++ 6.0 を使用して Account.VJ サンプルをビルドするには、代わりに次のコマンドを実行する必要があります。

midl AccountLib.idl

jactivex /javatlb /d .AccountLib.tlb

jactivex /javatlb /d ."%SystemDrive%\Program Files\Common Files\System\ADO\msado15.dll"

jactivex アプリケーションは VJ98 ディレクトリにありますが、パスは設定されていない場合があります。

Visual Basic 4.0 コンポーネントを実行する Mtx.exe をシャットダウンする場合の問題点

Visual Basic 4.0 コンポーネントを実行する Mtx.exe プロセスを "一定時間アイドルした後で" シャットダウンすると、読み取りアクセス違反になるという既知の問題があります。現在のところ、この問題の解決方法はありません。3 つ以上の Visual Basic 4.0 コンポーネントを 1 つのプロセスで使用している場合に、発生しやすい問題です。対処方法の 1 つは、パッケージのプロパティで、[アイドル状態のときも実行を続ける] をオンにすることです。この問題は、Visual Basic 5.0 で作成したコンポーネントを使用する場合は、発生しません。

Visual Basic 4.0/RDO デッドロックの回避

サーバー コンポーネントが RDO を使用している場合、アクティブな rdoResultset がある rdoConnection を適用範囲外にしないでください (つまり、rdoResultset オブジェクトを閉じる前に、プロシージャを終了しないでください)。さもなければ、デッドロックが起こる可能性があります。デッドロックを避けるには、rdoResultset または rdoConnection を手作業で閉じる必要があります。次の一連の操作は、デッドロックを起こします。

1	サーバー コンポーネントのインスタンスを作成します。rdoConnection を作成するメソッドを呼び出し、次に rdoResultset を作成するメソッドを呼び出します。rdoResultset からフェッチします (ただし、rdoResultset を破棄したり、閉じたりしません)。

2	インスタンスを解放します。rdoConnection および rdoResultset は適用範囲外になります。しかし、必要な ODBC 呼び出しはすぐには実行されません。代わりに、SQLFreeStmt+SQLDisconnect+SQLFreeConnect を実行するために、非表示ウィンドウにメッセージがポストされます。

3	サーバー コンポーネントの 2 つめのインスタンスを作成します。rdoConnection を作成し、ステップ 1 の結果セットに含まれる行を更新しようとします。ステップ 1 で作成された結果セットはロックされているため、この時点でデッドロックになります。そして、ステップ 2 でポストされたメッセージを処理するメッセージ パンプは、二度と実行されません。

デッドロックを回避するには、ステップ 1 の最後で結果セット (または接続) を手作業で閉じます。これによって、ステートメント (および接続) を閉じるために、ただちに ODBC 呼び出しが作成されます。この問題の原因は、ODBC を閉じるために非表示ウィンドウにポストされたメッセージによってもたらされた遅延です。

MTS 固有の GUID における未解決の外部参照

IID_IGetContextProperties またはその他の MTS 固有の GUID 定義が見つからずにリンク エラーが発生するのは、これらの定義を含まない古いバージョンの MTS インクルード ファイルおよびライブラリ ファイルをコンパイラが使用しているためです。コンパイラのパスが、コンパイラのインクルードおよびライブラリ ディレクトリの前に MTS のインクルードおよびライブラリ ディレクトリを指定していることを確認してください。

Microsoft Cluster Server を実行中のコンピュータでの MTS 2.0 の更新

Microsoft Cluster Server を実行中のコンピュータで MTS を実行している場合、クラスタの両方のサーバーの MTS システム レジストリ エントリが同期していることが重要です。これらのエントリが同期している場合、クラスタ上の MTS パッケージは Oracle のような XA 互換データベースをアクセスすることができます。さらに、分散トランザクション コーディネータ (DTC) は、2 つのコンピュータのシステム ディレクトリのパスが同じでなくても、フェールオーバーをサポートします。

Service Pack のインストール後に MTS のシステム レジストリ エントリを同期させるには、クラスタの両方のノードが実行中であることを確認してから、各サーバーで msdtc.exe ユーティリティを手動で実行する必要があります。msdtc.exe を実行するには、コマンド プロンプト ウィンドウで次のように入力します。

msdtc -mts2sp1fix "システム ディレクトリへのパス"

"システム ディレクトリへのパス" は、Windows NT システム ファイルへのパスです。たとえば、システム ファイルへのパスが c:\winnt\system32 の場合は、次のコマンドを入力します。

msdtc -mts2sp1fix c:\winnt\system32

MTS コンポーネントと Visual Basic 6.0 デバッガ

Visual Basic 6.0 は MTS コンポーネントのデバッグをサポートしますが、いくつかの注意点があります。詳細については、Visual Basic 6.0 の Readme を参照してください。

MTS コンポーネントと Visual J++ デバッガ

Visual J++ 6.0 は、MTS ランタイム環境での MTS コンポーネントのデバッグ機能を提供します。詳細については、Visual J++ のドキュメントを参照してください。

Visual J++ 1.0 または 1.1 を使用している場合は、MTS ランタイム環境で MTS コンポーネントをデバッグすることはできません。ブレークポイントを設定して、パッケージにインストールされていない MTS コンポーネントをデバッグできますが、MTS ランタイム環境が提供する機能は利用できません。結果として、コンポーネントを MTS コンポーネントではなく、Java クラスとしてデバッグできます。オブジェクト コンテキストはデバッガでは作成されないので、オブジェクト コンテキストを含む操作は失敗します。

Visual J++ 1.0 または 1.1 の exegen.exe に対する MTS コンポーネントのパスの指定

Visual J++ 1.0 または 1.1 では、exegen.exe を使って MTS コンポーネントを作成する場合、コンポーネントのパスにマルチバイト文字セット (MBCS) を指定することはできません。exegen.exe の問題によって、この方法で作成されたコンポーネントは、自己登録できません。この問題を解決するには、コンポーネントを作成するときに 1 バイト文字セット (SBCS) を使ってパスを指定してください。

•	Visual J++ 6.0 開発環境は exegen.exe の動作を含んでいるので、この問題は発生しません。

リモート コンピュータの問題

MTS エクスプローラからリモート コンピュータならびにリモート コンポーネントを管理するには、MTS フォルダ (既定の設定では \Program Files\Mts\)、または MTS フォルダを含むフォルダを共有できるように設定して、適切なアクセス権を持つ人にフルコントロールの権限を与える必要があります。


障害の報告方法 (Readme)
障害の報告方法

障害を報告する場合は、次の情報を障害報告書に記載してください。

•	エラー番号および説明

•	関連する.Windows NT イベント ログ メッセージ (Microsoft Transaction Server は、Windows NT イベント ログにエラーを報告します。エラーが発生した場合は、Windows NT イベント ログを確認してください)。

•	クライアント コンピュータで障害が発生した場合は、クライアント コンピュータの構成

•	サーバー コンピュータの構成

•	問題が発生したコンポーネント

•	コンポーネントを開発するために使用した言語 (Microsoft Visual Basic、Microsoft Visual C++ など)

•	コンポーネントが実装するインターフェイスのタイプ (たとえば、カスタム インターフェイス、デュアル インターフェイス、ディスプインターフェイス)

•	ODBC ドライバを使用していれば、そのバージョン

•	リソース マネージャの名前とバージョン

•	問題が発生した、サード パーティのコンポーネント、リソース ディスペンサ、またはリソース マネージャ

•	もしわかれば、問題が発生したコード行