Changes since version 3.1.3
---------------------------

- A new property ooc.orb.raise_dii_exceptions has been added to
  address a compatibility problem with JavaIDL stubs. This primarily
  affects JDK 1.2 applications which use the Naming Service, because
  JDK 1.2 includes stubs for these interfaces that may be used in
  place of ORBacus-generated stubs. In short, the JavaIDL stubs expect
  DII operations such as Request::invoke() to raise system exceptions
  immediately, rather than store them in the Environment. When this
  property is set to true, the ORBacus DII operations will behave as
  JDK 1.2 expects by storing a system exception in the Environment and
  then raising it immediately.

- A compatibility problem with JDK 1.2 has been fixed. An
  ArrayOutOfBoundsException could be raised when unmarshalling user
  exceptions.

- Operations on Context now raise exceptions as specified in the
  latest CORBA specification.

- The latest CORBA specification clarifies that the parameter to
  ORB::create_list() is not the number of empty elements to create,
  but only a "hint" for how many elements the user intends to create
  later (with operations such as add_item()). ORBacus has been changed
  to reflect this.

- Calling ORB::string_to_object with an unrecognized or invalid
  stringified object reference raises a CORBA::BAD_PARAM exception
  instead of a CORBA::INV_OBJREF exception.

- For improved conformance with the INS specification, connecting a
  named object to the ORB also connects the object with another
  object-key which is the string name without the terminating '\0'
  character.

- Added support for INS iiopname://, and iioploc:// object URLs.
  URLs can contain multiple addresses, but ORBacus only uses the 
  first address.

- Added support for the command-line options -ORBInitRef and
  -ORBDefaultInitRef as defined by the INS. Initial references can
  also be defined using the existing ooc.service configuration
  property, and a new property, ooc.orb.default_init_ref, was added.

- The IOR: prefix for stringified IORs is now case insensitive.

- Servers now reliably transmit a CloseConnection message to the
  client on connection shutdown, in all possible concurrency model
  combinations. As a result, clients will now get a TRANSIENT
  exception upon server shutdown (i.e., when the server calls
  deactivate_impl() on the BOA), and not a COMM_FAILURE anymore.

- The OCI shutdown() operations have been renamed to
  unblock_threads(), since this name better describes what these
  operations are supposed to do. The old name shutdown() was
  misleading, since protocol plug-ins are free to choose whatever
  means necessary to unblock blocking threads. Using Berkeley Sockets'
  shutdown() is just one variant, which does not exist in a Java
  environment, for example.

- The OCI operations unblock_threads() and close() for Transport
  objects now have a boolean "discard" parameter. If set to TRUE,
  protocol plug-ins are allowed to discard unsent data buffered by the
  transport.

- Added _set_policy_override() to Object, ObjectImpl and Delegate
  classes in order to improve the compatibility with the JDK 1.2 ORB.

- Fixed bugs with TypeCode indirection.

Changes since version 3.1.2
---------------------------

- Fixed exception specification of TypeCode.discriminator_type().

- Fixed bug in DynAny.insert_reference().

- Fixed an alignment bug in the marshalling code of zero-length double
  sequences.

- Fixed exception handling bug in the DII operations get_response and
  poll_response.

- Fixed OB::ReconnectPolicy, so that "at most once" semantics is now
  also guaranteed if this policy is set.

