Title: First experiences with CORBA
1First experiences with CORBA
2The task
- Prepare a ring display for the RICH
reconstruction/simulation - Want to use JAVA 2D toolkit
3Possible 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
4CORBA / 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
5CORBA 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 playable across networks
and platforms - It defines services for objects
- naming, persistency, transactions etc.
- It is language/platform independent
6CORBA - ORB
- All requests from objects to objects are handled
by the Object Request Broker (ORB)
7Interface 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
- basiccompatible 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)
8IDL (trivial example)
interface Y2K const short y2k2000
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.
9Generated IDL file
// Module Photon // Subsystem
RichDetector // 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.initialDeclaration
s preserveyes //end Photon.initialDeclaration
s // Attributes attribute double energy
attribute double thetaCherenkov //
Operations void absorbed() void
scattered(in const HepPoint3D position, in const
HepPoint3D direction) endif
10Working with CORBA
11How 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!
12What 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
13Some 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