4.6.2 例外の捕捉とエラーの判定
CUP.NETでは,Client .NETが提供するクラスライブラリやスタブ,.NET Frameworkなどから例外が発生する場合があります。これらの例外は適切に捕捉してください。
Client .NETからは,次の例外が発生する可能性があります。
名前空間 |
例外名 |
意味 |
---|---|---|
Hitachi.OpenTP1 |
TP1Exception |
共通の例外基底クラス |
TP1RemoteException |
サーバで発生した例外の受信 |
|
TP1UserException |
ユーザが任意に使用 |
|
TP1MarshalException |
スタブでのデータ変換エラー |
|
Hitachi.OpenTP1.Client |
TP1ClientException |
クラスライブラリでのエラー検知 |
ErrXxxxException (TP1ClientExceptionのサブクラス) |
クラスライブラリでの各種エラー検知※ |
- 注※
-
詳細については,「6. クラスリファレンス」を参照してください。
- 〈この項の構成〉
(1) TP1Exception
OpenTP1のすべての例外の基底クラスです。個別の例外を補捉しないで,まとめて捕捉したい場合などにこのTP1ExceptionクラスですべてのOpenTP1の例外を捕捉できます。
(2) TP1RemoteException
クライアントスタブを使用してRPC要求をした場合に,サーバ側で例外が発生したことを示す例外です。呼び出し元のクライアント側で発生した例外とサーバ側で発生した例外を区別できます。
(3) TP1UserException
クライアント,およびサーバを.NETインタフェース定義を使用したOpenTP1 for .NET FrameworkのUAPで作成した場合に,RPC要求されたサービスメソッドからクライアントにこの例外を返すことができます。
この例外はUAPで任意に使用できます。また,クライアント側でもTP1RemoteExceptionには変換されません。
なお,.NETインタフェース定義を使用しない場合は,この例外を使用しないでください。使用した場合,クライアント側にRPC要求のエラーが通知されます。
(4) TP1MarshalException
クライアントスタブを使用してRPC要求をした場合に,データ変換エラーが発生したことを示す例外です。クライアントとサーバで.NETインタフェース定義が一致していない場合や,サービス定義(データ型定義)に誤りがあった場合などに発生します。
(5) TP1ClientException
Client .NETが提供するクラスライブラリの各クラスおよびメソッドでエラーを検知した場合に発生する,すべての例外の基底クラスです。
各例外のサブクラス,および各メソッドでの発生条件や内容の詳細については,「6. クラスリファレンス」を参照してください。
(6) ErrXxxxException(TP1ClientExceptionのサブクラス)
ErrXxxxException例外については,「6. クラスリファレンス」を参照してください(Xxxxは,例外クラス名によって異なります)。
(7) その他の例外
TP1Clientクラスのインスタンスを使用するスレッドがThread.Abortメソッドを受けた場合,TP1ClientクラスのメソッドはThreadAbortException例外が発生します。この例外が発生した場合,次の点に注意してください。
-
ThreadAbortException例外が発生したとき,Client .NETは製品が保持するリソースの初期化を行います。そのため,例外が発生したインスタンスを再使用する場合は,必ずOpenRpcメソッドから再実行してください。
なお,ThreadAbortException例外の影響で,Client .NET以外のリソースで問題が発生するおそれがあります。その場合インスタンスの再生成,またはプロセス再起動をしてください。
-
ThreadAbortException例外をThread.ResetAbortメソッドでキャンセルする場合,そのスレッド内でTP1Clientクラスのインスタンスを再使用しないでください。再使用した場合,予期しない例外を返すことがあります。
-
トランザクション制御機能を使用するスレッドでThreadAbortException例外が発生した場合,このプロセスはグローバルトランザクションの範囲外となり,Client .NETからOpenTP1のトランザクションを制御できなくなります。
ThreadAbortException例外の発生したタイミングによってトランザクションの決着結果は次のようになります。
- Commitメソッド発行前
-
グローバルトランザクションはロールバックされます。
- Commitメソッド発行中
-
CUP.NETではトランザクションブランチの同期点の結果がわかりません。
同期点の結果は,TP1/Serverのメッセージログファイルを参照してください。詳細は「2.3.5 障害発生時のトランザクションの同期点を検証する方法」を参照してください。
- Commitメソッド発行後
-
グローバルトランザクションはコミット済みです。