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.
...
Add the following configuration in the $ACS_CDB/CDB/MACI/Components/Components.xml:
...
We modify the Makefile for this component:
Code Block | ||
---|---|---|
| ||
... PY_PACKAGES = ws ... |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#Client# Client stubs and definitions, such as structs, enums, etc. import workshop #Skeleton# Skeleton infrastructure for server implementation import workshop__POA #Base# Base component implementation from Acspy.Servants.ACSComponent import ACSComponent #Services# Services provided by the container to the component from Acspy.Servants.ContainerServices import ContainerServices #Basic# Basic component lifecycle (initialize, execute, cleanUp and aboutToAbort methods) from Acspy.Servants.ComponentLifecycle import ComponentLifecycle class HelloComponentImpl(workshop__POA.HelloComponent, ACSComponent, ContainerServices, ComponentLifecycle): def __init__(self): ACSComponent.__init__(self) ContainerServices.__init__(self) self._logger = self.getLogger() def printHello(self): print("Just printing 'Hello World!'") return "Hello World!" |
...
We modify the Makefile for this component:
Code Block | ||
---|---|---|
| ||
... JARFILES = HelloComponentImpl HelloComponentImpl_DIRS = acsws ... |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Suggested: import alma.<Module>.<Interface>Impl; //But anything, really package acsws.workshop.HelloComponentImpl; //Base component implementation, including container services and component lifecycle infrastructure import alma.acs.component.ComponentImplBase; //Skeleton interface for server implementation import acsws.workshop.HelloComponentOperations; //ClassName usually is <Interface>Impl, but can be anything public class HelloComponentImpl extends ComponentImplBase implements HelloComponentOperations { public HelloComponentImpl() { } public String printHello() { System.out.println("Just printing 'Hello World!'"); return new String("Hello World!"); } } |
...
We modify the Makefile for this component:
Code Block | ||
---|---|---|
| ||
... INCLUDES = HelloComponentImpl.h ... LIBRARIES = HelloComponentImpl HelloComponentImpl_OBJECTS = HelloComponentImpl HelloComponentImpl_LIBS = HelloComponentStubs acscomponent ... |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#ifndef _HELLO_COMPONENT_IMPL_H #define _HELLO_COMPONENT_IMPL_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 <HelloComponentS.h> //Error definitions for catching and raising exceptions class HelloComponentImpl : public virtual acscomponent::ACSComponentImpl, public virtual POA_workshop::HelloComponent { public: HelloComponentImpl(const ACE_CString& name, maci::ContainerServices * containerServices); virtual ~HelloComponentImpl(); char* printHello(); }; #endif |
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#include <HelloComponentImpl.h> HelloComponentImpl::HelloComponentImpl(const ACE_CString& name, maci::ContainerServices * containerServices) : ACSComponentImpl(name, containerServices) { } HelloComponentImpl::~HelloComponentImpl() { } char* HelloComponentImpl::printHello() { std::cout << "Just printing 'Hello World!'" << std::endl; return CORBA::string_dup("Hello World!"); } /* --------------- [ MACI DLL support functions ] -----------------*/ #include <maciACSComponentDefines.h> MACI_DLL_SUPPORT_FUNCTIONS(HelloComponentImpl) /* ----------------------------------------------------------------*/ |
...
First launch your acs container with the good modified ACS _CDB (If you want to component to start with the container).CDB
Code Block | ||||
---|---|---|---|---|
| ||||
acsStartContainer -py aragornContainer
acsStartContainer -java frodoContainer
acsStartContainer -cpp bilboContainer |
For simplicity, we implement a simple client in Python to communicate with the 3 programming languages:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
from Acspy.Clients.SimpleClient import PySimpleClient client = PySimpleClient() hc_py = client.getComponent("PY_HELLO_COMP") print(hc_java = client.getComponent("JAVA_HELLO_COMP") hc_cpppy.printHello()) hc_java = client.getComponent("CPPJAVA_HELLO_COMP") print(hc_pyjava.printHello()) print(hc_java.printHello()cpp = client.getComponent("CPP_HELLO_COMP") print(hc_cpp.printHello()) |
The output is seen on each container:
...