#include <ImR_Client.h>

Public Member Functions | |
| ImR_Client_Adapter_Impl (void) | |
| Constructor. | |
| virtual void | imr_notify_startup (TAO_Root_POA *poa) |
| ImplRepo helper method, notify the ImplRepo on startup. | |
| virtual void | imr_notify_shutdown (TAO_Root_POA *poa) |
| ImplRepo helper method, notify the ImplRepo on shutdown. | |
Static Public Member Functions | |
| static int | Initializer (void) |
| Used to force the initialization of the PortableServer code. | |
Private Attributes | |
| ServerObject_i * | server_object_ |
| Implementation Repository Server Object. | |
Definition at line 46 of file ImR_Client.h.
Constructor.
Definition at line 13 of file ImR_Client.cpp.
: ImR_Client.cpp 85171 2009-04-25 06:33:24Z dai_y $")
| void TAO::ImR_Client::ImR_Client_Adapter_Impl::imr_notify_shutdown | ( | TAO_Root_POA * | poa | ) | [virtual] |
ImplRepo helper method, notify the ImplRepo on shutdown.
Definition at line 145 of file ImR_Client.cpp.
{
throw ::CORBA::TRANSIENT (
CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0),
CORBA::COMPLETED_NO);
}
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG, "Successfully notified ImR of Startup\n"));
}
void
ImR_Client_Adapter_Impl::imr_notify_shutdown (TAO_Root_POA* poa )
{
// Notify the Implementation Repository about shutting down.
CORBA::Object_var imr = poa->orb_core ().implrepo_service ();
// Check to see if there was an imr returned.
// If none, return ourselves.
if (CORBA::is_nil (imr.in ()))
return;
try
{
if (TAO_debug_level > 0)
{
CORBA::String_var poaname = poa->the_name ();
ACE_DEBUG ((LM_DEBUG,
"Notifying IMR of Shutdown server:%s\n",
poaname.in ()));
}
// ATTENTION: Trick locking here, see class header for details
TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*poa);
ACE_UNUSED_ARG (non_servant_upcall);
// Get the IMR's administrative object and call shutting_down on it
ImplementationRepository::Administration_var imr_locator =
ImplementationRepository::Administration::_narrow (imr.in ());
imr_locator->server_is_shutting_down (poa->name().c_str ());
}
catch (const ::CORBA::COMM_FAILURE&)
{
// At the moment we call this during ORB shutdown and the ORB is
// configured to drop replies during shutdown (it does by default in
// the LF model) we get a COMM_FAILURE exception which we ignore
if (TAO_debug_level > 0)
ACE_DEBUG((LM_DEBUG, "Ignoring COMM_FAILURE while unregistering from ImR.\n"));
}
catch (const ::CORBA::TRANSIENT&)
{
// Similarly, there are cases where we could get a TRANSIENT.
if (TAO_debug_level > 0)
ACE_DEBUG((LM_DEBUG, "Ignoring TRANSIENT while unregistering from ImR.\n"));
}
catch (const ::CORBA::Exception& ex)
{
ex._tao_print_exception (
"ImR_Client_Adapter_Impl::imr_notify_shutdown()");
// Ignore exceptions
}
if (this->server_object_)
{
PortableServer::POA_var poa = this->server_object_->_default_POA ();
TAO_Root_POA *root_poa = dynamic_cast <TAO_Root_POA*> (poa.in ());
if (!root_poa)
{
| void TAO::ImR_Client::ImR_Client_Adapter_Impl::imr_notify_startup | ( | TAO_Root_POA * | poa | ) | [virtual] |
ImplRepo helper method, notify the ImplRepo on startup.
Definition at line 19 of file ImR_Client.cpp.
{
namespace ImR_Client
{
ImR_Client_Adapter_Impl::ImR_Client_Adapter_Impl (void)
: server_object_ (0)
{
}
void
ImR_Client_Adapter_Impl::imr_notify_startup (TAO_Root_POA* poa )
{
CORBA::Object_var imr = poa->orb_core ().implrepo_service ();
if (CORBA::is_nil (imr.in ()))
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("(%P|%t) ERROR: No usable IMR initial reference ")
ACE_TEXT ("available but use IMR has been specified.\n")));
throw ::CORBA::TRANSIENT (
CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0),
CORBA::COMPLETED_NO);
}
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG, "Notifying ImR of startup\n"));
ImplementationRepository::Administration_var imr_locator;
{
// ATTENTION: Trick locking here, see class header for details
TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*poa);
ACE_UNUSED_ARG (non_servant_upcall);
imr_locator =
ImplementationRepository::Administration::_narrow (imr.in ());
}
if (CORBA::is_nil(imr_locator.in ()))
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("(%P|%t) ERROR: Narrowed IMR initial reference ")
ACE_TEXT ("is nil but use IMR has been specified.\n")));
throw ::CORBA::TRANSIENT (
CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0),
CORBA::COMPLETED_NO);
}
TAO_Root_POA *root_poa = poa->object_adapter ().root_poa ();
ACE_NEW_THROW_EX (this->server_object_,
ServerObject_i (poa->orb_core ().orb (),
root_poa),
CORBA::NO_MEMORY ());
PortableServer::ServantBase_var safe_servant (this->server_object_);
ACE_UNUSED_ARG (safe_servant);
// Since this method is called from the POA constructor, there
// shouldn't be any waiting required. Therefore,
// <wait_occurred_restart_call_ignored> can be ignored.
bool wait_occurred_restart_call_ignored = false;
// Activate the servant in the root poa.
PortableServer::ObjectId_var id =
root_poa->activate_object_i (this->server_object_,
poa->server_priority (),
wait_occurred_restart_call_ignored);
CORBA::Object_var obj = root_poa->id_to_reference_i (id.in (), false);
ImplementationRepository::ServerObject_var svr
= ImplementationRepository::ServerObject::_narrow (obj.in ());
if (!svr->_stubobj () || !svr->_stubobj ()->profile_in_use ())
{
ACE_ERROR ((LM_ERROR, "Invalid ImR ServerObject, bailing out.\n"));
return;
}
CORBA::String_var ior =
svr->_stubobj ()->profile_in_use ()->to_string ();
// Search for "corbaloc:" alone, without the protocol. This code
// should be protocol neutral.
const char corbaloc[] = "corbaloc:";
char *pos = ACE_OS::strstr (ior.inout (), corbaloc);
pos = ACE_OS::strchr (pos + sizeof (corbaloc), ':');
pos = ACE_OS::strchr (pos + 1,
svr->_stubobj ()->profile_in_use ()->object_key_delimiter ());
ACE_CString partial_ior(ior.in (), (pos - ior.in()) + 1);
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"Informing IMR that we are running at: %C\n",
partial_ior.c_str()));
try
{
// ATTENTION: Trick locking here, see class header for details
TAO::Portable_Server::Non_Servant_Upcall non_servant_upcall (*poa);
ACE_UNUSED_ARG (non_servant_upcall);
ACE_CString serverId = poa->orb_core ().server_id ();
ACE_CString name;
if (serverId.empty ())
{
name = poa->name();
}
else
{
name = serverId + ":" + poa->name();
}
imr_locator->server_is_running (name.c_str (),
partial_ior.c_str(),
svr.in());
}
catch (const ::CORBA::SystemException&)
{
throw;
| int TAO::ImR_Client::ImR_Client_Adapter_Impl::Initializer | ( | void | ) | [static] |
Used to force the initialization of the PortableServer code.
Definition at line 221 of file ImR_Client.cpp.
ServerObject_i* TAO::ImR_Client::ImR_Client_Adapter_Impl::server_object_ [private] |
Implementation Repository Server Object.
Definition at line 64 of file ImR_Client.h.
1.7.0