summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp185
1 files changed, 185 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp
new file mode 100644
index 00000000000..59415c1d927
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp
@@ -0,0 +1,185 @@
+#include "LB_IORInterceptor.h"
+#include "LB_ObjectReferenceFactory.h"
+#include "LB_LoadAlert.h"
+
+#include "tao/debug.h"
+
+
+ACE_RCSID (LoadBalancing,
+ LB_IORInterceptor,
+ "$Id$")
+
+
+TAO_LB_IORInterceptor::TAO_LB_IORInterceptor (
+ const CORBA::StringSeq & object_groups,
+ const CORBA::StringSeq & repository_ids,
+ const char * location,
+ CosLoadBalancing::LoadManager_ptr lm,
+ const char * orb_id,
+ TAO_LB_LoadAlert & /* load_alert */)
+ : object_groups_ (object_groups),
+ repository_ids_ (repository_ids),
+ location_ (location),
+ lm_ (CosLoadBalancing::LoadManager::_duplicate (lm)),
+ orb_id_ (CORBA::string_dup (orb_id))
+// , load_alert_ (load_alert)
+// , la_ref_ ()
+// , lock_ ()
+{
+}
+
+char *
+TAO_LB_IORInterceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup ("TAO_LB_IORInterceptor");
+}
+
+void
+TAO_LB_IORInterceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Force the LoadManager reference to be released since the ORB's
+ // lifetime is tied to object reference lifetimes.
+ (void) this->lm_.out ();
+}
+
+void
+TAO_LB_IORInterceptor::establish_components (
+ PortableInterceptor::IORInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC (())
+{
+}
+
+void
+TAO_LB_IORInterceptor::components_established (
+ PortableInterceptor::IORInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ int argc = 0;
+ CORBA::ORB_var orb = CORBA::ORB_init (argc,
+ 0,
+ this->orb_id_.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Save a copy of the current ObjectReferenceFactory.
+ PortableInterceptor::ObjectReferenceFactory_var old_orf =
+ info->current_factory (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ PortableInterceptor::ObjectReferenceFactory * tmp;
+ ACE_NEW_THROW_EX (tmp,
+ TAO_LB_ObjectReferenceFactory (old_orf.in (),
+ this->object_groups_,
+ this->repository_ids_,
+ this->location_.in (),
+ orb.in (),
+ this->lm_.in ()),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ PortableInterceptor::ObjectReferenceFactory_var orf = tmp;
+
+ info->current_factory (orf.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+TAO_LB_IORInterceptor::adapter_manager_state_changed (
+ PortableInterceptor::AdapterManagerId,
+ PortableInterceptor::AdapterState /* state */
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+// if (state == PortableInterceptor::ACTIVE)
+// {
+// this->register_load_alert (ACE_ENV_SINGLE_ARG_PARAMETER);
+// ACE_CHECK;
+// }
+}
+
+void
+TAO_LB_IORInterceptor::adapter_state_changed (
+ const PortableInterceptor::ObjectReferenceTemplateSeq &,
+ PortableInterceptor::AdapterState /* state */
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+// if (state == PortableInterceptor::ACTIVE)
+// {
+// this->register_load_alert (ACE_ENV_SINGLE_ARG_PARAMETER);
+// ACE_CHECK;
+// }
+}
+
+void
+TAO_LB_IORInterceptor::register_load_alert (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+{
+// {
+// ACE_GUARD (TAO_SYNCH_MUTEX, guard, this->lock_);
+
+// if (!CORBA::is_nil (this->la_ref_.in ()))
+// return;
+// }
+
+// ACE_TRY_EX (foo)
+// {
+// // By now, the RootPOA has been fully initialized, so it is safe
+// // to activate the LoadAlert object.
+// CosLoadBalancing::LoadAlert_var la =
+// this->load_alert_._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+// ACE_TRY_CHECK_EX (foo);
+
+// {
+// ACE_GUARD (TAO_SYNCH_MUTEX, guard, this->lock_);
+
+// this->la_ref_ = la;
+// }
+
+// }
+// ACE_CATCHANY
+// {
+// ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+// "LoadAlert::_this()");
+// }
+// ACE_ENDTRY;
+// ACE_CHECK;
+
+// ACE_TRY
+// {
+// PortableGroup::Location location (1);
+// location.length (1);
+// location[0].id = CORBA::string_dup (this->location_.in ());
+
+// this->lm_->register_load_alert (location,
+// this->la_ref_.in ()
+// ACE_ENV_ARG_PARAMETER);
+// ACE_TRY_CHECK;
+// }
+// ACE_CATCH (CosLoadBalancing::LoadAlertAlreadyPresent, ex)
+// {
+// if (TAO_debug_level > 0)
+// ACE_PRINT_EXCEPTION (ex,
+// "LoadManager::register_load_alert");
+
+// ACE_TRY_THROW (CORBA::BAD_INV_ORDER ());
+// }
+// ACE_CATCH (CosLoadBalancing::LoadAlertNotAdded, ex)
+// {
+// if (TAO_debug_level > 0)
+// ACE_PRINT_EXCEPTION (ex,
+// "LoadManager::register_load_alert");
+
+// ACE_TRY_THROW (CORBA::INTERNAL ());
+// }
+// ACE_ENDTRY;
+// ACE_CHECK;
+}