| # Limitations (JavaTM IDL/JavaTM RMI over IIOP)

This document lists some of the limitations regarding JavaTM IDL and JavaTM RMI over IIOP technology in this release of the JavaTM 2 Platform Standard Edition (J2SETM). The limitations are outlined below.

The Official Specifications for CORBA Support in J2SE 5.0 document provides information outlining with which OMG Specifications this implementation of the Java IDL and Java RMI over IIOP technologies comply.

LIMITATIONS:

- JavaTM SDK version interoperability

  > When a J2SETM 1.3.x client talks to a server written in J2SE 1.4 or higher using RMI-IIOP and an unchecked or `RemoteException` is thrown by the server, the client will hang. Similarly, when the server is using J2SE 1.3.x and the client is using J2SE 1.4 or higher, the client will receive a CORBA `UNKNOWN` exception with minor code 0.

  > This issue is currently being addressed at the OMG in the Java to IDL RTF as issue 4795: http://www.omg.org/issues/java2idl-rtf.html#Issue4795.

  > In J2SE 1.4.1 and higher: If one side is using J2SE 1.3.1.05, and the other side is using J2SE 1.4.1 or higher on the other side, this type of communication will work properly.

- Multiple Profile IOR

  > If an IOR has multiple profiles, the first IIOP profile is used for the invocation.

- Multiple ORBs not allowed in persistent servers

  > This release of J2SE platform does not allow multiple ORB instantiations in persistent servers. If the persistent server is written using the Java RMI over IIOP APIs, instantiating JNDI's `InitialContext()` creates an ORB. To avoid creating multiple ORBs in this setting, you can set the `java.naming.ORB` system property to an ORB that is already initialized.

- Locally-optimized stubs

  > Locally-optimized stubs, those with the local optimization generated by a different IDL-to-Java compiler than `idlj`, may be used with the J2SE 1.4 or higher ORB. However, Portable Interceptors will not be invoked when taking the locally-optimized stub branch. This is due to an issue with the OMG IDL to Java language mapping and is being addressed under OMG issue 4701.

  > The J2SE 1.4 or higher `rmic` compiler generates locally optimized stubs when used in conjunction with the `-iiop` option. However, the J2SE 1.4 and higher implementation of `javax.rmi.CORBA.Util` always returns `false` for `isLocal`. The result is that the stubs never use the local optimization. This is due to an issue with the OMG Java to IDL language mapping and is addressed under OMG issue 3754.

  > The J2SE 1.4 and higher ORB does use a locally-optimized transport for both Java IDL and Java RMI-IIOP when it detects that the client and server are running sharing the same ORB.

- Single thread POA policy

  > As per the CORBA 2.3.1 specification, there can be two choices for Thread Policy for the Portable Object Adapter (POA): The ORB Controlled Model and the Single Thread Model. J2SE 5.0 does not support the Single Thread Model.

- RMI-IIOP Stream Format version 2

  > If the super-type of a class has evolved to become custom-marshalled and writes optional, custom data, then that class cannot be sent between J2SE 1.3.x and J2SE 1.4 or higher. One example of this is that `java.util.Calendar` in J2SE 1.4 or higher cannot be sent back to J2SE 1.3.x.