January 25, 2016 First experiences with CORBA Niko Neufeld
January 25, 2016Niko Neufeld The task Prepare a ring display for the RICH reconstruction/simulation Want to use JAVA 2D toolkit
January 25, 2016Niko 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
January 25, 2016Niko 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 Microsoft has a similar approach COM/OLE Interoperability is under way
January 25, 2016Niko 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
January 25, 2016Niko Neufeld CORBA - ORB All requests from objects to objects are handled by the Object Request Broker (ORB)
January 25, 2016Niko 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)
January 25, 2016Niko Neufeld IDL (trivial example) i nterface 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.
January 25, 2016Niko 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
January 25, 2016Niko Neufeld Working with CORBA
January 25, 2016Niko 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!
January 25, 2016Niko Neufeld What did I use? JAVA 1.2 on Linux fully compliant SUN certified port of 1.2 ORBacus for C++ and Java commercial software free for non-commercial use full CORBA IDL support, IDL to C++/Java mapping Linux (dual P2) gcc/egcs, java
January 25, 2016Niko 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