VisiBroker for Java 3.2 Release Notes
[03.02.00.C2.05]
Table of Contents
Latest Information
Release Contents
Changes Since 3.1
Known Issues
Platform Certification
Compatibility with JDK 1.0.2
Compatibility with JDK 1.2
Compatibility with other VisiBroker
Releases
Interoperability
with other VisiBroker Releases
Use with Netscape Communicator/Navigator 4.0
Printing Version Information
Latest Information
For the latest technical information relating to this release please visit
Visigenic's ORB Central
web pages.
Release Contents
VisiBroker for Java 3.2 consists of
-
Development tools and libraries
-
VisiBroker ORB (ORB runtime, services, and utilities)
-
VisiBroker GateKeeper
-
Documentation
NOTE: Support for SSL over IIOP is available as a separate add-on product,
VisiBroker SSL Pack for Java.
Changes Since 3.1
VisiBroker for Java 3.2 contains many improvements over the last release
including important fixes and new features. All of the changes are
outlined below. It is very important that this section be read carefully
since the changes in this release affect all developers. For information
on changes prior to this release, please visit ORB
Central.
Upgrading from 3.1
When upgrading from VisiBroker for Java 3.1, it is recommended that you
remove VisiBroker for Java 3.1 from your system before installing VisiBroker
for Java 3.2.
New Features in 3.2
VisiBroker Developer for Java 3.2 contains many new features and enhancements
over VisiBroker Developer for Java 3.1. A brief outline is provided
below, followed by detailed descriptions of the changes.
-
ORB Runtime
-
Improved support for CORBA portability specification
-
Support for Dynamic Anys (DynAnys)
-
Native Windows Executables
-
Updated Interface Repository (IR)
-
Updated IDL Compiler
-
Object Wrappers
-
ORB Management Interfaces
-
GateKeeper
-
New GateKeeper GUI Configuration Tool
-
Improved GateKeeper message handling
-
Examples
-
New Encryption Interceptor example
-
New DynAny example
CORBA Portability
As part of the OMG Java/IDL language mapping, the OMG specifies mechanisms
by which a user may replace an ORB implementation using the org.omg.CORBA.ORBClass
property. VisiBroker for Java 3.2 contains several improvements which
allow it to be swapped in place of any other compliant ORB. This
ORB replacement feature has been tested successfully against early versions
of JDK 1.2 which includes a minimal Java ORB.
VisiBroker for Java currently supports several variations of the org.omg.CORBA.ORB.init()
method. The OMG specification states that the singleton ORB
returned by the no argument ORB.init() can only be used to create
TypeCodes and Anys. VisiBroker for Java 3.2 now optionally provides
compliant behavior by setting a Java system property in your application.
To obtain compliant behavior define the system property org.omg.CORBA.ORBSingletonClass
to com.visigenic.vbroker.orb.ORBSingleton. For example on
a JavaSoft VM one would run the following command:
prompt> vbj -Dorg.omg.CORBA.ORBSingletonClass=com.visigenic.vbroker.orb.ORBSingleton
Server
It is recommended that users modify their programs to be compliant in order
to provide the most compatibility with future versions of VisiBroker for
Java. Note, a compliant program will run on previous versions
of VisiBroker for Java 3.x as well. The only change required by applications
is to call org.omg.CORBA.ORB.init(String[] args, java.util.Properties
properties) instead of org.omg.CORBA.ORB.init() to initialize
an ORB from within an application. The table below summarizes the
changes required for applets and applications. All examples provided
with this product use the new methods. In the application method,
args represents the command line argument passed into your applications
main() routine. In the applet method, applet represents
the applet instance (i.e. your applet's this reference).
Note: Calling the application and applet versions of ORB.init()
return a new instance of the ORB each time they are called.
|
Old method |
New method |
application |
org.omg.CORBA.ORB.init() |
org.omg.CORBA.ORB.init(args, null) |
applet |
org.omg.CORBA.ORB.init(applet) |
org.omg.CORBA.ORB.init(applet, null) |
Dynamic Any Support
VBJ 3.2 fully supports the recently adopted OMG Dynamic Any (DynAny) specification.
DynAnys provide a portable and convenient way to build complex data structures
without requiring the availability of static class definitions provided
by the IDL compiler. For complete information on this new feature
please consult the VBJ 3.2 documentation and the provided DynAny example.
Native Windows Executables
Native windows executables are now provided on all Microsoft Windows platforms
instead of Windows batch files. The executables provide more robust
behavior and configuration options to the user. The default VM to
be used by VBJ can now be selected on the command line of all executables
or by changing a registry setting using the vregedit tool. When changing
the VM, one should also change the value of VBROKER_TAG, which indicate
what flag to use when passing system properties to the VM. For JavaSoft
VMs this flag is "-D" for the Microsoft VM (i.e. jview) this flag should
be set to "/d:".
Updated Interface Repository
The Interface Repository (IR) has been updated to be compliant with the
CORBA 2.1 specification.
Updated IDL Compiler
The IDL compiler (idl2java) has been updated to support the IDL grammar
as defined by CORBA 2.1. This new grammar adds support for more complex
nested types such as nested structures. The IDL compiler has also
been significantly enhanced to provide very detailed error messages.
Object Wrappers
VisiBroker's object wrapper feature allows you to define methods that are
to be invoked when client application invokes a method on a bound object
or when a server application receives an operation request. Unlike the
interceptor feature described in Chapter 16, which is invoked at the ORB
level, object wrappers are invoked at the object level prior to the call
reaching the stub or the implementation, irrespective of whether the call
results in network communication or not. Also object wrappers get invoked
on the server side when the ORB makes upcalls to the object implementation.
In fact, you can design object wrappers that return results without the
operation request ever reaching the target object (i.e., stub on the client,
or implementation on the server).
ORB Management Interfaces
The ORB Management Interfaces in VBJ 3.2 offers a new way of monitoring
and managing the ORB. This new feature allows the developer to query and
change properties of the ORB and Object Adapters during runtime.
Please consult the documentation for full details on this new feature.
GateKeeper
The GateKeeper has been significantly improved in several areas.
The GateKeeper now includes an advanced graphical configuration tool (gkconfig)
which can be used to configure all aspects of the GateKeeper's operation.
This tool is now the preferred way of configuring all GateKeeper options.
The GateKeeper now reads all of its configuration information from a properties
file rather than the command line. The gkconfig tool should be used
to generate the configuration file. Note, many command line
options to the GateKeeper are no longer supported. It is strongly
recommended that the GateKeeper documentation be reviewed thoroughly before
upgrading to the latest version.
The GateKeeper internal architecture has also been improved to provide
improved performance and transparency to clients and servers using the
GateKeeper as a proxy.
Minor enhancements and bug fixes in 3.2
The following is a brief outline and description of the enhancements and
bugs fixed in VisiBroker for Java 3.2. Some fixes resulted in an
incompatible change with VisiBroker for Java 3.1 and are so indicated.
Note: This list is not complete; if you have a question about a particular
failure, please contact Visigenic technical support.
Incompatible changes
-
The receive_reply method on the ClientInterceptor now is able to return
an input stream, allowing a complete end-to-end encryption interceptor
to be written. This required a change in the return value for receive_reply.
-
idl2java no longer generates deprecated skeleton classes by default (see
-deprecated_skel option in documentation)
-
The definition for Policy as it relates to activation has been moved from
the CORBA package to the extensions package. This was done because
it interfered with the defintion of CORBA::Policy as written in the specification.
-
Attempting to register a skeleton with the BOA which has the same name
and type as a different skeleton that has already been registered with
the BOA will no longer overwrite the existing registration. To register
a new skeleton, one should first call BOA.deactivate_obj() on the original
skeleton, before attempting to register a new skeleton with the same name/type.
ORB runtime
-
Security exceptions from some third party products (e.g. Marimba Castinet
Tuner) caused by the use getLocalHost() call are now handled properly.
-
Incompatibilities between VisiBroker 3.0 and Netscape Enterprise Server
3.0 have been resolved.
-
Illegal Access Errors running with jview under MS SDK for java 2.0 in certain
situations have been resolved.
-
Very large IORs are now received correctly from the osagent.
-
New ORB option ORBconnectionCacheMax to limit the maximum number of connections
for the connection cache. This works around problems in clients running
out of file descriptors when they communicate with large numbers of servers.
-
Thread Pooling performance has been improved.
-
New ORB flag for AIX (ORBsyncgc) disables synchronous garbage collection
invocation from ORB runtime to work around AIX VM bug.
-
Extraneous messages in Resolver.locate() have been removed.
-
vregedit has been updated to easily set the value of VBROKER_JAVAVM under
windows.
-
The VBROKER_TAG option has been added so the developer can specify the
flag to use when passing properties to the VM.
-
The OAD now attempts to further minimize its use of file descriptors.
-
Removed unnecessary _portable_stub_ that was produced from the helper insert/extract
for a local object using portable API
-
ORBwarn option now provided to print warnings such as Java exceptions thrown
by user code, but caught by the ORB. Run "vbj -DORBwarn=1" to get
level one warnings. Run "vbj -DORBwarn=2" to get level two warnings.
-
ORB.shutdown() now shutdowns the ORB completely. Calling shutdown()
on an ORB instance will do the following: Close all listen sockets
and listener threads, prevent new requests from being dispatched, wait
for all currently dispatched requests to complete, shutdown all incoming
connections, and finally cause all threads blocked on impl_is_ready() to
return.
GateKeeper
-
The ORBdisableAgentCache option has been added to disable caching of objects
previously located. While normally this behavior is desirable, in the case
where the "client" is the GateKeeper this feature interferes with the ability
of applets to take advantage of the osagent load balancing feature. To
allow all client requests to go through to the osagent and thus take advantage
of the load balancing feature the GateKeeper can now be started with the
option -ORBdisableAgentCache set to true. The default setting is set to
true, but can be changed by setting to false explicitly in a properties
file. This options will work with any VisiBroker client that desires all
requests to go to the osagent, even when a suitable object has been previously
located.
-
ORB now obtains the original IOR before importing from GateKeeper even
when ORBalwaysProxy is set. This guarantees the object type and identity
from end-to-end.
-
Correct HTTP keep-alive header has been sent by GateKeeper when HTTP tunneling
is involved. But certain browsers, such as Internet Explorer, have
short keep-alive time. This could cause extra rebinds to happen between
the applet and GateKeeper.
-
Fixed 'osfind -LOCverify 1' when showing two servers running via Gatekeeper.
This is corrected by not registering proxy objects in the GateKeeper with
the OSAgent.
-
A warning log level has been added to GateKeeper.
-
Gatekeeper now supports flag -quiet to suppress messages.
-
GateKeeper transparency has been improved.
-
ORBgatekeeperIOR property is now being checked when it was passed to ORB.init()
in a properties object.
-
Two new properties have been added to GateKeeper for supporting interior
proxy configurations: interior_proxy_address and interior_proxy_port.
-
Corrected the IP address reported by the GateKeeper to the applet for establishing
a callback connection when the exterior proxy option (-proxyIP) is used
with the GateKeeper. This allows callbacks to work properly when a proxy
server is situated between the GateKeeper and the applet.
Compiler Tools
-
idl2java no longer allows nested empty modules.
-
idl2java now mangles all Java keywords to prevent name conflicts.
-
idl2java now allows text after #endif.
-
idl2java now generates default() method for unions as per spec.
-
idl2java correctly maps IDL constants in interfaces as final class variables.
-
idl2java generates correct code for unions with enum discriminators
-
idl2java now accepts *.idl command line argument correctly under windows.
-
java2iiop no longer generates Helpers and holders for system extensible
structs.
-
toString() method on extensible and recursive structs now work correctly
-
idl2java code generation for recursive structs has been fixed
-
idl2java now handles const wstring IDL statement
-
Added a new flag -W for setting warning levels in java2iiop. -W0 suppresses
all warnings.
-
Fixed the pragma prefix directive problem. Reopening modules with a different
prefix in effect, will cause the compiler to throw a redefinition error.
To define new entities, with different prefix, place the prefix just before
the new definitions.
Known Issues
Platform Certification
This release has been certified for the following Java Virtual Machines
(JVMs):
-
Netscape Navigator 3.0/4.0.4
-
JavaSoft JDK/JRE 1.1.5
-
JavaSoft JDK 1.0.2
-
Symantec Cafe 1.5
-
Microsoft Internet Explorer 3.0/4.0
-
Microsoft SDK 2.0
In addition, this release has been certified with the following operating
systems:
-
Microsoft Windows 95
-
Microsoft Windows NT 3.51, NT 4.0
-
Sun Solaris 2.5, 2.5.1, 2.6 (with JavaSoft JDK 1.1.5 and SunSoft JDK 1.1.5)
With the exception of the osagent, osfind, and locserv executables, the
VisiBroker for Java ORB is written entirely in Java and can run in any
Java 1.1-compatible environment. For a complete list of Java-enabled
platforms, click here.
Compatibility with JDK 1.0.2
VisiBroker for Java 3.2 is also compatible with JVMs which are compatible
with JDK 1.0.2 with the following restrictions:
-
The vbj command no longer by default looks for an OSAgent as in
previous versions of VisiBroker. Java 1.1 now supports UDP broadcast,
so OSAgents are now located directly by the Java ORB. If you are
running VisiBroker on a Java 1.0.x VM, then the "-VBJfindagent 1"
flag should be used when running vbj or VisiBroker may be unable
to locate an OSAgent.
-
Caffeine pass-by-value semantics (and extensible structs) will not work
since this feature depends on Java object serialization that is only supported
in Java 1.1.
-
The java2iiop and java2idl tools will not work since
they depend on the Java 1.1 reflection API. However, applications developed
using a Java 1.1-compatible development environment can still be deployed
on a Java 1.0.x-compatible VM.
-
The GateKeeper now makes use of certain features of Java 1.1 and will not
run on a 1.0.x-compatible JVM.
Compatibility with JDK 1.2
VisiBroker for Java 3.2 has been tested with JDK 1.2 Beta 2 from JavaSoft,
but has not been officially certified on that VM. Final certification
will be made upon release of the final version of JDK 1.2 from JavaSoft.
Below are the list of known issues when using the JDK 1.2:
-
JDK 1.2 includes a minimal Java ORB which may interfere with VisiBroker
for Java if it is present in your CLASSPATH before the VisiBroker classes.
It is recommended that all JDK classes be removed from your CLASSPATH,
since they are automatically added by the VM when it is started.
-
When running applets designed for VisiBroker for Java 3.2 in a JDK 1.2-based
browser or appletviewer, there may be some loss in functionality.
In particular, certain methods on org.omg.CORBA.Object and org.omg.CORBA.ORB
may not be available. To workaround this problem, install VisiBroker
for Java 3.2 in the browsers local environment, so the VisiBroker for Java
classes are first in the CLASSPATH.
-
The GateKeeper's HTTP support is not compatible with the HTTP Keep-Alive
protocol used by JDK 1.2. Support for HTTP-tunneling and
HTTP file transfer support may not work correctly with a JDK 1.2
client applet or application.
Compatibility with other VisiBroker
for Java Releases
Compatibility with VisiBroker for Java 2.5
-
VisiBroker for Java 3.2 is fully compatible with VisiBroker for Java 2.5
at the application source and binary level. When moving applications
from version 2.5 to version 3.2 it is recommended (though not required)
that you recompile your IDL or Java files using idl2java or java2iiop
to take advantage of the latest compiler and runtime enhancements.
Compatibility with VisiBroker for Java 1.2
-
VisiBroker for Java 3.2 is incompatible at the application source
level with VisiBroker for Java 1.2. Changes must be made to an application's
source code to conform to the new OMG IDL Java Language mapping. A UNIX
sed script is provided that automatically converts code for all but the
most complex cases. This script will handle most of the common changes,
but will not deal with more complex cases. For example, the sed script
will convert all references from CORBA.Object to org.omg.CORBA.Object,
but it will not remove all references to the CORBA.Exception class which
has been removed. The sed script is called vbj_convert. Note:
Windows users must license MKS toolkit or a similar UNIX compatibility
toolkit which includes sed support, if they wish to use vbj_convert.
-
VisiBroker for Java 3.2 binaries (i.e. bytecode) are incompatible with
1.2 binaries. Binaries compiled with version 1.2 cannot be intermixed
with binaries compiled with 3.2. Applications developed using 1.2
must be recompiled in order for them to run on 3.0. This includes recompiling
all IDL definitions to generate new stubs and skeletons.
Interoperability
with other VisiBroker Releases
VisiBroker for Java 3.2 is fully interoperable with VisiBroker for C++
3.x. Communicating with VisiBroker for C++ 3.x requires no runtime
flags. VisiBroker for Java 3.2 is "on-the-wire" interoperable
with:
-
VisiBroker for Java 1.2 and 2.5
-
VisiBroker for C++ 2.x
As a result of clarifications in the original OMG IIOP specification, minor
IIOP wire format changes have been necessary in VisiBroker for Java 3.0.
However, full backwards compatibility is supported that enables client
programs and servers running on VisiBroker for Java 3.0 to interoperate
with existing client programs and servers running on VisiBroker for Java
1.2/2.5 and VisiBroker for C++ 2.x. With this backwards compatibility,
in addition to 3.0-to-3.0 communication, 3.0 client programs can talk seamlessly
to Java 1.2/2.5 and C++ 2.x servers, and Java 1.2/2.5 and C++ 2.x client
programs can talk seamlessly to 3.0 servers.
In environments where previous versions of VisiBroker for Java and VisiBroker
for C++ are being used, it is necessary to enable backwards compatibility.
As described in the Programmer's Guide, to turn backwards compatibility
on, the following runtime property (or Applet parameter) must be set to
"true":
For example, to run the bank client example application on VisiBroker for
Java 3.0 with backwards compatibility turned on, the following command
would be used:
prompt> vbj -DORBbackCompat=true Client
Or, the following line would be added to the applet tag of the ClientApplet.html
file:
<param name=ORBbackCompat value=true>
Use with Netscape Communicator/Navigator 4.0
-
The VisiBroker for Java 3.0 runtime is compatible with the VisiBroker ORB
embedded in Netscape's Communicator product. When using Communicator,
you have two choices on how to program your applets. You may use
the ORB embedded in Communicator (which matches VisiBroker for Java 2.5),
or you may download the VisiBroker for Java 3.0 ORB on top of the existing
version in Communicator. You should download the VisiBroker for Java
3.0 ORB if you are using features new to VisiBroker 3.0 such as interceptors,
event handlers, or SSL.
-
To use the ORB runtime that comes with Communicator, you must run your
servers and the GateKeeper in backward compatibility mode and add the following
param tag to your applet tag in your HTML file.
<param name=USE_ORB_LOCATOR value=true>
-
To use VisiBroker for Java 3.0 instead of Communicator's version of VisiBroker,
add the following param tag to your applet tag in your HTML file.
No special flags are required for the GateKeeper or servers.
<param name=org.omg.CORBA.ORBClass
value=com.visigenic.vbroker.orb.ORB>
Printing Version Information
VisiBroker for Java 3.2 provides mechanisms for printing version information
for the binaries and libraries included in this release. In general
use the executable vbver followed by the file to query version information.
For example vbver osagent.exe on Windows NT prints:
Information for: osagent.exe
Product Name:
VisiBroker Developer for Java
Version:
03.02.00.C2.01
Copyright:
(C) 1996, 1997
Company:
Visigenic Software, Inc.
Build Date:
02/10/1998 17:34:31
Similarly, vbver vbjorb.jar prints:
Information for: vbjorb.jar
Product Name:
VisiBroker Developer for Java
Version:
03.02.00.C2.01
Copyright:
(C) 1996, 1997
Company:
Visigenic Software, Inc.
Build Date:
02/10/1998 19:41:13
To obtain version information for the utilities (such as idl2java, irep,
idl2ir, etc.), pass the -version argument to the
utility. For example, idl2java -version prints:
VisiBroker Developer for Java [03.02.00.C2.01] (FEB 10 1998 20:13:42)
Java: Version 1.1.5 from Sun Microsystems Inc.
OS: Solaris version 2.x; CPU: sparc
Note that the version information that appears above may not exactly match
your release.