Since 1997, our distributed systems research and deployment has been based upon CORBA, the industry standard specification for object-oriented middleware. We started our work with the development of omniORB, our own CORBA ORB.
CORBA is a very powerful technology, but with that power comes complexity, meaning that CORBA can be difficult to use. Our recent work has focussed on providing tools and other facilities to make CORBA easier to use and deploy. We have a four-pronged approach that helps us design new distributed applications:
omniORB is an industrial strength implementation of the CORBA standard, for the C++ language. Not only have we put it into use in our systems, we have also made it publicly available since 1997 under open source (GPL and LGPL) licensing conditions, with great success. It is one of the most standard compliant ORBs, and was one of the first products to pass the Open Group's standard conformance tests.
One of the most awkward aspects of using CORBA is the inconvenience and complexity of the standard language mappings to C++ and Java. omniORBpy brings the only complete Python binding to CORBA. The mapping is extremely simple -- the specification is only 16 pages long, compared to 130 for Java and 166 for C++. A simple CORBA interaction that would take 25 lines of C++ might take only 5 lines of Python code, for example.
Using Python dramatically simplifies CORBA programming. It has proved to be the ideal language to learn about CORBA, and it excels at programs used for testing and prototyping applications, as well as "glue" programs that tie other applications together. For some kinds and parts of applications, Python is a fine language for large-scale development too.
Like omniORB, omniORBpy is a successful open source project.
One way to provide assistance to CORBA application developers is to make use of the IDL definitions to generate additional output, effectively writing some of their program for them. omniidl is a compiler framework that makes it easy to write new code generators, without having to repeatedly implement the inconvenient task of reading in and parsing the IDL.
The code generators we have developed range from simple aids such as generating fill-in-the-blanks object implementations, through automatic test case generation, to some complex additional features provided by the Omni Object Services.
omniidl is publicly released as part of the omniORB distribution, and a number of outside projects make use of it. One notable use is within the Ethereal packet analyser, where omniidl is used to generate interface-specific packet decoders, so sniffed CORBA network traffic can be decoded.
Examples of the services we have implemented are an attribute watching service, enabling interested clients to receive notifications whenever the state of an object's attribute changes, and a distributed state caching service that alleviates network load and performance bottlenecks. Both of these services rely on annotating the application's IDL definitions, to provide small extra hints to the omniidl code generation.
For comments, suggestions and further information please contact us.
Copyright © 2001 AT&T Laboratories Cambridge