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

[目次][索引][前へ][次へ]

28.5.2 XDispatcherクラスまたはWDispatcherクラスによる移行

XDispatcherクラスとWDispatcherクラスはVisiBroker ORBランタイムおよびX Window System(またはWindows)イベントループと透過的に動作します。これは,ORB_initに対する最初の呼び出し前に,XDispatcherまたはWDispatcherのインスタンス作成時に動作します。このため,「28.5.1 シングルスレッドVisiBroker ORBの移行」で説明したように,アプリケーションがスレッドセーフとなったら,XDispatcherまたはWDispatcherのリファレンスを単純に削除できます。コードサンプル28-9および28-10にWDispatcher変換の例を示します。

コードサンプル28-9 移行前のWDispatcher
 
//. . .
hwnd = CreateWindow(szAppName, "AccountServer",
                         WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
                         CW_USEDEFAULT,200,200,NULL,
                         NULL,hInstance,NULL);
 
//Create a WDispatcher instance before calling ORB_init
WDispatcher *winDispatcher = new WDispatcher(hwnd);
 
//Initialize the ORB
CORBA::ORB_var orb = CORBA::ORB_init(__argc, __argv);
 
//Initialize the BOA
CORBA::BOA_var orb = orb->BOA_init(__argc, __argv);
 
//Create the servant
AccountImpl server("BankManager");
 
//Activate the servant on the BOA
boa->obj_is_ready(&server);
 
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
 
//Enter message loop
while(GetMessage(&msy, NULL, 0, 0)) {
         TranslateMessage(&msg); DispatchMessage(&msg);
     }
return msg.wParam;
 
//. . .
 

コードサンプル28-10 移行後のWDispatcher
 
//. . .
hwnd = CreateWindow(szAppName, "AccountServer",
                        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
                        CW_USEDEFAULT,200,200,NULL,
                        NULL,hInstance,NULL);
//Initialize the ORB
CORBA::ORB_var orb = CORBA::ORB_init(__argc, __argv);
 
//Initialize the POA
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(obj);
CORBA::PolicyList policies;
policies.length(1);
policies [(CORBA::ULong)0 ] = rootPOA->create_lifespan_policy(
                                          PortableServer::PERSISTENT);
PortableServer::POAManager_var poa_mgr =rootPOA->the_POAManager();
 
PortableServer::POA_var myPOA =rootPOA->create_POA("bank_agent_poa",
                                                    poa_mgr,policies);
 
 
//Create the servant
AccountManagerImpl managerServant;
 
//Activate the servant on the POA
PortableServer::ObjectId_var managerId =
                   PortableServer::string_to_ObjectId("BankManager");
 
myPOA->activate_object_with_id(managerId, &managerServant);
 
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
 
//Enter message loop
while(GetMessage(&msy,NULL,0,0)){
                          TranslateMessage(&msg);
                          DispatchMessage(&msg);
}
return msg.wParam;
// . . .
 

WDispatcherまたはXDispatcherを削除する場合,POAを使用可能にするためにアプリケーションを変換するための追加手順は必要ありません。