ObjectSpace has made a name for themselves in distributed computing over the past few years. They recently announced that Sun Microsystems had licensed ObjectSpace's JGL technology (a toolkit for building and managing collections) for integration with Sun's own JavaBlend technology. ObjectSpace has followed up with the release of their VoyagerPro 2.0 product, and I had the opportunity to work with a prerelease of the software.
The product ships on CD-ROM and is also available for download from ObjectSpace's Web site in a variety of formats. The CD-ROM version installs via InstallShield, and I had it installed under Windows NT and configured in a matter of minutes. A complete installation takes a little over 4 MB of disk space and doesn't require a system reboot. You need version 1.1 of the JDK on your machine to work with VoyagerPro. The software, written in Java, will run on any platform that supports a JDK 1.1 VM.
The VoyagerPro product, which is aimed at the professional developer marketplace, comes with a number of features aimed at providing distributed computing capabilities for your Java applications. The folks at ObjectSpace have bundled a lot of functionality into this product, and it's impossible to adequately cover all its capabilities here.
One impressive feature is a technology that ObjectSpace calls Dynamic Aggregation. It's particularly powerful in that it allows the developer to add functionality to third-party components, even if you don't have the source code for that component. Dynamic Aggregation goes beyond what inheritance and polymorphism provide for the object developer, as it allows the developer to attach secondary objects (which ObjectSpace refers to as facets) to a primary object at runtime.
The primary class doesn't have to be related in any way to the facet class, and you don't have to modify the class files of either object. VoyagerPro includes additional facilities for remote-enabling classes, synchronous and asynchronous messaging, CORBA translation and even mobile agents that can move themselves between programs.
VoyagerPro also features nice facilities for building multicast and publish/subscribe applications. It allows you to specify distributed containers, called Spaces, that can span programs. Multicast messages can be propagated automatically between the subspaces within a space, and VoyagerPro detects when duplicate messages are received.
The ObjectSpace team assumes that VoyagerPro will be used by experienced Java developers, so the examples are almost always short, direct and to the point. ObjectSpace includes sample code for all of the product's features, including Dynamic Aggregation. I built and ran the example aggregation code for employees and accounts without difficulty. I find it much easier to work with this type of example code.
VoyagerPro is packaged with a set of four utility programs and a Java archive of the VoyagerPro classes. The IGEN utility is used to generate an interface for your specified class file. You're allowed to specify the Java intepreter that will be called by IGEN, and the result of running IGEN will include all of the public methods for your specified class hierarchy. The CGEN, or code generator, generates IDL from Java files and Java from IDL files, allowing you easy access to CORBA from the Java language. Although VoyagerPro supports dynamic proxy generation, it also includes the PGEN utility for manual proxy generation when performance requirements or postprocessing needs justify the use of manual proxies.
The main utility is the Voyager program itself, with the VoyagerPro development server and ORB. The Voyager server uses a small footprint and includes its own HTTP listener for serving classes to other remote Voyager servers. Voyager is completely managed from the system command line, and any settings or parameters you wish to supply are passed on to the command line in a format familiar to UNIX programmers. The combination of the Voyager server and the VoyagerPro classes makes it easy to deploy a multitier application with a minimum of clutter. Although the Voyager server supports many common application server features such as logging, class loading at startup, listener port and Java intepreter parameters, the server itself offers a bare-bones interface. I was impressed with how quickly I could remote-enable VoyagerPro's example code.
VoyagerPro also includes an activation framework that allows objects to be persisted into a database without having to modify the object's class. I'd recommend VoyagerPro to developers who are looking to add powerful functionality to their Java applications using a simple, standards-neutral interface. Bookmark ObjectSpace's Web site, as they have recently announced some VoyagerPro add-ons in the form of transaction services, security services and Enterprise JavaBeans.
About the Author
Jim Milbery is an independent software consultant based in Easton, Pennsylvania. He has over 15 years of experience in application development and relational databases. Jim can be reached at [email protected] or via his Web site at www.milbery.com.