アプリケーションは,VisiBroker ORBとリモートコールをトライキャッチブロックで囲むのがよいでしょう。「4. Borland Enterprise Server VisiBrokerによるサンプルアプリケーションの開発」で説明したアカウントのクライアントプログラムがC++の例外をどのように出力するのかを,コードサンプル5-5でわかりやすく説明します。コードサンプル5-6は,アカウントクライアントプログラムがJavaの例外をどのように出力するかを示します。
#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;
}
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);
}
}
}
上記のような変更を加えたクライアントプログラムをサーバが存在しない場合に実行するときは,次のような出力が行われ,オペレーションが未完であることと,例外の理由を示します。
prompt> Client
Exception: CORBA::OBJECT_NOT_EXIST
Minor: 0
Completion Status: NO
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