📄 identity.cpp
字号:
// Identity.cpp,v 1.9 2002/01/29 20:21:08 okellogg Exp
// ==================================================
// = LIBRARY
// TAO/test/POA/Identity
//
// = FILENAME
// Identity.cpp
//
// = DESCRIPTION
// This program demonstrates and tests how to move between id,
// reference, and servants.
//
// = AUTHOR
// Irfan Pyarali
// ==================================================
#include "testS.h"
#include "tao/ORB_Core.h"
#include "tao/Server_Strategy_Factory.h"
ACE_RCSID(Identity, Identity, "Identity.cpp,v 1.9 2002/01/29 20:21:08 okellogg Exp")
class test_i : public POA_test
{
public:
test_i (PortableServer::POA_ptr poa)
: poa_ (PortableServer::POA::_duplicate (poa))
{
}
PortableServer::POA_ptr _default_POA (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
{
return PortableServer::POA::_duplicate (this->poa_.in ());
}
protected:
PortableServer::POA_var poa_;
};
void
create_poas (PortableServer::POA_ptr root_poa,
PortableServer::LifespanPolicyValue lifespan_policy,
PortableServer::POA_out first_poa,
PortableServer::POA_out second_poa,
PortableServer::POA_out third_poa,
PortableServer::POA_out forth_poa
ACE_ENV_ARG_DECL)
{
// Policies for the new POAs
CORBA::PolicyList policies (3);
policies.length (3);
policies[0] = root_poa->create_lifespan_policy (lifespan_policy
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
policies[1] = root_poa->create_id_uniqueness_policy (PortableServer::MULTIPLE_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
policies[2] = root_poa->create_id_assignment_policy (PortableServer::SYSTEM_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Creation of the firstPOA
ACE_CString name = "firstPOA";
first_poa = root_poa->create_POA (name.c_str (),
PortableServer::POAManager::_nil (),
policies
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
policies[1]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
policies[1] = root_poa->create_id_uniqueness_policy (PortableServer::UNIQUE_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Creation of the secondPOA
name = "secondPOA";
second_poa = root_poa->create_POA (name.c_str (),
PortableServer::POAManager::_nil (),
policies
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
policies[2]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
policies[2] = root_poa->create_id_assignment_policy (PortableServer::USER_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Creation of the thirdPOA
name = "thirdPOA";
third_poa = root_poa->create_POA (name.c_str (),
PortableServer::POAManager::_nil (),
policies
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
policies[1]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
policies[1] = root_poa->create_id_uniqueness_policy (PortableServer::MULTIPLE_ID
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Creation of the forthPOA
name = "forthPOA";
forth_poa = root_poa->create_POA (name.c_str (),
PortableServer::POAManager::_nil (),
policies
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Creation of the new POAs over, so destroy the policies
for (CORBA::ULong i = 0;
i < policies.length ();
++i)
{
policies[i]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
}
void
test_poas (CORBA::ORB_ptr orb,
PortableServer::POA_ptr root_poa,
PortableServer::POA_ptr first_poa,
PortableServer::POA_ptr second_poa,
PortableServer::POA_ptr third_poa,
PortableServer::POA_ptr forth_poa,
int perform_deactivation_test
ACE_ENV_ARG_DECL)
{
{
test_i servant (root_poa);
CORBA::Object_var obj = root_poa->create_reference ("IDL:test:1.0"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::String_var string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
PortableServer::ObjectId_var id = root_poa->reference_to_id (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
root_poa->activate_object_with_id (id.in (),
&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
obj = root_poa->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
PortableServer::Servant servant_from_reference =
root_poa->reference_to_servant (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
PortableServer::Servant servant_from_id =
root_poa->id_to_servant (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (servant_from_reference != servant_from_id
|| servant_from_reference != &servant)
{
ACE_ERROR ((LM_ERROR,
"Mismatched servant_from_reference, "
"servant_from_id and &servant\n"));
}
obj = root_poa->servant_to_reference (&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
obj = servant._this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
PortableServer::ObjectId_var id_from_servant = root_poa->servant_to_id (&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_ASSERT (id_from_servant.in () == id.in ());
root_poa->deactivate_object (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (perform_deactivation_test)
{
root_poa->activate_object_with_id (id.in (),
&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
servant_from_reference = root_poa->reference_to_servant (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_ASSERT (servant_from_reference == &servant);
root_poa->deactivate_object (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
{
test_i servant (root_poa);
PortableServer::ObjectId_var id = root_poa->activate_object (&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::Object_var obj = root_poa->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::String_var string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
obj = root_poa->create_reference_with_id (id.in (),
"IDL:test:1.0"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
root_poa->deactivate_object (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
{
test_i servant (first_poa);
CORBA::Object_var obj = first_poa->create_reference ("IDL:test:1.0"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::String_var string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
PortableServer::ObjectId_var id = first_poa->reference_to_id (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
first_poa->activate_object_with_id (id.in (),
&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
obj = first_poa->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
PortableServer::Servant servant_from_reference =
first_poa->reference_to_servant (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
PortableServer::Servant servant_from_id =
first_poa->id_to_servant (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (servant_from_reference != servant_from_id
|| servant_from_reference != &servant)
{
ACE_ERROR ((LM_ERROR,
"Mismatched servant_from_reference, "
"servant_from_id and &servant\n"));
}
first_poa->deactivate_object (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (perform_deactivation_test)
{
first_poa->activate_object_with_id (id.in (),
&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
servant_from_reference = first_poa->reference_to_servant (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_ASSERT (servant_from_reference == &servant);
first_poa->deactivate_object (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
{
test_i servant (first_poa);
PortableServer::ObjectId_var id = first_poa->activate_object (&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::Object_var obj = first_poa->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::String_var string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
obj = first_poa->create_reference_with_id (id.in (),
"IDL:test:1.0"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
first_poa->deactivate_object (id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
{
test_i servant (second_poa);
CORBA::Object_var obj = second_poa->create_reference ("IDL:test:1.0"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::String_var string = orb->object_to_string (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));
PortableServer::ObjectId_var id = second_poa->reference_to_id (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
second_poa->activate_object_with_id (id.in (),
&servant
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
obj = second_poa->id_to_reference (id.in ()
ACE_ENV_ARG_PARAMETER);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -