Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

We modify the Makefile for this component:

Code Block
titlepyHelloComponentpyHelloComp/src/Makefile
...
PY_PACKAGES = ws
...

...

Code Block
languagepy
titlepyHelloComponentpyHelloComp/src/workshopws/HelloComponentImpl.py
linenumberstrue
collapsetrue
#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!"

...

Code Block
languagejava
titlejHelloComponentjHelloComp/src/acsws/workshop/HelloComponentImpl/HelloComponentImpl.java
linenumberstrue
collapsetrue
//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
titlecppHelloComponentcppHelloComp/src/Makefile
...
INCLUDES = HelloComponentImpl.h
...
LIBRARIES = HelloComponentImpl
HelloComponentImpl_OBJECTS = HelloComponentImpl
HelloComponentImpl_LIBS = HelloComponentStubs acscomponent
...

...

Code Block
languagecpp
titlecppHelloComponentcppHelloComp/include/HelloComponentImpl.h
linenumberstrue
collapsetrue
#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
languagecpp
titlecppHelloComponentcppHelloComp/src/HelloComponentImpl.cpp
linenumberstrue
collapsetrue
#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
languagebash
titleStart container
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
languagepy
linenumberstrue
collapsetrue
from Acspy.Clients.SimpleClient import PySimpleClient

client = PySimpleClient()

hc_py = client.getComponent("PY_HELLO_COMP")
print(hc_java = client.getComponent("JAVA_HELLO_COMP")py.printHello())

hc_cppjava = client.getComponent("CPPJAVA_HELLO_COMP")

print(hc_pyjava.printHello())

print(hc_java.printHello())cpp = client.getComponent("CPP_HELLO_COMP")
print(hc_cpp.printHello())

Output

The output is seen on each container:

...