diff options
author | yamuna <yamuna@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-06-27 16:11:45 +0000 |
---|---|---|
committer | yamuna <yamuna@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-06-27 16:11:45 +0000 |
commit | b8cd5d26bf61354c729cd30305090378ce2f2874 (patch) | |
tree | eb6a469073f96e4f52f772729415408fd6f4d3df | |
parent | 5dcec76118ddb4483658489226ea36fe0cef0d82 (diff) | |
download | ATCD-b8cd5d26bf61354c729cd30305090378ce2f2874.tar.gz |
ChangelogTag: Thu Jun 26 22:34:10 2003 Yamuna Krishnamurthy <yamuna@oomworks.com>
-rw-r--r-- | TAO/tao/RTScheduling/RTScheduler_Initializer.cpp | 169 | ||||
-rw-r--r-- | TAO/tao/RTScheduling/RTScheduler_Initializer.h | 68 |
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 */ |