| 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));
                    :
              }
          }
      }
  }
			目次
			索引
			![]()  
		 |