CORBA and Omega

The CORBA package in the Omega distribution is somewhat more complete and is known to work with the Orbacus implementation. It provides both the Dynamic Server Interface (DSI) and the Dynamic Invocation Interface (DII) I have spoken about. These allow applications to call methods in remote servers and to provide servers from arbitrary objects without requiring the compilation of CORBA stubs or skeletons. Additionally, a tool that converts Java classes to IDL for easy use with the DSI material is contained in the package which completes the dynamic mechanism. This is intended to allow existing Java classes to be instantiated and offered as CORBA servers without having to write IDL or implement the IDL skeleton directly. The instantiation can come from processing a CORBA request in another server. The generated IDL can be written to a file or directly to an Interface Repository.

The DII provides three different classes for invoking requests. These are one-way, blocking and deferred. These are explained in the CORBA documentation and are somewhat suggestive of their behavior.

Interactive Version

The dynamic invocation is done programmatically something like the following (using the interactive Omega language)
 call = new CorbaCall(server, "methodName", new Object[]{arg, arg, arg});
 call.result();

We provide syntactic sugar for the user to allow the same call to be specified interactively as
 server.methodName(arg,arg,arg);
This utilizes the extensibility of the parser, evaluator and expression classes.

Other Languages/Environments

The approach used in this package works for other interpreted languages such as S, R, Xlisp. The level of automation will vary for these languages as they provide more or less structure. Additionally, the lack of threads in these languages complicates the handling of CORBA objects as arguments. In these languages, the implementation of the DSI should be even simpler than the Java one since the evaluators in these languages will perform the method dispatching rather than requiring it to be done explicitly in the DSI's invoke() method.

S Implementation

The code for the S model is somewhat complete. Others are encouraged to take it and complete it as I am unlikely to get to it.
Duncan Temple Lang <duncan@research.bell-labs.com>
Last modified: Mon Mar 15 08:54:29 EST 1999