?? client.cpp
字號:
// Client.cpp
#include <fstream.h>
#include <OB/CORBA.h>
#include <OB/OBORB.h>
// Include 由IDL生成的文件
#include <java/lang/Exception.h>
#include <java/lang/Throwable.h>
#include <javax/ejb/CreateException.h>
#include <javax/ejb/RemoveException.h>
#include <ejbinterop/Logger.h>
#include <ejbinterop/LoggerHome.h>
//為LoggerHome對象提供一個ORB和一個corbaname URL,
//在服務器上記錄一個簡單的字符串信息
void
run(CORBA::ORB_ptr orb, const char* logger_home_url)
{
cout << "Looking for: " << logger_home_url << endl;
//在名字上下文中查詢由corbaname URL指向的LoggerHome對象
CORBA::Object_var home_obj
= orb->string_to_object(logger_home_url);
//執行一個安全的downcast
ejbinterop::LoggerHome_var home
= ejbinterop::LoggerHome::_narrow(home_obj.in());
assert(!CORBA::is_nil(home));
// 創建一個Logger EJB的引用
ejbinterop::Logger_var logger = home->create();
CORBA::WStringValue_var msg =
new CORBA::WStringValue((const CORBA::WChar*)L"Message
from a C++ client");
cout << "Logging..." << endl;
//記錄我們的信息
logger->logString(msg);
// 告訴應用服務器,我們將在不是使用這個引用
logger->remove();
cout << "Done" << endl;
}
//簡單的main函數,檢驗參數,創建一個ORB同時處理異常
int
main(int argc, char* argv[])
{
int exit_code = 0;
CORBA::ORB_var orb;
try {
//檢測參數
if (argc != 2) {
cerr << "Usage: Client <corbaname URL of LoggerHome>" << endl;
return 1;
}
//創建一個 ORB
orb = CORBA::ORB_init(argc, argv);
//注冊factories
CORBA::ValueFactory factory = new java::lang::Throwable_init;
orb -> register_value_factory(java::lang::Throwable::_OB_id(),
factory);
factory -> _remove_ref();
factory = new java::lang::Exception_init;
orb -> register_value_factory(java::lang::Exception::_OB_id(),
factory);
factory -> _remove_ref();
factory = new javax::ejb::CreateException_init;
orb -> register_value_factory(javax::ejb::CreateException::_OB_id(),
factory);
factory -> _remove_ref();
factory = new javax::ejb::RemoveException_init;
orb ->
register_value_factory(javax::ejb::RemoveException::_OB_id(),
factory);
factory -> _remove_ref();
//執行這個程序
run(orb, argv[1]);
} catch(const CORBA::Exception& ex) {
// 處理任何CORBA相關的異常
cerr << ex._to_string() << endl;
exit_code = 1;
}
// 釋放任何ORB資源
if (!CORBA::is_nil(orb)) {
try {
orb -> destroy();
} catch(const CORBA::Exception& ex) {
cerr << ex._to_string() << endl;
exit_code = 1;
}
}
return exit_code;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -