TAO_IORInterceptor_Adapter_Impl. More...
#include <IORInterceptor_Adapter_Impl.h>


Public Member Functions | |
| virtual | ~TAO_IORInterceptor_Adapter_Impl (void) |
| virtual void | add_interceptor (PortableInterceptor::IORInterceptor_ptr interceptor) |
| virtual void | add_interceptor (PortableInterceptor::IORInterceptor_ptr interceptor, const CORBA::PolicyList &policies) |
| virtual void | destroy_interceptors (void) |
| virtual void | establish_components (TAO_Root_POA *poa) |
| virtual void | components_established (PortableInterceptor::IORInfo_ptr info) |
| virtual void | adapter_state_changed (const TAO::ObjectReferenceTemplate_Array &array_obj_ref_template, PortableInterceptor::AdapterState state) |
| virtual void | adapter_manager_state_changed (const char *id, PortableInterceptor::AdapterState state) |
Private Attributes | |
| TAO::IORInterceptor_List | ior_interceptor_list_ |
| List of IOR interceptors maintained. | |
TAO_IORInterceptor_Adapter_Impl.
Class that adapts various functions involving the PortableInterceptor interfaces IORInfo and IORInterceptor. This is the derived class that contains the actual implementations.
Definition at line 50 of file IORInterceptor_Adapter_Impl.h.
| TAO_IORInterceptor_Adapter_Impl::~TAO_IORInterceptor_Adapter_Impl | ( | void | ) | [virtual] |
Definition at line 18 of file IORInterceptor_Adapter_Impl.cpp.
{
}
| void TAO_IORInterceptor_Adapter_Impl::adapter_manager_state_changed | ( | const char * | id, | |
| PortableInterceptor::AdapterState | state | |||
| ) | [virtual] |
Whenever the POAManager state is changed, the adapter_manager_state_changed method is to be invoked on all the IOR Interceptors.
Implements TAO_IORInterceptor_Adapter.
Definition at line 187 of file IORInterceptor_Adapter_Impl.cpp.
{
/// Whenever the POAManager state is changed, the
/// adapter_manager_state_changed method is to be invoked on all the IOR
/// Interceptors.
size_t const interceptor_count = this->ior_interceptor_list_.size ();
if (interceptor_count == 0)
return;
for (size_t i = 0; i < interceptor_count; ++i)
{
PortableInterceptor::IORInterceptor_ptr ior_interceptor =
this->ior_interceptor_list_.interceptor (i);
PortableInterceptor::IORInterceptor_3_0_var ior_3_interceptor =
PortableInterceptor::IORInterceptor_3_0::_narrow (ior_interceptor);
if (!CORBA::is_nil (ior_3_interceptor.in ()))
{
ior_3_interceptor->adapter_manager_state_changed (id, state);
}
}
}
| void TAO_IORInterceptor_Adapter_Impl::adapter_state_changed | ( | const TAO::ObjectReferenceTemplate_Array & | array_obj_ref_template, | |
| PortableInterceptor::AdapterState | state | |||
| ) | [virtual] |
Implements TAO_IORInterceptor_Adapter.
Definition at line 148 of file IORInterceptor_Adapter_Impl.cpp.
{
size_t const interceptor_count = this->ior_interceptor_list_.size ();
if (interceptor_count == 0)
return;
PortableInterceptor::ObjectReferenceTemplateSeq seq_obj_ref_template;
seq_obj_ref_template.length (
static_cast <CORBA::ULong> (array_obj_ref_template.size()));
for (size_t counter = 0; counter < array_obj_ref_template.size(); ++counter)
{
PortableInterceptor::ObjectReferenceTemplate *member =
array_obj_ref_template[counter];
CORBA::add_ref (member);
seq_obj_ref_template[counter] = member;
}
for (size_t i = 0; i < interceptor_count; ++i)
{
PortableInterceptor::IORInterceptor_ptr ior_interceptor =
this->ior_interceptor_list_.interceptor (i);
PortableInterceptor::IORInterceptor_3_0_var ior_3_interceptor =
PortableInterceptor::IORInterceptor_3_0::_narrow (ior_interceptor);
if (!CORBA::is_nil (ior_3_interceptor.in ()))
{
ior_3_interceptor->adapter_state_changed (seq_obj_ref_template, state);
}
}
}
| void TAO_IORInterceptor_Adapter_Impl::add_interceptor | ( | PortableInterceptor::IORInterceptor_ptr | interceptor, | |
| const CORBA::PolicyList & | policies | |||
| ) | [virtual] |
Implements TAO_IORInterceptor_Adapter.
Definition at line 30 of file IORInterceptor_Adapter_Impl.cpp.
{
this->ior_interceptor_list_.add_interceptor (i, policies);
}
| void TAO_IORInterceptor_Adapter_Impl::add_interceptor | ( | PortableInterceptor::IORInterceptor_ptr | interceptor | ) | [virtual] |
Implements TAO_IORInterceptor_Adapter.
Definition at line 23 of file IORInterceptor_Adapter_Impl.cpp.
{
this->ior_interceptor_list_.add_interceptor (i);
}
| void TAO_IORInterceptor_Adapter_Impl::components_established | ( | PortableInterceptor::IORInfo_ptr | info | ) | [virtual] |
Call the IORInterceptor::components_established() method on all registered IORInterceptors.
Implements TAO_IORInterceptor_Adapter.
Definition at line 114 of file IORInterceptor_Adapter_Impl.cpp.
{
// Iterate over the registered IOR interceptors so that they may be
// given the opportunity to add tagged components to the profiles
// for this servant.
size_t const interceptor_count = this->ior_interceptor_list_.size ();
// All the establish_components() interception points have been
// invoked. Now call the components_established() interception point
// on all the IORInterceptors.
for (size_t j = 0; j < interceptor_count; ++j)
{
try
{
PortableInterceptor::IORInterceptor_ptr ior_interceptor =
this->ior_interceptor_list_.interceptor (j);
PortableInterceptor::IORInterceptor_3_0_var ior_3_interceptor =
PortableInterceptor::IORInterceptor_3_0::_narrow (ior_interceptor);
if (!CORBA::is_nil (ior_3_interceptor.in ()))
{
ior_3_interceptor->components_established (info);
}
}
catch (const ::CORBA::Exception&)
{
throw ::CORBA::OBJ_ADAPTER (CORBA::OMGVMCID | 6,
CORBA::COMPLETED_NO);
}
}
}
| void TAO_IORInterceptor_Adapter_Impl::destroy_interceptors | ( | void | ) | [virtual] |
Implements TAO_IORInterceptor_Adapter.
Definition at line 38 of file IORInterceptor_Adapter_Impl.cpp.
{
this->ior_interceptor_list_.destroy_interceptors ();
delete this;
}
| void TAO_IORInterceptor_Adapter_Impl::establish_components | ( | TAO_Root_POA * | poa | ) | [virtual] |
Call the IORInterceptor::establish_components() method on all registered IORInterceptors. This method calls IORInterceptor::establish_components() method on all registered IORInterceptors, and IORInterceptor::components_established() once the former is completed.
Implements TAO_IORInterceptor_Adapter.
Definition at line 46 of file IORInterceptor_Adapter_Impl.cpp.
{
size_t const interceptor_count = this->ior_interceptor_list_.size ();
if (interceptor_count == 0)
return;
TAO_IORInfo *tao_info = 0;
ACE_NEW_THROW_EX (tao_info,
TAO_IORInfo (poa),
CORBA::NO_MEMORY (
CORBA::SystemException::_tao_minor_code (
TAO::VMCID,
ENOMEM),
CORBA::COMPLETED_NO));
PortableInterceptor::IORInfo_var info = tao_info;
// Release the POA during IORInterceptor calls to avoid potential
// deadlocks.
TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*poa);
ACE_UNUSED_ARG (non_servant_upcall);
for (size_t i = 0; i < interceptor_count; ++i)
{
try
{
this->ior_interceptor_list_.interceptor (i)->establish_components (
info.in ());
}
catch (const ::CORBA::Exception& ex)
{
// According to the Portable Interceptors specification,
// IORInterceptor::establish_components() must not throw an
// exception. If it does, then the ORB is supposed to
// ignore it and continue processing the remaining
// IORInterceptors.
if (TAO_debug_level > 1)
{
CORBA::String_var name =
this->ior_interceptor_list_.interceptor (i)->name ();
// @@ What do we do if we get an exception here?
if (name.in () != 0)
{
ACE_DEBUG ((LM_WARNING,
"(%P|%t) Exception thrown while processing "
"IORInterceptor \"%C\">\n",
name.in ()));
}
ex._tao_print_exception (
"Ignoring exception in "
"IORInterceptor::establish_components");
}
}
}
tao_info->components_established ();
this->components_established (info.in ());
// The IORInfo instance is no longer valid. Invalidate it to
// prevent the user from peforming "illegal" operations.
tao_info->invalidate ();
}
List of IOR interceptors maintained.
Definition at line 81 of file IORInterceptor_Adapter_Impl.h.
1.7.0