POAは,その親POAのcreate_POAを使用して生成されます。POAには任意の名前を付けられます。ただし,同じ親を持つPOA同士の名前はすべて一意でなければなりません。二つのPOAに同じ名前を付けようとすると,CORBA例外(AdapterAlreadyExists)が発生します。
新しいPOAを生成するには,次のようにcreate_POAを使用してください。
POA create_POA(POA_Name, POAManager, PolicyList);
POAマネージャはPOAの状態(リクエストを処理するかどうかなど)を制御します。POAマネージャ名としてnullがcreate_POAに渡されると,新しいPOAマネージャオブジェクトが生成されてPOAに対応づけられます。通常は,すべてのPOAに対して同じPOAマネージャを持ちたいでしょう。POAマネージャの詳細については,「7.6 POAマネージャによるPOA管理」を参照してください。
POAマネージャ(およびPOA)は,生成後に自動的に活性化されるわけではありません。使用しているPOAに対応するPOAマネージャを活性化するには,activate()メソッドを使用してください。
CORBA::PolicyList policies;
policies.length(1);
policies[(CORBA::ULong)0] = rootPOA->create_lifespan_policy
(PortableServer::PERSISTENT);
// Create myPOA with the right policies
PortableServer::POAManager_var rootManager =
rootPOA->the_POAManager();
PortableServer::POA_var myPOA =
rootPOA->create_POA("bank_agent_poa",
rootManager, policies);
// Create policies for our persistent POA
org.omg.CORBA.Policy[ ] policies = {
rootPOA.create_lifespan_policy(
LifespanPolicyValue.PERSISTENT)};
// Create myPOA with the right policies
org.omg.PortableServer.POA myPOA =
rootPOA.create_POA( "bank_agent_poa",
rootPOA.the_POAManager(),
policies );