mainルーチンのインプリメンテーションは,コードサンプル18-11および18-12に示すように,「4. Borland Enterprise Server VisiBrokerによるサンプルアプリケーションの開発」で示したサンプルとほぼ同じものです。
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;
}
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の使用」を参照してください。