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 "acsDaemonUtils.h"
00040 #include "acsDaemonImpl.h"
00041 #include "acsRequest.h"
00042 #include "acsServiceController.h"
00043
00044
00045 class ServiceDefinitionBuilderImpl : public POA_acsdaemon::ServiceDefinitionBuilder {
00046
00047 short instance;
00048 ACE_CString services_definition_xml;
00049
00050 static int definition_builder_count;
00051
00052 public:
00053
00054 ServiceDefinitionBuilderImpl(short instance_number) : instance(instance_number), services_definition_xml("") {
00055 if (definition_builder_count >= 10) {
00056 throw ::ACSErrTypeCommon::NoResourcesExImpl(__FILE__, __LINE__,
00057 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getNoResourcesEx();
00058 }
00059 if (instance_number < 0 || instance_number > 10) {
00060 throw ::ACSErrTypeCommon::BadParameterExImpl(__FILE__, __LINE__,
00061 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getBadParameterEx();
00062 }
00063 definition_builder_count++;
00064 ACS_SHORT_LOG((LM_DEBUG, "CREATING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00065 };
00066
00067 ~ServiceDefinitionBuilderImpl() {
00068 definition_builder_count--;
00069 ACS_SHORT_LOG((LM_DEBUG, "DESTROYING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00070 };
00071
00072
00073
00074 ::CORBA::Short acs_instance_number (
00075 void);
00076
00077 void add_naming_service (
00078 const char * host);
00079
00080 void add_alarm_service (
00081 const char * host);
00082
00083 void add_notification_service (
00084 const char * name,
00085 const char * host);
00086
00087 void add_xml_cdb (
00088 const char * host,
00089 ::CORBA::Boolean recovery,
00090 const char * cdb_xml_dir);
00091
00092 void add_rdb_cdb (
00093 const char * host,
00094 ::CORBA::Boolean recovery,
00095 const char * config_name);
00096
00097 void add_manager (
00098 const char * host,
00099 const char * domain,
00100 ::CORBA::Boolean recovery);
00101
00102 void add_acs_log (
00103 const char * host);
00104
00105 void add_logging_service (
00106 const char * host,
00107 const char * name);
00108
00109 void add_interface_repository (
00110 const char * host,
00111 ::CORBA::Boolean load,
00112 ::CORBA::Boolean wait_load);
00113
00114 void add_services_definition (
00115 const char * definition);
00116
00117 ::CORBA::Boolean is_valid (
00118 ::CORBA::String_out error_description);
00119
00120 char * get_services_definition (
00121 void);
00122
00123 void close (
00124 void);
00125
00126 };
00127
00128 class ACSServicesHandlerImpl : public POA_acsdaemon::ServicesDaemon {
00129
00130 public:
00131
00135 ACSServicesHandlerImpl();
00136
00140 virtual ~ACSServicesHandlerImpl();
00141
00145 void setService(ACSDaemonServiceImpl<ACSServicesHandlerImpl> *service)
00146 {
00147 h_service = service;
00148 }
00149
00153 void initialize(CORBA::ORB_ptr orb);
00154
00158 void dispose(CORBA::ORB_ptr orb);
00159
00163 std::string getName();
00164
00168 std::string getType();
00169
00173 std::string getPort();
00174
00178 std::string getServices(short instance_number, bool recovery);
00179
00180
00181
00182 ::acsdaemon::ServiceDefinitionBuilder_ptr create_service_definition_builder (
00183 ::CORBA::Short instance_number);
00184
00185 void start_services (
00186 const char * definition,
00187 ::CORBA::Boolean reuse_services,
00188 ::acsdaemon::DaemonSequenceCallback_ptr callback
00189 )throw(ACSErrTypeCommon::BadParameterEx);
00190
00191 void stop_services (
00192 const char * definition,
00193 ::acsdaemon::DaemonSequenceCallback_ptr callback
00194 ) throw (ACSErrTypeCommon::BadParameterEx);
00195
00196 void start_naming_service (
00197 ::acsdaemon::DaemonCallback_ptr callback,
00198 ::CORBA::Short instance_number
00199 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00200
00201 void start_notification_service (
00202 const char * name,
00203 ::acsdaemon::DaemonCallback_ptr callback,
00204 ::CORBA::Short instance_number
00205 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00206
00207 void start_xml_cdb (
00208 ::acsdaemon::DaemonCallback_ptr callback,
00209 ::CORBA::Short instance_number,
00210 ::CORBA::Boolean recovery,
00211 const char * cdb_xml_dir
00212 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00213
00214 void start_rdb_cdb (
00215 ::acsdaemon::DaemonCallback_ptr callback,
00216 ::CORBA::Short instance_number,
00217 ::CORBA::Boolean recovery,
00218 const char * config_name
00219 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00220
00221 void start_manager (
00222 const char * domain,
00223 ::acsdaemon::DaemonCallback_ptr callback,
00224 ::CORBA::Short instance_number,
00225 ::CORBA::Boolean recovery
00226 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00227
00228 void start_acs_log (
00229 ::acsdaemon::DaemonCallback_ptr callback,
00230 ::CORBA::Short instance_number
00231 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00232
00233 void start_logging_service (
00234 const char * name,
00235 ::acsdaemon::DaemonCallback_ptr callback,
00236 ::CORBA::Short instance_number
00237 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00238
00239 void start_interface_repository (
00240 ::CORBA::Boolean load,
00241 ::CORBA::Boolean wait_load,
00242 ::acsdaemon::DaemonCallback_ptr callback,
00243 ::CORBA::Short instance_number
00244 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00245
00246 void stop_naming_service (
00247 ::acsdaemon::DaemonCallback_ptr callback,
00248 ::CORBA::Short instance_number
00249 ) throw( ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00250
00251 void stop_notification_service (
00252 const char * name,
00253 ::acsdaemon::DaemonCallback_ptr callback,
00254 ::CORBA::Short instance_number
00255 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00256
00257 void stop_cdb (
00258 ::acsdaemon::DaemonCallback_ptr callback,
00259 ::CORBA::Short instance_number
00260 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00261
00262 void stop_manager (
00263 const char * domain,
00264 ::acsdaemon::DaemonCallback_ptr callback,
00265 ::CORBA::Short instance_number
00266 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00267
00268 void stop_acs_log (
00269 ::acsdaemon::DaemonCallback_ptr callback,
00270 ::CORBA::Short instance_number
00271 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00272
00273 void stop_logging_service (
00274 const char * name,
00275 ::acsdaemon::DaemonCallback_ptr callback,
00276 ::CORBA::Short instance_number
00277 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00278
00279 void stop_interface_repository (
00280 ::acsdaemon::DaemonCallback_ptr callback,
00281 ::CORBA::Short instance_number
00282 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00283
00284 void start_alarm_service (
00285 ::acsdaemon::DaemonCallback_ptr callback,
00286 ::CORBA::Short instance_number
00287 ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00288
00289 void stop_alarm_service (
00290 ::acsdaemon::DaemonCallback_ptr callback,
00291 ::CORBA::Short instance_number
00292 ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00293
00294 void start_acs (
00295 acsdaemon::DaemonSequenceCallback_ptr callback,
00296 ::CORBA::Short instance_number,
00297 const char * additional_command_line
00298 ) throw(CORBA::SystemException, ::ACSErrTypeCommon::BadParameterEx);
00299
00300 void stop_acs (
00301 acsdaemon::DaemonSequenceCallback_ptr callback,
00302 ::CORBA::Short instance_number,
00303 const char * additional_command_line
00304 ) throw (CORBA::SystemException, ::ACSErrTypeCommon::BadParameterEx);
00305
00306 char * status_acs (
00307 ::CORBA::Short instance_number
00308 ) throw (CORBA::SystemException, ::acsdaemonErrType::FailedToGetAcsStatusEx);
00309
00310 void shutdown () throw (CORBA::SystemException,::maciErrType::NoPermissionEx);
00311
00312
00313 void set_configuration_reference (
00314 ::CORBA::Short instance_number,
00315 const ::acsdaemon::ServiceInfoSeq & services_info) throw(CORBA::SystemException)
00316 {
00317 if (context)
00318 context->setConfigurationReference(instance_number, services_info);
00319 }
00320
00321 private:
00322 std::string h_name;
00323 std::string h_type;
00324 ACSDaemonServiceImpl<ACSServicesHandlerImpl> *h_service;
00325 ACSDaemonContext *context;
00326
00327 AcsDaemonUtils m_daemonUtils;
00328 };
00329
00330
00331
00332 #endif