RequestProcessingStrategyFactoryImpl.cpp

Go to the documentation of this file.
00001 // $Id: RequestProcessingStrategyFactoryImpl.cpp 76551 2007-01-24 13:42:44Z johnnyw $
00002 
00003 #include "tao/PortableServer/RequestProcessingStrategyFactoryImpl.h"
00004 #include "tao/PortableServer/RequestProcessingStrategyAOMOnly.h"
00005 #include "tao/PortableServer/RequestProcessingStrategyDefaultServant.h"
00006 #include "tao/PortableServer/RequestProcessingStrategyServantLocator.h"
00007 #include "tao/PortableServer/RequestProcessingStrategyServantActivator.h"
00008 #include "ace/Dynamic_Service.h"
00009 #include "ace/Log_Msg.h"
00010 
00011 ACE_RCSID (PortableServer,
00012            RequestProcessingStrategyFactoryImpl,
00013            "$Id: RequestProcessingStrategyFactoryImpl.cpp 76551 2007-01-24 13:42:44Z johnnyw $")
00014 
00015 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00016 
00017 namespace TAO
00018 {
00019   namespace Portable_Server
00020   {
00021     RequestProcessingStrategy*
00022     RequestProcessingStrategyFactoryImpl::create (
00023         ::PortableServer::RequestProcessingPolicyValue value,
00024         ::PortableServer::ServantRetentionPolicyValue srvalue)
00025     {
00026       RequestProcessingStrategy* strategy = 0;
00027       RequestProcessingStrategyFactory *strategy_factory = 0;
00028 
00029       switch (value)
00030       {
00031         case ::PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY :
00032         {
00033           strategy_factory =
00034             ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyAOMOnlyFactory");
00035 
00036           break;
00037         }
00038         case ::PortableServer::USE_DEFAULT_SERVANT :
00039         {
00040           strategy_factory =
00041             ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyDefaultServantFactory");
00042 
00043           break;
00044         }
00045         case ::PortableServer::USE_SERVANT_MANAGER :
00046         {
00047 #if (TAO_HAS_MINIMUM_POA == 0)
00048           switch (srvalue)
00049           {
00050             case ::PortableServer::RETAIN :
00051             {
00052               strategy_factory =
00053                 ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyServantActivatorFactory");
00054 
00055               break;
00056             }
00057             case ::PortableServer::NON_RETAIN :
00058             {
00059               strategy_factory =
00060                 ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyServantLocatorFactory");
00061 
00062               break;
00063             }
00064           }
00065 #endif /* TAO_HAS_MINIMUM_POA == 0 */
00066           break;
00067         }
00068       }
00069 
00070       if (strategy_factory != 0)
00071         strategy = strategy_factory->create (value, srvalue);
00072       else
00073         ACE_ERROR ((LM_ERROR,
00074                     ACE_TEXT ("(%P|%t) %p\n"),
00075                     ACE_TEXT ("ERROR, Unable to get ")
00076                     ACE_TEXT ("RequestProcessingStrategyFactory")));
00077 
00078       return strategy;
00079     }
00080 
00081     void
00082     RequestProcessingStrategyFactoryImpl::destroy (
00083       RequestProcessingStrategy *strategy
00084       )
00085     {
00086       RequestProcessingStrategyFactory *strategy_factory = 0;
00087 
00088       switch (strategy->type ())
00089       {
00090         case ::PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY :
00091         {
00092           strategy_factory =
00093             ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyAOMOnlyFactory");
00094 
00095           break;
00096         }
00097         case ::PortableServer::USE_DEFAULT_SERVANT :
00098         {
00099           strategy_factory =
00100             ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyDefaultServantFactory");
00101 
00102           break;
00103         }
00104         case ::PortableServer::USE_SERVANT_MANAGER :
00105         {
00106 #if (TAO_HAS_MINIMUM_POA == 0)
00107           switch (strategy->sr_type ())
00108           {
00109             case ::PortableServer::RETAIN :
00110             {
00111               strategy_factory =
00112                 ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyServantActivatorFactory");
00113 
00114               break;
00115             }
00116             case ::PortableServer::NON_RETAIN :
00117             {
00118               strategy_factory =
00119                 ACE_Dynamic_Service<RequestProcessingStrategyFactory>::instance ("RequestProcessingStrategyServantLocatorFactory");
00120               break;
00121             }
00122           }
00123 #endif /* TAO_HAS_MINIMUM_POA == 0 */
00124           break;
00125         }
00126       }
00127 
00128       if (strategy_factory != 0)
00129         {
00130           strategy_factory->destroy (strategy);
00131         }
00132     }
00133   }
00134 }
00135 
00136 TAO_END_VERSIONED_NAMESPACE_DECL
00137 
00138 ACE_STATIC_SVC_DEFINE (
00139   RequestProcessingStrategyFactoryImpl,
00140   ACE_TEXT ("RequestProcessingStrategyFactory"),
00141   ACE_SVC_OBJ_T,
00142   &ACE_SVC_NAME (RequestProcessingStrategyFactoryImpl),
00143   ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
00144   0)
00145 
00146 ACE_FACTORY_NAMESPACE_DEFINE (
00147   ACE_Local_Service,
00148   RequestProcessingStrategyFactoryImpl,
00149   TAO::Portable_Server::RequestProcessingStrategyFactoryImpl)

Generated on Tue Feb 2 17:40:54 2010 for TAO_PortableServer by  doxygen 1.4.7