summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryamuna <yamuna@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-06-27 16:11:45 +0000
committeryamuna <yamuna@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-06-27 16:11:45 +0000
commitb8cd5d26bf61354c729cd30305090378ce2f2874 (patch)
treeeb6a469073f96e4f52f772729415408fd6f4d3df
parent5dcec76118ddb4483658489226ea36fe0cef0d82 (diff)
downloadATCD-b8cd5d26bf61354c729cd30305090378ce2f2874.tar.gz
ChangelogTag: Thu Jun 26 22:34:10 2003 Yamuna Krishnamurthy <yamuna@oomworks.com>
-rw-r--r--TAO/tao/RTScheduling/RTScheduler_Initializer.cpp169
-rw-r--r--TAO/tao/RTScheduling/RTScheduler_Initializer.h68
2 files changed, 237 insertions, 0 deletions
diff --git a/TAO/tao/RTScheduling/RTScheduler_Initializer.cpp b/TAO/tao/RTScheduling/RTScheduler_Initializer.cpp
new file mode 100644
index 00000000000..6d0e7c87e9d
--- /dev/null
+++ b/TAO/tao/RTScheduling/RTScheduler_Initializer.cpp
@@ -0,0 +1,169 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "RTScheduler_Initializer.h"
+#include "Request_Interceptor.h"
+
+ACE_RCSID (TAO, RTScheduler_Initializer, "$Id$")
+
+//#define TAO_RTSCHEDULER_SAFE_INCLUDE
+#include "tao/RTScheduling/RTSchedulerC.h"
+#include "tao/RTScheduling/Current.h"
+#include "tao/RTScheduling/RTScheduler_Manager.h"
+//#undef TAO_RTSCHEDULER_SAFE_INCLUDE
+
+#include "tao/Exception.h"
+#include "tao/ORB_Core.h"
+#include "tao/ORBInitInfo.h"
+
+#include "ace/Service_Repository.h"
+#include "ace/Svc_Conf.h"
+
+
+
+
+void
+ TAO_RTScheduler_ORB_Initializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ //
+ // Register all of the RT related services.
+ //
+
+ // Create the RT_Current.
+ // @@ This is busted. TAO_ORBInitInfo should do proper reference
+ // counting.
+
+ // Narrow to a TAO_ORBInitInfo object to get access to the
+ // orb_core() TAO extension.
+
+
+
+ TAO_ORBInitInfo_var tao_info = TAO_ORBInitInfo::_narrow (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil (tao_info.in ()))
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) Security_ORBInitializer::pre_init:\n"
+ "(%P|%t) Unable to narrow "
+ "\"PortableInterceptor::ORBInitInfo_ptr\" to\n"
+ "(%P|%t) \"TAO_ORBInitInfo *.\"\n"));
+
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+
+ ACE_NEW_THROW_EX (this->current_,
+ TAO_RTScheduler_Current (tao_info->orb_core ()),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ CORBA::Object_ptr current_obj = RTScheduling::Current::_narrow (this->current_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Object_var safe_current = current_obj;
+
+ info->register_initial_reference ("RTScheduler_Current",
+ current_obj
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ Client_Interceptor *client_interceptor;
+ ACE_NEW_THROW_EX (client_interceptor,
+ Client_Interceptor,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ info->add_client_request_interceptor (client_interceptor
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ Server_Interceptor *server_interceptor;
+ ACE_NEW_THROW_EX (server_interceptor,
+ Server_Interceptor (this->current_),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ info->add_server_request_interceptor (server_interceptor
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Set the RTScheduler_Manager
+ TAO_RTScheduler_Manager *manager = 0;
+
+ ACE_NEW_THROW_EX (manager,
+ TAO_RTScheduler_Manager (tao_info->orb_core ()),
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+
+ TAO_RTScheduler_Manager_var safe_manager = manager;
+
+ info->register_initial_reference ("RTSchedulerManager",
+ manager
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+
+}
+
+void
+ TAO_RTScheduler_ORB_Initializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+ // @@ This is busted. TAO_ORBInitInfo should do proper reference
+ // counting.
+ // Narrow to a TAO_ORBInitInfo object to get access to the
+ // orb_core() TAO extension.
+ //TAO_ORBInitInfo_var tao_info = TAO_ORBInitInfo::_narrow (info
+// ACE_ENV_ARG_PARAMETER);
+ //ACE_CHECK;
+
+ printf ("In pre_init\n");
+
+ CORBA::Object_ptr rt_current_obj = info->resolve_initial_references ("RTCurrent"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+
+ RTCORBA::Current_var rt_current = RTCORBA::Current::_narrow (rt_current_obj
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil (rt_current.in ()))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) ::post_init \n"
+ "(%P|%t) Unable to narrow to RTCORBA::Current\n"));
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ this->current_->rt_current (rt_current.in ());
+}
+
diff --git a/TAO/tao/RTScheduling/RTScheduler_Initializer.h b/TAO/tao/RTScheduling/RTScheduler_Initializer.h
new file mode 100644
index 00000000000..9c864b91337
--- /dev/null
+++ b/TAO/tao/RTScheduling/RTScheduler_Initializer.h
@@ -0,0 +1,68 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file RTScheduler_Initializer.h
+ *
+ * $Id$
+ *
+ * @author Yamuna Krishnamurthy <yamuna@oomworks.com>
+ */
+//=============================================================================
+
+
+#ifndef TAO_RTSCHEDULER_INITIALIZER_H
+#define TAO_RTSCHEDULER_INITIALIZER_H
+
+#include "ace/pre.h"
+
+#include "tao/corbafwd.h"
+#include "rtscheduler_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PortableInterceptorC.h"
+#include "tao/LocalObject.h"
+
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#if (_MSC_VER >= 1200)
+#pragma warning(push)
+#endif /* _MSC_VER >= 1200 */
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+class TAO_RTScheduler_Current;
+
+/// RTCORBA ORB initializer.
+class TAO_RTScheduler_Export TAO_RTScheduler_ORB_Initializer :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+private:
+ TAO_RTScheduler_Current* current_;
+
+};
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include "ace/post.h"
+
+#endif /* TAO_RTSCHEDULER__INITIALIZER_H */