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.
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
MethodsORB
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 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:
BadKind
Bounds
org.omg.CORBA.ORBPackage
contains two
exceptions:
InvalidName
InconsistentTypeCode
The package org.omg.CORBA.DynAnyPackage
contains four exceptions:
InvalidValue
, thrown by methods in
- DynAny
- DynFixed
Invalid
, thrown by methods in
- DynAny
TypeMismatch
, thrown by methods in
- DynAny
InvalidSeq
, thrown by methods in
- DynArray
- DynSequence
- DynStruct
- DynValue
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
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.
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 TypeCode
s 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
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
NamedValue
objects or as parameters to methods, are defined in the following interfaces:
ARG_IN
ARG_INOUT
ARG_OUT
CTX_RESTRICT_SCOPE
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.
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.
long double
and fixed
are also not supported.
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
).
org.omg.CORBA.DynAny
and other
dynamic-Any interfaces.
org.omg.CORBA.Context
is not implemented.Context
, by definition
have methods that are not implemented.
org.omg.CORBA.Policy
) and methods for getting them
are not implemented.
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.
perform_work
,
work_pending
) are not implemented.
ORB.create_native_tc
) are not
implemented.
org.omg.CORBA
org.omg.CORBA
:
- Current
- DynAny
- DynStruct
- DynEnum
- DynArray
- DomainManager
- Policy
- DynFixed
- DynUnion
- DynSequence
- DynValue
- IRObject
- IDLType
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()
- public org.omg.CORBA.TypeCode create_boxed_value_tc(String id,
String name,
TypeCode boxed_type)
- public org.omg.CORBA.TypeCode create_recursive_value_tc(int offset)
- public org.omg.CORBA.TypeCode create_value_tc(String id,
String name,
short type_modifier,
TypeCode concrete_base,
ValueMember[] members)
- public org.omg.CORBA.TypeCode create_native_tc(String repository_id,
String type_name)
- 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()
- TypeCode
- public TypeCode concrete_base_type()
- public short type_modifier()
- public short member_visibility(int index)
- 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