幾つかのサーバエンジンプロパティの変更が必要な場合はよくあります。これらのプロパティを変更する方法は必要事項によって異なります。例えば,ポート番号を変更したい場合は,次のようにします。
デフォルトのlistener.portプロパティを変更することは最も単純な方法ですが,デフォルトのサーバエンジンを使用するすべてのPOAに影響を与えます。
特定のPOAのポート番号を変更したい場合は,新しいサーバエンジンを生成し,この新サーバエンジンのプロパティを定義し,さらにPOAの生成時に新サーバエンジンを参照する必要があります。「7.7.1 サーバエンジンプロパティの設定」ではサーバエンジンプロパティの更新方法を説明しました。次に示すコードの一部では,サーバエンジンのプロパティの定義方法とユーザ定義のサーバエンジンポリシーによるPOAの生成方法を示しています。
// static initialization
AccountRegistry AccountManagerImpl::_accounts;
int main(int argc, char* const* argv)
{
try {
// Initialize the orb
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
// Get the property manager; notice the value returned
// is not placed into a 'var' type.
VISPropertyManager_ptr pm = orb->getPropertyManager();
pm->addProperty("vbroker.se.mySe.host", "");
pm->addProperty("vbroker.se.mySe.proxyHost", "");
pm->addProperty("vbroker.se.mySe.scms", "scmlist");
pm->addProperty("vbroker.se.mySe.scm.scmlist.manager
.type", "Socket");
pm->addProperty("vbroker.se.mySe.scm.scmlist.manager
.connectionMax", 100UL);
pm->addProperty("vbroker.se.mySe.scm.scmlist.manager
.connectionMaxIdle", 300UL);
pm->addProperty("vbroker.se.mySe.scm.scmlist.listener
.type", "IIOP");
pm->addProperty("vbroker.se.mySe.scm.scmlist.listener
.port", 55000UL);
pm->addProperty("vbroker.se.mySe.scm.scmlist.listener
.proxyPort", 0UL);
pm->addProperty("vbroker.se.mySe.scm.scmlist.dispatcher
.type", "ThreadPool");
pm->addProperty("vbroker.se.mySe.scm.scmlist.dispatcher
.threadMax", 100UL);
pm->addProperty("vbroker.se.mySe.scm.scmlist.dispatcher
.threadMin", 5UL);
pm->addProperty("vbroker.se.mySe.scm.scmlist.dispatcher
.threadMaxIdle", 300UL);
// Get a reference to the rootPOA
CORBA::Object_var obj =
orb->resolve_initial_references("RootPOA");
PortableServer::POA_var rootPOA =
PortableServer::POA::_narrow(obj);
// Create the policies
CORBA::Any_var seAny(new CORBA::Any);
// The SERVER_ENGINE_POLICY_TYPE requires a sequence,
// even if only one engine is being specified.
CORBA::StringSequence_var engines =
new CORBA::StringSequence(1UL);
engines->length(1UL);
engines[0UL] = CORBA::string_dup("mySe");
seAny <<= engines;
CORBA::PolicyList_var policies = new CORBA::PolicyList(2UL);
policies->length(2UL);
policies[0UL] = orb->create_policy(
PortableServerExt::SERVER_ENGINE_POLICY_TYPE, seAny);
policies[1Ul] = rootPOA->create_lifespan_policy
(PortableServer::PERSISTENT);
// Create our POA with our policies
PortableServer::POAManager_var manager =
rootPOA->the_POAManager();
PortableServer::POA_var myPOA = rootPOA->create_POA(
"bank_se_policy_poa", manager, policies);
// Create the servant
AccountManagerImpl* managerServant =
new AccountManagerImpl();
// Activate the servant
PortableServer::ObjectId_var oid =
PortableServer::string_to_ObjectId("BankManager");
myPOA->activate_object_with_id(oid ,managerServant);
// Obtain the reference
CORBA::Object_var ref =
myPOA->servant_to_reference(managerServant);
CORBA::String_var string_ref =
orb->object_to_string(ref.in());
ofstream refFile("ref.dat");
refFile << string_ref << endl;
refFile.close();
// Activate the POA manager
manager->activate();
// Wait for Incoming Requests
cout << "AccountManager Server ready" << endl;
orb->run();
}
catch(const CORBA::Exception& e) {
cerr << e << endl;
return (1);
}
return (0);
}
// Server.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 property manager
com.inprise.vbroker.properties.PropertyManager pm =
((com.inprise.vbroker.orb.ORB)orb).
getPropertyManager();
pm.addProperty("vbroker.se.mySe.host", "");
pm.addProperty("vbroker.se.mySe.proxyHost", "");
pm.addProperty("vbroker.se.mySe.scms", "scmlist");
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.manager.type",
"Socket");
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.manager.connectionMax",
100);
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.
manager.connectionMaxIdle", 300);
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.listener.giopVersion", "1.2");
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.listener.type", "IIOP");
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.listener.port", 55000);
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.listener.proxyPort", 0);
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.dispatcher.type",
"ThreadPool");
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.dispatcher.threadMax",
100);
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.dispatcher.threadMin",
5);
pm.addProperty(
"vbroker.se.mySe.scm.scmlist.
dispatcher.threadMaxIdle",300);
// get a reference to the rootPOA
POA rootPOA = POAHelper.narrow(
orb.resolve_initial_references("RootPOA"));
// Create our server engine policy
org.omg.CORBA.Any seAny = orb.create_any();
org.omg.CORBA.StringSequenceHelper.insert(
seAny, new String[ ]{"mySe"});
org.omg.CORBA.Policy sePolicy =
orb.create_policy(
com.inprise.vbroker.PortableServerExt.
SERVER_ENGINE_POLICY_TYPE.value, seAny);
// Create policies for our persistent POA
org.omg.CORBA.Policy[ ] policies = {
rootPOA.create_lifespan_policy(
LifespanPolicyValue.PERSISTENT),sePolicy
};
// Create myPOA with the right policies
POA myPOA = rootPOA.create_POA("bank_se_policy_poa",
rootPOA.the_POAManager(),
policies );
// Create the servant
AccountManagerImpl managerServant =
new AccountManagerImpl();
// Activate the servant
myPOA.activate_object_with_id(
"BankManager".getBytes(), managerServant);
// Obtaining the reference
org.omg.CORBA.Object ref = myPOA.servant_to_reference(
managerServant);
// Now write out the IOR
try {
java.io.PrintWriter pw =
new java.io.PrintWriter(
new java.io.FileWriter("ior.dat"));
pw.println(orb.object_to_string(ref));
pw.close();
} catch (java.io.IOException e ) {
System.out.println(
"Error writing the IOR to file ior.dat");
return;
}
// Activate the POA manager
rootPOA.the_POAManager().activate();
System.out.println(ref + "is ready.");
// Wait for incoming requests
orb.run();
} catch (Exception e){
e.printStackTrace();
}
}
}