From 778de22bf9f8a5744287894127c664b93c499a4e Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 18 Aug 2004 10:14:55 +0000 Subject: ChangeLogTag: Wed Aug 18 10:14:12 UTC 2004 Johnny Willemsen --- .../ObjRefTemplate/ObjectReferenceTemplate_i.cpp | 80 +++++++++++++ TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.h | 128 +++++++++++++++++++++ .../ObjRefTemplate/ObjectReferenceTemplate_i.inl | 9 ++ 3 files changed, 217 insertions(+) create mode 100644 TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.cpp create mode 100644 TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.h create mode 100644 TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.inl diff --git a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.cpp b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.cpp new file mode 100644 index 00000000000..87a389315f9 --- /dev/null +++ b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.cpp @@ -0,0 +1,80 @@ +#include "ObjectReferenceTemplate_i.h" +#include "tao/PortableServer/POA.h" + +#include "tao/CORBA_String.h" +#include "tao/ORB_Constants.h" + + +ACE_RCSID (ORT, + ObjectReferenceTemplate_i, + "$Id$") + + +#if !defined (__ACE_INLINE__) +# include "ObjectReferenceTemplate_i.inl" +#endif /* ! __ACE_INLINE__ */ + + +TAO_ObjectReferenceTemplate::TAO_ObjectReferenceTemplate ( + const char *server_id, + const char *orb_id, + PortableInterceptor::AdapterName *adapter_name, + TAO_POA * poa) + : server_id_ (server_id), + orb_id_ (orb_id), + adapter_name_ (adapter_name), + poa_ (poa) +{ +} + +TAO_ObjectReferenceTemplate::~TAO_ObjectReferenceTemplate (void) +{ +} + +char * +TAO_ObjectReferenceTemplate::server_id (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return CORBA::string_dup (this->server_id_); +} + +char * +TAO_ObjectReferenceTemplate::orb_id (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return CORBA::string_dup (this->orb_id_); +} + +PortableInterceptor::AdapterName * +TAO_ObjectReferenceTemplate::adapter_name (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableInterceptor::AdapterName *adapter_name = 0; + + ACE_NEW_THROW_EX (adapter_name, + PortableInterceptor::AdapterName ( + *(this->adapter_name_)), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK_RETURN (0); + + return adapter_name; +} + +CORBA::Object_ptr +TAO_ObjectReferenceTemplate::make_object ( + const char *, + const PortableInterceptor::ObjectId & + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC (( + CORBA::SystemException + )) +{ + if (this->poa_ == 0) + ACE_THROW_RETURN (CORBA::BAD_INV_ORDER (), CORBA::Object::_nil ()); + + return this->poa_->invoke_key_to_object (ACE_ENV_SINGLE_ARG_PARAMETER); +} diff --git a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.h b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.h new file mode 100644 index 00000000000..91c0f3d8864 --- /dev/null +++ b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.h @@ -0,0 +1,128 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file ObjectReferenceTemplate_i.h + * + * $Id$ + * + * This is the implementation of the + * PortableInterceptor::ObjectReferenceTemplate ValueType. + * + * @author Johnny Willemsen + */ +//============================================================================= + +#ifndef TAO_OBJECT_REFERENCE_TEMPLATE_I_H +#define TAO_OBJECT_REFERENCE_TEMPLATE_I_H + +#include /**/ "ace/pre.h" + +#include "tao/ObjRefTemplate/ort_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "Default_ORTC.h" + +#if defined(_MSC_VER) +#if (_MSC_VER >= 1200) +#pragma warning(push) +#endif /* _MSC_VER >= 1200 */ +#pragma warning(disable:4250) +#endif /* _MSC_VER */ + +class TAO_POA; + +/** + * @class TAO_ObjectReferenceTemplate + * + * @brief Implementation of the PortableInterceptor::ObjectReferenceTemplate + * interface. + */ +class TAO_ORT_Export TAO_ObjectReferenceTemplate + : public virtual OBV_TAO_Default_ORT::ObjectReferenceTemplate, + public virtual CORBA::DefaultValueRefCountBase +{ +public: + + /// Constructor + TAO_ObjectReferenceTemplate (const char *server_id, + const char *orb_id, + PortableInterceptor::AdapterName *adapter_name, + TAO_POA *poa); + + /** + * @name PortableInterceptor::ObjectReferenceTemplate Methods + * + * Methods required by the + * PortableInterceptor::ObjectReferenceTemplate ValueType. + */ + //@{ + virtual char * server_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual char * orb_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual PortableInterceptor::AdapterName * adapter_name ( + ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + //@} + + /** + * @name PortableInterceptor::ObjectReferenceFactory Methods + * + * Methods required by the + * PortableInterceptor::ObjectReferenceFactory ValueType. + */ + //@{ + virtual CORBA::Object_ptr make_object ( + const char * repository_id, + const PortableInterceptor::ObjectId & id + ACE_ENV_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC (( + CORBA::SystemException + )); + //@} + + /// Set the underlying POA pointer. + /** + * Upon destruction of the POA that this ObjectReferenceTemplate is + * associated with, the underlying POA pointer will be set to zero + * to forcibly break all ties with the POA. This is necessary to + * prevent this ObjectReferenceTemplate from invoking the POA after + * it has been destroyed. + */ + void poa (TAO_POA * poa); + +protected: + + /// Destructor + /** + * Protected destructor to enforce proper memory management via + * reference counting. + */ + ~TAO_ObjectReferenceTemplate (void); + +private: + + const char *server_id_; + const char *orb_id_; + PortableInterceptor::AdapterName_var adapter_name_; + TAO_POA *poa_; + +}; + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma warning(pop) +#endif /* _MSC_VER */ + +#if defined (__ACE_INLINE__) +# include "ObjectReferenceTemplate_i.inl" +#endif /* ! __ACE_INLINE__ */ + +#include /**/ "ace/post.h" + +#endif /* TAO_OBJECT_REFERENCE_TEMPLATE_I_H */ diff --git a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.inl b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.inl new file mode 100644 index 00000000000..14de581cafc --- /dev/null +++ b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_i.inl @@ -0,0 +1,9 @@ +// -*- C++ -*- +// +// $Id$ + +ACE_INLINE void +TAO_ObjectReferenceTemplate::poa (TAO_POA * poa) +{ + this->poa_ = poa; +} -- cgit v1.2.1