00001
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
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
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)