18.7 サーバのインプリメンテーション
mainルーチンのインプリメンテーションは,コードサンプル18-11および18-12に示すように,「4. Borland Enterprise Server VisiBrokerによるサンプルアプリケーションの開発」で示したサンプルとほぼ同じものです。
- コードサンプル18-11 サーバのインプリメンテーション(C++)
int main(int argc, char* const* argv) { try { // Initialize the ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); // Get a reference to the rootPOA CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(obj); // Get the POA Manager PortableServer::POAManager_var poaManager = rootPOA->the_POAManager(); // Create the account POA with the right policies CORBA::PolicyList accountPolicies; accountPolicies.length(3); accountPolicies [(CORBA::ULong)0] = rootPOA->create_servant_retention_policy( PortableServer::NON_RETAIN); accountPolicies[(CORBA::ULong)1] = rootPOA->create_request_processing_policy( PortableServer::USE_DEFAULT_SERVANT); accountPolicies[(CORBA::ULong)2] = rootPOA->create_id_uniqueness_policy( PortableServer::MULTIPLE_ID); PortableServer::POA_var accountPOA = rootPOA->create_POA( "bank_account_poa", poaManager, accountPolicies); // Create the account default servant PortableServer::Current_var current = PortableServer::Current::_instance(); AccountImpl accountServant(current, accountPOA); accountPOA->set_servant(&accountServant); // Create the manager POA with the right policies CORBA::PolicyList managerPolicies; managerPolicies.length(3); managerPolicies[(CORBA::ULong)0] = rootPOA->create_lifespan_policy( PortableServer::PERSISTENT); managerPolicies[(CORBA::ULong)1] = rootPOA->create_request_processing_policy( PortableServer::USE_DEFAULT_SERVANT); managerPolicies[(CORBA::ULong)2] = rootPOA->create_id_uniqueness_policy( PortableServer::MULTIPLE_ID); PortableServer::POA_var managerPOA = rootPOA->create_POA( "bank_agent_poa", poaManager, managerPolicies); // Create the manager default servant AccountManagerImpl managerServant(&accountServant); managerPOA->set_servant(&managerServant); // Activate the POA Manager poaManager->activate(); cout << "AccountManager is ready" << endl; // Wait for incoming requests orb->run(); } catch(const CORBA::Exception& e) { cerr << e << endl; return 1; } return 0; }
- コードサンプル18-12 サーバのインプリメンテーション(Java)
import org.omg.PortableServer.*; public class Server { public static void main(String[ ] args) { try { // Initialize the ORB org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null); // Get a reference to the rootPOA POA rootPOA = POAHelper.narrow(orb. resolve_initial_references("RootPOA")); // Get the POA Manager POAManager poaManager = rootPOA.the_POAManager(); // Create the account POA with the right policies org.omg.CORBA.Policy[ ] accountPolicies = { rootPOA.create_servant_retention_policy( ServantRetentionPolicyValue.NON_RETAIN), rootPOA.create_request_processing_policy( RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) }; POA accountPOA = rootPOA.create_POA("bank_account_poa", poaManager, accountPolicies); // Create the account default servant AccountImpl accountServant = new AccountImpl(orb, accountPOA); accountPOA.set_servant(accountServant); // Create the manager POA with the right policies org.omg.CORBA.Policy[ ] managerPolicies = { rootPOA.create_lifespan_policy( LifespanPolicyValue.PERSISTENT), rootPOA.create_request_processing_policy( RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) }; POA managerPOA = rootPOA.create_POA("bank_agent_poa", poaManager,managerPolicies); // Create the manager default servant AccountManagerImpl managerServant = new AccountManagerImpl(orb, accountServant); managerPOA.set_servant(managerServant); // Activate the POA Manager poaManager.activate(); System.out.println("AccountManager is ready"); // Wait for incoming requests orb.run(); } catch(Exception e) { e.printStackTrace(); } } }
DSIインプリメンテーションは,デフォルトサーバントとして実体化されます。また,POAは該当するポリシーのサポートによって生成されなければなりません。詳細については,「7. POAの使用」を参照してください。