00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 #include "tao/PortableServer/ServantRetentionStrategyNonRetain.h"
00013 #include "tao/PortableServer/Non_Servant_Upcall.h"
00014 #include "tao/PortableServer/Servant_Upcall.h"
00015 #include "tao/PortableServer/POA_Current_Impl.h"
00016 #include "tao/PortableServer/Root_POA.h"
00017 #include "tao/PortableServer/Servant_Base.h"
00018 #include "tao/debug.h"
00019 
00020 ACE_RCSID (PortableServer,
00021            Servant_Retention_Strategy,
00022            "ServantRetentionStrategyNonRetain.cpp,v 1.12 2006/06/20 07:21:21 jwillemsen Exp")
00023 
00024 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00025 
00026 namespace TAO
00027 {
00028   namespace Portable_Server
00029   {
00030     ServantRetentionStrategyNonRetain::ServantRetentionStrategyNonRetain (void) :
00031       poa_ (0)
00032     {
00033     }
00034 
00035     void
00036     ServantRetentionStrategyNonRetain::strategy_init (
00037       TAO_Root_POA *poa
00038       ACE_ENV_ARG_DECL_NOT_USED)
00039     {
00040       poa_ = poa;
00041     }
00042 
00043     void
00044     ServantRetentionStrategyNonRetain::strategy_cleanup (
00045       ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
00046     {
00047       poa_ = 0;
00048     }
00049 
00050     void
00051     ServantRetentionStrategyNonRetain::deactivate_object (
00052       const PortableServer::ObjectId &
00053       ACE_ENV_ARG_DECL)
00054     {
00055       
00056       
00057       ACE_THROW (PortableServer::POA::WrongPolicy ());
00058     }
00059 
00060     PortableServer::Servant
00061     ServantRetentionStrategyNonRetain::find_servant (
00062       const PortableServer::ObjectId &
00063       ACE_ENV_ARG_DECL)
00064     {
00065       ACE_THROW_RETURN (PortableServer::POA::WrongPolicy (),
00066                         0);
00067     }
00068 
00069     PortableServer::ObjectId *
00070     ServantRetentionStrategyNonRetain::system_id_to_object_id (
00071       const PortableServer::ObjectId &system_id
00072       ACE_ENV_ARG_DECL)
00073         ACE_THROW_SPEC ((CORBA::SystemException,
00074                          PortableServer::POA::WrongAdapter,
00075                          PortableServer::POA::WrongPolicy))
00076     {
00077       
00078       
00079       PortableServer::ObjectId *id = 0;
00080       ACE_NEW_THROW_EX (id,
00081                         PortableServer::ObjectId (system_id),
00082                         CORBA::NO_MEMORY ());
00083       ACE_CHECK_RETURN (0);
00084 
00085       return id;
00086     }
00087 
00088     PortableServer::Servant
00089     ServantRetentionStrategyNonRetain::user_id_to_servant (
00090       const PortableServer::ObjectId &
00091       ACE_ENV_ARG_DECL)
00092         ACE_THROW_SPEC ((CORBA::SystemException,
00093                          PortableServer::POA::ObjectNotActive,
00094                          PortableServer::POA::WrongPolicy))
00095     {
00096       ACE_THROW_RETURN (PortableServer::POA::WrongPolicy (),
00097                         0);
00098     }
00099 
00100     CORBA::Object_ptr
00101     ServantRetentionStrategyNonRetain::id_to_reference (
00102       const PortableServer::ObjectId &,
00103       bool 
00104       ACE_ENV_ARG_DECL)
00105         ACE_THROW_SPEC ((CORBA::SystemException,
00106                          PortableServer::POA::ObjectNotActive,
00107                          PortableServer::POA::WrongPolicy))
00108     {
00109       ACE_THROW_RETURN (PortableServer::POA::WrongPolicy (),
00110                         CORBA::Object::_nil ());
00111     }
00112 
00113     TAO_SERVANT_LOCATION
00114     ServantRetentionStrategyNonRetain::servant_present (
00115       const PortableServer::ObjectId &,
00116       PortableServer::Servant &
00117       ACE_ENV_ARG_DECL_NOT_USED)
00118     {
00119       return TAO_SERVANT_NOT_FOUND;
00120     }
00121 
00122     PortableServer::Servant
00123     ServantRetentionStrategyNonRetain::find_servant (
00124       const PortableServer::ObjectId &system_id,
00125       TAO::Portable_Server::Servant_Upcall &servant_upcall,
00126       TAO::Portable_Server::POA_Current_Impl &poa_current_impl
00127       ACE_ENV_ARG_DECL_NOT_USED)
00128     {
00129       
00130 
00131       
00132       
00133       poa_current_impl.replace_object_id (system_id);
00134 
00135       servant_upcall.user_id (&system_id);
00136 
00137       return 0;
00138     }
00139 
00140     int
00141     ServantRetentionStrategyNonRetain::find_servant_priority (
00142         const PortableServer::ObjectId &,
00143         CORBA::Short &
00144         ACE_ENV_ARG_DECL)
00145     {
00146       return -1;
00147     }
00148 
00149     int
00150     ServantRetentionStrategyNonRetain::is_servant_in_map (
00151       PortableServer::Servant ,
00152       int &)
00153     {
00154       return 0;
00155     }
00156 
00157     CORBA::ULong
00158     ServantRetentionStrategyNonRetain::waiting_servant_deactivation (void) const
00159     {
00160       return 0;
00161     }
00162 
00163     void
00164     ServantRetentionStrategyNonRetain::deactivate_all_objects (
00165       ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
00166         ACE_THROW_SPEC ((CORBA::SystemException,
00167                          PortableServer::POA::WrongPolicy))
00168     {
00169     }
00170 
00171     PortableServer::ObjectId *
00172     ServantRetentionStrategyNonRetain::servant_to_user_id (
00173       PortableServer::Servant 
00174       ACE_ENV_ARG_DECL)
00175         ACE_THROW_SPEC ((CORBA::SystemException,
00176                          PortableServer::POA::ServantNotActive,
00177                          PortableServer::POA::WrongPolicy))
00178     {
00179       ACE_THROW_RETURN (PortableServer::POA::WrongPolicy (),
00180                         0);
00181     }
00182 
00183     CORBA::Object_ptr
00184     ServantRetentionStrategyNonRetain::servant_to_reference (
00185       PortableServer::Servant 
00186       ACE_ENV_ARG_DECL)
00187         ACE_THROW_SPEC ((CORBA::SystemException,
00188                          PortableServer::POA::ServantNotActive,
00189                          PortableServer::POA::WrongPolicy))
00190     {
00191       ACE_THROW_RETURN (PortableServer::POA::WrongPolicy (),
00192                         CORBA::Object::_nil ());
00193     }
00194 
00195     PortableServer::ObjectId *
00196     ServantRetentionStrategyNonRetain::activate_object (
00197       PortableServer::Servant ,
00198       CORBA::Short ,
00199       int &
00200       ACE_ENV_ARG_DECL)
00201         ACE_THROW_SPEC ((CORBA::SystemException,
00202                          PortableServer::POA::ServantAlreadyActive,
00203                          PortableServer::POA::WrongPolicy))
00204     {
00205       ACE_THROW_RETURN (PortableServer::POA::WrongPolicy (),
00206                         0);
00207     }
00208 
00209 #if !defined (CORBA_E_MICRO)
00210     void
00211     ServantRetentionStrategyNonRetain::activate_object_with_id (
00212       const PortableServer::ObjectId &,
00213       PortableServer::Servant ,
00214       CORBA::Short ,
00215       int &
00216       ACE_ENV_ARG_DECL)
00217         ACE_THROW_SPEC ((CORBA::SystemException,
00218                          PortableServer::POA::ServantAlreadyActive,
00219                          PortableServer::POA::ObjectAlreadyActive,
00220                          PortableServer::POA::WrongPolicy))
00221     {
00222       ACE_THROW (PortableServer::POA::WrongPolicy ());
00223     }
00224 #endif
00225 
00226     CORBA::Object_ptr
00227     ServantRetentionStrategyNonRetain::create_reference (
00228       const char *intf,
00229       CORBA::Short priority
00230       ACE_ENV_ARG_DECL)
00231         ACE_THROW_SPEC ((CORBA::SystemException,
00232                          PortableServer::POA::WrongPolicy))
00233     {
00234       
00235       
00236       
00237       
00238       
00239       
00240       
00241       
00242 
00243       PortableServer::ObjectId_var system_id;
00244       PortableServer::ObjectId user_id;
00245 
00246       
00247       
00248       PortableServer::ObjectId *sys_id = 0;
00249       ACE_NEW_THROW_EX (sys_id,
00250                         PortableServer::ObjectId,
00251                         CORBA::NO_MEMORY ());
00252       ACE_CHECK_RETURN (CORBA::Object::_nil ());
00253 
00254       system_id = sys_id;
00255 
00256       
00257       user_id = system_id.in ();
00258 
00259       
00260       this->poa_->key_to_object_params_.set (system_id,
00261                                              intf,
00262                                              0,
00263                                              1,
00264                                              priority,
00265                                              true);
00266 
00267       return this->poa_->invoke_key_to_object_helper_i (intf,
00268                                                         user_id
00269                                                         ACE_ENV_ARG_PARAMETER);
00270     }
00271 
00272     CORBA::Object_ptr
00273     ServantRetentionStrategyNonRetain::create_reference_with_id (
00274       const PortableServer::ObjectId &oid,
00275       const char *intf,
00276       CORBA::Short priority
00277       ACE_ENV_ARG_DECL)
00278         ACE_THROW_SPEC ((CORBA::SystemException))
00279     {
00280       
00281       
00282       
00283       
00284       
00285       
00286       
00287 
00288       PortableServer::Servant servant = 0;
00289       PortableServer::ObjectId_var system_id;
00290 
00291       
00292       
00293       PortableServer::ObjectId *sys_id;
00294       ACE_NEW_THROW_EX (sys_id,
00295                         PortableServer::ObjectId (oid),
00296                         CORBA::NO_MEMORY ());
00297       ACE_CHECK_RETURN (CORBA::Object::_nil ());
00298 
00299       system_id = sys_id;
00300 
00301       
00302       this->poa_->key_to_object_params_.set (system_id,
00303                                              intf,
00304                                              servant,
00305                                              1,
00306                                              priority,
00307                                              true);
00308 
00309       return this->poa_->invoke_key_to_object_helper_i (intf,
00310                                                         oid
00311                                                         ACE_ENV_ARG_PARAMETER);
00312     }
00313 
00314     int
00315     ServantRetentionStrategyNonRetain::rebind_using_user_id_and_system_id (
00316       PortableServer::Servant ,
00317       const PortableServer::ObjectId &,
00318       const PortableServer::ObjectId &,
00319       TAO::Portable_Server::Servant_Upcall &)
00320     {
00321       return -1;
00322     }
00323 
00324     CORBA::Boolean
00325     ServantRetentionStrategyNonRetain::servant_has_remaining_activations (
00326       PortableServer::Servant )
00327     {
00328       return false;
00329     }
00330 
00331     int
00332     ServantRetentionStrategyNonRetain::unbind_using_user_id (
00333       const PortableServer::ObjectId &)
00334     {
00335       return 0;
00336     }
00337 
00338     ::PortableServer::ServantRetentionPolicyValue
00339     ServantRetentionStrategyNonRetain::type() const
00340     {
00341       return ::PortableServer::NON_RETAIN;
00342     }
00343 
00344   }
00345 }
00346 
00347 TAO_END_VERSIONED_NAMESPACE_DECL