CORBA Compatibility Information - J2SE 5.0
CORBA API Changes Between J2SE 1.3 and J2SE 5.0
This document contains information regarding all of the API changes
related to CORBA functionality between JDK 1.3 and 5.0. The changes
have been made to make the APIs for the CORBA technology shipped in
the JDK 5.0 compliant to the CORBA 2.3 mapping as specified by the
following OMG documents:
API changes to org.omg.COSNaming classes
To comply with the IDL to Java mapping specified by the CORBA
Version 2.3 specification, the following org.omg.COSNaming
classes have been regenerated from the idlj compiler
shipped with the JDK. This change (CCC 4284015) consists of the
following API changes. Compatibility impact: None.
To conform with CORBA V (2.3) All
Helpers Section 1.5.2 Spec ptc/00-01-08.pdf, all Helpers are now
abstract public classes. Below is the list of all Helper classes
under org.omg.CosNaming that have been changed to abstract
public classes.
- BindingHelper.java
- BindingIteratorHelper.java
- BindingListHelper.java
- BindingTypeHelper.java
- IStringHelper.java
- NameComponentHelper.java
- NameHelper.java
- NamingContextHelper.java
- AlreadyBoundHelper.java
- CannotProceedHelper.java
- InvalidNameHelper.java
- NotEmptyHelper.java
- NotFoundHelper.java
- NotFoundReasonHelper.java
To conform with Section 1.7 OMG Spec ptc/00-01-08.pdf,
Mapping for Enum, the mapping for the following Enum
constructors is changed to protected.
CLASS |
BEFORE |
NOW |
BindingType.java |
private BindingType( int ) |
protected BindingType( int ) |
NotFoundReason.java |
private NotFoundReason( int ) |
protected NotFoundReason( int ) |
To conform with CORBA 2.3 spec (ptc/00-01-08.pdf), Deletion
of constructors in Stub classes, the following constructors
have been deleted.
CLASS |
BEFORE |
NOW |
_BindingIteratorStub.java |
public _BindingIteratorStub(org.omg.CORBA.portable.Delegate
d) |
The constructor is deleted. |
_NamingContextStub.java |
public _NamingContextStub(org.omg.CORBA.portable.Delegate
d) |
The constructor is deleted. |
To conform with CORBA 2.3 spec (ptc/00-01-08.pdf), the
following exceptions have been changed.
CLASS |
BEFORE |
NOW |
AlreadyBound.java |
public final class AlreadyBound extends
org.omg.CORBA.UserException implements
org.omg.CORBA.portable.IDLEntity |
public final class AlreadyBound extends
org.omg.CORBA.UserException |
AlreadyBound.java |
Only default constructor |
Add new constructor public AlreadyBound (String reason) |
CannotProceed.java |
public final class CannotProceed extends
org.omg.CORBA.UserException implements
org.omg.CORBA.portable.IDLEntity |
public final class CannotProceed extends
org.omg.CORBA.UserException |
CannotProceed.java |
Only default constructor |
Add new constructor public CannotProceed (String reason) |
InvalidName.java |
public final class InvalidName extends
org.omg.CORBA.UserException implements
org.omg.CORBA.portable.IDLEntity |
public final class InvalidName extends
org.omg.CORBA.UserException |
InvalidName.java |
Only default constructor |
Add new constructor public InvalidName (String reason) |
NotEmpty.java |
public final class NotEmpty extends org.omg.CORBA.UserException
implements org.omg.CORBA.portable.IDLEntity |
public final class NotEmpty extends
org.omg.CORBA.UserException |
NotEmpty.java |
Only default constructor |
Add new constructor public NotEmpty (String reason) |
NotFound.java |
public final class NotFound extends org.omg.CORBA.UserException
implements org.omg.CORBA.portable.IDLEntity |
public final class NotFound extends
org.omg.CORBA.UserException |
NotFound.java |
Only default constructor |
Add new constructor public NotFound (String,
org.omg.CosNaming.NamingContextPackage.NotFoundReason,
org.omg.CosNaming.NameComponent[]) |
To conform with the CORBA 2.3 specification, the following
classes have been added.
- NamingContextPOA.java
- BindingIteratorPOA.java
To conform with the CORBA 2.3 specification, the following
classes are deprecated.
- _NamingContextImplBase.java
- _BindingIteratorImplBase.java
API changes to org.omg.CORBA
- To conform to OMG spec 99-07-57, IDL to Java mapping,
the following methods have been changed.
- The signature of method
org.omg.CORBA.Any.insert_fixed(java.math.BigDecimal,
org.omg.CORBA.TypeCode) is changed to throw an
org.omg.CORBA.Bad_INV_ORDER exception. System exception
does not need to be declared in user's code. (CCC 4340915)
- The method TypeCode.equivalent is defined as abstract.
BEFORE: threw a NO_IMPLEMENT exception. Compatibility
impact: Minimal impact for licensees, not for end user. Licensees
need to provide a dummy implementation of this method. (CCC
4340932)
- The method TypeCode.get_compact_typecode is defined as
abstract. BEFORE: threw a NO_IMPLEMENT exception.
Compatibility impact: Minimal impact for licensees, not for end
user. Licensees need to provide a dummy implementation of this
method. (CCC 4340932)
- The mapping for the
get_interface_def(org.omg.CORBA.Object) method in
org.omg.CORBA.portable.Delegate.java is defined as
abstract. Compatibility impact: Yes, a non-abstract method is
converted to abstract. (CCC 4366071)
- The mapping for the write_Principal() method in
org.omg.CORBA.portable.OutputStream.java is no longer
abstract. Compatibility impact: No, an abstract method is converted
to non-abstract. (CCC 4366072)
- The mapping for the read_Principal() method in
org.omg.CORBA.portable.InputStream.java is no longer
abstract. Compatibility impact: None, changing a method that is
declared abstract to no longer be abstract does not break
compatibility with pre-existing binaries. (CCC 4366074)
- To conform to the CORBA 2.3 specification, the
org.omg.DomainManagerOperations interface no longer
extends org.omg.CORBA.Object. Compatibility impact: None,
no CORBA program will use the DomainManagerOperations
interface directly. The DomainManagerOperations interface
can only be used by the programs via the DomainManager
interface, which already extends org.omg.CORBA.Object.
(CCC 4340907)
- The following classes are declared as abstract and no longer
have a private constructor. (CCC 4372196)
- org.omg.CORBA.ServiceDetailHelper
- org.omg.CORBA.ServiceInformationHelper
- To conform with the IDL to Java spec in section 1.15.2, the
default constructor javadoc comments in the following
org.omg.CORBA files have been changed from
COMPLETED_MAYBE to COMPLETED_NO. Compatibility
impact: None. (CCC 4363355)
- INTERNAL.java
- INVALID_TRANSACTION.java
- INV_OBJREF.java
- The following Helper classes in org.omg.CORBA have
been changed from public final to public
abstract, and the default constructor for the Helper classes
has been deleted. This change has been made to comply with the ORB
core specification as defined by CORBA 2.3.1 and with the IDL/Java
Language mapping as defined in ptc/00-01-08. Compatibility impact:
Minimal since the Helper classes have been made 'abstract' as
defined by the OMG IDL/Java Language mapping specification,
applications which had previously instantiated a Helper class
instance would fail. But the Helper class has only static methods
in it, and there is no good reason for an application to create an
instance of the Helper class. (CCC 4364208)
- AnySeqHelper.java
- BooleanSeqHelper.java
- CharSeqHelper.java
- DoubleSeqHelper.java
- FloatSeqHelper.java
- LongLongSeqHelper.java
- LongSeqHelper.java
- OctetSeqHelper.java
- ShortSeqHelper.java
- StringValueHelper.java
- ULongLongSeqHelper.java
- ULongSeqHelper.java
- UShortSeqHelper.java
- WCharSeqHelper.java
- WStringValueHelper.java
- To conform with the recently passed OMG issue 3015, which adds
a new class, AbstractInterfaceDef to Interface Repository
classes, we have added the following new constants to
org.omg.CORBA.DefinitionKind. Compatibility impact: None.
(CCC 4367601)
- _dk_AbstractInterface=24. This is a constant that
indicates that an Interface Repository object is representing an
abstract object.
- public static final DefinitionKind dk_AbstractInterface =
new DefinitionKind(_dk_AbstractInterface). This is the static
instance of DefinitionKind, indicating that an Interface
Repository object represents an abstract interface.
- The following org.omg.CORBA APIs for typecodes were
changed to conform to the OMG specification. All of the classes in
the following list are in the org.omg.CORBA package.
Compatibility impact: Yes. See each change below for details. (CCC
4368800)
- The Typecode methods fixed_digits,
fixed_scale, member_visibility,
type_modified, and concrete_base_type are changed
from concrete to abstract. Typecode is always implemented by an ORB
implementor and never subclassed by an ORB user, so this should not
impact customers.
- TCKind.from_int no longer throws the unchecked
exception BAD_PARAM. Since BAD_PARAM is an
unchecked exception, removing the exception should not affect
customer code at compile time.
- Principal is changed to a concrete class with methods
that throw NO_IMPLEMENT from an abstract class with
abstract methods. Principal is deprecated and rarely used.
In any case, it would not generally be subclassed by a user and
would always be fully implemented by an ORB implementor.
- An extract_Streamable method is added to Any.
Adding a method does not affect compatibility.
- Any.insert_object( object, Typecode ) is changed to
throw BAD_PARAM. Since BAD_PARAM is an unchecked
exception, adding the exception should not affect customer code at
compile time.
- The Any methods insert_Streamable,
extract_Principal, and insert_Principal are no
longer abstract. Any is fully implemented by ORB
implementors and never subclassed by ORB users, so this should not
impact customers.
- The Any methods extract_value and
insert_value are changed to abstract. Any is
fully implemented by ORB implementors and never subclassed by ORB
users, so this should not impact customers.
- The Identifier field is added to
org.omg.CORBA.Initializer. Compatibility impact: None.
(CCC 4372194)
- To comply with ptc/00-01-08.pdf, the following classes are
changed:
- org.omg.CORBA.ORBPackage.InvalidName.java is declared
as final. Compatibility impact: Yes. The InvalidName is
being declared as final, which would impact source code that was
subclassing this. Since it is an exception type, we do not
anticipate this kind of behavior. (CCC 4366734)
- org.omg.stub.java.rmi._Remote_Stub.java returns a
clone of _type_ids. This will prevent mangling of the
original type_ids_ array by external users. (CCC
4366734)
- The from_int(Int i) method in
org.omg.CORBA.SetOverrideType no longer throws a
BAD_PARAM exception. Compatibility impact: No. Should not
cause a compatibility problem since we are removing a throws
declaration of an unchecked exception. (CCC 4369490)
- The from_int(Int i) method in
org.omg.CORBA.DefinitionKind no longer throws a
BAD_PARAM exception. Compatibility impact: No. (CCC
4370659)
- org.omg.CORBA.DynamicImplementation has been
deprecated by the OMG in favor of the Portable Object Adapter
(POA). A default invoke body is supplied. Compatibility impact: No.
Should not impact anyone implementing this class. (CCC
4369490)
- The following classes are changed to correct errors.
Compatibility impact: No (CCC 4362556)
- Helper and Holder classes are added to
UnknownUserException.java. No compatibility impact.
- Helper and Holder classes are added to
WrongTransaction.java, and the class is declared final. No
compatibility impact.
- CompletionStatus.java is declared final, no longer
implements IDLEntity, is changed to a private constructor.
A BAD_PARAM RuntimeException will no longer explicitly be
thrown by from_int. Compatibility impact: Yes. New code
written using the new CompletionStatus.java class will not
have to explicitly catch the BAD_PARAM runtime exception.
If it's recompiled with an older JDK, it would get a compile-time
error. -- These changes were undone due to JCK regression
(4375061). An OMG issue has been filed instead
(http://www.omg.org/issues/java-rtf.html#Issue3946).
- INV_POLICY.java is declared as final. No compatibility
impact.
- The addition of portable interceptors requires a new method on
existing CORBA APIs and four new classes generated from IDL
typedefs. Compatibility impact: none, these changes are all
additions. (CCC 4379826)
- register_initial_reference is added in public
class org.omg.CORBA.ORB.
- New class org.omg.CORBA.StringSeqHelper is added for 2
IDL typedefs.
- New class org.omg.CORBA.StringSeqHolder is added for 2
IDL typedefs.
- New class org.omg.CORBA.WStringSeqHelper is added for
2 IDL typedefs.
- New class org.omg.CORBA.WStringSeqHolder is added for
2 IDL typedefs.
API changes to javax.rmi.CORBA
To comply with OMG API specifications, the following changes have
been made to
javax.rmi.CORBA:
- The protected constructor in javax.rmi.CORBA.Stub is
removed. Compatibility impact: None. (CCC 4366722)
- To comply with OMG specification 00-01-06.pdf, the
jaxax.rmi.CORBA.ClassDesc constructor is removed. (CCC
4366734)
Non-API changes
The following non-API changes were also implemented in JDK 5.0.
- Correct repository id computations. Compatibility impact: Yes.
Added ORB versioning support to allow interoperability with the JDK
1.3 ORB, maintain backwards compatibility, and enable
interoperability with other vendor ORBs. (CCC 4365188)
- To conform with the recently passed OMG issue 3015, we have
taken all Interface Repository-related version pragmas out of
org.omg.CORBA.ir.idl. This also changes the Repository ID
values of a few IR interfaces that we ship in
org.omg.CORBA, for example, IDLTypeHelper, from
private static String _id =
"IDL:omg.org/CORBA/IDLType:2.3";
to
private static String _id =
"IDL:omg.org/CORBA/IDLType:1.0";
Compatibility impact: Yes. This change might affect
interoperability with existing implementations. Restart the
application and the IR if you get a COMM_FAILURE exception
(or something similar). (CCC 4372718)
- Added @serial exclude tags to all org.omg.* package
files so that JAVADOC will ignore the whole package for the
Serialization spec. There is no requirement from Object Management
Group (OMG) to have Serialization compatibility between different
versions. Practically speaking there are no use cases where the
org.omg classes will be serialized in one version and
de-serialized in the next version. Compatibility impact: None. (CCC
4394004)
- Changed idlj compiler arguments in support of POA,
which is a new CORBA feature in Merlin. Changes to the
idlj tool arguments include:
- removed undocumented -poa flag
- enabled generation of standard POA-based skeletons by
default
- added a new flag, -oldImplBase, to allow generation of
backward compatible skeletons (compatible with JDK 1.2 and
1.3)
Compatibility impact: Yes, existing programs that use the
compiler may need to add the -oldImplBase flag to their
idlj invocation to maintain compatibility. (CCC
4407835)
New API
The following new API were added to JDK 5.0.
- The PortableInterceptor API is added. An incorrect
specification, ptc/2000-04-05, was being referenced in the test
plan. Another incorrect specification, orbos/99-12-02 was being
referenced in the feature list (ptc/2000-04-05 is the same as
orbos/99-12-02 except the format has changed). The correct
specification reference for this new API is
http://www.omg.org/cgi-gin/doc?ptc/2001-03-04. CCC 4307834 includes
the list of changes/additions from ptc/2000-04-05. Compatibility
impact: none, this is a new feature so no existing code uses
it.
- The addition of portable interceptors requires a new method,
id, in public interface
org.omg.PortableServer.POA.
Official Specifications for CORBA support in J2SE 5.0
Specification References
The specifications with which the Java 2 Platform Standard Edition
(J2SE) 5.0 ORB complies are as follows. If these links do not take
you to the referenced specification, the OMG may have changed the
URL, and you can link to
www.omg.org to search for the correct
specification.
These are the only specifications referenced by this document.
Supported Specification Details
Not all of the above specifications are currently implemented in
the ORB in J2SE 5.0. The precise list of supported sections is as
follows:
- CORBA 2.3.1 chapters 1-3 and 6-9
- Revised IDL to Java language mapping, section 1.21.8.2, the
orb.properties file.
- CORBA 2.3.1 chapter 4 with the following replacements from the
Portable Interceptors specification:
-
- section 4.2.3.5 destroy
- section 4.5.2 CodeFactory and PICurrent are
required
- Section 4.5.3.4 as updated for
register_initial_reference
- CORBA 2.3.1 chapter 5 with the following update from the
Portable Interceptors specification:
-
- 5.5.2 StringSeq and WStringSeq are required.
This adds the following classes to org.omg.CORBA:
-
- StringSeqHolder
- StringSeqHelper
- WStringSeqHolder
- WStringSeqHelper
- CORBA 2.3.1 sections 10.6.1 and 10.6.2 are supported for
repository IDs.
- CORBA 2.3.1 section 10.7 for TypeCode APIs.
- CORBA 2.3.1 chapter 11, Portable Object Adapter (POA), with the
following updates from the Portable Interceptors
specification:
-
- Section 11.3.7 POAs must preserve all policies
- Section 11.3.8.2 again states that POAs must preserve all
policies
- Section 11.3.8.26 POA::id is required.
- CORBA 2.3.1 chapters 13 and 15 define GIOP 1.0, 1.1, and 1.2.
The J2SE 5.0 ORB fully supports all versions of GIOP, with the
exception that the bi-directional GIOP feature defined in sections
15.8 and 15.9 is not supported.
- All of the Interoperable Naming Service is supported.
- Portable Interceptors section 13.8 (the new
Coder/Decoder interfaces) and all of chapter 21
(the interceptor specification).
- Section 1.21.8 of the Revised IDL to Java Language Mapping
Specification (ptc/00-11-03) has been changed from the version in
the IDL to Java Language Mapping Specification (ptc/00-01-08).
Tools
- The IDL to Java compiler (idlj) complies with:
-
- CORBA 2.3.1 chapter 3 (IDL definition)
- CORBA 2.3.1 chapters 5 and 6 (semantics of Value types)
- CORBA 2.3.1 section 10.6.5 (pragmas)
- The IDL to Java mapping specification
- The Revised IDL to Java language mapping specification section
1.12.1 "local interfaces"
- The Java to IDL compiler (the IIOP backend for rmic) complies
with:
-
- CORBA 2.3.1 chapters 5 and 6 (value types)
- The Java to IDL language mapping. Note that this implicitly
references section 1.21 of the IDL to Java language mapping
- IDL generated by the -idl flag complies with CORBA 2.3.1
chapter 3.
Other Compatibility Information
- The class java.util.Calendar is not interoperable
between J2SE 1.3.x and J2SE 5.0 when using RMI-IIOP. OMG issue 3151
may resolve this, but it will probably have to be implemented in a
later release of the Java platform.
The J2SE 5.0 version of Calendar writes a
ZoneInfo object in its writeObject method.
Similarly, it calls readObject to read this. Based on Java
Object Serialization, it expects that if it's talking to an older
version, the object won't be there, so the stream will throw an
EOFException and keep the stream position intact.