- read() in helper classes generated by `jidl' doesn't narrow()
  anymore.

- Fixed a NullPointerException bug in com.ooc.OCI.IIOP.impl.Transport.

- Added missing switch branch for enum types in DynUnion.

Changes since version 3.1.1
---------------------------

- Added missing orb.idl.

- BOA::obj_is_ready() and BOA::deactivate_obj() are now
  implemented. obj_is_ready() calls connect(), and deactivate_obj()
  calls disconnect().

- Non-CORBA exceptions thrown in servant implementation now display
  more error information.

- Fixed a bug in marshalling a union TypeCode with a default member.
  Previously, ORBacus was always marshalling an octet, which could
  cause subtle interoperability problems for certain union types. Now
  it correctly marshals a dummy value of the discriminator type. Note
  that this fix may cause interoperability problems with previous
  versions of ORBacus.

- Fixed a bug with resolve_initial_references and collocated servants.

- Modified TypeCode::equal() to adhere to the specification. In
  particular, it now ignores names and only compares repository IDs
  when necessary.

- Fixed a bug with com.ooc.CORBA.BOA.disable_acceptor.

- Added a new version of the "ROYALTY-FREE PUBLIC LICENSE AGREEMENT
  FOR ORBACUS SOFTWARE", which clarifies that commercial in-house use
  is also considered commercial use and thus not covered by the
  license agreement.

Changes since version 3.1
-------------------------

- Fixed a bug in the handling of OB::ProtocolPolicy.

- Fixed a bug in object key handling.

- Fixed a bug that was responsible for bad performance in case many
  objects (servants) were used.

- Added OCI::Connector::connect_timeout().

- Optimized built-in method name dispatch in
  com.ooc.CORBA.BOA._OB_dispatch.

- Fixed a bug in com.ooc.Client.decUsage().

- ORBacus threads now have meaningful names to aid in debugging.

- Added README.VCAFE file.

- Fixed bugs in Any in which alias TypeCodes were not preserved properly
  and string length validation was incorrect.

- Fixed bug in OutputStream which caused an InternalError exception
  when an aliased TypeCode was used as a union's discriminator type.

- Fixed bug in the OCI buffer class.

- Fixed bug in read_char() which led to a DATA_CONVERSION exception
  when reading 8 bit characters with a character code beyond 127.

- Optimized com.ooc.CORBA.ORB.disconnect. It's now significantly faster.
  com.ooc.CORBA.ORB.connect performance has also been improved.

Changes since version 3.1b1
---------------------------

- Improved overall performance and resolved memory footprint issues by
  providing a new, optimized CORBA::Any implementation.

- IDL-to-Java translator now generates Helper classes that are
  compatible with Netscape.

- Fixed a bug in the IOR generation code.

- Removed a wrong InternalError exception from
  GIOPClientWorkerBlocking.java.

- Added _orb() method to org.omg.CORBA.portable.ObjectImpl, Delegate,
  etc.

- IDL-to-Java translator now generates code that uses
  orb.get_primitive_tc() rather than orb.create_string_tc(0).

- Removed dependency on policy-related methods in org.omg.CORBA classes
  to maintain applet compatibility with Netscape's built-in ORB.

- Defining multiple initial services with -ORBservice works again.

- Fixed security exception problem in applets.

- OCI changes: The compare() functions have been replaced by equivalent(),
  is_local() and is_usable().

Changes since version 3.0.1
---------------------------

- Renamed transaction exceptions.

- Added support for properties. This allows the user to configure
  various ORB and BOA parameters.

- The path or URL to the ORBacus configuration file can be set using the
  Java system property "ooc.config".

- Added the method sequence<Object> get_connected_servants() to the
  BOA, which can be used to return a sequence of all connected
  servants.

- Fixed `memory leak' with thread-per-request caused by never removing
  the current thread from the com.ooc.OCI.impl.Current hash table.

- Added new proprietary methods String[] filter_options(String[] args)
  to the ORB and BOA. Applications can use these methods to remove options
  recognized by the BOA or the ORB from the argument list.

- Fixed marshaling problems CORBA::INV_POLICY. Added test to test suite.

- Added -ORBtrace_level and some connection tracing at level 1.

- Added com.ooc.CORBA.MessageViewer class.

- GIOP close connection messages are now handled correctly.

- Fixed bug with named objects. Attempting to use an empty string for
  an object name will cause a BAD_PARAM exception to be thrown.

- Non-named objects now get unique keys. The unique key is now
  0 + tv_sec + tv_usec + running_count. This increases the length
  of the key from 8 to 16 bytes.

- Added new policies OB::TimeoutPolicy, OB::ReconnectPolicy,
  OB::ProtocolPolicy.

- Renamed constant OB::CONNECTION_REUSE to OB::CONNECTION_REUSE_POLICY.

- Renamed ConnectionReusePolicy attribute reuseConnection to value.

- Renamed ConnectionPolicy attribute connect_policy to value.

- Added a usage counter to the Client class, so that connections from
  a client to a server are now destroyed when the last proxy using
  that connection is destroyed.

- A warning message is now displayed in case hostname lookup returns
  "localhost" or "127.0.0.1".

- Made a few changes to the OCI info class hierarchy, in order to be
  more in line with the ORBacus for C++ structure.

- Non-CORBA exceptions thrown in servant implementation code is now
  translated to CORBA::UNKNOWN.

Changes since version 3.0
-------------------------

- It's now guaranteed that Object::_is_equivalent() fails if applied
  to two references for which Object::_hash() returns different hash
  values.

- Fixed bug in com.ooc.OCI.IIOP.impl.Acceptor and add_profile.

Changes since version 3.0b1
---------------------------

- Portnumbers smaller than 1024 are now also allowed.

- Added add_initial_reference to com.ooc.CORBA.ORB.

- Added the ability to generate a clone() method for struct, union,
  enum and exception types.

- Added support for Java tie classes; modified test classes to include
  tie objects; added tie example to demo/hello.

- Added ConFactoryInfo interface. With this change connection
  callbacks are now symmetrical with acceptor callbacks.

- The OCI accept and connect callbacks can now raise a NO_PERMISSION
  exception.

- Removed the call_..._cb() operations from the OCI info object
  specification, since these operations are ORBacus internal.

- Added OCI close callbacks.

- Added com.ooc.CORBA.LocalObject which can be used as base class for
  locality constrained objects to avoid implementing dummy
  org.omg.CORBA.Object operations.

- Removed "hostname is a domainless name ..." warning.
