void IORInterceptor::establish_components ( PortableInterceptor::IORInfo_ptr info) { try { PortableInterceptor::ObjectReferenceTemplate_var t = info->adapter_template (); PortableInterceptor::AdapterName_var a = t->adapter_name (); // Only execute if POA is not RootPOA. The RootPOA will not // have our custom policy, but the child POA we created will. if (a->length () > 1) { CORBA::Policy_var policy ( info->get_effective_policy (Test::POLICY_TYPE)); Test::Policy_var test_policy (Test::Policy::_narrow ( policy.in ())); this->success_ = true; } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "EXCEPTION: ""IORInterceptor::establish_components:"); ACE_ASSERT (false); } }
void FOO_IORInterceptor::establish_components ( PortableInterceptor::IORInfo_ptr info) { // According to the Portable Interceptors specification, // IORInterceptor::establish_components() must not throw an // exception. We check for exceptions despite this fact. The ORB // does the right thing, and ignores any IOR interceptors that throw // an exception. CORBA::String_var name = this->name (); CORBA::Any data; data <<= name.in (); CORBA::OctetSeq_var encoded_data = this->codec_->encode_value (data); // Construct a tagged component. IOP::TaggedComponent component; component.tag = FOO::COMPONENT_ID; const CORBA::ULong maximum = encoded_data->maximum (); const CORBA::ULong length = encoded_data->length (); CORBA::Octet * buffer = encoded_data->get_buffer (); const CORBA::Boolean release = 0; // OctetSeq retains ownership. ACE_ASSERT (maximum > 1); // Sanity check. ACE_ASSERT (length > 1); // Sanity check. component.component_data.replace (maximum, length, buffer, release); ACE_ASSERT (component.component_data.length () == length); // Add the tagged component to all profiles. info->add_ior_component (component); ACE_DEBUG ((LM_DEBUG, "(%P|%t) Added tagged component containing the\n" "(%P|%t) string \"%C\" to all profiles.\n", name.in ())); // Add the tagged component to all IIOP profiles. info->add_ior_component_to_profile (component, IOP::TAG_INTERNET_IOP); ACE_DEBUG ((LM_DEBUG, "(%P|%t) Added tagged component containing the\n" "(%P|%t) string \"%C\" to all IIOP profiles.\n", name.in ())); try { // Verify that policy retrieval internals work, and do not cause // memory access violations. CORBA::Policy_var policy = info->get_effective_policy (PortableServer::LIFESPAN_POLICY_ID); ACE_DEBUG ((LM_DEBUG, "(%P|%t) Successfully retrieved effective policy.\n")); } catch (const CORBA::INV_POLICY& ex) { if (ex.minor () != (CORBA::OMGVMCID | 3)) throw; } }