Information
We are currently investigating an issue with the editor of some pages. Please save your work and avoid to create new pages until this banner is gone.
The Makefile is provided with the module generated from getTemplateForDirectory. In the case of C++ server implementation, you need to configure the compilation and installation of a C++ library (Shared Object) file:
Code Block | ||
---|---|---|
| ||
LIBRARIES:=<LibraryName>
<LibraryName>_OBJECTS = <ListOfObjectsToInclude> #.c and/or .cpp files
<LibraryName>_LIBS = <ListOfLibraryDependencies> #<Interface>Stubs acscomponent ServiceErr <Interface>Err #etc. |
The first thing needed to implement a server, is to add the required include files:
Code Block | ||||
---|---|---|---|---|
| ||||
#ifndef _<FILENAME>_H #define _<FILENAME>_H #ifndef __cplusplus #error This is a C++ include file and cannot be used from plain C #endif //Base component implementation, including container services and component lifecycle infrastructure #include <acscomponentImpl.h> //Skeleton interface for server implementation #include <<Interface>S.h> //Error definitions for catching and raising exceptions #include <ServiceErr.h> #include <<Interface>Err.h> ... #endif |
...
For logging in C++, there are some macros to help:
Code Block | ||||
---|---|---|---|---|
| ||||
ACS_TRACE("..."); ACS_DEBUG("..."); ACS_SHORT_LOG((LM_INFO, "...")); ACS_SHORT_LOG((LM_WARNING, "...")); ACS_SHORT_LOG((LM_ERROR, "...")); |
For catching and raising exceptions:
Code Block | ||||
---|---|---|---|---|
| ||||
//Shared
#include <<Interface>Err.h>
//For catching exceptions
//Along CORBA calls
catch(<Interface>Err::<ExceptionName>Ex &_ex) { ... }
//Internally in the server... more convenient to edit parameters or log if needed
catch(<Interface>Err::<ExceptionName>ExImpl &_ex) { ... }
//For raising exceptions
//Along CORBA calls
throw <Interface>Err::<ExceptionName>ExImpl(__FILE__, __LINE__, "<CustomMessage>").get<ExceptionName>Ex();
//Internally in the server...
throw <Interface>Err::<ExceptionNanem>ExImpl(__FILE__, __LINE__, "<CustomMessage>");
//For raising exceptions with parameters
<Interface>Err::<ExceptionName>ExImpl err(__FILE__, __LINE__, "<CustomMessage>");
err.set<ParamName>(<Value>);
throw err.get<ExceptionName>Ex();
//For logging an error message from the exceptions
<Interface>Err::<ExceptionName>ExImpl err(__FILE__, __LINE__, "<CustomMessage>");
err.log();
throw err.get<ExceptionName>Ex(); |
...