00001 #ifndef _ACS_SERVICES_HANDLER_IMPL_H_
00002 #define _ACS_SERVICES_HANDLER_IMPL_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef __cplusplus
00036 #error This is a C++ include file and cannot be used from plain C
00037 #endif
00038
00039 #include "acsDaemonImpl.h"
00040 #include "acsRequest.h"
00041 #include "acsServiceController.h"
00042
00043
00044 class ServiceDefinitionBuilderImpl : public POA_acsdaemon::ServiceDefinitionBuilder {
00045
00046 short instance;
00047 ACE_CString services_definition_xml;
00048
00049 static int definition_builder_count;
00050
00051 public:
00052
00053 ServiceDefinitionBuilderImpl(short instance_number) : instance(instance_number), services_definition_xml("") {
00054 if (definition_builder_count >= 10) {
00055 throw ::ACSErrTypeCommon::NoResourcesExImpl(__FILE__, __LINE__,
00056 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getNoResourcesEx();
00057 }
00058 if (instance_number < 0 || instance_number > 10) {
00059 throw ::ACSErrTypeCommon::BadParameterExImpl(__FILE__, __LINE__,
00060 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getBadParameterEx();
00061 }
00062 definition_builder_count++;
00063 ACS_SHORT_LOG((LM_DEBUG, "CREATING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00064 };
00065
00066 ~ServiceDefinitionBuilderImpl() {
00067 definition_builder_count--;
00068 ACS_SHORT_LOG((LM_DEBUG, "DESTROYING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00069 };
00070
00071
00072
00073 ::CORBA::Short acs_instance_number (
00074 void);
00075
00076 void add_naming_service (
00077 const char * host);
00078
00079 void add_alarm_service (
00080 const char * host);
00081
00082 void add_notification_service (
00083 const char * name,
00084 const char * host);
00085
00086 void add_xml_cdb (
00087 const char * host,
00088 ::CORBA::Boolean recovery,
00089 const char * cdb_xml_dir);
00090
00091 void add_manager (
00092 const char * host,
00093 const char * domain,
00094 ::CORBA::Boolean recovery);
00095
00096 void add_acs_log (
00097 const char * host);
00098
00099 void add_logging_service (
00100 const char * host,
00101 const char * name);
00102
00103 void add_interface_repository (
00104 const char * host,
00105 ::CORBA::Boolean load,
00106 ::CORBA::Boolean wait_load);
00107
00108 void add_services_definition (
00109 const char * definition);
00110
00111 ::CORBA::Boolean is_valid (
00112 ::CORBA::String_out error_description);
00113
00114 char * get_services_definition (
00115 void);
00116
00117 void close (
00118 void);
00119
00120 };
00121
00122 class ACSServicesHandlerImpl : public POA_acsdaemon::ServicesDaemon {
00123
00124 public:
00125
00129 ACSServicesHandlerImpl();
00130
00134 virtual ~ACSServicesHandlerImpl();
00135
00139 void setService(ACSDaemonServiceImpl<ACSServicesHandlerImpl> *service)
00140 {
00141 h_service = service;
00142 }
00143
00147 void initialize(CORBA::ORB_ptr orb);
00148
00152 void dispose(CORBA::ORB_ptr orb);
00153
00157 std::string getName();
00158
00162 std::string getType();
00163
00167 std::string getPort();
00168
00172 std::string getServices(short instance_number, bool recovery);
00173
00174
00175
00176 ::acsdaemon::ServiceDefinitionBuilder_ptr create_service_definition_builder (
00177 ::CORBA::Short instance_number);
00178
00179 void start_services (
00180 const char * definition,
00181 ::CORBA::Boolean reuse_services,
00182 ::acsdaemon::DaemonSequenceCallback_ptr callback
00183 )
00184 ACE_THROW_SPEC ((
00185 ACSErrTypeCommon::BadParameterEx
00186 ));
00187
00188 void stop_services (
00189 const char * definition,
00190 ::acsdaemon::DaemonSequenceCallback_ptr callback
00191 )
00192 ACE_THROW_SPEC ((
00193 ACSErrTypeCommon::BadParameterEx
00194 ));
00195
00196 void start_naming_service (
00197 ::acsdaemon::DaemonCallback_ptr callback,
00198 ::CORBA::Short instance_number
00199 )
00200 ACE_THROW_SPEC ((
00201 ACSErrTypeCommon::BadParameterEx,
00202 acsdaemonErrType::ServiceAlreadyRunningEx
00203 ));
00204
00205 void start_notification_service (
00206 const char * name,
00207 ::acsdaemon::DaemonCallback_ptr callback,
00208 ::CORBA::Short instance_number
00209 )
00210 ACE_THROW_SPEC ((
00211 ACSErrTypeCommon::BadParameterEx,
00212 acsdaemonErrType::ServiceAlreadyRunningEx
00213 ));
00214
00215 void start_xml_cdb (
00216 ::acsdaemon::DaemonCallback_ptr callback,
00217 ::CORBA::Short instance_number,
00218 ::CORBA::Boolean recovery,
00219 const char * cdb_xml_dir
00220 )
00221 ACE_THROW_SPEC ((
00222 ACSErrTypeCommon::BadParameterEx,
00223 acsdaemonErrType::ServiceAlreadyRunningEx
00224 ));
00225
00226 void start_manager (
00227 const char * domain,
00228 ::acsdaemon::DaemonCallback_ptr callback,
00229 ::CORBA::Short instance_number,
00230 ::CORBA::Boolean recovery
00231 )
00232 ACE_THROW_SPEC ((
00233 ACSErrTypeCommon::BadParameterEx,
00234 acsdaemonErrType::ServiceAlreadyRunningEx
00235 ));
00236
00237 void start_acs_log (
00238 ::acsdaemon::DaemonCallback_ptr callback,
00239 ::CORBA::Short instance_number
00240 )
00241 ACE_THROW_SPEC ((
00242 ACSErrTypeCommon::BadParameterEx,
00243 acsdaemonErrType::ServiceAlreadyRunningEx
00244 ));
00245
00246 void start_logging_service (
00247 const char * name,
00248 ::acsdaemon::DaemonCallback_ptr callback,
00249 ::CORBA::Short instance_number
00250 )
00251 ACE_THROW_SPEC ((
00252 ACSErrTypeCommon::BadParameterEx,
00253 acsdaemonErrType::ServiceAlreadyRunningEx
00254 ));
00255
00256 void start_interface_repository (
00257 ::CORBA::Boolean load,
00258 ::CORBA::Boolean wait_load,
00259 ::acsdaemon::DaemonCallback_ptr callback,
00260 ::CORBA::Short instance_number
00261 )
00262 ACE_THROW_SPEC ((
00263 ACSErrTypeCommon::BadParameterEx,
00264 acsdaemonErrType::ServiceAlreadyRunningEx
00265 ));
00266
00267 void stop_naming_service (
00268 ::acsdaemon::DaemonCallback_ptr callback,
00269 ::CORBA::Short instance_number
00270 )
00271 ACE_THROW_SPEC ((
00272 ACSErrTypeCommon::BadParameterEx,
00273 acsdaemonErrType::ServiceNotRunningEx
00274 ));
00275
00276 void stop_notification_service (
00277 const char * name,
00278 ::acsdaemon::DaemonCallback_ptr callback,
00279 ::CORBA::Short instance_number
00280 )
00281 ACE_THROW_SPEC ((
00282 ACSErrTypeCommon::BadParameterEx,
00283 acsdaemonErrType::ServiceNotRunningEx
00284 ));
00285
00286 void stop_cdb (
00287 ::acsdaemon::DaemonCallback_ptr callback,
00288 ::CORBA::Short instance_number
00289 )
00290 ACE_THROW_SPEC ((
00291 ACSErrTypeCommon::BadParameterEx,
00292 acsdaemonErrType::ServiceNotRunningEx
00293 ));
00294
00295 void stop_manager (
00296 const char * domain,
00297 ::acsdaemon::DaemonCallback_ptr callback,
00298 ::CORBA::Short instance_number
00299 )
00300 ACE_THROW_SPEC ((
00301 ACSErrTypeCommon::BadParameterEx,
00302 acsdaemonErrType::ServiceNotRunningEx
00303 ));
00304
00305 void stop_acs_log (
00306 ::acsdaemon::DaemonCallback_ptr callback,
00307 ::CORBA::Short instance_number
00308 )
00309 ACE_THROW_SPEC ((
00310 ACSErrTypeCommon::BadParameterEx,
00311 acsdaemonErrType::ServiceNotRunningEx
00312 ));
00313
00314 void stop_logging_service (
00315 const char * name,
00316 ::acsdaemon::DaemonCallback_ptr callback,
00317 ::CORBA::Short instance_number
00318 )
00319 ACE_THROW_SPEC ((
00320 ACSErrTypeCommon::BadParameterEx,
00321 acsdaemonErrType::ServiceNotRunningEx
00322 ));
00323
00324 void stop_interface_repository (
00325 ::acsdaemon::DaemonCallback_ptr callback,
00326 ::CORBA::Short instance_number
00327 )
00328 ACE_THROW_SPEC ((
00329 ACSErrTypeCommon::BadParameterEx,
00330 acsdaemonErrType::ServiceNotRunningEx
00331 ));
00332
00333 void start_alarm_service (
00334 ::acsdaemon::DaemonCallback_ptr callback,
00335 ::CORBA::Short instance_number
00336 )
00337 ACE_THROW_SPEC ((
00338 ACSErrTypeCommon::BadParameterEx,
00339 acsdaemonErrType::ServiceAlreadyRunningEx
00340 ));
00341
00342 void stop_alarm_service (
00343 ::acsdaemon::DaemonCallback_ptr callback,
00344 ::CORBA::Short instance_number
00345 )
00346 ACE_THROW_SPEC ((
00347 ACSErrTypeCommon::BadParameterEx,
00348 acsdaemonErrType::ServiceNotRunningEx
00349 ));
00350
00351 void start_acs (
00352 acsdaemon::DaemonSequenceCallback_ptr callback,
00353 ::CORBA::Short instance_number,
00354 const char * additional_command_line
00355 )
00356 ACE_THROW_SPEC ((
00357 CORBA::SystemException,
00358 ::ACSErrTypeCommon::BadParameterEx
00359 ));
00360
00361 void stop_acs (
00362 acsdaemon::DaemonSequenceCallback_ptr callback,
00363 ::CORBA::Short instance_number,
00364 const char * additional_command_line
00365 )
00366 ACE_THROW_SPEC ((
00367 CORBA::SystemException,
00368 ::ACSErrTypeCommon::BadParameterEx
00369 ));
00370
00371 char * status_acs (
00372 ::CORBA::Short instance_number
00373 )
00374 ACE_THROW_SPEC ((
00375 CORBA::SystemException,
00376 ::acsdaemonErrType::FailedToGetAcsStatusEx
00377 ));
00378
00379 void shutdown ()
00380 ACE_THROW_SPEC ((
00381 CORBA::SystemException,
00382 ::maciErrType::NoPermissionEx
00383 ));
00384
00385 void set_manager_reference(
00386 const short instance_number,
00387 const char * ref
00388 )
00389 ACE_THROW_SPEC ((
00390 CORBA::SystemException
00391 ))
00392 {
00393 if (context)
00394 context->setManagerReference(instance_number, ref);
00395 }
00396
00397 private:
00398 std::string h_name;
00399 std::string h_type;
00400 ACSDaemonServiceImpl<ACSServicesHandlerImpl> *h_service;
00401 ACSDaemonContext *context;
00402 };
00403
00404
00405
00406 #endif