COPE - CORBA meets Perl This is a heavily modified version of Bart Schuller's COPE package. The modifications were mostly done at Secure Computing Corporation by Irving Reid and David Kerry, with some early work by Tim Tiemens. Ongoing maintenance and support under the Artistic License is being done by Irving Reid . See http://www.lunatech.com/cope/ for Bart Schuller's original COPE package, and pointers to the COPE mailing list. This release requires Perl 5.005; I make use of some of the structure-as-array features added during the 5.005 development cycle. These changes would be easy to undo, if people strongly desire compatibility with earlier versions of Perl. To use this package, you must install the Orbacus (formerly OmniBroker) Interface Repository. Orbacus is free for non-commercial use, and commercial pricing is quite reasonable. I'd like to put in a big plug for OOC here; I dealt with them extensively at Secure Computing, and they were very responsive and produce a great product. See http://www.ooc.com/ to download Orbacus. This release includes an example directory that contains some simple object implementations, demonstrating a number of ways that the COPE package can be used as a server. MAJOR CHANGES: ** Split generated stubs/skeletons/implementations into separate files for each CORBA module and interface o Added a number of Portable Object Adapter-ish features to the BOA to support persistent objects o Support for recursive structures (this needs cleaning up) o Listen on multiple sockets, potentially with different IP addresses o Non-blocking IO on the server side; input is collected from / written to all sockets until a complete request is received so that a single client can't block the server by writing a partial message and then hanging o Support for IIOP over SSL, using Eric Young's SSLeay o Callbacks to user code on client connection and disconnection, and before and after methods are invoked (we use them for logging and authentication) o Garbage collection of server-side objects when all clients holding references to the object disconnect (this is a little bit broken right now) CONVERTING AN APPLICATION: Aside from the addition of unions, the only change visible on the client side is that idl2perl now generates a bunch of .pm files for the stubs, so you may need to add "use what::ever::else;" lines to your client for each interface in your IDL definition. Converting the server side is more involved. The major differences are: - you should "use what::ever_impl", not *_skel, in your server - DON'T CREATE SKELETONS! When you create objects, you should create an _impl object and then activate it; the BOA creates the skeleton when you activate - There are a bunch of new definitions required in the _impl.pm files; the easiest way to get these right is probably to generate a new set of _impl.pm files and either cut&paste your code in, or copy the boilerplate out of the top of the new _impl.pm into your existing implementation. I took the second approach in converting lib/COPE/CosNaming_impl.pm; the changes to that file, bin/cope_ns.PL, and the test suite (compared to those in COPE 0.04) would be a good example for anyone converting an existing COPE server. TODO: Some of items from Bart's TODO list have been covered; in particular, this release implements unions - in a relatively heavyweight way, resembling the Java language binding. Major things on my todo list are: o A real POA implementation o Interface Repository o Dynamic Invocation / Server interfaces (DII, DSI) o Other standard CORBA services o Reduce the size of the generated code (perhaps get rid of stubs and skeletons entirely) o Integrate recent changes to Bart's version of COPE $Id: README.04_x 1206 2006-05-31 07:11:53Z rvosa $ Copyright (c) 1998 Irving Reid See the file "Artistic" in the distribution for licensing and (lack of) warranties.