130 likes | 224 Views
First experiences with CORBA. Niko Neufeld. The task. Prepare a ring display for the RICH reconstruction/simulation Want to use JAVA 2D toolkit. Possible strategies. Dump data to file (from C++, read with Java) clumsy(!), ugly(!!), synchronization(!!!) Link together Java and C++
E N D
First experiences with CORBA Niko Neufeld
The task • Prepare a ring display for the RICH reconstruction/simulation • Want to use JAVA 2D toolkit Niko Neufeld
Possible strategies • Dump data to file (from C++, read with Java) • clumsy(!), ugly(!!), synchronization(!!!) • Link together Java and C++ • difficult, huge executable, always same client • Use a TCP socket • elegant, client - server, standard (C) • only primitive data types (basically bytes), must provide your own protocol • CORBA • standardized, Java and C++ fully supported • free implementations available Niko Neufeld
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 CORBA / OMG 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): • standalone, “plug and play”able across networks and platforms • It defines “services” for objects: • naming, persistency, transactions etc. • It is language/platform independent Niko Neufeld
CORBA - ORB • All requests from objects to objects are handled by the Object Request Broker (ORB) 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) 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); }; idly2k.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. 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 Niko Neufeld
Working with CORBA 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! Niko Neufeld
What did I use? • JAVA 1.2 on Linux • www.blackdown.org/java-linux • fully compliant SUN certified port of 1.2 • ORBacus 3.1.2 for C++ and Java • 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) • 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 Niko Neufeld