=default for generated implementation copy ctor
[ACE_TAO.git] / TAO / tao / Dynamic_TP / DTP_POA_Loader.cpp
blob408cc1f868d5b9fabf72c26fe453413728bbb91e
1 #include "tao/Dynamic_TP/DTP_POA_Loader.h"
3 #if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
5 #include "tao/debug.h"
6 #include "tao/CSD_Framework/CSD_Framework_Loader.h"
7 #include "tao/Dynamic_TP/DTP_Config.h"
8 #include "tao/Dynamic_TP/DTP_POA_Strategy.h"
9 #include "ace/OS_NS_strings.h"
10 #include "tao/CSD_Framework/CSD_ORBInitializer.h"
11 #include "tao/PI/DLL_Resident_ORB_Initializer.h"
12 #include "tao/ORBInitializer_Registry.h"
13 #include "tao/ORB_Core.h"
16 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
18 TAO_DTP_POA_Loader::TAO_DTP_POA_Loader ()
22 TAO_DTP_POA_Loader::~TAO_DTP_POA_Loader ()
26 int
27 TAO_DTP_POA_Loader::init (int argc, ACE_TCHAR* argv[])
29 //TAO_debug_level = 5;
31 ACE_TRACE ("TAO_DTP_POA_Loader::init");
33 // Only allow initialization once.
34 static bool initialized = false;
35 if (initialized)
36 return 0;
37 initialized = true;
39 TAO_CSD_Strategy_Repository * repo =
40 ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance
41 ("TAO_CSD_Strategy_Repository");
44 /* Now create a POA Configuration Map Registry to look up what
45 thread pool settings are associated with each POA
48 if (repo == 0)
50 ACE_Service_Config::process_directive(
51 ace_svc_desc_TAO_CSD_Strategy_Repository);
52 repo = ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance
53 ("TAO_CSD_Strategy_Repository");
56 if (repo == 0)
58 if (TAO_debug_level > 0)
60 TAOLIB_DEBUG((LM_DEBUG,
61 ACE_TEXT ("TAO (%P|%t) - DTP_POA_Loader - ")
62 ACE_TEXT ("cannot initialize strategy repo\n")));
64 return -1;
67 repo->init(0,0);
69 for (int curarg = 0; curarg < argc; curarg++)
71 if (TAO_debug_level > 0)
73 TAOLIB_DEBUG((LM_DEBUG,
74 ACE_TEXT ("TAO (%P|%t) - DTP_POA_Loader - ")
75 ACE_TEXT ("parsing args\n")));
78 if (ACE_OS::strcasecmp (argv[curarg], ACE_TEXT ("-DTPPOAConfigMap"))
79 == 0)
81 ++curarg;
82 if (curarg >= argc)
84 this->report_option_value_error (ACE_TEXT ("-DTPPOAConfigMap"),
85 ACE_TEXT("<missing>"));
86 return -1;
88 if ((this->load_poa_map (argv[curarg], repo)) < 0)
90 return -1;
93 else
96 If we get here then we have another map set to process and
97 add to the map registry.
99 if (TAO_debug_level > 0)
101 TAOLIB_ERROR ((LM_ERROR,
102 ACE_TEXT ("DTP_POA_Loader: Missing option\n")
103 ACE_TEXT ("Usage: -DTPPOAConfigMap <comma-separated ")
104 ACE_TEXT ("list of POAs>:<POA Config Name>\n")
105 ACE_TEXT ("<%s>.\n"),
106 argv[curarg]));
112 return 0;
117 TAO_DTP_POA_Loader::load_poa_map (ACE_TCHAR *map,
118 TAO_CSD_Strategy_Repository *repo)
120 ACE_CString poa_name;
121 ACE_CString config_name;
122 TAO_DTP_POA_Strategy * strategy_container = 0;
124 ACE_TCHAR *sep = ACE_OS::strchr (map, ':');
126 if (sep == 0)
128 if (TAO_debug_level > 0)
130 TAOLIB_ERROR ((LM_ERROR,
131 ACE_TEXT ("DTP_POA_Loader: Missing option\n")
132 ACE_TEXT ("Usage: -DTPPOAConfigMap <comma-separated ")
133 ACE_TEXT ("list of POAs>:<POA Config Name>\n<%s>.\n"),
134 map));
136 return -1;
139 config_name = ACE_TEXT_ALWAYS_CHAR (sep + 1);
140 *sep = 0;
142 // Now that we have a config name and a null strategy
143 // implementation class we can allocate a new instance of a
144 // strategy configuration container.
146 ACE_NEW_RETURN(strategy_container,
147 TAO_DTP_POA_Strategy(config_name,
148 false), -1);
150 sep = ACE_OS::strchr (map, ',');
151 while (sep != 0)
153 *sep = 0;
154 poa_name = ACE_TEXT_ALWAYS_CHAR (map);
155 repo->add_strategy (poa_name, strategy_container);
156 map = sep + 1;
157 sep = ACE_OS::strchr (map, ',');
159 poa_name = ACE_TEXT_ALWAYS_CHAR (map);
160 repo->add_strategy(poa_name, strategy_container);
162 CORBA::release (strategy_container);
164 return 0;
167 void
168 TAO_DTP_POA_Loader::report_option_value_error (const ACE_TCHAR* name,
169 const ACE_TCHAR* value)
171 if (TAO_debug_level > 0)
173 TAOLIB_DEBUG((LM_DEBUG,
174 ACE_TEXT ("TAO (%P|%t) - DTP_POA_Loader - unknown ")
175 ACE_TEXT ("argument <%s> for <%s>\n"),
176 value, name));
181 /////////////////////////////////////////////////////////////////////
184 ACE_FACTORY_DEFINE (TAO_Dynamic_TP, TAO_DTP_POA_Loader)
185 ACE_STATIC_SVC_DEFINE (TAO_DTP_POA_Loader,
186 ACE_TEXT ("DTP_POA_Loader"),
187 ACE_SVC_OBJ_T,
188 &ACE_SVC_NAME (TAO_DTP_POA_Loader),
189 ACE_Service_Type::DELETE_THIS
190 | ACE_Service_Type::DELETE_OBJ,
193 TAO_END_VERSIONED_NAMESPACE_DECL
196 #endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */