Ultra Light Client Logo

Release Notes

May 15, 2006


About ULC 6.1

Release 6.1 includes the following new features:

The sections Fixed Bugs and Implemented Feature Requests give an overview of the most important differences between ULC 6.0.4 and ULC 6.1.

To migrate from ULC 6.0.4 to ULC 6.1, please see the migration notes.


Version Notes

ULC 6.1 requires the Java Runtime Environment (JRE) 1.3.1 or later on the server, and Java Runtime Environment (JRE) 1.4.2 or later on the client.

The ULC client has been tested on Windows 2000/XP with the following deployment options:

The ULC server has been tested on Windows 2000/XP, Red Hat Linux 9.0, and Sun Solaris 8 with the following deployment options:


Modules, Parts and Release Structure

The ULC release includes all components required to successfully develop and deploy ULC applications. The ULC modules, parts, packages, and the structure of the current release are described in the following sections.



The ULC release is split into modules. Each module belongs to exactly one of five categories:

The category and module names are reflected in the directory structure of the release, e.g. environment/applet for the applet module that belongs to the environement category.

A module directory contains subdirectories with the following contents:



Each of these modules can contain up to four parts:

The part names are reflected in the filename of the jar files in the lib and src directory of the corresponding module, e.g. ulc-applet-client.jar and ulc-applet-client-src.jar for the classes and source stubs of the applet module that have to be deployed on the client side.


Release Structure

ulc-6.1 ULC 6.1 home directory
Add-ons to the ULC base framework
   base ULC base framework
J2EE server integration including EJB container integration and Servlet container integration.
ULC documentation
Client environment integration for applet deployment, JNLP deployment, and standalone deployment.
   license the jar file with the deployment license key
   previous_releasenotes Previous release notes
Sample applications with ready to run Tomcat Servlet container
   build.txt Contains the build number
   LicenseAgreement.pdf The license Agreement
   releasenotes.html This document



Fixed Bugs

PR Description Comments
UBA-644 FocusListener eats up button click events.  
UBA-910 ULCComboBox action events may be triggered before state synchronisation has been completed  
UBA-1056 ULCTextComponent.setCaretPosition() does not work in the first call  
UBA-1062 UIAndEnabler and UIMandatoryAndEnabler only consider enabled components  
UBA-1085 File Chooser Dialog does not come to front when selecting ULC app in window task bar Changed/New API:
  • ClientContext.chooseFile(IFileChooseHandler, FileChooserConfig, ULCComponent)
  • ClientContext.storeFile(IFileStoreHandler, FileChooserConfig, ULCComponent)
  • ClientContext.loadFile(IFileLoadHandler, FileChooserConfig, ULCComponent)
  • ClientContext.loadFile(IFileLoadHandler, FileChooserConfig, ULCComponent, long)
UBA-1121 ULCLabel containing an icon always has a border  
UBA-1124 com.ulcjava.base.application.util.Font.deriveFont(int) loses affine transform of original font  
UBA-6805 pauseApplication and resumeApplication requests erroneously call IApplication.passivate() and IApplication.activate()  
UBA-6806 ULCComboBox cell renderers with a ULCIcon is not working correctly for row -1  
UBA-6870 Concurrent modification exception in client-side combo box model adapter  
UBA-6874 Parent for ULCWindow instances is not respected on client side  
UBA-6878 ULCInternalFrame.setMaximumSize() and ULCInternalFrame.setMinimumSize() should not throw UnsupportedOperationException  
UBA-6880 ULCHtmlPane does not support relative links in displayed HTML pages / cf. also UBA-1090  
UBA-6891 NullPointerException in InputBlocker  
UBA-6896 ULCList and ULCTree are not layouted in proper size  
UBA-6904 ULCPollingTimer does not flush dirty state of other components before actionPerformed() is called  


Implemented Feature Requests

PR Description Comments
UBA-411 Implement ULCDialog.setLocationRelativeTo(ULCComponent comp) New API:
  • ULCDialog.setLocationRelativeTo(ULCComponent comp)
See migration notes.
UBA-526 ULC should support all subclasses of Number as model values.  
UBA-764 Anything should support serialization of arrays of primitives and of data types  
UBA-881 Provide ability to replay blocked input events after synchronous event delivery  
UBA-974 Provide ULCWindow.addWindowFocusListener() API New API:
  • com.ulcjava.base.application.event.WindowFocusListener
  • com.ulcjava.base.application.event.serializable.WindowFocusListener
  • ULCWindow.addWindowFocusListener()
  • ULCWindow.removeWindowFocusListener()
  • ULCWindow.getWindowFocusListeners()
