No Slide Title
Download
Report
Transcript No Slide Title
First experiences with CORBA
Niko Neufeld
March 26, 2016
The task
Prepare a ring display for the RICH
reconstruction/simulation
Want to use JAVA 2D toolkit
March 26, 2016
Niko Neufeld
Possible strategies
Dump data to file (from C++, read with Java)
Link together Java and C++
difficult, huge executable, always same client
Use a TCP socket
clumsy(!), ugly(!!), synchronization(!!!)
elegant, client - server, standard (C)
only primitive data types (basically bytes),
must provide your own protocol
CORBA
March 26, 2016
standardized, Java and C++ fully supported
free implementations available
Niko Neufeld
CORBA / OMG
OMG (Object Management Group)
comprises all major vendors except Microsoft
defines and develops the standard
the standard and most OMG document are available for public
download
http://www.omg.org
Microsoft has a similar approach COM/OLE
Interoperability is under way
March 26, 2016
Niko Neufeld
CORBA intro
CORBA stands for Common Object Request
Broker Architecture
It is a standard for object/component
cooperation
A component is usually a (collection of)
object(s) which performs a well defined task
e.g. display a histogram. It is (ideally):
It defines “services” for objects:
standalone, “plug and play”able across networks and
platforms
naming, persistency, transactions etc.
It is language/platform independent
March 26, 2016
Niko Neufeld
CORBA - ORB
All requests from objects to objects are
handled by the Object Request Broker (ORB)
March 26, 2016
Niko Neufeld
Interface Definition
Language (IDL)
IDL describes the interfaces which objects
show to the ORB
It contains:
modules = namespaces in C++
interfaces = abstract base classes in C++
operations = methods
data types = standardized types
basic:compatible to double, int, long, etc.
constructed: struct, sequence, string, any, union, enum
These are mapped to the respective
language types by the precompilers (idl, jidl)
March 26, 2016
Niko Neufeld
IDL (trivial example)
interface Y2K
{
const short y2k=2000 ;
attribute short currentyear ;
exception Y2Kbug {string yeah; };
void print(in short year) raises (Y2Kbug);
};
idl y2k.idl produces y2k_skel.cpp and y2k.cpp and the header files
Not shown here (lengthy - but no need to look into them)
y2k_skel is used for the implementation of the server part and y2k.h
for a possible client.
March 26, 2016
Niko Neufeld
Generated IDL file
//## Module: Photon
//## Subsystem: Rich::Detector
//## Source file: C:\Program Files\Rational\Rational Rose 98 Evaluation Edition\Rich\Detector\Photon.idl
#ifndef Photon_idl
#define Photon_idl
#include "Rich\Detector\Pixel.idl"
interface Photon : Trajectory {
//##begin Photon.initialDeclarations preserve=yes
//##end Photon.initialDeclarations
// Attributes
attribute double energy;
attribute double thetaCherenkov;
// Operations
void absorbed();
void scattered(in const HepPoint3D &position, in const HepPoint3D &direction);
};
#endif
March 26, 2016
Niko Neufeld
Working with CORBA
March 26, 2016
Niko Neufeld
How to use it
Server must be running somewhere
It produces a unique(!) Object reference for
the object whose service it offers
This reference can e.g. be stored as a string
and passed to a possible client
The client initializes the ORB, obtains the
object reference and gets a reference to the
object and can then call its methods
And it really works!
March 26, 2016
Niko Neufeld
What did I use?
JAVA 1.2 on Linux
ORBacus 3.1.2 for C++ and Java
www.blackdown.org/java-linux
fully compliant SUN certified port of 1.2
www.ooc.com/ob/
commercial software free for non-commercial use
full CORBA IDL support, IDL to C++/Java mapping
Linux 2.0.35 (dual P2)
March 26, 2016
gcc/egcs, java
Niko Neufeld
Some final remarks
I started out looking for a simple solution
for C++ and Java interoperability
CORBA works very nicely, it is a very high
level way of communication
I did not check performance issues
One gets distribution, client-server, multi
language (almost) for free
There seem to be a lot more interesting
possibilities
March 26, 2016
Niko Neufeld