Whole document tree
Sample Code for Example.idlThe JavaTM 2 SDK, Standard Edition, v1.3 includes a new version of the IDL-to-Java compiler, idlj. This compiler supports new CORBA-standard features required for RMI-IIOP. This document shows the code generated by the IDL-to-Java compiler in accordance with the CORBA 2.3 specification. The followng file, Example.idl, is written in the OMG Interface Definition Language. OMG IDL is a purely declarative language designed for specifying programming-language-independent operational interfaces for distributed applications. OMG specifies a mapping from IDL to several different programming languages, including C, C++, Smalltalk, COBOL, Ada, and Java. When mapped, each statement in OMG IDL is translated to a corresponding statement in the programming language of choice.
module Example { interface Counter { boolean increment (in long arg); }; }; Generated FilesThe idlj compiler uses the IDL-to-Java mapping to convert IDL interface definitions to corresponding Java interfaces, classes, and methods, which you can then use to implement your client and server code. The following files are generated when Example.idl is compiled with the IDL-to-Java compiler, using the following command:
idlj -fall Example.idl
Counter.java, the signature interfaceThe signature interface file, Counter.java extends
org.omg.portable.IDLEntity, org.omg.CORBA.Object, and the
operations interface, CounterOperations. The signature interface is used as the signature type in
method declarations when interfaces of the specified type are used in other
interfaces. From the client's point
of view, an object reference for a CORBA
Note: The Stub implements the
package Example; /** * Example/Counter.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Example.idl * Monday, November 6, 2000 6:01:53 PM PST */ public interface Counter extends CounterOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity { } // interface Counter
CounterOperations.java, the operations interface
The Java operations interface,
package Example; /** * Example/CounterOperations.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Example.idl * Thursday, November 9, 2000 7:04:12 PM PST */ public interface CounterOperations { boolean increment (int arg); } // interface CounterOperations CounterHelper.java, the Helper classThe Java class
package Example; /** * Example/CounterHelper.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Example.idl * Thursday, November 9, 2000 7:04:12 PM PST */ abstract public class CounterHelper { private static String _id = "IDL:Example/Counter:1.0"; public static void insert (org.omg.CORBA.Any a, Example.Counter that) { org.omg.CORBA.portable.OutputStream out = a.create_output_stream (); a.type (type ()); write (out, that); a.read_value (out.create_input_stream (), type ()); } public static Example.Counter extract (org.omg.CORBA.Any a) { return read (a.create_input_stream ()); } private static org.omg.CORBA.TypeCode __typeCode = null; synchronized public static org.omg.CORBA.TypeCode type () { if (__typeCode == null) { __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (Example.CounterHelper.id (), "Counter"); } return __typeCode; } public static String id () { return _id; } public static Example.Counter read (org.omg.CORBA.portable.InputStream istream) { return narrow (istream.read_Object (_CounterStub.class)); } public static void write (org.omg.CORBA.portable.OutputStream ostream, Example.Counter value) { ostream.write_Object ((org.omg.CORBA.Object) value); } public static Example.Counter narrow (org.omg.CORBA.Object obj) { if (obj == null) return null; else if (obj instanceof Example.Counter) return (Example.Counter)obj; else if (!obj._is_a (id ())) throw new org.omg.CORBA.BAD_PARAM (); else { org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate (); return new Example._CounterStub (delegate); } } } CounterHolder.java, the Holder classThe Java class called CounterHolder holds a public Counter member. Holders are required for CORBA operations that take out or inout arguments, which, unlike CORBA in arguments, don't map directly to Java's pass-by-value semantics.
package Example; /** * Example/CounterHolder.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Example.idl * Thursday, November 9, 2000 7:04:11 PM PST */ public final class CounterHolder implements org.omg.CORBA.portable.Streamable { public Example.Counter value = null; public CounterHolder () { } public CounterHolder (Example.Counter initialValue) { value = initialValue; } public void _read (org.omg.CORBA.portable.InputStream i) { value = Example.CounterHelper.read (i); } public void _write (org.omg.CORBA.portable.OutputStream o) { Example.CounterHelper.write (o, value); } public org.omg.CORBA.TypeCode _type () { return Example.CounterHelper.type (); } } _CounterStub.java, the client stubThe Java class _CounterStub is the stub file for the client-side mapping.
package Example; /** * Example/_CounterStub.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Example.idl * Thursday, November 9, 2000 7:04:12 PM PST */ public class _CounterStub extends org.omg.CORBA.portable.ObjectImpl implements Example.Counter { // Constructors // NOTE: If the default constructor is used, the // object is useless until _set_delegate (...) // is called. public _CounterStub () { super (); } public _CounterStub (org.omg.CORBA.portable.Delegate delegate) { super (); _set_delegate (delegate); } public boolean increment (int arg) { org.omg.CORBA.portable.InputStream _in = null; try { org.omg.CORBA.portable.OutputStream _out = _request ("increment", true); _out.write_long (arg); _in = _invoke (_out); boolean __result = _in.read_boolean (); return __result; } catch (org.omg.CORBA.portable.ApplicationException _ex) { _in = _ex.getInputStream (); String _id = _ex.getId (); throw new org.omg.CORBA.MARSHAL (_id); } catch (org.omg.CORBA.portable.RemarshalException _rm) { return increment (arg); } finally { _releaseReply (_in); } } // increment // Type-specific CORBA::Object operations private static String[] __ids = { "IDL:Example/Counter:1.0"}; public String[] _ids () { return (String[])__ids.clone (); } private void readObject (java.io.ObjectInputStream s) { try { String str = s.readUTF (); org.omg.CORBA.Object obj = org.omg.CORBA.ORB.init ().string_to_object (str); org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate (); _set_delegate (delegate); } catch (java.io.IOException e) {} } private void writeObject (java.io.ObjectOutputStream s) { try { String str = org.omg.CORBA.ORB.init ().object_to_string (this); s.writeUTF (str); } catch (java.io.IOException e) {} } } // class _CounterStub _CounterImplBase.java, the server skeletonThe Java class _CounterImplBase is the skeleton file for the server-side mapping.
package Example; /** * Example/_CounterImplBase.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Example.idl * Thursday, November 9, 2000 7:04:11 PM PST */ public abstract class _CounterImplBase extends org.omg.CORBA.portable.ObjectImpl implements Example.Counter, org.omg.CORBA.portable.InvokeHandler { // Constructors public _CounterImplBase () { } private static java.util.Hashtable _methods = new java.util.Hashtable (); static { _methods.put ("increment", new java.lang.Integer (0)); } public org.omg.CORBA.portable.OutputStream _invoke (String method, org.omg.CORBA.portable.InputStream in, org.omg.CORBA.portable.ResponseHandler rh) { org.omg.CORBA.portable.OutputStream out = null; java.lang.Integer __method = (java.lang.Integer)_methods.get (method); if (__method == null) throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE); switch (__method.intValue ()) { case 0: // Example/Counter/increment { int arg = in.read_long (); boolean __result = false; __result = this.increment (arg); out = rh.createReply(); out.write_boolean (__result); break; } default: throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE); } return out; } // _invoke // Type-specific CORBA::Object operations private static String[] __ids = { "IDL:Example/Counter:1.0"}; public String[] _ids () { return __ids; } } // class _CounterImplBase
Completing the applicationTo complete the application, the developer must write the client and server code.
|