Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド


5.2.4 システム例外のキャッチ

アプリケーションは,VisiBroker ORBとリモートコールをトライキャッチブロックで囲むのがよいでしょう。「4. Borland Enterprise Server VisiBrokerによるサンプルアプリケーションの開発」で説明したアカウントのクライアントプログラムがC++の例外をどのように出力するのかを,コードサンプル5-5でわかりやすく説明します。コードサンプル5-6は,アカウントクライアントプログラムがJavaの例外をどのように出力するかを示します。

コードサンプル5-5 例外の出力(C++)
#include "Bank_c.hh"
int main(int argc, char* const* argv) {
   try {
      CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
      PortableServer::ObjectId_var managerId = 
            PortableServer::string_to_ObjectId("BankManager");
      Bank::AccountManager_var manager = 
            Bank::AccountManager::_bind("/bank_agent_poa",
                  managerId);
      const char* name = argc >1 ? argv [1] : "Jack B. Quick";
      Bank::Account_var account = manager->open(name);
      CORBA::Float balance = account->balance();
      cout << "The balance in " << name << "'s account is $"
            << balance << endl;
   } catch(const CORBA::Exception& e) {
     cerr << e << endl;
     return 1;
   }
   return 0;
}
コードサンプル5-6 例外の出力(Java)
public class Client {
   public static void main(String[ ] args) {
      try {
         org.omg.CORBA.ORB orb =
                         org.omg.CORBA.ORB.init(args, null);
         byte[ ] managerId = "BankManager".getBytes();
         Bank.AccountManager manager =
               Bank.AccountManagerHelper.bind(orb,
                                          "/bank_agent_poa",
                                          managerId);
         String name =
                 args.length > 0 ? args[0] : "Jack B. Quick";
         Bank.Account account = manager.open(name);
         float balance = account.balance();
         System.out.println("The balance in "
                      + name + "'s account is $" + balance);
     } catch (Exception e) {
         System.err.println(e);
     }
   }
}

上記のような変更を加えたクライアントプログラムをサーバが存在しない場合に実行するときは,次のような出力が行われ,オペレーションが未完であることと,例外の理由を示します。

C++の場合
prompt> Client
Exception: CORBA::OBJECT_NOT_EXIST
         Minor: 0
         Completion Status: NO
Javaの場合
prompt>vbj Client
org.omg.CORBA.OBJECT_NOT_EXIST:
      Could not locate the following POA:
      poa name : /bank_agent_poa
      minor code:0 completed: No