UBA-1032 createBasicObject() should only create the component (and not configure it)  
UBA-1067 ITableModel.getValueAt() should be called row-by-row instead of column-by-column  
UBA-1068 DevelopmentRunner should always compress/decompress requests  
UBA-1107 compression configuration on client side should be available on the jnlp file  
UBA-1115 ULCButton should provide a setIconTextGap(int iconTextGap) method  
UBA-1126 Change type of SystemColor.* constants from String to SystemColor to align with AWT API  
UBA-6646 Make the request marshalling / unmarshalling strategy extendable  
UBA-6801 Reverse invocation order for IRoundTripListener.roundTripWillEnd()  
UBA-6802 Assure 'symmetric' calls of round-trip will start/round-trip will end when session is stopped  
UBA-6804 Add ULCFrame.setExtendedState() and ULCFrame.getExtendedState() API in order to set a frame to the maximized state  
UBA-6814 Provide ULCProgressBar.setIndeterminate() and ULCProgressBar.isIndeterminate() API  
UBA-6823 Add setFocusable() / isFocusable() methods to ULCComponent  
UBA-6824 Provide documentation and constant definitions for the Anything keys used by ULC widgets With the new extension API of ULC 6.1, this feature request is partially obsolete. Formerly, an extension would need to override handleRequest() to intercept calls to a proxy object. With the new extension model, the extension can directly override the method that is remotely called; using this approach all parameters are already unmarshalled.

For overridden createBasicObject(Object[]) methods on a UIProxy class, convenience methods are available that can extract the relevant constructor arguments from the object array (e.g. UIWindow.getBasicParentWindow(Object[])).
UBA-6827 Server side registry should not be part of session  
UBA-6828 Reduce server side memory consumption  
UBA-6832 Provide pluggable encoding/decoding mechanism for marshalling/unmarshalling arbitrary objects. New API:
  • IULCStreamCoder: Implementations of IULCStreamCoder are responsible for marshalling arbitrary objects to and from streams.
  • ICoderRegistryProvider, DefaultServerCoderRegistryProvider, DefaultClientCoderRegistryProvider: Implementations of ICoderRegistryProvider are responsible for setting up a coder registry.
UBA-6834 Provide generic handler code for properties on client side.  
UBA-6883 DefaultCurrentSessionRegistry should use InheritableThreadLocal for session store Please note that ULC is not thread-safe. ULC requests are always processes by one J2EE worker thread, therefore no synchronization takes place.

Anyway, if an application needs to access ULC objects from another thread, choose one of the following options:
  • Use ULCSession.setCurrentSessionRegistry() to set a custom ICurrentSessionRegistry implementation that stores the ULCSession instance in an InheritableThreadLocal. Forcing the developer to install his own ICurrentSessionRegistry ensures that the decision to support mulitple threads is taken in the awareness of potential issues.
  • Store all the required data from the J2EE worker thread in a data transfer object and pass in this data to the other thread. If results need to be passed back to the J2EE worker thread, store the result data in a place that can be accessed by the J2EE worker thread.
UBA-6894 Enhanced extension API New API:

  • Upload: uploadStateUI(), createStateUI(Object[])
  • Remote calls: invokeUI(String), invokeUI(String, Object[])
  • State synchronization: setStateUI(String, ...) and related methods
  • Creation: createBasicObject(Object[]), preInitializeState(), postInitializeState()
  • Remote calls: invokeULC(String), invokeULC(String, Object[])
  • State synchronization: updateStateULC(String, ...)
  • Event delivery: fire...ULC(String, ...)
See ULC Extension Guide and migration notes for details.
UBA-6895 TreeExpansionEvent cannot be configured to be asynchronous  
UBA-6899 ULCContainer.add() consumes a lot of temporary memory  
UBA-6900 ULCContainer.add() dramatically limits application performance  
UBA-6906 Provide an API to add transient attributes to the ULC session  
UBA-6907 Provide JavaDoc for public and protected extension API  
UBA-6913 Offer a stream-lined, uniform approach for passing in configuration parameters to ULC launchers. Standard configuration parameters are now always configured by means of key-value parameters - even for the JNLP deployment case.

E.g., the keep-alive-interval is now defined as follows in the argument section of a JNLP file <argument>keep-alive-interval=900</argument>. (However old-style custom implementations of launchers still work.)

See migration notes.


Migration Notes

Support of Old Extension API

The old extension API has been deprecated and will be removed in a future release. The following minor changes are required to adapt extensions that extend existing ULC components to 6.1 (without migrating to the new extension API).

Migration to New Extension API

The following changes are required to migrate existing extensions to the new extension API. Please see the ULC Extension Guide for an introductory sample and further details on the new extension API.

Positioning of ULCDialog

With the introduction of the new API ULCDialog.setLocationRelativeTo(ULCComponent) the default positioning behaviour has changed. A window now needs to be positioned explicitly:

JNLP / Standalone Launcher Configuration Options

Due to the stream-lining of client-side launcher configuration options (UBA-6913), existing standalone start scripts and JNLP files must be adapted:


Known Problems and Limitations

Product and company names herein may be trademarks of their respective owners.

Copyright (c) 2000-2015 Canoo Engineering AG