Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

acsServicesHandlerImpl.h

Go to the documentation of this file.
00001 #ifndef _ACS_SERVICES_HANDLER_IMPL_H_ 00002 #define _ACS_SERVICES_HANDLER_IMPL_H_ 00003 00004 /******************************************************************************* 00005 * ALMA - Atacama Large Millimiter Array 00006 * (c) European Southern Observatory, 2002 00007 * Copyright by ESO (in the framework of the ALMA collaboration) 00008 * and Cosylab 2002, All rights reserved 00009 * 00010 * This library is free software; you can redistribute it and/or 00011 * modify it under the terms of the GNU Lesser General Public 00012 * License as published by the Free Software Foundation; either 00013 * version 2.1 of the License, or (at your option) any later version. 00014 * 00015 * This library is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 * Lesser General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU Lesser General Public 00021 * License along with this library; if not, write to the Free Software 00022 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00023 * 00024 * "@(#) $Id: acsServicesHandlerImpl.h,v 1.9.2.1 2008/11/25 23:38:55 msekoran Exp $" 00025 * 00026 * who when what 00027 * -------- -------- ---------------------------------------------- 00028 * msekoran 2006-06-21 created 00029 * agrimstr 2007-11-07 refactored Services interface into separate 00030 * class for use in template pattern implementation 00031 * of the acsdaemon 00032 * azagar 2008-08-12 migrated to ACS 8.0 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 /*************************** CORBA interface *****************************/ 00072 00073 ::CORBA::Short acs_instance_number ( 00074 void); 00075 00076 void add_naming_service ( 00077 const char * host); 00078 00079 void add_notification_service ( 00080 const char * name, 00081 const char * host); 00082 00083 void add_xml_cdb ( 00084 const char * host, 00085 ::CORBA::Boolean recovery, 00086 const char * cdb_xml_dir); 00087 00088 void add_manager ( 00089 const char * host, 00090 const char * domain, 00091 ::CORBA::Boolean recovery); 00092 00093 void add_acs_log ( 00094 const char * host); 00095 00096 void add_logging_service ( 00097 const char * host, 00098 const char * name); 00099 00100 void add_interface_repository ( 00101 const char * host, 00102 ::CORBA::Boolean load, 00103 ::CORBA::Boolean wait_load); 00104 00105 void add_services_definition ( 00106 const char * definition); 00107 00108 ::CORBA::Boolean is_valid ( 00109 ::CORBA::String_out error_description); 00110 00111 char * get_services_definition ( 00112 void); 00113 00114 void close ( 00115 void); 00116 00117 }; 00118 00119 class ACSServicesHandlerImpl : public POA_acsdaemon::ServicesDaemon { 00120 00121 public: 00122 00126 ACSServicesHandlerImpl(); 00127 00131 virtual ~ACSServicesHandlerImpl(); 00132 00136 void setService(ACSDaemonServiceImpl<ACSServicesHandlerImpl> *service) 00137 { 00138 h_service = service; 00139 } 00140 00144 void initialize(CORBA::ORB_ptr orb); 00145 00149 void dispose(CORBA::ORB_ptr orb); 00150 00154 std::string getName(); 00155 00159 std::string getType(); 00160 00164 std::string getPort(); 00165 00169 std::string getServices(short instance_number, bool recovery); 00170 00171 /*************************** CORBA interface *****************************/ 00172 00173 ::acsdaemon::ServiceDefinitionBuilder_ptr create_service_definition_builder ( 00174 ::CORBA::Short instance_number); 00175 00176 void start_services ( 00177 const char * definition, 00178 ::CORBA::Boolean reuse_services, 00179 ::acsdaemon::DaemonSequenceCallback_ptr callback 00180 ) 00181 ACE_THROW_SPEC (( 00182 ACSErrTypeCommon::BadParameterEx 00183 )); 00184 00185 void stop_services ( 00186 const char * definition, 00187 ::acsdaemon::DaemonSequenceCallback_ptr callback 00188 ) 00189 ACE_THROW_SPEC (( 00190 ACSErrTypeCommon::BadParameterEx 00191 )); 00192 00193 void start_naming_service ( 00194 ::acsdaemon::DaemonCallback_ptr callback, 00195 ::CORBA::Short instance_number 00196 ) 00197 ACE_THROW_SPEC (( 00198 ACSErrTypeCommon::BadParameterEx, 00199 acsdaemonErrType::ServiceAlreadyRunningEx 00200 )); 00201 00202 void start_notification_service ( 00203 const char * name, 00204 ::acsdaemon::DaemonCallback_ptr callback, 00205 ::CORBA::Short instance_number 00206 ) 00207 ACE_THROW_SPEC (( 00208 ACSErrTypeCommon::BadParameterEx, 00209 acsdaemonErrType::ServiceAlreadyRunningEx 00210 )); 00211 00212 void start_xml_cdb ( 00213 ::acsdaemon::DaemonCallback_ptr callback, 00214 ::CORBA::Short instance_number, 00215 ::CORBA::Boolean recovery, 00216 const char * cdb_xml_dir 00217 ) 00218 ACE_THROW_SPEC (( 00219 ACSErrTypeCommon::BadParameterEx, 00220 acsdaemonErrType::ServiceAlreadyRunningEx 00221 )); 00222 00223 void start_manager ( 00224 const char * domain, 00225 ::acsdaemon::DaemonCallback_ptr callback, 00226 ::CORBA::Short instance_number, 00227 ::CORBA::Boolean recovery 00228 ) 00229 ACE_THROW_SPEC (( 00230 ACSErrTypeCommon::BadParameterEx, 00231 acsdaemonErrType::ServiceAlreadyRunningEx 00232 )); 00233 00234 void start_acs_log ( 00235 ::acsdaemon::DaemonCallback_ptr callback, 00236 ::CORBA::Short instance_number 00237 ) 00238 ACE_THROW_SPEC (( 00239 ACSErrTypeCommon::BadParameterEx, 00240 acsdaemonErrType::ServiceAlreadyRunningEx 00241 )); 00242 00243 void start_logging_service ( 00244 const char * name, 00245 ::acsdaemon::DaemonCallback_ptr callback, 00246 ::CORBA::Short instance_number 00247 ) 00248 ACE_THROW_SPEC (( 00249 ACSErrTypeCommon::BadParameterEx, 00250 acsdaemonErrType::ServiceAlreadyRunningEx 00251 )); 00252 00253 void start_interface_repository ( 00254 ::CORBA::Boolean load, 00255 ::CORBA::Boolean wait_load, 00256 ::acsdaemon::DaemonCallback_ptr callback, 00257 ::CORBA::Short instance_number 00258 ) 00259 ACE_THROW_SPEC (( 00260 ACSErrTypeCommon::BadParameterEx, 00261 acsdaemonErrType::ServiceAlreadyRunningEx 00262 )); 00263 00264 void stop_naming_service ( 00265 ::acsdaemon::DaemonCallback_ptr callback, 00266 ::CORBA::Short instance_number 00267 ) 00268 ACE_THROW_SPEC (( 00269 ACSErrTypeCommon::BadParameterEx, 00270 acsdaemonErrType::ServiceNotRunningEx 00271 )); 00272 00273 void stop_notification_service ( 00274 const char * name, 00275 ::acsdaemon::DaemonCallback_ptr callback, 00276 ::CORBA::Short instance_number 00277 ) 00278 ACE_THROW_SPEC (( 00279 ACSErrTypeCommon::BadParameterEx, 00280 acsdaemonErrType::ServiceNotRunningEx 00281 )); 00282 00283 void stop_cdb ( 00284 ::acsdaemon::DaemonCallback_ptr callback, 00285 ::CORBA::Short instance_number 00286 ) 00287 ACE_THROW_SPEC (( 00288 ACSErrTypeCommon::BadParameterEx, 00289 acsdaemonErrType::ServiceNotRunningEx 00290 )); 00291 00292 void stop_manager ( 00293 const char * domain, 00294 ::acsdaemon::DaemonCallback_ptr callback, 00295 ::CORBA::Short instance_number 00296 ) 00297 ACE_THROW_SPEC (( 00298 ACSErrTypeCommon::BadParameterEx, 00299 acsdaemonErrType::ServiceNotRunningEx 00300 )); 00301 00302 void stop_acs_log ( 00303 ::acsdaemon::DaemonCallback_ptr callback, 00304 ::CORBA::Short instance_number 00305 ) 00306 ACE_THROW_SPEC (( 00307 ACSErrTypeCommon::BadParameterEx, 00308 acsdaemonErrType::ServiceNotRunningEx 00309 )); 00310 00311 void stop_logging_service ( 00312 const char * name, 00313 ::acsdaemon::DaemonCallback_ptr callback, 00314 ::CORBA::Short instance_number 00315 ) 00316 ACE_THROW_SPEC (( 00317 ACSErrTypeCommon::BadParameterEx, 00318 acsdaemonErrType::ServiceNotRunningEx 00319 )); 00320 00321 void stop_interface_repository ( 00322 ::acsdaemon::DaemonCallback_ptr callback, 00323 ::CORBA::Short instance_number 00324 ) 00325 ACE_THROW_SPEC (( 00326 ACSErrTypeCommon::BadParameterEx, 00327 acsdaemonErrType::ServiceNotRunningEx 00328 )); 00329 00330 void start_acs ( 00331 acsdaemon::DaemonSequenceCallback_ptr callback, 00332 ::CORBA::Short instance_number, 00333 const char * additional_command_line 00334 ) 00335 ACE_THROW_SPEC (( 00336 CORBA::SystemException, 00337 ::ACSErrTypeCommon::BadParameterEx 00338 )); 00339 00340 void stop_acs ( 00341 acsdaemon::DaemonSequenceCallback_ptr callback, 00342 ::CORBA::Short instance_number, 00343 const char * additional_command_line 00344 ) 00345 ACE_THROW_SPEC (( 00346 CORBA::SystemException, 00347 ::ACSErrTypeCommon::BadParameterEx 00348 )); 00349 00350 char * status_acs ( 00351 ::CORBA::Short instance_number 00352 ) 00353 ACE_THROW_SPEC (( 00354 CORBA::SystemException, 00355 ::acsdaemonErrType::FailedToGetAcsStatusEx 00356 )); 00357 00358 void shutdown () 00359 ACE_THROW_SPEC (( 00360 CORBA::SystemException, 00361 ::maciErrType::NoPermissionEx 00362 )); 00363 00364 void set_manager_reference( 00365 const char * ref 00366 ) 00367 ACE_THROW_SPEC (( 00368 CORBA::SystemException 00369 )) 00370 { 00371 if (context) 00372 context->setManagerReference(ref); 00373 } 00374 00375 private: 00376 std::string h_name; // Name of services handler (used for logging purposes) 00377 std::string h_type; // CORBA-type for this services handler 00378 ACSDaemonServiceImpl<ACSServicesHandlerImpl> *h_service; // ACS daemon service 00379 ACSDaemonContext *context; 00380 }; 00381 00382 00383 00384 #endif

Generated on Thu Apr 30 02:30:49 2009 for ACS C++ API by doxygen 1.3.8