00001
00002
00003 #include "tao/PortableServer/ServantRetentionStrategyRetainFactoryImpl.h"
00004 #include "tao/PortableServer/ServantRetentionStrategy.h"
00005 #include "tao/PortableServer/ServantRetentionStrategyRetain.h"
00006 #include "ace/Dynamic_Service.h"
00007 #include "ace/Log_Msg.h"
00008
00009 ACE_RCSID (PortableServer,
00010 ServantRetentionStrategyRetainFactoryImpl,
00011 "$Id: ServantRetentionStrategyRetainFactoryImpl.cpp 76551 2007-01-24 13:42:44Z johnnyw $")
00012
00013 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00014
00015 namespace TAO
00016 {
00017 namespace Portable_Server
00018 {
00019 ServantRetentionStrategy*
00020 ServantRetentionStrategyRetainFactoryImpl::create (
00021 ::PortableServer::ServantRetentionPolicyValue value)
00022 {
00023 ServantRetentionStrategy* strategy = 0;
00024
00025 switch (value)
00026 {
00027 case ::PortableServer::RETAIN :
00028 {
00029 ACE_NEW_RETURN (strategy, ServantRetentionStrategyRetain, 0);
00030 break;
00031 }
00032 case ::PortableServer::NON_RETAIN :
00033 {
00034 ACE_ERROR ((LM_ERROR, "Incorrect type in ServantRetentionStrategyNonRetainFactoryImpl"));
00035 break;
00036 }
00037 }
00038
00039 return strategy;
00040 }
00041
00042 void
00043 ServantRetentionStrategyRetainFactoryImpl::destroy (
00044 ServantRetentionStrategy *strategy
00045 )
00046 {
00047 strategy->strategy_cleanup ();
00048
00049 delete strategy;
00050 }
00051 }
00052 }
00053
00054 TAO_END_VERSIONED_NAMESPACE_DECL
00055
00056 ACE_STATIC_SVC_DEFINE (
00057 ServantRetentionStrategyRetainFactoryImpl,
00058 ACE_TEXT ("ServantRetentionStrategyRetainFactory"),
00059 ACE_SVC_OBJ_T,
00060 &ACE_SVC_NAME (ServantRetentionStrategyRetainFactoryImpl),
00061 ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
00062 0)
00063
00064 ACE_FACTORY_NAMESPACE_DEFINE (
00065 ACE_Local_Service,
00066 ServantRetentionStrategyRetainFactoryImpl,
00067 TAO::Portable_Server::ServantRetentionStrategyRetainFactoryImpl)