| CORBA Applications In GNOME | |||
|---|---|---|---|
| <<< Previous | Home | Next >>> | |
Even though the CORBA specification, and the ORBit implementation thereof, provide much functionality for GNOME, there are still pieces of a complete CORBA framework that are missing from those components. One of the biggest gaps in the CORBA specification is the lack of a standard way to start a server program for a particular object.
The implementation repository has sometimes been touted as the solution to this problem. The problem with the impl repo is that none of its interfaces are specified by the CORBA spec, meaning that one would have to be tied to a specific CORBA implementation in order to access the impl repo. When used via persistent object references, one must also have an implementation repository daemon running at all times on a well-known port. The impl repo also does not typically allow specifying server activation options, nor does it allow activating a server from a shared library.
Enter GOAD. The GNOME Object Activation Directory stores information on all the programs on a system that can act as an object server. The information stored in this directory includes the server type (shared library, executable, or "relay"), a listing of the CORBA interfaces supported by the server, a unique "server_id" that identifies the particular implementation, a human-readable description, and the filename of the executable or shared library.
The ``executable'' activation method of GOAD executes a program and returns an object reference to the object server that the program provides. Using the GNOME plug-in specification, the ``shared library'' activation method loads the object server from a shared library directly into the address space of the current program. This takes advantage of ORBit's in-process operation invocation abilities to make lightweight CORBA objects practical.
The ``relay'' activation method adds extensibility to the GOAD directory. It acquires an object reference to the object server by contacting a CORBA ``relay'' server which can do further processing on the activation request. This may become useful, for example, when large numbers of GOAD objects need to be load-balanced across multiple computer systems.
In addition to the above methods, GOAD also can check if a server for the object is already running. GOAD uses the CORBA name service as a central registry of running object servers. The information necessary to contact the name service is stored as a property on the root window of the X display of the GNOME session, contributing to GNOME's goal of network transparency. The approach of using existing object servers whenever possible allows multiple clients to share the same server, reducing resource usage.
When activating an object server, the client also has the ability to specify how it would prefer that the object be activated and other activation details. The result is a system of object server activation that allows maximum flexibility for object clients, object servers, and system administrators alike.
In addition to GOAD, the GNOME library that stores CORBA-related functionality (libgnorba) also has the behind-the-scenes routines for handling CORBA request authentication and ORB integration with the GTK main loop. Request authentication is handled on a per-display basis by passing a secret cookie along with every CORBA operation invocation. This is all completely transparent to the GNOME application, allowing future use of new security mechanisms such as SSL or the CORBA security service.
Besides GOAD and other libgnorba functionality, the GNOME CORBA framework also defines a number of standard interfaces that programs commonly implement, including generic factory and reference-counted object interfaces. These are implemented by many of the CORBA servers in the various GNOME applications, such as the panel, file manager, and spreadsheet.