Issues for Java to IDL RTF Discussion Mailing List

To comment on any of these issues, send email to java2idl-rtf@omg.org. (Please include the issue number in the Subject: header, thusly: [Issue ###].) To submit a new issue, send email to issues@omg.org.

List of issues (green=resolved, yellow=pending Board vote, red=unresolved)

List options: All ; Open Issues only; or Closed Issues only

Issue 1578: Public method declarations in ResponseHandler interface
Issue 1589: orb() method on InputStream
Issue 1590: Marshalling of Any, Context, Principal, and TypeCode
Issue 1591: Default Constructor for Stubs
Issue 1592: How to make IDLEntity types serializable
Issue 1593: Obtaining a default ORB
Issue 1594: SerializationInputStream and SerializationOutputStream
Issue 1595: Unicode example needs fixing
Issue 1596: Mapping for nested sequences --- fix example
Issue 1597: Need to emit ID pragmas after declarations
Issue 1598: Lexigraphic sort for field names is before mangling
Issue 1599: Narrow signature does not allow use for abstract interfaces
Issue 1600: Section 5.7.4 : mapped IDL issue
Issue 1601: Can toStub take a stub?
Issue 1602: Does toStub return most derived stub?
Issue 1603: Clarify rules for mapping server-side errors and exceptions
Issue 1604: The generated IDL in A2 needs to be changed
Issue 1606: mangling rule for name clashes in IDL needs to be defined
Issue 1607: Do we need to protect non-generated IDL files against multiple inclusion?
Issue 1608: Rules in section 7.4.4 for toStub IIOP/JRMP search not correct
Issue 1609: Should exportObject throw exceptions?
Issue 1610: PortableRemoteObject toStub should throw NoSuchObject Exception
Issue 1619: Abstract Interfaces issue
Issue 1620: Omission in section 5.4.5
Issue 1621: Stub methods for hashCode, equals and toString
Issue 1640: Should Portability APIs throw SystemException?
Issue 1641: Mapping of Java names that are IDL keywords
Issue 1642: Java to IDL identifier mapping
Issue 1662: read_AbstractObject and write_AbstractObject
Issue 1736: Local stubs proposal
Issue 1780: JTS exceptions
Issue 1891: Need to #include orb.id
Issue 1894: Value methods not mapped in spec examples
Issue 1931: Need overloaded write_Value method on OutputStream
Issue 1957: Mapping of non-public types
Issue 1958: Mapping of java.rmi remoteException superclasses
Issue 1960: Mapping of Java arrays
Issue 1965: Eliminating server wait code
Issue 2081: Specifying code downloading
Issue 2082: Mapping of RuntimeException
Issue 2088: The mapping of java.lang.Class to IDL is not specified
Issue 2089: Custom marshalling wire format
Issue 2090: Mapping of Object, Serializable and Externalizable
Issue 2091: Support for serialPersistentFields
Issue 2092: RMI/ORB marshalling interface
Issue 2111: mapping from java.rmi Remote to CORBA::Object
Issue 2225: javax.rmi package use
Issue 2370: Mangling of Java long type not specified
Issue 2466: Mapping private Java methods to IDL
Issue 2467: Change write_* names in Util class
Issue 2468: IIOP/JRMP stubs name clash
Issue 2469: IDLEntity exception types as parameters and results
Issue 2470: Completion status missing from exception string
Issue 2471: RMI/IDL Tie changes
Issue 2472: Interfaces and values should be mapped consistently
Issue 2473: Mappings for non-conforming types
Issue 2474: Mapping for non-conforming class
Issue 2475: Definition of Stub.equals method
Issue 2476: IDLEntity types need to be boxed
Issue 2477: RMI Repository ID proposed change
Issue 2478: Replaceability of javax.* APIs
Issue 2479: Use of "java" as top-level IDL module
Issue 2480: export/unexport errors not well specified
Issue 2481: mapSystemException should preserve original exception
Issue 2482: Mapping of java.rmi.Remote
Issue 2483: NotSerializableException for RMI-IIOP
Issue 2484: Need read_Value(clz) on InputStream
Issue 2503: Need getTarget method on Tie interface
Issue 2504: Misleading wording in section 28.5.1.4
Issue 2505: ::java::lang::Exception is illegal IDL
Issue 2535: Mapping remote interface types to RMI-style repository IDs
Issue 2545: mapping of java.lang.Exception
Issue 2552: Treatment of classes with writeReplace/readResolve methods
Issue 2565: Mapping of Java constructors to init is broken
Issue 2804: stub classes can violate licensing and package sealing
Issue 2805:
Issue 2806:
Issue 2807:
Issue 2808:
Issue 2809:
Issue 2810:
Issue 2813:
Issue 2815:
Issue 2816:
Issue 2818:
Issue 2894: Security problem in JavaToIDL mapping
Issue 3093: PortableRemoteObject.narrow(null)
Issue 3117: Name mangling scheme broken.
Issue 3118: Boolean attributes
Issue 3151: Stream format problem for custom marshalled RMI types
Issue 3152: Tie.deactivate() exception handling
Issue 3160: Definition of serialVersionUID field
Issue 3200: Container/member name clashes
Issue 3433: No factory for javax.rmi.ClassDesc
Issue 3590: loader.loadClass() or Class.forName()?
Issue 3641: Java to IDL mapping contradictive to CORBA/IIOP 2.3.1
Issue 3670: Exception mapping needs fixing
Issue 3754: Java reverse mapping local case cannot properly support Portable Intercepto
Issue 3798: ValueHandler Interface
Issue 3857: Descriptions of readAny and writeAny not precise enough
Issue 3858: Package for PortableRemoteObjectDelegate
Issue 3969: Mapping of CORBA any and TypeCode
Issue 4004: Mapping CORBA minor codes to Java
Issue 4058: Mapping of Java byte constants to IDL
Issue 4296: javax.rmi.CORBA.Util.isLocal RemoteException condition(s) not specified
Issue 4319: Behavior of Java writeUTF/readUTF
Issue 4429: Issue with using the local stub with for example an EJB application
Issue 4497: Mapping subclasses of custom-marshaled Java classes to IDL
Issue 4591: New issue: Behavior of writeByte, writeChar, writeBytes, writeChars
Issue 4656: Mapping of ExceptionDetailMessage service context
Issue 4690: There is a typo on page 1-46.
Issue 4698: mapSystemException server mapping
Issue 4795: RMI-IIOP interop bet. J2SE 1.3 and 1.4
Issue 5330: Stream encoding for omitted optional custom data
Issue 5332: Urgent issue: javax.rmi.CORBA.Stub serialVersionUID
Issue 5454: Java Codebase tagged component and POA
Issue 5723: Issue with ValueHandler.getRunTimeCodeBase and PRO.exportObject
Issue 5741: 1.2.3 RMI/IDL Remote Interfaces 2
Issue 5742: scheme for mapping names is pretty byzantine
Issue 5772: Name mapping rules for non-ASCII characters
Issue 5853: ORB shutdown should be configurable
Issue 5879: Custom Marshaling Format Clarification
Issue 5891: Guidance on RepositoryIDs for primitive types
Issue 5991: Request clarification on copyObject(s) semantics
Issue 6410: Custom marshalled abstract interfaces and Java/IDL
Issue 6411: Custom marshalled abstract interfaces and Java/IDL
Issue 6992: defaultWriteObject clarification
Issue 7217: Mapping CORBA activity exceptions to Java
Issue 7595: No wire format defined for java.lang.reflect.Proxy classes
Issue 10336: Section: 1.3, Page: 1-21

Issue 1578: Public method declarations in ResponseHandler interface (java2idl-rtf)

Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item affects the Java-to-IDL spec, but is also of concern to the
 IDL-to-Java RTF because it relates to the new portability stub APIs.
 
 Section 7.2.2 of the Java to IDL mapping specifies a new interface
 ResponseHandler with methods createReply and createExceptionReply.
 These methods are declared as public.
 
 Section 9.4 of the Java Language Specification states that "Every
 method declaration in the body of an interface is implicitly public.
 It is permitted, but strongly discouraged as a matter of style, to
 redundantly specify the public modifier for interface methods."
 
 I propose that the public modifier be removed from these method
 declarations.
 

Resolution:
Revised Text:
Actions taken:
June 24, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1589: orb() method on InputStream (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item affects the Java-to-IDL spec, but is also of concern to the
 IDL-to-Java RTF because it relates to the new portability stub APIs.
 
 An orb() method is needed on org.omg.CORBA.portable.InputStream for
 SerializationInputStream to call to find which ORB to use for 
 lookup_value_factory during execution of read_Value.
 
 I propose adding an orb() method to org.omg.CORBA.portable.InputStream.
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1590: Marshalling of Any, Context, Principal, and TypeCode (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item arises from the Java-to-IDL Mapping RFP, but is also of 
 concern to the IDL-to-Java RTF because it affects the IDL-to-Java
 mapping.
 
 How do SerializationInputStream and SerializationOutputStream marshal
 Any, Context, Principal, and TypeCode objects?  Is the same mechanism
 used as for user-defined IDL types, i.e., look for the IDLEntity
 marker interface and call the implementation helper class"s write
 or read method?  If so, we need to clarify that vendor implementation
 of these types must implement IDLEntity and provide a Helper class.
 
 I propose that we state in the spec that vendor implementations	of 
 these types must implement IDLEntity and provide a Helper class.
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1591: Default Constructor for Stubs (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item arises from the Java-to-IDL Mapping RFP, but is also of 
 concern to the IDL-to-Java RTF because it affects the IDL-to-Java
 mapping.
 
 When adding support for idlToJava generated Stubs to 
 "InputStream.read_Object(java.lang.Class clz)" we ran into a small 
 problem while writing the code.  Initially we used "clz.newInstance()"
 to create an instance of the Stub object.  The problem here is the 
 Stub does not have a default constructor, so newInstance throws an
 exception.  We added a default constructor to the stub and everything
 worked fine.  The question is: should we add a default constructor to
 the stubs generated by idlToJava or should we use reflection(cost??) to
 invoke the one constructor that is already a member of the stub class?
 
 I propose that we state in the spec that a default constructor is
 required on all generated Stubs.
 
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1592: How to make IDLEntity types serializable (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item arises from the Java-to-IDL Mapping RFP, but is also of 
 concern to the IDL-to-Java RTF because it affects the IDL-to-Java
 mapping.
 
 The Java to IDL mapping spec states that Java types produced by
 the direct mapping should implement IDLEntity and be serializable.
 This could be accomplished by having IDLEntity extend 
 Java.io.Serializable, or by having the generated types extend
 both IDLEntity and java.io.Serializable.  The spec should
 specify which of these approaches is to be used.
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1593: Obtaining a default ORB (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item arises from the Java-to-IDL Mapping RFP, but is also of 
 concern to the IDL-to-Java RTF because it affects the IDL-to-Java
 mapping.
 
 There are two places in the Java to IDL mapping spec that imply
 the use of a default ORB.  One is the toStub method of the
 PortableRemoteObject class, and the other is the readObject method
 of the javax.rmi.CORBA.Stub class.  It is not clear how we can 
 obtain a suitable default ORB for use in these APIs without either
 excessive resource consumption (if we start a new ORB every time)
 or violating applet isolation boundaries (if we use the same ORB
 every time).
 

Resolution: Closed, accepted
Revised Text:
Actions taken:
June 29, 1998: received issue
June 4, 1999: closed issue

Discussion:
There is a problem with implementing the deserialization of stubs
and the PortableRemoteObject.toStub method.  Both of these require
an ORB object to which the returned stub object will be connected
via its delegate.  However, there is no well-specified way to obtain
a suitable implicit ORB object in CORBA.

In the case of stub deserialization, it is not possible to pass an 
explicit ORB object to the deserialization operation.  In the case
of toStub, we do not wish to add an explicit ORB object because this
breaks the "portable RMI" programming model in which application
code refers only to RMI types and not to CORBA types.

Proposal:

Deserialization of javax.rmi.CORBA.Stub creates an "unconnected" stub.
Before being used, it must be connected to an ORB.  This will happen
automatically if the unconnected stub is written to a GIOP marshaling
stream by being passed to javax.rmi.CORBA.writeRemoteObject or
javax.rmi.CORBA.writeAbstractObject.  However, in other cases, the stub
must be connected explicitly.  To enable this, the method
   void connect(ORB orb) throws RemoteException { ... }
is added to the javax.rmi.CORBA.Stub class, and the method
   static void connect(java.rmi.Remote unconnected, 
                       java.rmi.Remote connected)
               throws RemoteException { ... }
is added to the javax.rmi.PortableRemoteObject class.

The Stub.connect method throws RemoteException if called on a stub that
is already connected to an ORB (i.e., has a delegate set).  Otherwise,
a delegate is created for this stub and the specified ORB.  This method
is not intended to called directly by application code; instead,
application code should call the PortableRemoteObject.connect method,
which will in turn call the Stub.connect method.  This allows the
application code to remain portable between IIOP and JRMP.

The PortableRemoteObject.connect method may take an RMI/IDL stub or
an exported RMI/IDL implementation object as its "unconnected" and
"connected" parameters.  If "unconnected" is a connected object 
(i.e., an RMI/IDL CORBA stub with a delegate or an implementation
object with an RMI/IDL tie that has been associated with an ORB),
then a RemoteException is thrown.  Similarly if "connected" is an
unconnected object (i.e., an RMI/IDL CORBA stub without a delegate
or an implementation object whose RMI/IDL tie has not been associated
with an ORB), then a RemoteException is thrown.  Otherwise, "unconnected"
is connected to the same ORB as "connected" by setting its delegate if
it is a stub or by associating its tie with an ORB if it is an
implementation object.

RMI/IDL implementation objects may be connected implicitly by being
passed to javax.rmi.CORBA.writeRemoteObject or
javax.rmi.CORBA.writeAbstractObject, or explicitly by means of the
PortableRemoteObject.connect method.  Connecting an implementation
object is not the same as exporting it, and RMI/IDL implementation 
objects may be unconnected when first exported.  RMI/IDL implementation
objects are implicitly connected when they are exported to JRMP, and
RMI-JRMP stubs are implicitly connected when they are created.

The stub returned by PortableRemoteObject.toStub has the same
connection status as the target implementation object passed to toStub. 
So if the target object is connected, the returned stub is connected
to the same ORB.  If the target object is unconnected, the returned
stub is unconnected.

The javax.rmi.CORBA.Stub.writeObject method writes the following data
to the serialization stream:
 1. int - length of IOR type id  
 2. byte[] - IOR type ID encoded using ISO 8859-1
 3. int - number of IOR profiles
 4. For each IOR profile:
    a. int - profile tag
    b. int - length of profile data
    c. byte[] - profile data


Issue 1594: SerializationInputStream and SerializationOutputStream (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item arises from the Java-to-IDL Mapping RFP, but is also of 
 concern to the Objects By Value RTF because it affects the Java
 ORB implementation of Objects By Value.
 
 The currently specified delegation relationship between 
 SerializationInputStream and SerializationOutputStream and their
 underlying ORB stream classes is inefficient and awkward.
 It is awkward because it requires the ORB implementation of the
 underlying streams to know about their "wrapper" serialization
 streams and to be careful to always pass out a reference to the
 wrapper instead of a "this" pointer.  It is inefficient because
 all items (even primitives) that are written to these streams 
 need to go through an extra delegation step through the wrapper 
 class as the underlying stream does not know whether it can
 safely bypass the wrapper method.
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1595: Unicode example needs fixing (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  The Unicode example given in the spec (5.2.4) is x\u22aBy
     javac diagnoses \u22aB as an invalid character in an identifier.
 
     A Java identifier may only consist of Unicode characters that denote a
     letter or a digit in a language. \u22aB (apparently) does not.
 
     Try \u03bC instead. According to 8.2.1 it"s a Greek mu. javac is happy
     with it.
 
     Proposed resolution: fix example
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: close issue

Discussion:


Issue 1596: Mapping for nested sequences --- fix example (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  mapping for nested sequences:
     - error in section 5.6 sequence<seq_Y>
     - no occurrence of >> so no need for white space
 
     Proposed resolution: fix example in section 5.6
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:
 resolved, close issue


Issue 1597: Need to emit ID pragmas after declarations (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 10. Need to emit ID pragmas after declarations
 

Resolution:
Revised Text: resolved, close issue
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1598: Lexigraphic sort for field names is before mangling (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Lexigraphic sort for field names is before mangling
 
     Proposed resolution: clarify section 5.5.6
 

Resolution:
Revised Text: clarify section 5.5.6
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1599: Narrow signature does not allow use for abstract interfaces (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 12. Narrow signature does not allow use for abstract interfaces
 
     Proposed resolution: return java.lang.Object
 

Resolution:
Revised Text: return java.lang.Object
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1600: Section 5.7.4 : mapped IDL issue (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In section 5.7.4 the mapped IDL for Thrower includes:
        FruitbatException getLastException();
     It should be
        readonly attribute ::omega::FruitbatException lastException;
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:
 In section 5.7.4, example IDL, change



Issue 1601: Can toStub take a stub? (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  Can toStub take a stub?
 
     Proposed resolution: yes, in which case it"s a no-op.
 

Resolution:
Revised Text: yes, in which case it"s a no-op.
Actions taken:
June 29, 1998: received issue
February 24, 1999: closed issue

Discussion:


Issue 1602: Does toStub return most derived stub? (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 15. does toStub return most derived stub, or iterate looking for one?
 

Resolution:
Revised Text: resolved, close issue
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:
 received issue


Issue 1603: Clarify rules for mapping server-side errors and exceptions (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 17. Need to clarify rules for mapping server-side errors and runtime
     exceptions back to client exceptions.
 
     Proposed resolution: use omg.omg.CORBA.UNKNOWN
 
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:
 issue resolved and fixed


Issue 1604: The generated IDL in A2 needs to be changed (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The generated IDL in A2 needs to be changed.
 
     In particular, forward declares for fred.Test2 and fred.Stuff must
     appear before #includes, before sequence defs and before the module
     definition. Their #includes must appear at the end. In fact, just follow
     the file layout rules described at the beginning of the appendix. 
 
     If this is not done, there is a danger that circular references will
     lead to undeclared types when the IDL is compiled.
 
     Proposed resolution: fix example
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1606: mangling rule for name clashes in IDL needs to be defined (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Need to define a mangling rule for name clashes in IDL between 
     constant/method/attribute.
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1607: Do we need to protect non-generated IDL files against multiple inclusion? (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Do we need to protect non-generated IDL files against multiple
     inclusion?
 
     Proposed resolution: no protection
 
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:
 No.--close issue


Issue 1608: Rules in section 7.4.4 for toStub IIOP/JRMP search not correct (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Rules in section 7.4.4 for toStub IIOP/JRMP search aren"t quite correct.
     If the object has been exported as IIOP (i.e., an IIOP Tie exists),
     no attempt will be made to create a JRMP stub even if there is no IIOP
     stub class.
 
     Proposed resolution: clarify spec
 
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1609: Should exportObject throw exceptions? (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 25. Should exportObject throw exceptions?
 

Resolution:
Revised Text: resolved, close issue
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue

Discussion:
 received issue


Issue 1610: PortableRemoteObject toStub should throw NoSuchObject Exception (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  PortableRemoteObject.toStub should throw NoSuchObjectException if object
     has not been exported.
 

Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue

Discussion:
 received issue


Issue 1619: Abstract Interfaces issue (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The current Java to IDL mapping spec does not fully address support
 for abstract interfaces.  There is support for these in the
 Portability Interfaces chapter, but not in the RMI/IDL Subset or
 IDL Mapping chapters. 
 

Resolution:
Revised Text:
Actions taken:
June 30, 1998: received issue
February 24, 1999: closed issue

Discussion:


Issue 1620: Omission in section 5.4.5 (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The text in section 5.4.5 has no mention of String constants.
 This seems to be an accidental omission.  I propose replacing
 the text in this section by the text in section 5.5.5, with
 "value type" changed to "interface".
 

Resolution:
Revised Text:
Actions taken:
June 30, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1621: Stub methods for hashCode, equals and toString (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: RMI/JRMP stubs provide overridden implementations for the
 hashCode, equals, and toString methods of java.lang.Object.
 
 The stub hashCode method returns the same hash code for
 different stubs that refer to the same remote object.
 The stub equals method returns true when stubs that refer
 to the same remote object are compared.  These methods allow
 remote objects to be held in Java collections.
 
 The stub toString method returns a string containing information
 about the remote object, not the local stub.
 
 RMI/IIOP stubs should provide equivalent methods.  The easiest
 way to do this is to add implementations of these three methods
 to the javax.rmi.CORBA.Stub base class.
 
 I propose that the definition of javax.rmi.CORBA.Stub in
 section 7.2.5 be modified to add these methods.
 

Resolution:
Revised Text:
Actions taken:
June 30, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1640: Should Portability APIs throw SystemException? (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This item arises from the Java-to-IDL Mapping RFP, but is also of 
 concern to the IDL-to-Java RTF because it affects the IDL-to-Java
 mapping.
 
 Three of the new portability APIs intorduced by the Java to IDL mapping
 are declared as throwing org.omg.CORBA.SystemException.  These are
 the _invoke methods of ObjectImpl and Delegate and the _invoke method
 of InvokeHandler.  I don"t think this exception hould be declared
 explicitly, since it is a subclass of java.lang.RuntimeException and so 
 is always implictly throwable whether it is declared or not.  Also, 
 other portability APIs can throw this exception even though they do not 
 declare it explicitly.  This inconsistency makes it very difficult for
 the reader of the spec to determine which of the portability APIs can
 throw CORBA system exceptions, and is likely to cause confusion.
 
 I propose that org.omg.CORBA.SystemException be removed from the throws
 clause of the above-mentioned APIs.
 

Resolution:
Revised Text:
Actions taken:
July 8, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1641: Mapping of Java names that are IDL keywords (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The Java to IDL mapping spec says that a Java name that is an IDL
 keyword is mapped to a mangled name consisting of the IDL keyword 
 followed by a trailing underscore.  Now that the Objects By Value
 RTF has adopted escaped identifiers with keading underscores, we
 should revise this mapping to use escaped identifiers.
 I propose that section 5.2.2 of the Java to IDL mapping spec be
 changed to state that Java names that collide with IDL keywords 
 are mapped to IDL by adding a leading underscore, so that typedef
 would be mapped to _typedef.
 

Resolution:
Revised Text:
Actions taken:
July 8, 1998:
February 23, 1999: closed issue

Discussion:


Issue 1642: Java to IDL identifier mapping (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: orbos/98-02-01 says:
 
 	We have provided name manglings to work around [the limitations],
 	but we recommend that OMG consider extending the definitions of
 	IDL identifiers so that a wider range of unicode characters can
 	be supported and so that case is significant in distinguishing
 	identifiers.
 
 I would suggest to remove this recommendation because it is pragmatically
 unimplementable for implementation languages that do not support
 extended character sets. If the OMG were to take this step, it would
 effectively alienate CORBA from all such implementation languages, which
 I believe would be detrimental to the success of CORBA.
 
 	Because overloaded methods are a popular feature in object-oriented
 	programming languages we recommend that OMG considers extending
 	IDL to allow overloaded methods.
 
 Again, I suggest to remove the recommendation because it is pragmatically
 unimplementable. Steve Vinoski recently posted an interesting article
 on this topic in comp.object.corba -- I have attached a copy below.
 

Resolution:
Revised Text:
Actions taken:
July 8, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1662: read_AbstractObject and write_AbstractObject (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: In section 7.1.2, there is a method called read_AbstractObject(clz).
 I propose that we change its name to read_Abstract to bring it
 into line with the read_Abstract() method introduced in section
 8.7.1 of the OBV spec.  This is consistent with having methods
 called read_Object() and read_Object(clz).
 
 There"s also a typo in section 7.2.6.  It says that 
 Util.write_AbstractObject calls OutputStream.write_AbstractObject.
 This should say OutputStream.write_Abstract.
 
 
 

Resolution:
Revised Text:
Actions taken:
July 10, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1736: Local stubs proposal (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: There is currently no standard support for local RMI/IDL stubs.
 In contrast, the IDL/Java mapping specifies how support for local
 stubs is to be provided.  The Java to IDL mapping should also 
 specify standard APIs for local stubs which are compatible with
 the POA and the mechanisms used by IDL/Java local stubs.
 
 

Resolution: closed, accepted
Revised Text: dd the following methods to the javax.rmi.CORBA.Util class: public static RemoteException wrapException(Throwable obj) { ... } The wrapException method wraps an exception thrown by an implementation method. It returns the corresponding client-side exception. See section 28.4.8.1 for details. public static Object copyObject (Object obj, ORB orb) throws RemoteException { ... } public static Object[] copyObjects (Object[] obj, ORB orb) throws RemoteException { ... } The copyObject method is used by local stubs to copy an actual parameter, result object, or exception. The copyObjects method is used by local stubs to copy any number of actual parameters, preserving sharing across parameters as necessary to support RMI/IDL semantics. The actual parameter Object array holds the method parameter objects that need to be copied, and the result Object array holds the copied results. The stubs are required to call the above methods (or generate equivalent inline code) to handle Remote objects correctly. public static boolean isLocal(Stub s) throws java.rmi.RemoteException { ... }; This method has the same semantics as the ObjectImpl._is_local method, except that it can throw a java.rmi.RemoteException. Add the following new section after section 28.5.2.1: 28.5.2.2 Local Stubs The stub class may provide an optimized call path for local server implementation objects. For a method echo(int x) of a remote interface Aardvark, the optimized path does the following: 1. Find out if the servant is local by calling javax.rmi.CORBA.Util.isLocal() 2. If the servant is local, call this._servant_preinvoke("echo", Aardvark.class) 3. If _servant_preinvoke returned a non-null ServantObject so, call ((Aardvark)so.servant).echo(x) 4. If _servant_preinvoke returned a non-null ServantObject so, call this._servant_postinvoke(so) 5. If _servant_preinvoke returned null, repeat step 1. The call to Util.isLocal() will return false, causing the non-optimized path to be followed. The _servant_preinvoke method returns non-null if and only if an optimized local call may be used. It performs any security checking that may be necessary. Local stubs are responsible for performing all copying of method parameters, results and exceptions that is necessary to provide remote/local-transparent RMI/IDL semantics. The following is an example of a stub class that provides this optimized call path. public class Aardvark_Stub extends javax.rmi.CORBA.Stub implements Aardvark { public int echo(int x) throws java.rmi.RemoteException, Boomerang { if (!javax.rmi.CORBA.Util.isLocal(this)) { InputStream in = null; try { try { OutputStream out = _request("echo", true); out.write_long(x); in = _invoke(out); return in.read_long(); } catch (ApplicationException ex) { in = ex.getInputStream(); String id = in.read_string(); if (id.equals("IDL:BoomerangEx/1.0")) { throw (Boomerang) ((org.omg.CORBA_2_3.portable.InputStream)in). read_Value(); } else { throw new java.rmi.UnexpectedException(id); } } catch (RemarshalException ex) { return echo(x); } } catch (SystemException ex) { throw javax.rmi.CORBA.Util.mapSystemException(ex); } finally { _releaseReply(in); } } else { ServantObject so = _servant_preinvoke("echo", Aardvark.class); if (so == null) return echo(x); try { return ((Aardvark)so.servant).echo(x); } catch (Throwable ex) { Throwable ex2 = (Throwable)Util.copyObject(ex, _orb()); if (ex2 instanceof Boomerang) throw (Boomerang)ex2; else throw Util.wrapException(ex2); } finally { _servant_postinvoke(so); } } } }
Actions taken:
July 27, 1998: received issue
June 4, 1999: closed issue

Discussion:


Issue 1780: JTS exceptions (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The Java-to-IDL spec says in section 6.6.1 that certain CORBA system
 exceptions are mapped to the Java exceptions
   javax.jts.TransactionRequiredException
   javax.jts.TransactionRolledBackException
   javax.jts.InvalidTransactionException
 
 The names above are obsolete (since Sun revised the JTS/JTA specs),
 so the Java-to-IDL spec needs to be changed.  Possible mappings are:
  1. javax.transaction.<the_same_names_as_above>
       (as listed in the JTA spec)
  2. java.rmi.RemoteException
  3. No mapping (leave them as CORBA system exceptions) 
 
 Option 1 implies a dependency of the RMI-IIOP runtime on these
 JTA exception classes.  
 
 

Resolution:
Revised Text:
Actions taken:
August 6, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1891: Need to #include orb.id (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The example in section A.2 of the Java-to-IDL spec uses the
 type ::CORBA::WStringValue but does not define this type.
 By CORBA convention, the definition will be in the file
 orb.idl, which should be #included in the example IDL code.
 I propose that this example be changed to #include orb.idl.
 l
 

Resolution: :CORBA::WStringValue but does not define this type.
Revised Text:
Actions taken:
August 26, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1894: Value methods not mapped in spec examples (java2idl-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The Java to IDL mapping spec specifies rules for how value
 methods are mapped to IDL.  However, none of the examples
 shows any of these methods actually being mapped.  Although
 this is legal according to the spec, it has led to some
 confusion as to which methods would normally be expected to
 be mapped, such as the writeObject method in section 5.5.9.
 
 

Resolution:
Revised Text:
Actions taken:
August 27, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1931: Need overloaded write_Value method on OutputStream (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Suppose we are passing an array of declared type Animal[] and
 runtime type Wombat[] but whose elements are all of runtime type
 Wombat, where Wombat is a subtype of Animal.  This array is mapped
 to a boxed valuetype in the org.omg.sequences module.  In the
 RMI-IIOP stub, we need to write this array by making a write_Value
 call (so that sharing can be handled correctly).  The repository ID
 that we need to write is for a type seq_Animal, based on a static
 mapping from the declared type of the array (see section 5.6 of the
 Java-to-IDL spec).  However, if the stub used the normal write_Value
 call that takes a single argument of the object to be written, the
 runtime will not be able to put the correct repository ID on the
 wire because it only knows about the runtime type of the array, not
 the declared type.  For the IDL case, this is taken care of by 
 having the stub generate the form of write_Value that takes a
 ValueHelper object for the declared type, but in RMI-IIOP there are
 no ValueHelper objects.
 
 
 

Resolution: closed, accepted
Revised Text: RMI/IDL arrays must be marshaled with a repository ID indicating their runtime type. Also, RMI/IDL arrays must be demarshaled according to the type specified in the repository ID of the boxed valuetype in the GIOP encoding.
Actions taken:
September 3, 1998: received issue
June 4, 1999: closed issue

Discussion:


Issue 1957: Mapping of non-public types (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The spec needs to say what happens if a Java public RMI/IDL
 value class has data members whose types are not public.
 
 Options: Either a) restrict all uses of non-public types, or 
 b) map all non-public types to public in IDL.
 
 Inprise have proposed that we adopt option b).  Comments?
 

Resolution:
Revised Text:
Actions taken:
September 15, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1958: Mapping of java.rmi remoteException superclasses (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: There is an issue with the currently specified mapping for Java
 remote and abstract interfaces containing methods that throw 
 superclasses of java.rmi.RemoteException but do not throw
 java.rmi.RemoteException.  In Java 1.1, these are not recognized
 as RMI remote interfaces.  In Java 1.2, these are recognized as
 RMI remote interfaces. 
 
 I propose that throwing these superclass exceptions be treated by
 the Java to IDL mapping as semantically equivalent to throwing
 both RemoteException and the superclass exception.  This means
 that the section 4.3 rules for RMI/IDL remote interfaces would 
 be changed to include this case (in point 3), with similar changes
 elsewhere in the spec.
 

Resolution:
Revised Text:
Actions taken:
September 15, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1960: Mapping of Java arrays (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Generated names in the ::org::omg::sequences module can clash.
 For example, a Java array of type foo[][] and a Java array of type
 seq_foo[] both map to ::org::omg::sequences::seq_seq_foo.
 
 I propose that instead of using repeated "seq_" prefixes for the 
 array dimensions, a single prefix "seq<n>_", where <n> is the
 number of dimensions, should be used.  This ensures no clashes.
 In the example above, these Java types would map to seq2_foo and 
 seq1_seq_foo.
 

Resolution:
Revised Text: :org::omg::sequences::seq_seq_foo.
Actions taken:
September 16, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1965: Eliminating server wait code (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: An RMI-JRMP server creates and exports server objects and then
 returns.  A non-daemon thread created by the JRMP runtime keeps the
 server process alive until there are no more objects exported.
 For code portability, an RMI-IIOP server needs to work in a similar
 way.  It is not acceptable to require a call to ORB.run() or the
 use of application "wait" code to keep the server process alive.
 
 I propose that the specification of PortableRemoteObject.exportObject
 be updated to say that the first call to this creates a non-daemon
 thread which keeps the JVM alive until all exported objects have
 been unexported by calls to PortableRemoteObject.unexportObject.
 

Resolution:
Revised Text:
Actions taken:
September 16, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 2081: Specifying code downloading (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The spec should mandate codebase annotation when marshalling in Java,
 and should specify how the annotation is selected.
 
 The spec should mandate code downloading using the codebase annotation
 when demarshalling in Java, and should specify the classloader semantics.
 

Resolution: Closed, accepted
Revised Text: Requirements The spec should allow codebase annotation when marshalling in Java, and should specify how the annotation is selected for RMI-IIOP values and object references. The spec should mandate code downloading using the codebase annotation for Java demarshalling of RMI-IIOP values, stubs and ties, and should specify the classloader semantics. Original Proposal This proposal is defined in terms of JDK 1.2 APIs. When sending from Java, for any given java.lang.Class instance C, the codebase annotation used must be equivalent to the codebase returned by: java.rmi.server.RMIClassLoader.getClassAnnotation(C); (with the string parsed into space-separated URL strings). When receiving in Java, for any given class name N, if there is no codebase annotation, or if the system property java.rmi.server.useCodebaseOnly is equal to "true" ignoring case, then the Java class that this name resolves to must be the same as that returned by: java.rmi.server.RMIClassLoader.loadClass(N); Otherwise, if the codebase annotation is CA, then the Java class that this name resolves to must be the same as that returned by: java.rmi.server.RMIClassLoader.loadClass(CA, N); (with CA turned into a single string with space as separator). Ammended Proposal Class downloading is supported for stubs, ties, values, and value helpers. The implementation is based on the original proposal, with enhancements to enable implementation on JDK 1.1.6 APIs, to enable transmission of codebase information on the wire for stubs and ties, and to enable usage of pre-existing ClassLoaders when relevant. Definitions "codebase" - A java.lang.String containing a space-separated array of URLs (e.g. "http://acme.com/classes" or "http://abc.net/classes http://abc.net/ext/classes"). [Note: the space-separated representation is preferred over a String[] representation in order to avoid conversion when calling the 1.2 JDK RMI APIs.] "localCodebase" - The System Property "java.rmi.server.codebase" whose value is a codebase or null. Defaults to null. "remoteCodebase" - The codebase transmitted from a remote system. May be null. "useCodebaseOnly" - The System Property "java.rmi.server.useCodebaseOnly" whose value is either "true" or "false". Defaults to "false". If "true" (ignoring case), any remote codebase is ignored and only the local codebase used. "loadingContext" - A class that specifies a context within which class loading is initiated. May be null. Codebase Selection The following method is added to the javax.rmi.CORBA.Util class: public static String getCodebase(java.lang.Class clz) { ... } On JDK 1.2, this method returns the same string as: java.rmi.server.RMIClassLoader.getClassAnnotation(clz) On JDK 1.1, this method works as follows: 1. If the name of clz starts with "java.", then return null, else... 2. If clz has a ClassLoader with a URL security context, then return this URL, else... 3. If there is a security manager with a URL security context, then return this URL, else... 4 Return localCodebase. When sending RMI/IDL values from Java, the codebase transmitted over GIOP must be the codebase that this method would return for the value's class. When sending RMI/IDL object references from Java, the codebase transmitted over GIOP is selected by calling the org.omg.CORBA_2_3.portable.ObjectImpl._get_codebase method (see below) on the stub object. Codebase Transmission For values and value helpers, the OBV specification defines the wire format for codebase transmission. For stubs and ties, the codebase is transmitted as a TaggedComponent in the IOR profile, where the component_data is a CDR encapsulation of the codebase written as an IDL string. The codebase is a blank-separated list of one or more URLs. [NOTE: component_id needs to be assigned by the Interoperability RTF.] In all cases, the SendingContext.RunTime object may provide a default codebase that is used if not overridden by a more specific codebase encoded in a valuetype or IOR. For object references created using InputStream.read_Object or InputStream.read_Abstract, the transmitted codebase is stored in the object reference (stub) and can be retrieved subsequently using the org.omg.CORBA_2_3.portable.ObjectImpl._get_codebase method, described below. If no codebase was transmitted, localCodebase is stored in the object reference (stub). Codebase Access In the event that PortableRemoteObject.narrow() must load a stub, a new API is required to extract codebase information from the original stub. This API is also used by the OutputStream methods write_Object and write_Abstract to obtain the codebase to be transmitted in the new TaggedComponent. The following method is added to org.omg.CORBA_2_3.portable.ObjectImpl, which is a newly created subclass of org.omg.CORBA.portable.ObjectImpl: /** Returns the codebase for this object reference. * @return the codebase as a space delimited list of url strings or * null if none. */ public java.lang.String _get_codebase() { return ((org.omg.CORBA_2_3.portable.Delegate)_get_delegate()).get_codebase(this); } and a corresponding method is added to org.omg.CORBA_2_3.portable.Delegate, which is a newly created subclass of org.omg.CORBA.portable.Delegate: /** Returns the codebase for the object reference provided. * @param self the object reference whose codebase needs to be returned. * @return the codebase as a space delimited list of url strings or * null if none. */ public java.lang.String get_codebase(org.omg.CORBA.Object self) { return null; } The javax.rmi.CORBA.Stub class is changed to extend org.omg.CORBA_2_3.portable.ObjectImpl instead of org.omg.CORBA.portable.ObjectImpl. Codebase Usage The following method is added to the javax.rmi.CORBA.Util class: public static Class loadClass(String className, String remoteCodebase, Class loadingContext) throws ClassNotFoundException { ... } On JDK 1.2, this method works as follows: 1. Find the first non-null ClassLoader on the call stack, and attempt to load the class using this ClassLoader. If this fails... 2. If remoteCodebase is non-null and useCodebaseOnly is false, then call java.rmi.server.RMIClassLoader.loadClass(remoteCodebase, className). 3. If remoteCodebase is null or useCodebaseOnly is true, then call java.rmi.server.RMIClassLoader.loadClass(className). 4. If a class was not successfully loaded by step 1, 2, or 3, and loadingContext and loadingContext.getClassLoader() are both non-null, then call loadingContext.getClassLoader().loadClass(className). 5. If a class was successfully loaded by step 1, 2, 3, or 4, then return the loaded class. On JDK 1.1, this method works as follows: 1. If className is an array type, extract the array element type. If this is a primitive type, then call Class.forName(className), else proceed using the array element class name as className. 2. Search the call stack for the first non-null ClassLoader. If a ClassLoader is found, then attempt to load the class using this ClassLoader, else attempt to load the class using Class.ForName(className). If this fails... 3. If remoteCodebase is non-null and useCodebaseOnly is false, then call java.rmi.server.RMIClassLoader.loadClass(codebaseURL, className) for each remote codebase URL in the remoteCodebase string until the class is found. 4. If remoteCodebase is null or useCodebaseOnly is true, then call java.rmi.server.RMIClassLoader.loadClass(className). 5. If a class was not successfully loaded by step 1, 2, 3, or 4, and loadingContext and loadingContext.getClassLoader() are both non-null, then call loadingContext.getClassLoader().loadClass(className). 6. If a class was successfully loaded by step 1, 2, 3, 4, or 5, then return the loaded class, unless the className parameter was a non-primitive array type, in which case return a suitably dimensioned array class for the element class that was loaded. When loading classes for RMI/IDL values, stubs, and ties, the class loaded must be be the same as that returned by this method except where stated below. For values and their helper classes, remoteCodebase is the codebase that was transmitted in the GIOP valuetype encoding (if any), or else the codebase obtained from the SendingContext.RunTime object associated with the IIOP connection. loadingContext is null or the expected value class, if known. For ties created by PortableRemoteObject.exportObject, remoteCodebase is obtained by calling Util.getCodebase on the class of the implementation object. loadingContext is null. For stubs created by InputStream.read_Object(), remoteCodebase is the codebase transmitted in the new IOR TaggedComponent (if any), or else the codebase obtained from the SendingContext.RunTime object associated with the IIOP connection. This method may either create a generic stub for subsequent narrowing or may attempt to create a stub by loading a stub class that matches the RepositoryId in the IOR. loadingContext is null. For stubs created by InputStream.read_Object(clz), remoteCodebase is the same as for InputStream.read_Object(). The implementation of read_Object(clz) may either use the actual parameter clz to create a stub or may attempt to create a stub by loading a stub class that matches the RepositoryId in the IOR. loadingContext is clz. For stubs created by PortableRemoteObject.narrow, remoteCodebase is obtained from the narrowFrom object by calling the ObjectImpl._get_codebase method. For stubs created by PortableRemoteObject.toStub, Util.writeRemoteObject or Util.writeAbstractObject, remoteCodebase is obtained by calling Util.getCodebase on the class of the implementation object. loadingContext is narrowFrom. For all stubs, remoteCodebase is stored by the Delegate and can be retrieved subsequently using the org.omg.CORBA_2_3.portable.ObjectImpl._get_codebase method. Other Changes In section 28.3.5.11, change the definition of javax.rmi.CORBA.ClassDesc to: // Java package javax.rmi.CORBA; public class ClassDesc implements java.io.Serializable { private String repid; private String codebase; // blank-separated list of URLs }
Actions taken:
October 14, 1998: received issue
June 4, 1999: closed issue

Discussion:


Issue 2082: Mapping of RuntimeException (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: If a Java method explictly declares that it throws RuntimeException or
 some subclass, the current spec says that these should be retained in
 the mapping to IDL.  I think this is wrong; they should be dropped
 when mapping to IDL.  The reasoning is along the same lines as dropping
 subclasses of RemoteException.
 

Resolution:
Revised Text:
Actions taken:
October 14, 1998: received issue
February 23, 1999: closed issue

Discussion:
 issue resolved and closed


Issue 2088: The mapping of java.lang.Class to IDL is not specified (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping of java.lang.Class to IDL is not specified.  An
 interesting subquestion is whether it"s possible to transmit a
 Class that has not previously been mapped to IDL.
 

Resolution:
Revised Text:
Actions taken:
October 16, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 2089: Custom marshalling wire format (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The full wire format produced by ObjectOutputStream really needs
 to be specified.  E.g., I would assume that anything written with
 writeObject gets marshalled as an Any.  In normal Java
 serialization, consecutive primitive writes (writeByte, writeInt,
 etc.) are aggregated into chunks with size lengths, and tagged
 to distinguish it from other data.  In this way, ObjectInputStream
 can ensure that major stream corruption never occurs: it can
 make sure that a primitive read never eats into object data,
 and vice versa.  Is a similar format used for IIOP?
 

Resolution: Closed, accepted
Revised Text: In section 28.3.5.6, change the mapping for Serializable classes with a writeObject method so that non-public fields are mapped to IDL private fields in the custom valuetype. Add the following section after section 28.3.5.6: 28.3.5.7 Custom Marshaling Format When an RMI/IDL value type is custom marshaled over GIOP, the following data is transmitted: 1. Serializable objects with a writeObject method. octet Format version. Always 1. boolean True if defaultWriteObject was called, false otherwise. ... (optional) Data written by defaultWriteObject. The ordering of the fields is the same as the order in which they appear in the mapped IDL valuetype, and these fields are encoded exactly as they would be if the class did not have a writeObject method. ... (optional) Additional data written by writeObject, encoded as specified below. 2. Externalizable objects. octet Format version. Always 1. ... (optional) Data written by writeExternal, encoded as specified below. Primitive Java types are marshaled as their corresponding IDL primitives (see section 28.3.3). Java objects are marshaled in the form of an IDL abstract interface, i.e., a union with a boolean discriminator containing either an object reference if the discriminator is true or a value type if the discriminator is false. RMI/IDL stubs, RMI/IDL remote implementations, and IDL stubs are marshaled as object references (IORs). All other Java objects are marshaled as value types. The value type encoding is determined from the object's runtime type by applying the mappings specified in sections 28.3.5, 28.3.6, and 28.3.7. This encoding ensures that primitive data is marshaled using a chunked encoding and cannot incorrectly be read in as object data. The GIOP specification states that custom marshaled types must be marshaled using a chunked encoding. Therefore, if primitive data is written followed by a value object, the currently open chunk for the primitive data will automatically be ended before the value tag is written. This prevents primitive read operations from consuming a value header (chunk underflow), and also prevents read_Value operations from consuming primitive data (chunk overflow). This mechanism does not prevent primitive reads from consuming non-matching primitive data, which is also true for Java deserialization. However, it is possible for primitive reads to consume IOR data, and vice versa. Reading an incorrect IOR will either cause a MARSHAL error or in rare cases create an unusable object reference (e.g., incorrect host name, port number, or object key). Since neither of these violates the integrity of the local system, this small exposure is acceptable.
Actions taken:
October 16, 1998: received issue
June 4, 1999: closed issue

Discussion:


Issue 2090: Mapping of Object, Serializable and Externalizable (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The proposal here is to map Object, Serializable and Externalizable
 to distinct entities, rather than just to an any.
 
 These entities are
 module java {
     module lang {
        typedef any _Object;
     };
     module io {
         typedef any Serializable;
         typedef any Externalizable;
     };
 };
 
 and so
 java.lang.Object will map to ::java::lang::_Object,
 java.io.Serializable will map to ::java::io::Serializable, and
 java.io.Externalizable will map to ::java::io.Externalizable
 

Resolution:
Revised Text:
Actions taken:
October 16, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 2091: Support for serialPersistentFields (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Moving forward to JDK 1.2, the IDL value type data mapping needs
 to factor in the new serialPersistentFields declaration.  And there"s
 an interesting question whether the existence of a writeReplace method
 should influence the decision to map to a custom value.
 

Resolution:
Revised Text:
Actions taken:
October 16, 1998: received issue
May 16, 2006: closed issue

Discussion:
 Adopted proposal:



Issue 2092: RMI/ORB marshalling interface (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  The ORB should be responsible for marshalling all value headers and
    other protocol specific data.  The RMI runtime should only marshal
    the state of the object.  In other words, we exepect the contract 
    between the ORB and RMI to be the similar to that of the ORB and
    an IDL generated ValueHelper.
 
  - The APIs should allow all RMI types supported by the IDL-Java mapping
    to be marshalled completely and correctly.
 
  - The APIs should be flexible enough to allow for some change in either
    RMI/Serialization semantics or changes to OBV wire protocol.
 

Resolution: Closed, accepted
Revised Text: 1. Add the following methods to ValueHandler: java.lang.String getRMIRepositoryID(java.lang.Class clz); boolean isCustomMarshaled(java.lang.Class clz); SendingContext.CodeBase getRunTimeCodeBase(); java.io.Serializable writeReplace(java.io.Serializable value); When marshaling an RMI value, the ORB stream must call Util.getCodeBase to get the codebase string, ValueHandler.getRMIRepositoryID to get the repository ID string, and ValueHandler.isCustomMarshaled to see if the value is custom marshaled and therefore requires a chunked encoding. The ORB stream writes the value tag, codebase (if any), and repository ID. It calls ValueHandler.write_Value to write the state of the value. The ORB stream deals with nulls, indirections, chunking, and end tags. The ORB obtains the SendingContextRunTime service context from the ValueHandler by calling the ValueHandler.getRunTimeCodeBase method. Clients must send this service context on the first GIOP request that flows over a connection that may be used to send RMI values to the server. Servers must send this service context on the first GIOP reply that flows over a connection that may be used to send RMI values to the client. The ORB calls the writeReplace method before calling writeValue. The result from calling this method is passed to ValueHandler.writeValue unless either a. it is a previously marshalled value, in which case it is marshalled as an indirection, or b. its class implements org.omg.CORBA.Object, in which case it is marshalled as an object reference. An ORB stream instance must only call writeReplace once for each value that it marshals. 2. Change the names of the ValueHandler read_Value and write_Value methods to readValue and writeValue to be consistent with Java method naming conventions. 3. Change the readValue method of ValueHandler to the following signature: java.io.Serializable readValue( org.omg.CORBA.portable.InputStream in, int offset, java.lang.Class clz, String repositoryID, org.omg.SendingContext.RunTime sender) { ... } When demarshaling an RMI value, the ORB stream must read the value tag, codebase (if any), and repository ID. The ORB stream calls Util.loadClass to load the value's class, passing the Java class name contained in the RMI-style repository ID and the codebase string from the value's GIOP encoding (if present) or the SendingContextRunTime service context. The ORB stream calls ValueHandler.readValue to read the state of the value, passing the current stream offset, the class returned by loadClass, the repository ID, and the sender's SendingContext.RunTime object reference. The repository ID is needed so that the ValueHandler can determine if the class passed in is structurally identical to the class used by the sender to marshal the value. The ORB stream deals with nulls, indirections, chunking, and end tags. 4. Add a new exception org.omg.CORBA.portable.IndirectionException: public class IndirectionException extends org.omg.CORBA.SystemException { int offset; } The ORB input stream throws this exception when it is called to demarshal a value that is encoded as an indirection that is in the process of being demarshalled. This can occur when the ORB stream calls the ValueHandler to demarshal an RMI value whose state contains a recursive reference to itself. Because the top-level ValueHandler.readValue call has not yet returned a value, the ORB stream's indirection table contains no entry for an object with the stream offset specified by the indirection tag. This stream offset is returned in the exception's "offset" field. When the ValueHandler receives this exception, it stores the stream offset together with a reflective object that can be used later to update the field to which the result of calling the ORB stream's read_Value method would have been assigned. These [offset,fieldref] pairs are stored in a "fixup" table that is associated with the InputStream that the ValueHandler is using for its current demarshaling operation. Before the ValueHandler.readValue method returns to the ORB stream, it checks this fixup table for an entry with the offset passed in on the readValue call. If an entry matching the offset is found, it performs a fixup using the reflective fieldref object and the value it is about to return, then removes this fixup entry. When the top-level readValue call returns, the fixup table should be empty, indicating that all fixups have successfully been performed. If the table is not empty, this indicates an incorrect indirection in the GIOP value encoding, and a MARSHAL exception is thrown to indicate this. This scheme deals successfully with recursive references without introducing new API calls and with minimal overheads in the common case of a value that does not contain recursive references. In this case, the only overhead is the need to pass the "offset" parameter on the call to ValueHandler.readValue.
Actions taken:
October 16, 1998: received issue
June 4, 1999: closed issue

Discussion:


Issue 2111: mapping from java.rmi Remote to CORBA::Object (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Are we trying to support sending JRMP stubs over IIOP?  If so, then
 it would seem that the IDL mapping of java.rmi.Remote to CORBA::Object
 works against that; it would need to be changed to Any.
 

Resolution: See revised text below.
Revised Text: In section 1.5.1.4, at the end of the paragraphs describing writeRemoteObject and writeAbstractObject, add the sentence: "This method cannot be used to write a JRMP object reference to an output stream."
Actions taken:
October 20, 1998: received issue
May 24, 2001: closed issue

Discussion:


Issue 2225: javax.rmi package use (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: It has concerned me for a while the use of the javax.rmi package in the Java
 to IDL mapping.  I think that PortableRemoteObject and other classes should be
 placed in a subpackage.  We may in the future put subpackages in javax.rmi and
 would like it organized much better than it is currently.  The
 PortableRemoteObject class should be put in a subpackage "portable" or
 something else.  I"d like to raise this as an issue to discuss at the RTF.
 There are still other issues that are being ironed out, and I think that this
 one can be addressed along with the others.
 

Resolution: Closed, no change
Revised Text:
Actions taken:
November 19, 1998: received issue
June 4, 1999: closed issue

Discussion:


Issue 2370: Mangling of Java long type not specified (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The overloaded method name mangling for the Java long type is not
 specified in the spec.  My suggestion is to use "long_long".
 

Resolution: Closed, accepted
Revised Text: In mangled overloaded IDL method names, the IDL type "long long" shall appear as "long_long".
Actions taken:
February 2, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2466: Mapping private Java methods to IDL (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Java private methods and constructors should not be mapped to IDL.
 This has been agreed by the RTF, but an OMG issue number is needed.
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2467: Change write_* names in Util class (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In the javax.rmi.CORBA.Util class, the following names should be
 changed for consistency with the naming convention used in this package:
   write_RemoteObject to writeRemoteObject
   write_AbstractObject to writeAbstractObject
 This has been agreed by the RTF, but an OMG issue number is needed.
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2468: IIOP/JRMP stubs name clash (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The names of generated stub classes can be the same in some cases for
 IIOP and JRMP.  This is a source of user error and confusion.
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2469: IDLEntity exception types as parameters and results (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The specified Java to IDL mapping for IDLEntity exception types does
 not work for method parameters and results, because IDL exception
 types cannot be passed as method parameters and results.
 
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2470: Completion status missing from exception string (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping of CORBA system exceptions to Java remote exceptions
 omits the completion status information.  This should be preserved
 in the detail string.
 

Resolution: Closed, accepted
Revised Text: Add the following to the end of the description of the detail string for RMI Exceptions mapped from CORBA system exceptions: . followed by a space . followed by the completion status: one of "Yes" "No" "Maybe"
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2471: RMI/IDL Tie changes (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The following changes will improve the code generated for RMI/IDL Ties:
 
 a) RMI/IDL Tie classes shall catch org.omg.CORBA.SystemException and
    rethrow it (unwrapped by UnknownException).
 
 b) Change the signature of Util.mapSystemException to
      public static java.rmi.RemoteException 
                mapSystemException(org.omg.CORBA.SystemException ex);
 
 c) RMI/IDL Tie classes shall throw the result from mapSystemException.
 
 d) mapSystemException shall return the mapped exception if it is an
    instance of RemoteException or a subclass, and shall throw the
    mapped exception in all other cases.
 
 This has been agreed by the RTF, but an OMG issue number is needed.
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2472: Interfaces and values should be mapped consistently (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The Java to IDL mapping rules for remote interfaces and value types 
 should be consistent except where there is clear need for differences.
 

Resolution: Closed, accepted
Revised Text: a. Change the mapping for exceptions on methods of value types to not map RemoteException, RuntimeException and their subclasses to IDL. b. Change the mapping for property accessors on value types to be the same as on remote interfaces. c. Changes a and b also apply to abstract interfaces.
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2473: Mappings for non-conforming types (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping for methods and constants in non-conforming types
 should be specified (by cross-reference to the words for value types).
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2474: Mapping for non-conforming class (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping of a non-conforming class should be abstract valuetype,
 not valuetype.  This is because instances of this type are not
 serializable, but instances of its subtypes are serializable.
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2475: Definition of Stub.equals method (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The definition of the equals method of javax.rmi.CORBA.Stub should
 say that this method returns false when used to compare stubs that
 do not represent the same remote object.
 

Resolution: Closed, accepted (see summary for text)
Revised Text:
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2476: IDLEntity types need to be boxed (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: When IDLEntity types are mapped from Java to IDL, they need to be
 mapped as valuetypes to preserve RMI null and sharing semantics.
 For most IDLEntity types, this will require the generation of
 boxed valuetypes in IDL, similarly to the mapping of Java arrays to
 IDL boxed sequences.
 

Resolution: Closed, accepted
Revised Text: 28.2.1 add two new bullets - is a conforming CORBA object reference (see section 28.2.7) - is a conforming IDL entity (see section 28.2.8) Add new section 28.2.7 CORBA Object References A conforming CORBA object reference is either - the Java interface org.omg.CORBA.Object or - a Java interface that extends org.omg.CORBA.Object directly or indirectly and conforms to the rules specified in the Java Language mapping (i.e., could have been generated by applying the mapping to an IDL definition). Add new section 28.2.8 IDL Entities A Java class is a conforming RMI/IDL type if it extends org.omg.CORBA.portable.IDLEntity and conforms to the rules specified in the Java Language mapping (i.e., could have been generated by applying the mapping to an IDL definition), and is not an IDL user exception. Add 2 new bullets to 28.3.1 after the 5th bullet - RMI/IDL exceptions - CORBA object references - IDL entities Renumber the following sections as below: 28.3.8->28.3.10, 28.3.9->28.3.11, 28.3.10->28.3.12 Change section 28.3.6 globally replace ::org::omg::sequences with ::org::omg::boxedRMI and org_omg_sequences with org_omg_boxedRMI After the fourth paragraph, insert a new paragraph: For each "boxed" value type generated for a Java array, a #pragma ID is generated to specify an RMI Hashed Format repository ID for the IDL type. In the example in section 28.3.6.2, add the following line: #pragma ID seq1_Dolphin "RMI:[Lomega.Dolphin;:ABCDEF0123456789" Add new section 28.3.8 Mapping CORBA Object References A CORBA object reference is mapped directly to its corresponding IDL interface or to Object if it is org.omg.CORBA.Object. Add new section 28.3.9 Mapping IDL Entities An IDL entity that is not a CORBA object reference is mapped to a "boxed" value type containing the IDL entity. The containing module for the boxed IDL entity is determined by the IDL entity's container. A module name is formed by taking the ::org::omg::boxedIDL prefix and appending the IDL entity's container's fully scoped name. A boxed value type corresponding to the IDL entity is defined within this module. The name of the value type is the same as the name of the IDL definition it is boxing. For example, assume we have the following IDL and the Java class that results from applying the forward mapping: // IDL module hello { struct world { short x; }; }; // Java package hello; public final class world implements org.omg.CORBA.portable.IDLEntity { ... } Now assume that hello.world is used as an argument to a method or as a member of an RMI/IDL value type. The Java class hello.world is mapped as follows: hello.world ==> in the module ::org::omg::boxedIDL::hello define valuetype world ::hello::world; #pragma ID world "RMI:[Lhello.world;:1234567890ABCDEF" The exact mechanism by which the IDL for ::hello::world is created is a tools issue and is not specified. (Note to rtf: Specifying a conversion algorithm will effectively require creating a reversible mapping, which is not the intent of this proposal. There are many ways this can be achieved. One mechanism would be to pass the original IDL file in the command line of the tool, and read the definitions from the IDL file.) Preprocessor guards are placed for these definitions in the same way as they are done for mapping arrays. Add new section 28.4.7 (move all sections from 28.4.7 up by one). 28.4.7 Marshaling IDL entities Marshaling and demarshaling of IDL entities is done by calling write_Value(java.io.Serializable) and read_Value() on the portable output and input streams respectively.
Actions taken:
February 22, 1999: received issue
June 4, 1999: closed issue

Discussion:


Issue 2477: RMI Repository ID proposed change (java2idl-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: For the scoped name component, it is far simpler to use the actual class
 name of the java class with all the invalid IDL characters unicode escaped.
 

Resolution: Closed, accepted
Revised Text: Resolution: make it so. This has been modified to correct errors in the RMI format specification and is being put up for vote to approve the mdified and error corrected version. Revised Text: In section 10.6, change text added by resolution to issue 2329 from: This specification defines four formats: one derived from OMG IDL names, one that uses OMG IDL names and Java serialization version UIDs, one that uses DCE UUIDs, and another intended for short-term use, such as in a development