Features and Change Log for AdironORB 1.0.0 =========================================== Summary of AdironORB -------------------- - Complete redesign of the internals of the OpenORB by Polar Humenn that provides: o Better separation of internal ORB components allowing greater flexibility for creating new protocols, such as adding for security. For example, GIOP is now separated from IIOP and CDR. o Plugable transport and inter-ORB protocols. o Flexible thread management at the server side. Many thread models are provided. o Clean ORB initialization process using the Avalon framework. o Properties based ORB configuration using the Avalon framework. * For more design details, see the "doc/AdironORB-DesignDoc.pdf" file. - Organized under "com.adiron.orb" with new VMCID 0x414f0000. - A lot of existing code was ported, along with much more new code developed, and some bugs fixed. - About a 20%-30% speed up over OpenORB 1.3.0 (measured with small size requests). See the "doc/AdironORB-vs-OpenORB.pdf" file for details. - Other enhancements: o Interception of invocations on collocated objects without marshalling. This can be managed with the LocalInterceptPolicy. o Support for the PortableInterceptor::UNKNOWN reply status (from CORBA 3.0). o No polling overhead on the server (except for the Windows platform). That is, the reading timeout on a server channel is zero. On Windows, timeout of 1000 ms (same as OpenORB) is used to simulate zero timeout. o Support for firewall: iiop.highPort and iiop.lowPort properties. o Converting "-ORBxxx" command-line arguments into parameters named like "org.omg.CORBA.ORBxxx" according to the CORBA 3.0 spec, Sec. 4.5.1. Arguments of form "-ORBInitRef xxx=yyy" are converted into parameters named like "org.omg.CORBA.ORBInitRef.xxx" with value "yyy". o Support for attaching per-thread information to Delegates. This use gives a proprietary way for applications to communicate with interceptors without using policies. o Support for the newer ORB interface defined in CORBA Spec 2.5 such as ORB.id and ORB.register_initial_reference. o Support for the rebind policy defined in CORBA Spec 2.5, Messaging. All rebind modes are supported. - Other changes: o Removed the support for the OpenORB-specific CorbalocService. o No support for the fallback mechanism that uses the local file system. o XML-based ORB configuration is not implemented. o BiDir GIOP is supported in interfaces, but it has not been implemented. o The ORB takes only Java system properties whose key begins with "com.adiron.orb" or "org.omg.CORBA" into the ORB configuration. o Added a SimpleLogger in util that does not keep references to child loggers. o Trace uses System.err instead of System.out when debugging is on. Changes in AdironORB 1.0.0 ======================================================================== - Changed the handling of GIOP minor version in the message layer and the version of CDR Codec and Codec factory for future support of GIOP 1.3. - Added taking system properties whose key begins with "com.adiron.orb" or "org.omg.CORBA" into the ORB configuration. - Added checking the validity of reply status in GIOP Client Channel. - Patched bug fixes and changes from OpenORB 1.4.0 BETA1 and beyond. Changes in AdironORB 0.9.1 ======================================================================== Enhancements for Newer Specifications ------------------------------------- - Added support for the newer ORB interface (CORBA 2.5, IDL to Java 1.2). Added the CORBA_2_5.ORB class for new operations such as id and register_initial_reference. ORB.addInitialReference is removed. - Added support for the rebind policy (defined in CORBA 2.5, Messaging). All rebind modes are supported. Added the MessagingPolicyFactory. Added the messaging/RebindTest. - Added ClientChannelReconnectingListener to support the NO_RECONNECT policy. Added corresponding methods to ClientChannel and ObjRefBinding. - Added support for the PortableInterceptor::UNKNOWN reply status (from CORBA 3.0). - Converted command-line arguments like "-ORBxxx" into parameters named like "org.omg.CORBA.ORBxxx" according to the CORBA 3.0 spec, Sec. 4.5.1. Arguments of form "-ORBInitRef id=url" are converted into parameters named like "org.omg.CORBA.ORBInitRef.id" with value "url". Other Enhancements ------------------ - Added checking if a deadlock may occur in ORB.shutdown() and ORB.destroy(). - Added the NamingTest for testing URLs using corbaloc and corbaname. Added the "run-naming-test" target to build.xml, which starts the transient name service that comes with Java 2 SDK and runs the test - ClientRequestInfo.effective_target() returns the value of target() if no location forward has occured. - Added test cases for exceptions thrown by object implementations when interceptors are used. - Split the default ORB Initializer into three classes: the BaseORBInitializer, GIOP_ORBInitializer, and the default SimpleIIOP_ORBInitializer. Removed the use of properties for ConnectorFactory and Acceptor class names. - Added support for new properties: iiop.highPort and iiop.lowPort - Droped the ISO 646 (ASCII) as fallback in CodeSetDatabaseInitializer because ISO-8859-1 was added as fallback. We do not need ISO 646 unless there is an interoperability issue with other ORBs. - Removed the added ISO-8859-1 file.encoding in testing. That was a workaround. - Made the initial system object id random. - Split the default ORB Loader into four parts: ORB Loader, ORB Configurator, AdironORBInitializer Loader, and PI ORBInitializer Loader. - Added support for attaching per-thread information to Delegates. This use gives a proprietary way for applications to communicate with interceptors without using policies. - Hide unnecessary expose of internal objects: o ORB.getContextObject can retrieve only a few objects such as ServerChannelCurrent. o Changed ObjRefBinding.getChannel to getClientChannelInfo for hiding client channels from application code. o Removed ClientChannelInfo.getConnector. - Added ORB.getParameters to get the Parameters object for flexible use. - Disabled the test message output from the POATest. - Changed the use of multiple AdironORB ORB Initializers to only a single one. Users are encouraged to write their own ORB Initializer. - Changed the ClientAddress.isApplicable such that it supports multiple matched profiles. - Renamed ClientAddress.is_equivalent to isEquivalent. - Commented out calling _non_existent() in ORB.resolve_initial_references when using DefaultInitRef succeeds. I don't think we should check whether the object exists or not in resolve_initial_references. (Joncheng) - Changed CodeSetDatabaseInitializer to add code to the generated CodeSetDatabase.java such that we don't have to manually modify the generated file for the incompatibility between J2SDK 1.3 and 1.4 for the names of ISO-8859-15 (0x0001000F). - Removed the abusive use of java.lang.InternalError. - Added another Trace.signalIllegalCondition that takes an exception for the cause of this illegal condition. - Enabled checking whether a thread is servicing a request or not in ORB.shutdown and ORB.destroy. If the calling thread is servicing a request and wait_for_completion is true, an BAD_INV_ORDER should be thrown. Bug Fixes --------- - Fixed an NPE in IIOP ProtocolConnectorFactory when the code set is not specified. - Fixed a bug where the target object reference is not passed and is not handled properly in local intercept. - Fixed a bug when interceptor is used and a user exception is thrown in an object implementation. - Fixed problems when an Error is thrown by an object implementation. - Fixed a problem with DefaultInitRef: removed calling _non_existent(). - Fixed a bug where wrong GIOP locate reply status is used. Now both locate and object reply status are defined using IDL generated constants. - Fixed a bug where getForwardIOR() may not work for locate requests because, according to the API spec, the state shall be STATE_UNMARSHAL (set by calling preUnmarshalReply) when getForwardIOR is called. Object requests are not following the spec but still work! - Made a workaround for a rare failure in tests where the port 17847 may not be ready for the next use unless GC is called. - Allowed a request on the same target to be made from the send_request intercept point. (To report to OpenORB) - Fixed a NullPointer in Delegate.get_policy() when the policies returned by get_domain_managers_and_policies is null. This situation occurs when _get_policy() is invoked on the target returned by ClientRequestInfo.target(). (Reported to OpenORB as Bug 748891) - Fixed a checking problem in AdapterObjectKey.find_offsets where a proper object key ending with \FD \FD causes BAD_PARAM. - Added calling ClientRequestResponseReceivedListeners in AbstractClient(Locate/Object)Request.setOtherException because setOtherException brings the request state to STATE_COMPLETE and we need to pass the reply status and exception from a request it its interceptor wrapper. - Fixed a bug in ClientChannelManager.shutdown() where m_statSync.wait() is called outside the synchronized session. - Fixed a bug in GIOPClientChannel.removeCompletedRequest() where it should not simply return when the state is STATE_CLOSED because we may have to handle the case of pending close. - Fixed a bug in GIOPClientChannel where, when pending close is true, the client channel should notify its Closed listener when the last active request is removed (in removeCompletedRequest() or process_reply()). - Fixed an error where the initial current position for DynSequence should be -1, not 0. - Commented out catching all exceptions in DynAnyImpl.dyn_any_graph_to_stream because it should not be. As a result, there is an NPE in DynAnyTest.testStruct. This NPE is caused by DynArray because the default current position is 0, so it must set its m_any to the Any returned by to_any() of the first element. If no initial value is set on the any of basic types, to_any() can raise an NPE because Any.m_value is null. This NPE is fixed by initializing the default value of dynamic any of the basic types (DynBasic) according to the CORBA spec 3.0, Section 9.2.2. DynAnyFactoryImpl.create_dyn_any() and DynAnyImpl.create_dyn_any_graph are modified. - In the subclasses of SystemOperation, move calling servant_postinvoke() into a finally clause such that it will always be executed. - Fixed a bug in ServerManager where the Thread Manager may not be shut down. Moved the shutting down to where the state is set to STATE_CLOSED. Changes done in the Community OpenORB ======================================================================== Items with the '-' bullet are ported to AdironORB. Items with the 'X' bullet are not needed in AdironORB. Items with the '*' bullet has not been ported to AdironORB. Items with the '?' bullet are subject to review. Version 1.4.0 CVS HEAD - February 2, 2004 - Added the patch from tigerf _at_ sf _dot_ net for bug #873558. - Fixed the broken IDL reflection example. - Fixed various warnings Eclipse 3.0M6 complained about. - Added Eclipse project files (.project and .classpath) the project can now easily be imported by New->Project->Import From existing Source - Fixed a StackOverflowError (due to an infinite recursion on initCause) when the ORB class is not found. - In OMG's ORB.init(...) operations, added checking for ORB class properties passed through the props parameters to ORB.init(...). - Added the ORB.destroy() operation as it is defined in the CORBA 2.4 spec (Section 4.2.3.5). - Added the ORB.destroy() implementation along with changes to shutdown() and finalize() in order to check for multiple calls to these methods. - Fixed a NPE in idl2java Ant task when verbose="true", Sourceforge bug ID 881983 * Added a property "openorb.rmi.use_native_library" which can be used for deciding whether the RMI-IIOP engine is using the JDK inherent mechanism or a OpenORB native library as its unmarshaling engine. The native library can be found in the CVS module "native" but it must be compiled for the target platform and put on the library path in order to be found by the System.loadLibrary("openorb") call. There are two reasons for adding such a library: 1. The JDK has a problem on a certain platform with accessing private native methods in JDK internal classes. (That was the case for IBM JDK 1.4.1 on IBM AIX 5.2L where a UnsatisfiedLinkError occured although the native library libjava.a was loaded during VM startup. The problem did not occur on the same JDK under SuSE Linux 9) 2. A new JDK comes out and the developers have changed the internal structure of the unmarshaling engine again so that the pure Java mechanism doesn't work. In this case the library can be compiled for the platform (it might even be already compiled for that platform) and used to make the marshaling work with this new JDK. * Fixed the discoverage of the allocateNewObject method for IBM 1.4.x JDKs. * Fixed a bug in the DeserializationKernelFactory which caused no other kernel than the Sun kernel to be created. * Fixed a bug in the DeserializationKernelIBM class which was causing demarshaling of obejcts to fail. * Added support for IBM JDK 1.4.1 by adding a new class DeserializationKernelIBM14 where the new IBM JDK 1.4.x classes will be used internally. * Fixed the calculator rmi example by adding the right property to instantiate the JNDI context factory. - Fixed a ClassCastException when the ManagementBoard was lanched via the launch script. X Added a patch from Alexej Vlasov which fixes a problem with fragmented messages. * Placed compiler cache files in build directory, caches are now deleted by invoking the build target "clean" * Added cachefile attribute to idl2java and java2idl ant tasks to allow the user to control the cachefile location (old behaviour and new default is to use the current directory) Version 1.4.0 BETA1 - December, 19 2003 - OpenORB_1_4_0_BETA1 X Added a patch from Chas Honton to remove the dubious class TransportAssociationHolder. X When settings are entered via the properties object into 'ServerBase.init()', they do not always override properties specified by an imported XML module. This is because the 'org.openorb.orb.config.Configurator' class processes the properties and imports the modules all in the same loop, sometimes allowing the imports to the happen after the properties are added. To fix this, the "orb.config.Configurator.java.diff" patch modifies the 'addProperties()' methods so that they process the properties in two passes, completing all imports before adding the rest of the properties. Patch provided by Eric Thomas . * Made members for ServerManagerImpl protected so that they can be accessed from a deriving class. Also added the method ServerManagerImpl.getChannelsInfo(). Patch submitted by Eric Thomas . - Do not set the value to null when typecode is _tk_void, only do this for _tk_null (Fix submitted by Ralf Bachmann ). * Added a property openorb.rmi.defaultorb.singleton (default false) which avoids two ORBs being created, one throw normal ORB.init() and the other one internally by calling RMI-IIOP methods. With the property set to true the first ORB instance that is created will be used as the RMI-IIOP DefaultORB singleton. * Fixed bug #501332 (Serializable in an any). This patch essentially moves most of the RMIoverIIOP implementation into the OpenORB module. All classes moved from RMIoverIIOP/src/main/org/openorb/rmi/**/*.java to OpenORB/src/main/org/openorb/rmi/*.java - Added a static compile() method to both compilers IdlCompiler, JavaToIdl which returns an int. The main() method returns the code via System.exit(). This compile() method can be used when calling the compilers in process, for example from a Deploy tool. The scripts java2idl and idl2java have a return code of 3 if an exception occured during argument parsing, a return code 0/output The DebugInputStream class creates the following folder structure ${java.io.tmp}/${user.name}//input Each instance of DebugSocketInput/OutputStream creates files of the form :-: in their respective folders. These files can later be analyzed with a normal text editor. If more information is necessary it can easily be added to the stream classes. The way to configure this feature is to set the values for the following config properties in default.xml: iiop.SocketOutputStreamClass=org.openorb.orb.util.DebugSocketOutputStream iiop.SocketInputStreamClass=org.openorb.orb.util.DebugSocketInputStream - Implemented a suggestion from Sean Parker (bug #706401) to avoid a NPE . X Added a memory optimization patch suggested by John Farell (bug # 738579). - Added patch by Ralf Bachmann for bug #814535. - Added patch by Ralf Bachmann for bug #814531. - Added patch by Ralf Bachmann for bug #814526. - Added patch by Ralf Bachmann for bug #814525. - Added patch by Joncheng Kuo for bug #748891. * Allow methods with names "get", "set", and "is" in RMI-IIOP remote interfaces. The methods with these names were dropped before because they are interpreted like getter/setter methods for IDL attributes but the attribute name was missing. - Do not throw another exception when the unmarshalling was already interrupted by an exception. When a remote method throws an application exception the RMI-IIOP stub tries to read the exception via in.read_value(ExClz). When an exception occurs during this read operation the finally block in the stub is executed an in _releaseReply(in) a "CORBA MARSHAL Buffer Underread" exception is thrown overriding the previously thrown exception. Needless to say that the "Buffer Underread" does not provide any information about the real cause of the problem. - Added ISO-8859-1 as fallback in CodeSetDatabaseInitializer. Patch propvided by Bobby Chen * The JavaToIdl compiler uses the folder "generated" for all generated files now when option "-d" is not specified. - Fixed fragment messages bug #548187. Patch provided by Jan Cada * Fixed a problem with the java2idl compiler when compiling interfaces with IDLEntity types other than org.omg.CORBA.Any and org.omg.CORBA.TypeCode. X Removed inner interface org.openorb.orb.net.ServerManager.AdapterManager, use equivalent org.openorb.orb.net.AdapterManager consistently - Removed ExceptionTool dependencies from the OMG classes. This was causing problems trying to chain exceptions when ExceptionTool had not been loaded in the system class loader. * Added test for bug#725257 (Cannot marshal nested truncatable valuetypes). * Added create-separate-main-jars build target so that the combined main jar can split into separate classes and config jars. - Removed the setConfig scripts, use the updateConfig scripts from tools instead. - Added shell scripts for the IDL documentation tool: idldoc. * Moved the SSL IOR component output handling into the SSL module. X Fixed the Logger derivation hierarchy from IIOPTransportServer- and IIOPTransportClientInitializer so that deriving classes can access the logger as well (e.g. SSLTransport*, CSITransport*). X Added a new base interface for orb initializers: org.openorb.orb.Initializer. This interface has a single method 'getName' which is called upon instantiation of the initializer to get the name for the child logger with which the initializer is to be provided with. - Fixed occasional NoClassDefFoundErrors when handling SystemExceptions by temporarily replacing the thread's contextclassloader in the SystemExceptionHelper initializer. - Fixed memory leak in PSS FileSession class by replacing use of marshalBuffers hashtable with a call to new operation getMarshalBuffer() in class CDROutputStream. - Fixed org.openorb.orb.test.iiop.primitive.PrimitiveTest failure which occurred on OSX with an ArrayIndexOutOfBoundsException * Optimization: Use randomly chosen starting point when selecting a local port number when the client port range is specified. Previously the ports were tried in a linear scan starting from the smallest point. * Added configuration enhancement to allow the a use of the "keep alive" socket feature. New property added: iiop.keepAlive=(true/false*) * - default value * Deprecated separate properties: iiop.clientNoDelay iiop.serverNoDelay New property added: iiop.noDelay=(true*/false) * - default value X Added a Java2Idl ant task for the Rmi to IIOP compiler. See Rmi over IIOP module for documentation and examples. ? Fixed bug in IIOPClientRequest.reply_status() that lead to unbounded recursion in some cases. Bug reported by Petter von Dolwitz (petter _dot_ von _dot_ dolwitz _at_ appium _dot_ com). * Moved RepoIDHelper into the tools module as it may also be used from the compilers. The RMIoverIIOP methods from the NameMangling class will be added to RepoIDHelper. * Added socket address translation. This is setup using properties in the format: iiop.address-mapping.
=
See default.xml for more examples. * Created SocketFactory abstraction. * Fixed the "java.net.MalformedURLException: unknown protocol: resource" problem encounted when loading OpenORB from non system classloader. OpenORB can now be used easily inside Catalina. X Moved build script logic into Ant files. - Added a final bug-fix for bug #545853. The Byte Order Marker problem was finally discovered by Daniel Bell (Daniel _dot_ Bell _at_ colorbus _dot_ com _dot_ au). In an interoperability scenario with omniORB 4.0 the C++ side was sending wstring data with reversed byte-order. - The build.xml file creates an archive 'openorb_orb_omg-1.4.0.jar' now. The archive contains all the org.omg.* classes and must be used to to overwrite the JDK org.omg.* classes by using the "endorsed standards override mechanism", for more information see: http://java.sun.com/j2se/1.4.1/docs/guide/standards/index.html For JDK 1.3.x this jar should be put on the boot class path. - Fixed the IdlCompiler's portableHelper option to work with both JDKs 1.3.x and 1.4.x. * Moved the class org.openorb.orb.io.HexPrintStream into the tools package: org.openorb.util.HexPrintStream. - Renamed OpenORB jar files to follow the general naming structure: openorb__-...jar That means for the four OpenORB jars: openorb-1.4.0.jar -> openorb_orb-1.4.0.jar openorb_tools-1.4.0.jar -> openorb_orb_tools-1.4.0.jar openorb_test-1.4.0.jar -> openorb_orb_test-1.4.0.jar openorb_examples-1.4.0.jar -> openorb_orb_examples-1.4.0.jar X Moved the class AbstractTagData from IIOPAddress internal scope into public visibility. Added classes TaggedComponentHandler and TaggedComponentHandlerRegistry. These classes are the base of a more generic approach when it comes to parsing IOR profile components. The SSL module has an example of how to parse a TAG_CSI_SEC_MECH_LIST component using the new approach. * Using BufferedInputStream for reading from sockets. A performance problem had been spotted here by a profiler, reading the GIOP header was nearly as expensive as reading the rest of the message. * Moved the NamingUtils from OpenORB into the tools module because the methods will be used by the Service framework for NameService operations. * Added UpToDate checks to the Idl2Java Ant Task. The task uses a (zipped) cache file for tracking dependencies between idl files and generated java files. Updated the build.xml file and removed manual uptodate checks. Added a section in the OpenORB documentation for all options and examples with the idl2java ant task. - LogEnabled the stream classes with various child loggers. This has mainly been done so that valid child loggers will be available in the RMI-IIOP layer. The new loggers can also be used to add more logging to the OpenORB core layers. * Updated all the compilers to use the DiffFileOutputStream class, this will ensure that files are only overwritten by the compilers when neccicary, speeding up builds. - Removed the apprently erroneous condition in Delegate begin_invocation that cause the original request state to be lost when performing nested ORB mediated calls. This was causing the corruption of POA dispatch state stacks as the postinvoke calls could not be made. This issue was reported by Christoph Gerlach who also helped by providing tracing logs generated by his system. * Added the Idl2Java ant task from Erik Putrycz . X Prevent LocalInputStream from throwing NPE exceptions on NT4, however the reason why the NPE happens on NT4 is still unknown. (Patch from Erik Putrycz ). X Added a fallback mechanism for the NameService operations bind, resolve, and unbind. All services should thus use the extended methods from class org.openorb.orb.util.NamingUtils: o bindObjectToNameService o resolveObjectFromNameService o unbindObjectFromNameService These methods will at first try to perform a normal CORBA NameService operation. If this fails a fallback mechanism is used where the NameService hierarchy is mapped on to the file system. Therefore a folder ".OpenORB" is created in the system default temp folder. When the binding name contains any sub-contexts then these sub-contexts are created as folders below the ".OpenORB" directory. The name of the object to be bound is used as the file name of the file in which the IOR is stored. The lookup, i.e. the resolve operation, also uses the fallbacks. First it tries to find the name at a configured NameService instance. If the lookup fails the fallback mechanism inspects the file system hierarchy whether the name can be found here. The same mechanism is used for the unbind method. X Protect AbstractClientRequest.get_effective_component() from a NPE. - Minor performance optimization for getting the URLCodeBase property for each CDROutputStream instance. The URLs will be cached in the ORB so that String compare overheads will be avoided. - Small optimization in org.openorb.orb.io.AbstractInputStream. An internal IntHolder is used now instead of allocating a new instance each time an IntHolder is used. * Make Delegate.java use the internal method _getIOR() so that a sub-class works with an overwritten _getIOR() method. * Added a descriptive constant for the server and client socket timeout value of 1000 for the classes org.openorb.orb.iiop.IIOPClientChannel and org.openorb.orb.iiop.IIOPServerChannel. X Added a patch to avoid NPEs in LocalInputStream.readObject() (from Erik Putrycz ). - Added firewall support patch sent by JC Tchitchiama . - Fixed IdlCompiler bug #653983. - Made corbaloc URLs with ',' and '/' in the object key work again. - Fixed a problem with xlink URLs. A link to a fragment in a file was not recognized as a valid URL. Bug report and patch sent by JC Tchitchiama . - The source and binary archives preserve the executable file attributes of shell scrpts now. - Added a setenv script that sets the PATH and CLASSPATH variables for OpenORB. Additionally the scripts iordump, java2idl, and idl2java have been added to more easily launch the following applications: org.openorb.orb.util.IORDump org.openorb.compiler.rmi.JavaToIdl org.openorb.compiler.IdlCompiler - Moved compiler overrides into the tools module. - Moved the org.openorb.util classes into the tools module. This was requested to allow easier resuse of the classes in other projects. - Added a FAQ entry about the CODESET_INCOMPATIBLE exception to orb.xml. - Recalculate the binding array when similar endpoints are provided in an IOR to avoid a ArrayIndexOutOfBoundsException. X Moved the create local request method from the LocalClientRequest to the ClientBinding where the remote create request method is located. This makes sure that any exception that has happened with the binding will get thrown before proceeding. - Added the RMIoverIIOP JavaToIdl compiler to the OpenORB module's compiler tree. The package name has slightly changed from org.openorb.rmi.compiler.JavaToIdl to org.openorb.compiler.rmi.JavaToIdl - Moved the compiler out of the core classes source tree and resolved several dependencies from the compiler sources into the core. The package name remains the same, i.e. org.openorb.compiler.IdlCompiler. - Removed a dependency from the IdlCompiler to the org.openorb.util.Trace class. The Trace class is not used at all but the import was creating a dependency from the IdlCompiler classes to the OpenORB core classes. - Added javadoc for examples and test cases. * Implemented the dynamicResolve() method to allow using the NameService for resolving objects without any compile-time dependencies (see org.openorb.orb.util.NamingUtils.dynamicResolve()). * Implemented the dynamicRebind() method to allow using the NameService for rebinding server objects without any compile-time dependencies (see org.openorb.orb.util.NamingUtils.dynamicRebind()). - Fixed IdlCompiler bug #566093. Patch contributed by Alexey Plotnitsky . * Moved the classes CreateORBProperties, IORDump, NamingUtils, ORBFactory, RepoIDHelper, and Trace from the package org.openorb.util to the orb specific package org.openorb.orb.util. The classes remaining in the org.openorb.util will be moved out of the OpenORB module because of their general applicability. X Updated version number to 1.4.0. - The class ReleaseInfo has been removed for simplicity reasons. - Renamed the following packages: org.openorb.* -> org.openorb.orb.* org.openorb.CORBA.* -> org.openorb.orb.core.* org.openorb.CORBA.kernel -> org.openorb.orb.config org.openorb.PI -> org.openorb.orb.pi X The classes org.openorb.CORBA.ORB/ORBSingleton extend the classes org.openorb.orb.core.ORB/ORBSingleton now. The set_parameters() call in the ORB class prints a deprecation warning that the new properties should be used: org.omg.CORBA.ORBClass=org.openorb.orb.core.ORB org.omg.CORBA.ORBSingletonClass=org.openorb.orb.core.ORBSingleton The old properties will still be supported for some time, but the support will be terminated in a future version. - Fixed CDRInputStream so that the read__array commands return immediately for zero length arrays. Zero length reads previously caused the stream to become misaligned. - Moved the examples into the package org.openorb.orb.examples, fixed checkstyle warnings and some bugs. Version 1.3.0 - September, 27 2002 - OpenORB_1_3_0 - Fixed an endless loop with resolve_initial_refernces(). When looking up the rir NameService the last fallback is to try to resolve the rir on the NameService. This should not be done for the NameService itself as it is not known at that time. - Made corbaloc parsing more fault-tolerant. A common mistake is to write "corbaloc://". The scan_url_loc() method was looking for the first occurence of '/' which returned position 0 in this special case. This method has been changed to look for the lastIndexOf( '/' ). - Fixed several problems with fixed type handling and included the iiop.complex test cases. X Optimized IIOPClientRequest so that is doesn't have to catch an INV_POLICY each time it is instantiated and the SYNC_SCOPE_POLICY_TYPE isn't set. * Added configuration enhancements to allow greater control on how servers listen for connections, replacing hardcoded values. New properties added: iiop.serverMaxSocketAcceptTimeout iiop.serverMinSocketAcceptTimeout iiop.serverOverrideSocketTimeout * Added configuration enhancements to allow the a BufferedOutputStream to be used on socket output stream. New property added: iiop.bufferedOutputStreamSize * Added configuration enhancements to allow the control of SO_SNDBUF and SO_RCVBUF socket properties. New properties added: iiop.recieveBufferSize iiop.sendBufferSize * Changed default value for iiop.boostReceivePriority as it assumed that most people would be running NT4.0. Default is now false and NT4.0 users should explicitly enable it. - Added a patch by Albert Zhou (azhou _at_ yahoo _dot_ com) to address the root context in a corbname URL by specifying an empty string after '#'. - HTML documentation is showing the pictures as in the pdf file now. - Fixed bug #599048 with the IdlCompiler option -portablehelper. The generated code for the extract() method was missing a closing bracket and thus was not compilable at all. - Added a patch for fixing a strange exception when running the OpenORB unit tests. Patch contributed by John Farell . - Added documentation updates contributed by John Farell . - Fixed bug #595173 (Wrong name for valuetype factory methods). Patch contributed by Joncheng Kuo (ckuo01 _at_ syr _dot_ edu). - Fixed bug #589335 (IdlDoc can't take hexadecimal expression). Patch contributed by Joncheng Kuo (ckuo01 _at_ users _dot_ sf _dot_ net). - Make build.sh work with the latest cygwin version. The script was using a variable OSTYPE that is not available in sh. The official way to get the name of the platform is uname which is now used for determining the CLASSPATH separator. Version 1.3.0 BETA2 - August, 10 2002 - OpenORB_1_3_0_BETA2 - Added patch by Chris Wood (openorb _at_ ninjateaparty _dot_ com) Fixed problem with comparing valuebox types in an any. - Added patch by Diego Sevilla Ruiz (dsevilla _at_ um _dot_ es) for the install target of the build.xml. The new version copies the files to the path specified by the property install.path just as if you extract one of the binary tarballs. X Added support for local calls. Patch by Erik Putrycz . * Made the property parsing more fault tolerant, -ORBDebug without further parameters was crashing the ORB with an ArrayIndexOutOfBounds exception. - Fixed bug #583158 (MacOSX charset problem). This is not a bug. The OSF codeset registry doesn't have a MacRoman codeset. The fallbacks for "char data" are used in this case: UTF-8 and ASCII. The error message is misleading, so it has been changed to a warning level message instead. - Fixed bug #584008 (Infinite loop with Japanese codeset). Bug reported by Stefan Reich. - Added a patch to make OpenORB work on the iPAQ runging IBM VAME (VisualAge Micro Edition). The IBM version of the VM has capitalized canonic codeset names, this did not work with OpenORBs CodeSetDatabase table, adding calls to upperCase() makes OpenORB resistent against such differences. Patch contributed by Erik Putrycz . The patch needed a check to handle a special case for running OpenORB on JDK 1.3.x or on JDK 1.4.x. X Added a patch to allow setting the priority of a logger even if it is passed from the outside to the OpenORB loading sequence. Patch contributed by Erik Putrycz . * Added property aliases to enable debug and trace output without the need to pass system properties to the vm. Patch contributed by Erik Putrycz . - Added the ant target 'build-codesetdb' for automatic generation of the file CodeSetDatabase.java. Patch contributed by Erik Putrycz . - Fixed package names of the examples (Patch contributed by Diego Sevilla Ruiz ). - Make the install target in build.xml copy all jars from the dist directory to the specified install location. * Added another protected constructor to the Delegate class. This constructor enables a sub-class to perform only needed initializations and by that significantly improves performance of the delegation mechanism in the local optimized call case. X Added support for TAG_SSL_SEC_TRANS components when printing object references. This functionality was only present when the SSLTransportClientInitializer was loaded instead of the IIOPTransportClientInitializer. Additionally the output of the other components has been aligned to follow a common pattern so that the output gets more readable. - Added dump-info target to build.xml to show the basic settings that are used by ant. - Add support for xalan on JDK 1.4 to build.xml. Without the fix the compile-docbook target does not work. X Added fix to avoid BAG_MAGIC exceptions when running OpenORB with JDK1.4 and NT4.0. This can be controlled using the property: iiop.boostReceivePriority=(true*/false) * - default value * Added configuration enhancement to allow the control of TCP_NODELAY feature on both the client and server side. New properties added: iiop.serverNoDelay=(true*/false) iiop.clientNoDelay=(true*/false) * - default value Version 1.3.0 BETA1 - June, 19 2002 - OpenORB_1_3_0_BETA1 ? Changed the constructor access modifiers of org.openorb.CORBA.Delegate from private to protected and added three getter methods. This changes enable sub-classing of the Delegate class to provide performance optimizations in the local optimized call case. The object id decomposing seems to be quite expensive and is done for each call when doing in process calls. A possible sub-class implementation caches object ids in relation to CORBA object instances in a Hashtable and by that significantly improves the object lookup overhead. * Added a patch by Thomas Haug (thomas.haug@siemens.com) to support the evaluation of the propertyset tags in OpenORB's config xml files. This was not working before and therefore no alternate endpoints could neither be declared in default.xml nor in a properties file. With the patch the following works now: Or in property file syntax: iiop.alternateAddr.endpoint3 localhost:8888 iiop.alternateAddr.endpoint4 localhost:8889 ? Added some checks to avoid ClassCastExceptions, see RMIoverIIOP's WHATSNEW file for detailed explanation. - Added a method to print human readable IDLType constants (not used yet). X Simple performance improvement by caching the target adapter in the client binding so that it is not searched for with each _is_local call. - Commented out an expensive connection attempt from class IdlGrammar to the InterfaceRepository. This was slowing down the IdlCompiler because each time the IdlGrammar was instantiated an ORB.init() was performed and a lookup of the InterfaceRepository was done. - Added support to the IdlParser to load IDL files from Jar resources. IDL files in Jar archives can be referenced now be adding a "-I" switch with the relative path in the archive. E.g. the file OpenORB_corbaloc.idl can be found now by adding "-I org/openorb/idl" as parameter to the IdlCompiler command line. - Fixed the OBJECT_NOT_EXIST semantics according to the spec. The spec. mentions that upon OBJECT_NOT_EXIST the internal and external references to the object should be removed. Now the exception is thrown to the client so that it knows that the reference does not point to a valid object anymore. - Added a property "openorb.client.bindings.discard_old" to throw away old endpoint information when a client receives a redirection from the server. The method RequestState.receiveRedirect() does some magic things and it might be dangerous to touch so a property is safer here. The behaviour of the alternate receiveRedirect() is not quite standard compliant because it really throws away old endpoint information. The spec. demands that old information should be kept in any case. In the LOCATION_FORWARD_PERM case the new endpoint(s) should be used preferably. This behaviour is some kind of broken in the old receiveRedirect() method because depending on the object key and a "priority" the endpoints are sorted. This could result in a situation where the newer endpoints are placed after older ones and causing a delay when switching between endpoints. - Fixed a bug (Reported by David Weiss) in the OpenORB initialization procedure. The POA creation was not thread safe and resulted in sporadic InvalidPolicy or BAD_PARAM exception when calling POA methods. - Added a new method, getValueCache(), to allow RMIInputStream subclass to access m_value_cache. - Updated IdlToJava generator to implement readResolve for the correct deserialization of enums. See Java RTF Issue 4271. - Fixed ListOutputStream to handle nulls property for the CORBA 2.3 additions to OutputStream. - Optimized IIOPAddress.getAddresses to lazily create component data strings along with the Int2Hex optimization proposed by Lars K?hne. - Fixed bug #550366. The jdk-runtime-library property can be used to specify the path of the Java Runtime Library for those JDK's which do not use ${java.home}/lib/rt.jar. - Fixed an IdlCompiler bug. The generated Helper class was passing the integer 0 for a char/wchar parameter to the constructor of the value box constructor. The compile failed because of incompatible types. The fix is putting a cast in front of the value 0. - Added a fix from Lars Kuehne to avoid creating Boolean objects. The kernel is now "new Boolean" statement free. - Added a checkstyle target to build.xml. The command "build.sh checkstyle" checks the source code for adherence to the Jakarta coding conventions. Fixed many coding style warnings. - Fixed an interoperability problem when receiving wchar/wstring data. The other side is allowed to send a BOM which needs to be removed before the data is passed on to the user. The other side can also decide to send wchar/wstring in arbitrary endianess, this mismatch in byte order must be fixed when receivin the data, indicating that the byte order of the process differs from the wchar/wstring byte order. - Fixed a memory leak in object_id() of DelegateImpl. Reported by Patrick Mann . - Started switching to an internal exception logging policy that shows internal exceptions only when DEBUG/MEDIUM is set. On JDK1.4 stack traces will be merged so that internal exceptions will not be lost. This is not possible on older JDKs but a similar behaviour can be achieved by setting trace to DEBUG/HIGH, because in this case internal exceptions will be logged before they are rethrown as CORBA System Exceptions. Fixed bug #517892. - IDL compiler enhancements including more control over the generation of invoke methods, optional use of JDK1.4 supported features. Experimental features include generation of default factory and implementation classes for Value Types. - Fixed bug #543751. Removed uses of InternalError which should only be used by the JVM to indicate internal error conditions. - Fixed bug #515918, the TRANSIENT exception is thrown now as specified by the spec. Before the COMM_FAILURE exception is thrown in most cases where a communication problem occurs. The spec. is quite clear about the semantics of COMM_FAILURE and TRANSIENT. COMM_FAILURE should be thrown when a communication problem occurs after a request has been send and no reply received yet. TRANSIENT should be thrown when the ORB failed to establish a connection to send the request. - Added compiler override directory that allowing code that uses JDK1.4 operations to be compiled on JDK's prior to 1.4. - Added JREVersion class to determine the version of JRE running the class. This is used in conjunction with the compiler overrides to determine if a 1.4 feature can be used by the current JRE without causing a runtime error. - Corrected semantics of DynStruct methods, fixed bug #504025. - The properties "openorb.debug", "debug", and "verbose" have been deprecated. The properties openorb.debug.trace=0|1|2|3|4 or FATAL|ERROR|WARN|INFO|DEBUG openorb.debug.level=0|1|2|3 or OFF|LOW|MEDIUM|HIGH have been added. The latter controls the verbosity of the DEBUG priority. The priority setting using this property is applied only when no logger instance is passed by a LOGGER property. - Fixed bug #509463. When ignoreXML=true was specified, the "-ORBname=value" command line arguments weren't parsed at all. - Fixed relative roundtrip timeouts for wait_for_response and poll_request of the org.openorb.CORBA.Delegate class. - Replaced static created exceptions such as QUEUE_FULL_EX, etc in org.openorb.net.ServerManagerImpl with static methods that create new instances each time. Before, when these exceptions were thrown, the stack trace was that of when they were created! - Fixed bug #505157. Problem with Delegate's getAddress method causing problems for local invocations. - Fix unmarshalling problem for DynAny arrays/sequences Problem reported by Alexander Schnell and Andrew Finney - Throw INITIALIZE exception from org.omg.CORBA.BOA.init() when the BOA hasn't been initialized. - Changed codeset to ISO-8859-1 when using GIOP 1.0 See spec section 13.10.2.1 for details. - Fixed a strange TIMEOUT exception that was occuring when a timeout was set and the method _non_existent() was called on the object. - Added an example showing correct usage of the CORBA Messaging RelativeRoundtripTimeout Policy. - Fixed a EOFException that was occuring when using the CORBA Messaging policy RelativeRoundtripTimeoutPolicy. The client was sending a bogus CancelRequest message to the server which was causing the message to be shorter as it should. - Changed all Class.forName() calls to Thread.currentThread().getContextLoader().loadClass() This is safer when having multiple class loaders. - Fixed bug #523913. Similar problem as in #523963 below. In this case, using DynAny to create an array and then creating an Any. Marshalling of the Any would fail. - Fixed bug #523963. Problem with marshalling arrays using Helper classes from ORBacus and JDK idl compiler. Arrays were written element by element using write_xxx. The portable InputStream class, ListInputStream, would not handle this. - Fixed bug #515914. Removed the last remaining System.exit(1) call by a call to Trace.signalIllegalCondition() so that the whole VM is not taken down upon error in one orb instance. - Changed the property name for the transport server initializer from "iiop.IIOPTransportServerInitializerClass" to "iiop.TransportServerInitializerClass". This is following the name for the client transport initializer. - Support for cyrillic charset alias ISO8859_5 added, see bug #523358 and #526855. The last creation of the CodeSetDatabaseInit.java file was bogus. The codeset names didn't use the Java codeset names. Therefore only the default codesets made it into the list of supported server codesets. The complete overhaul of the CodeSet classes fixed this and introduced many optimizations as well as general cleanups. - Support for clean Initializer disposal. Updated ServerManagerImpl, ORBLoader, and ORBInitInfo to support initializer disposal on shutdown. The orb.shutdown method hands control over to ServerManagerImpl which now checks id the ORBLoader implements the Avalon Disposable interface, and if so, invokes dispose on the loader. The the in-progress Adiron ORB Loader implemention of dispose invokes dispose of the ORBInitInfo which in term invokes dispose on any Initializer instances that implement the Disposable interface. This enasures that any Initializer can properly clean-up as a result of an ORB shutdown. - Started removing the dependency to the CosNaming module (NamingService). It had been a bad idea just because of an ill designed NamingService (No easy transient version) to introduce a transient NamingService into the ORB. This transient NamingService has been refactored and moved as org.openorb.tns into the NamingService package. To get rid of the ORB internal NamingService we declared all related classes/methods as deprecated and we will remove them in a future release of the OpenORB package. The corbaname URL resolving has been converted to use a reflection approach so that there is no compile time dependency. This is not a problem, because a runtime dependency always existed as you need a NamingService instance to resolve the URL against. - Modified Configurator to accept the standard initializer specification syntax; deprecated use of the old syntax. - The logging system has been changed and is based on the Jakarta Avalon LogKit now. The ORB Loader and Connector classes have been changed to use the pattern "Inversion of Control" (see the Jakarta Avalon page for more information). That means that the ORB is seen as a component and any information is passed to the ORB from a parent component. This passing of a logger instance can be achieved via the context property "LOGGER". - Fixed bug #501443 by adding a switch "-codepage:ISO-8859-5" to the IdlDoc tool. This switch changes the code page in the meta tag of the generated html files. Default is ISO-8859-1. - Fixed bug #505154: hexadecimal constants with 'd' or 'D' were not processed correctly, because the letter was misinterpreted as the fixed constant delimiter. - According to 21.7.3.1 of the CORBA spec., initializers are specified as org.omg.PortableInterceptor.ORBInitializerClass.CLASSNAME where CLASSNAME is the full class name. When using the ignoreXML property for circumventing the XML parser instantiation, the initializer properties have been changed to follow the CORBA PI scheme. - Added an additional way to initialize the transient naming service MapNamingContext. Patch provided by Stefan Reich. - Separated the setConfig shell scripts from the build.xml. Added an add.bat file to perform the actual command. - Added local.properties file to influence the ant build process locally. - build.sh now works under Cygwin, patch submitted by David Blevins (dblevins@users.sourceforge.net). - Aligned idl files to the Jakarta coding guidelines. - Removed assert() methods from Trace class due to JDK-1.4 assertTrue() should be used. - Moved the tests from src/test/src to src/test (to align with other packages) and renamed the test "primative" to "primitive". Aligned the test idl files to the coding guidelines. Added a test.idl file for uptodate checking. - Total restructuring of the build.xml file. It is now much easier and much more flexible to use (see "ant help/targets" for details). - Added another fixed type patch by Marc Schuelpbach. The class IdlToJava is scaling a fixed using the method movePointLeft. This method lets untouched the BigDecimal instance but returns the scaled value. so the stubs/skeletons generated by the IDL compiler do not scale the fixed they have unmarshalled. - Removed scripts test.bat/test.sh, use build.bat/build.sh with parameter run-test instead. - Fixed Javadoc warnings and deprecation warnings. - Fixed Unmarshalling exception (buffer underread) when marshalling 0 as a fixed type. (Patch send by Marc Sch?pbach ) - Fixed a COMM_FAILURE when shutting down on AIX boxes. This is due to interrupting a ServerSocket.accept(). On AIX (JRE 1.3.0) a SocketException is thrown in this case. (Patch send by Marc Sch?pbach ) - Removed the cause for some deprecation warnings in several test cases and the WrongTransaction exception. - Bug #510234: Added the proposed patch by Satish Boggavarapu. Added a test for the bug to ORBTest.java. - Removed the common libs from the lib directory. - Converted the orb.xml file to docbook format. Build.xml creates pdf and html output now. The documentation has been extended by a description of OpenORB's architecture. However the docs in general need serious work... - Merged install.txt and src/etc/README files. Moved src/etc files CHANGELOG, README, and EXOLAB.txt to the base directory of the package and renamed CHANGELOG to WHATSNEW (Jakarta style). Also added the Apache license to the root file LICENSE. - Switched to template based manifest files. - Aligned code to the Apache/Jakarta coding guidlines (Normal and generated code). Removed unused classes from import section, patch by (Lars Kuehne ) Also by Lars is a patch that has its origins in the tool checkstyle v2.2. This patch aligns the code to JLS and substitutes lines of the form import x.y.*; by the actual classes. - Fix #504462: Removed an unnecessary allocation of float/double arrays and the corresponding copy loop.