| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第6章 アプリケーションの開発(Java言語) |
クライアントアプリケーションは、サーバアプリケーションの処理結果が正常終了か異常終了かを知ることができます。また、異常終了した場合には、システムの異常終了か、サーバアプリケーションの異常終了かを知ることができます。前者をシステム例外、後者をユーザ例外と呼びます。システム例外クラスを以下の表に示します。
システム例外は、親クラスとしてorg.omg.CORBA.SystemExceptionが定義され、その継承クラスとして各詳細情報を定義したクラスorg.omg.CORBA.UNKNOWN、org.omg.CORBA.BAD_PARAMなどがあります。ユーザ例外は、親クラスとしてorg.omg.CORBA.UserExceptionが定義されます。例外の意味については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
|
例外情報 |
例外クラス |
|
BAD_CONTEXT |
org.omg.CORBA.BAD_CONTEXT |
|
BAD_INV_ORDER |
org.omg.CORBA.BAD_INV_ORDER |
|
BAD_OPERATION |
org.omg.CORBA.BAD_OPERATION |
|
BAD_PARAM |
org.omg.CORBA.BAD_PARAM |
|
BAD_QOS |
org.omg.CORBA.BAD_QOS |
|
BAD_TYPECODE |
org.omg.CORBA.BAD_TYPECODE |
|
CODESET_INCOMPATIBLE |
org.omg.CORBA.CODESET_INCOMPATIBLE |
|
COMM_FAILURE |
org.omg.CORBA.COMM_FAILURE |
|
DATA_CONVERSION |
org.omg.CORBA.DATA_CONVERSION |
|
FREE_MEM |
org.omg.CORBA.FREE_MEM |
|
IMP_LIMIT |
org.omg.CORBA.IMP_LIMIT |
|
INITIALIZE |
org.omg.CORBA.INITIALIZE |
|
INTERNAL |
org.omg.CORBA.INTERNAL |
|
INTF_REPOS |
org.omg.CORBA.INTF_REPOS |
|
INV_FLAG |
org.omg.CORBA.INV_FLAG |
|
INV_IDENT |
org.omg.CORBA.INV_IDENT |
|
INV_OBJREF |
org.omg.CORBA.INV_OBJREF |
|
INV_POLICY |
org.omg.CORBA.INV_POLICY |
|
MARSHAL |
org.omg.CORBA.MARSHAL |
|
NO_IMPLEMENT |
org.omg.CORBA.NO_IMPLEMENT |
|
NO_MEMORY |
org.omg.CORBA.NO_MEMORY |
|
NO_PERMISSION |
org.omg.CORBA.NO_PERMISSION |
|
NO_RESOURCES |
org.omg.CORBA.NO_RESOURCES |
|
NO_RESPONSE |
org.omg.CORBA.NO_RESPONSE |
|
OBJ_ADAPTER |
org.omg.CORBA.OBJ_ADAPTER |
|
PERSIST_STORE |
org.omg.CORBA.PERSIST_STORE |
|
REBIND |
org.omg.CORBA.REBIND |
|
TIMEOUT |
org.omg.CORBA.TIMEOUT |
|
TRANSIENT |
org.omg.CORBA.TRANSIENT |
|
UNKNOWN |
org.omg.CORBA.UNKNOWN |
|
INVALID_TRANSACTION |
org.omg.CORBA.INVALID_TRANSACTION |
|
TRANSACTION_MODE |
org.omg.CORBA.TRANSACTION_MODE |
|
TRANSACTION_REQUIRED |
org.omg.CORBA.TRANSACTION_REQUIRED |
|
TRANSACTION_ROLLEDBACK |
org.omg.CORBA.TRANSACTION_ROLLEDBACK |
|
TRANSACTION_UNAVAILABLE |
org.omg.CORBA.TRANSACTION_UNAVAILABLE |
tryブロックで例外をハンドルするために例外クラスに対応するcatchブロックを定義します。例外が発生すると例外クラスに対応するcatchブロックが実行されます。
詳細エラーごとにエラー処理を記述したい場合は、以下のように詳細エラーごとにcatch文で指定します。共通なエラー処理については、システム例外の場合はorg.omg.CORBA.SystemExceptionクラスをcatch文で利用すれば、それ以前のcatchで指定されている詳細エラー以外のすべてのエラー情報を一括して受けることができます。もし、システム例外、ユーザ例外、各例外のエラー処理の区別が必要でない場合には上位クラスであるjava.lang.Exceptionをcatch文で指定すれば、すべて一括して受けることができます。
また、システム例外発生時には、org.omg.CORBA.SystemException.minorを使用してマイナーコードを獲得することができます。マイナーコードの値については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
try {
fret =target.divide( inArg1,inArg2 );
// divideメソッドを実行
}
catch( org.omg.CORBA.UNKNOWN e ){
// org.omg.CORBA.UNKNOWNの場合の処理
System.out.println("ERROR : " + e.getClass().getName()
+ ": Minor = 0x" + java.lang.Integer.toHexString(e.minor)); //マイナーコードの獲得
}
catch( org.omg.CORBA.BAD_PARAM e ){
// org.omg.CORBA.BAD_PARAMの場合の処理
System.out.println("ERROR : " + e.getClass().getName()
+ ": Minor = 0x" + java.lang.Integer.toHexString(e.minor)); //マイナーコードの獲得
}
catch( org.omg.CORBA.SystemException e ){
System.out.println("ERROR : " + e.getClass().getName()
+ ": Minor = 0x" + java.lang.Integer.toHexString(e.minor)); //マイナーコードの獲得
// 上記以外のシステム例外
}
catch( demo.calc.ZERODIVIDE e ){
// ユーザ例外の処理
}
または
try {
fret =target.divide( inArg1, inArg2 ); // divideメソッドを実行
}
catch( java.lang.Exception e ){
if ( e instanceof demo.calc.ZERODIVIDE ){
// ユーザ例外の処理
}
if ( e instanceof org.omg.CORBA.SystemException ){
// システム例外の処理
System.out.println("ERROR : " + e.getClass().getName()
+ ": Minor = 0x" // マイナーコードの獲得
+ java.lang.Integer.toHexString(((org.omg.CORBA.SystemException)e).minor));
:
}
// その他の例外の処理など
}
以下に、IDL言語でユーザ例外が定義されていた場合について、クライアントアプリケーションプログラムの例を示します。
module ODsample {
interface exptest{
exception testException { string reason; };
void op1() raises( testException );
};
};
これをJava言語で記述すると以下のようになります。
<インタフェース>
package ODsample;
public interface exptest extends org.omg.CORBA.Object {
public void op1() throws ODsample.exptestPackage.testException;
}
<ユーザ例外クラス>
package ODsample.exptestPackage;
public class testException extends org.omg.CORBA.UserException {
public java.lang.String reason;
public testException() {
reason = null;
}
public testException( java.lang.String _reason ) {
reason = _reason;
}
}
import org.omg.CORBA.*;
import ODsample.*;
public class expClient {
public static void main( String args[] ) {
// ORBの前処理
// オブジェクトリファレンスの獲得
:
try {
// サーバアプリケーションのメソッド呼出し
target.op1( );
}
catch ( ODsample.exptestPackage.testException e ) {
System.out.println( "UserException : " );
System.out.println( " " + e + " -> " + e.reason );
}
catch (java.lang.Exception e) {
if ( e instanceof demo.calc.ZERODIVIDE ){
// ユーザ例外の処理
}
if ( e instanceof org.omg.CORBA.SystemException )
// システム例外の処理
System.out.println("ERROR : " + e.getClass().getName()
+ ": Minor = 0x" // マイナーコードの獲得
+ java.lang.Integer.toHexString(((org.omg.CORBA.SystemException)e).minor));
:
}
}
}
}
目次
索引
![]()
|