Provides the mapping of the OMG CORBA APIs to the JavaTM
programming language, including the class ORB, which is implemented
so that a programmer can use it as a fully-functional Object Request Broker
(ORB).
An ORB handles (or brokers) method invocations between a client and
the method's implementation on a server. Because the client and server
may be anywhere on a network, and because the invocation and implementation
may be written in different programming languages, an ORB does a great
deal of work behind the scenes to accomplish this communication.
What the General User Needs to Know
Most of what an ORB does is completely transparent to the user, and a major
portion of the CORBA package consists of classes used by the ORB
behind the scenes. The result is that most programmers will use only a
small part of this package directly. In fact, most programmers will use
only a few methods from the ORB class, some exceptions, and occasionally,
a holder class.
ORB Methods
These are the ORB methods that a general user might invoke:
-
connect()
-
disconnect()
-
init()
-
init(String [] args, Properties props)
-
init(Applet app, Properties props)
-
list_initial_services()
-
resolve_initial_references(String name)
-
object_to_string(Object obj)
-
string_to_object(String str)
Exceptions
Exceptions in Java IDL are similar to those in any code written in the
Java programming language. If a method is defined to throw an exception,
then any code using that method must have a try/catch
block and handle that exception when it is thrown.
The documentation on Java
IDL exceptions has more information and explains the difference between
system exceptions and user-defined exceptions.
The following is a list of the system exceptions (which are unchecked
exceptions inheriting through org.omg.CORBA.SystemException from
java.lang.RuntimeException) that are defined in the package org.omg.CORBA:
BAD_CONTEXT
BAD_INV_ORDER
BAD_OPERATION
BAD_PARAM
BAD_TYPECODE
COMM_FAILURE
DATA_CONVERSION
FREE_MEM
IMP_LIMIT
INITIALIZE
INTERNAL
INTF_REPOS
INVALID_TRANSACTION
INV_FLAG
INV_IDENT
INV_OBJREF
INV_POLICY
MARSHAL
NO_IMPLEMENT
NO_MEMORY
NO_PERMISSION
NO_RESOURCES
NO_RESPONSE
OBJECT_NOT_EXIST
OBJ_ADAPTER
PERSIST_STORE
TRANSACTION_REQUIRED
TRANSACTION_ROLLEDBACK
TRANSIENT
UNKNOWN
The following is a list of user-defined exceptions defined in the package
org.omg.CORBA.
Bounds
UnknownUserException
WrongTransaction
PolicyError
Note that there are some packages inside the CORBA package with
"Package" as part of their names. These packages are generally quite small
because all they do is provide exceptions or classes for use by interfaces
and classes in the CORBA package.
For example, the package org.omg.CORBA.TypeCodePackage contains
two exceptions thrown by methods in the class TypeCode. These
exceptions are:
The package org.omg.CORBA.ORBPackage contains two exceptions:
-
InvalidName
-
InconsistentTypeCode
The package org.omg.CORBA.DynAnyPackage contains four exceptions:
-
InvalidValue, thrown by methods in
-
Invalid, thrown by methods in
-
TypeMismatch, thrown by methods in
-
InvalidSeq, thrown by methods in
-
DynArray
-
DynSequence
-
DynStruct
-
DynValue
Holder classes
Operations in an IDL interface may take out or inout
parameters as well as in parameters. The Java programming language
only passes parameters by value and thus does not have out or
inout parameters, so these are mapped to what are called Holder
classes. In place of the IDL out parameter, the Java programming
language method will take an instance of the Holder class of the
appropriate type. The result that was assigned to the out or inout
parameter in the IDL interface is assigned to the value field
of the Holder class.
The package org.omg.CORBA contains a Holder class
for each of the basic types (BooleanHolder, LongHolder,
StringHolder, and so on). It also has Holder classes
for each generated class (such as TypeCodeHolder), but these are
used transparently by the ORB, and the programmer usually does not see
them.
The Holder classes defined in the package org.omg.CORBA are:
AnyHolder
BooleanHolder
ByteHolder
CharHolder
DoubleHolder
FloatHolder
FixedHolder
IntHolder
LongHolder
ObjectHolder
PrincipalHolder
ShortHolder
StringHolder
TypeCodeHolder
For Advanced Users
The other classes and interfaces in the CORBA package, which are
used behind the scenes, can be put into four groups. Three of the groups
are used with requests in some capacity, and the fourth group, concerning
the Interface Repository, is a category by itself.
Classes Created by an ORB
The first group contains classes that are created by an ORB and contain
information used in request operations. They are listed in roughly increasing
order of complexity:
-
TCKind -- indicates the kind (datatype) for a TypeCode
object
-
TypeCode -- indicates a datatype and possibly other information
-
Any -- contains a value and its typecode
-
NamedValue -- contains a name, an Any object, and an
argument mode flag. NamedValue objects contain information about
method arguments, method return values, or a context.
-
ContextList -- a list of strings that describe the contexts that
need to be resolved and sent with an invocation
-
ExceptionList -- a list of TypeCodes for exceptions that
may be thrown by a method
-
Environment -- a container for the exception thrown during a method
invocation
-
Context -- a list of NamedValue objects used to pass
auxiliary information from client to server
-
NVList -- a list of NamedValue objects, used to pass
arguments or get results
Classes That Deal with Requests
The second group of classes deals with requests:
-
Object -- the base class for all CORBA object references
-
Request -- the main class in the DII, which contains methods for
adding arguments to the request, for accessing information about the method
being invoked (the method name, its arguments, exceptions it throws, and
so on), and for making invocations on the request
-
DynamicImplementation -- the base class for server implementations
using the DSI. It has the method invoke, which is used by an implementation
of this class to determine the state of a ServerRequest object
and to set its result or exception
-
ServerRequest -- captures the explicit state of a request for
the Dynamic Skeleton Interface
Interfaces That Serve as Constants
The third group contains interfaces that serve as constants. The IDL-to-Java
mapping mandates that IDL enums are mapped to a Java class with the enumerated
values represented as public static final fields in that class (e.g. DefinitionKind).
On the other hand IDL constants defined outside of an IDL interface are
mapped to a Java interface for each constant.
This is why several interfaces in the org.omg.CORBA package
consist of a single field, value, which is a short. This
field is a constant used for such things as an error code or value modifier.
For example, the value field of the interface BAD_POLICY
is one of the possible reasons for the exception PolicyError to
be thrown. To specify this error code, you would use BAD_POLICY.value.
The exception PolicyError uses the value field of
the following interfaces as its possible error codes.
-
BAD_POLICY
-
BAD_POLICY_TYPE
-
BAD_POLICY_VALUE
-
UNSUPPORTED_POLICY
-
UNSUPPORTED_POLICY_VALUE
The method TypeCode.type_modifier returns the value field
of one of the following interfaces. The VM in the names of these
interfaces stands for "value modifier."
-
VM_NONE
-
VM_ABSTRACT
-
VM_CUSTOM
-
VM_TRUNCATABLE
The following constants are returned by ValueMembers access method to denote
the visibility of the ValueMember
-
PRIVATE_MEMBER
-
PUBLIC_MEMBER
These flags, used in NamedValue objects or as parameters to methods,
are defined in the following interfaces:
-
ARG_IN
-
ARG_INOUT
-
ARG_OUT
-
CTX_RESTRICT_SCOPE
Interface Repository Interfaces and Classes
A fourth group contains the Interface Repository interfaces and classes,
which are generated by the idltojava compiler from the OMG IDL
interface ir.idl. The purpose of the Interface Repository is to
identify the interfaces stored in it so that they can be accessed by an
ORB. Each module, type, interface, attribute, operation, parameter, exception,
constant, and so on is described completely by the Interface Repository
API.
An ORB does not require that there be an interface repository, and Java
IDL does not include one. Even though this release does not include an
implementation of an interface repository, the following IR classes and
interfaces have been included for the purpose of creating type codes (see
create_value_tc, create_struct_tc, create_union_tc and create_exception_tc
methods in interface org.omg.CORBA.ORB)
-
IRObject
-
IDLType
-
DefinitionKind
-
StructMember
-
UnionMember
-
ValueMember
Related Documentation
For overviews, guides, and a tutorial, please see:
CORBA Features Not Implemented in Java IDL
Some of the API included in org.omg.CORBA is provided for
conformance with the current OMG CORBA specification but is not implemented
in Sun's release of the JDKTM. This enables
other JDK licensees to provide implementations of this API in standard
extensions and products.
General Summary of Features or API Not Implemented in This Release:
-
Interface Repository. An Interface Repository is not required for normal
operation of Java IDL. Java IDL clients can access an Interface Repository
provided by another Java or C++ ORB.
-
RMI/IIOP
-
Objects-by-Value
-
Of the recently added type extensions to IDL, only longlong (signed
and unsigned) is supported. The wide character IDL types wchar
and wstring are not supported. The types long double
and fixed are also not supported.
-
The method org.omg.CORBA.Any.equal is not implemented for complex
TypeCodes (tk_objref, tk_Principal, tk_struct,
tk_union, tk_sequence, tk_array, tk_alias,
and tk_except).
-
There is no implementation for org.omg.CORBA.DynAny and other
dynamic-Any interfaces.
-
The API for org.omg.CORBA.Context is not implemented.
NOTE: Abstract classes, such as Context, by definition have
methods that are not implemented.
-
Policies (org.omg.CORBA.Policy) and methods for getting them are
not implemented.
-
Domain managers (org.omg.CORBA.DomainManager) and methods for
getting them are not implemented.
-
org.omg.CORBA.ServiceInformation and ORB methods for getting these
objects are not implemented.
-
org.omg.CORBA.portable.ServantObject and Delegate/ObjectImpl
methods _servant_preinvoke, _servant_postinvoke and _is_local
are not implemented.
-
ORB methods for supporting single-threading (perform_work, work_pending)
are not implemented.
Specific List of Unimplemented Features in Package org.omg.CORBA
Unimplemented Interfaces in package org.omg.CORBA:
-
Current
-
DynAny
-
DynStruct
-
DynEnum
-
DynArray
-
DomainManager
-
Policy
-
DynFixed
-
DynUnion
-
DynSequence
-
DynValue
-
IRObject
-
IDLType
Unimplemented Methods in package org.omg.CORBA:
-
ORB
-
public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any
val)
-
public org.omg.CORBA.DynEnum create_dyn_enum(org.omg.CORBA.TypeCode
type) throws
-
public org.omg.CORBA.DynUnion create_dyn_union(org.omg.CORBA.TypeCode
type)
-
public org.omg.CORBA.DynArray create_dyn_array(org.omg.CORBA.TypeCode
type)
-
public org.omg.CORBA.DynSequence create_dyn_sequence(org.omg.CORBA.TypeCode
type)
-
public org.omg.CORBA.DynStruct create_dyn_struct(org.omg.CORBA.TypeCode
type)
-
public org.omg.CORBA.DynAny create_basic_dyn_any(org.omg.CORBA.TypeCode
type)
-
public org.omg.CORBA.DynAny create_dyn_any(org.omg.CORBA.Any value)
-
public boolean get_service_information(short service_type, ServiceInformationHolder
service_info)
-
public void perform_work()
-
public boolean work_pending()
-
public void shutdown(boolean wait_for_completion)
-
public void run()
-
public org.omg.CORBA.Current get_current()
-
Any
-
public void insert_Value(java.io.Serializable v, TypeCode t)
-
public void insert_Value(java.io.Serializable v)
-
public java.io.Serializable extract_Value()
-
public void insert_fixed(java.math.BigDecimal value, org.omg.CORBA.TypeCode
type)
-
public void insert_fixed(java.math.BigDecimal value)
-
public java.math.BigDecimal extract_fixed()
-
ServerRequest
-
public void set_exception(Any any)
-
public void set_result(org.omg.CORBA.Any any)
-
public void arguments(org.omg.CORBA.NVList args)
-
public String operation()
@since JDK1.2