Ultra Light Client Logo

Release Notes

November 28, 2007


About UltraLightClient 6.2.1

Release 6.2.1 includes the following new features:

Feature Description
Enhancements in Test Framework Release 6.2.1 includes a lot of valuable enhancements to the test framework that was introduced in 6.2.1:
  • Server-side access: A test case can access server-side state (e.g. the text on a ULCLabel) and can inject code into the ULC application.
  • Ease of use: Convenience methods to run a test case in different environments, e.g. different deployment options (Applet, JNLP, standalone, development), all nodes in a cluster environment.
  • Lightweight: A test case can directly implement the IApplication.start() method. No need to provide a separate application class.
Support Fixes This release contains a lot of fixes and features that were reported to the premium support mailing list.

The sections Fixed Bugs and Implemented Feature Requests give an overview of the most important differences between UltraLightClient 6.2 and UltraLightClient 6.2.1

This build is based on ULC 6.2 Please see the ULC 6.2 release notes for additional information.


Version Notes

UltraLightClient 6.2.1 requires the Java Runtime Environment (JRE) 1.4.2 or later on the server and on the client.

To deploy an UltraLightClient application in a J2EE server the server needs to support either at least the Servlet 2.4 specification or at least the EJB 2.1 specification.


Modules, Parts and Release Structure

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



The UltraLightClient 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.2.1 UltraLightClient 6.2.1 home directory
Add-ons to the UltraLightClient base framework
   base UltraLightClient base framework
J2EE server integration including EJB container integration and Servlet container integration.
UltraLightClient 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-7177 java.net.MalformedURLException if the webserver does no provide host address in Java URL format (e.g. in IPV6)  
UBA-7178 disableLazyLoading on ULCTableTrees with resizing mode AUTO_RESIZE_OFF does not work properly  
UBA-7181 UIDateDataType.convertToObject() does not always throw an exception when necessary  
UBA-7204 ULCPercentDataType cannot handle double values in scientific notation properly  
UBA-7225 ULC does not detect all ambiguous methods when addressing a remote method  
UBA-7279 ULCPasswordField.echoChar does not respect Look&Feel New API:
  • ClientContext.getChar(String key)
UBA-7287 ULCTextField client proxy updates value on server but does not fire valueChanged Event when the value has changed but not committed  
UBA-7288 Setting Background color, foreground color, font, cursor.. does not work on ULCSpinner You can now use the API on the corresponding editor:
  • fSpinner.getEditor().setBackground(Color.yellow);
  • fSpinner.getEditor().setForeground(Color.orange);
  • fSpinner.getEditor().setFont(new Font("Arial", Font.BOLD, 20));
  • fSpinner.getEditor().setCursor(Cursor.HAND_CURSOR);
  • fSpinner.setEnabled(false);
UBA-7289 Setting of mnemonic followed by setting of text on a button removes the mnemonic.  
UBA-7293 Changing the root node for a table tree model and firing nodeStructureChanged() results in an IndexOutOfBoundException  
UBA-7295 It is not possible to set a custom ULCSession on the DevelopmentRunner New API:
  • DevelopmentRunner.sessionProvider
  • ISessionProvider
UBA-7296 Dragging n-1th row after deleteing last n rows leads to IllgealArgumentException  
UBA-7298 ClientInfo cannot be serialised by ULCLoad running in Master-Slave driver mode.  
UBA-7299 ULCTree.rowHeight and ULCTree.scrollsOnExpand are ignored before upload in Java 1.4  
UBA-7300 ULCTable, ULCTree, ULCTableTree, ULCComboBox with editors: editor components do not adapt their size  
UBA-7302 Memory leak in UITable, UITree, UITableTree  
UBA-7313 ClassCastException when using Substance L&F for a ULCTableTree with custom cell renderer.  
UBA-7315 setName on ULCTableTree should setName on underlying Table and Tree so that they can be identified by client side test tools  
UBA-7316 ULC Sample Applications do not work if installed in a directory with blanks in its pathname  
UBA-7323 getComponentPopupMenu() on a ULCTable that inherits a popup menu and that is contained in a ULCScrollPane results in NPE  
UBA-7329 ULCNotEnabler may have wrong initial state  
UBA-7334 It should be possilbe to invoke ULCSession.sessionDestroyed() from another session  
UBA-7336 TestCommand synchronization is not reliable for AppletTestEnvironmentAdapter  
UBA-7341 ULCAlert does not work with Synth Look�n�Feel  
UBA-7342 ULC Testframework should wait for idle before starting test methods  
UBA-7344 AppletDevelopmentRunner does not respect all DevelopmentRunner properties  


Implemented Feature Requests

PR Description Comments
UBA-607 It should be possible to define the user principal for the development runner New API:
  • DevelopmentRunner.sessionProvider
  • ISessionProvider
UBA-820 Provide extended support for Drag & Drop from external applications to ULC New API:
  • IDnDData AbstractDropTargetListener.createDragData(DropTargetDropEvent event)
  • IDnDData AbstractDropTargetListener.createDropData(DropTargetDropEvent event)
UBA-7196 Make selection behavior in ULCList, ULCTable, ULCTree, ULCTableTree extensible as it is unlike Swing. New API:
  • UIComponent.prepareComponentForPopupMenu(UIPopupMenu popupMenu, MouseEvent event)
UBA-7202 DnD between two ULC applications of the same VM should work identical to DnD between an external and a ULC application  
UBA-7219 Improve error message when client is running in non compatible VM  
UBA-7273 ULC Testframework should allow testing of server side components and logic New API:
  • Abstract ServerSideCommand that subclasses TestCommand
  • Abstract method ServerSideCommand.proceedOnServer()
UBA-7292 Make name of ULC Session Store Key configurable via web.xml ULC sessions are now directly stored in the surrounding HTTP session. So there are no more ClassCast issues with SessionStore because the SessionStore isn't any longer part of the HTTP session. Moreover it is now guaranteed that the ServletContainerAdapterHelper only manages ULC sessions that belong to the same class loader.
UBA-7321 Document that when an AbstractApplication implements IRoundTripListener the ULCSession implicitly adds it as a RoundTripListener  
UBA-7322 DnDUtilities should provide a way to create drag images with custom alpha values New API:
  • * DnDUtilities.createDragImage(Point dragOrigin, ResetableIterator componentIterator, float alpha)
UBA-7324 It should be possible to configure the drop cursors used by the DefaultDragSourceListeners New API:
  • DefaultDragSourceListener.noDropCursor
  • DefaultDragSourceListener.copyDropCursor
  • DefaultDragSourceListener.moveDropCursor
  • DefaultDragSourceListener.linkDropCursor
UBA-7327 Make it easier to run the same tests in different environments New API:
  • AbstractTestCase.createSuiteForEnvironments(Class testClass, ITestEnvironmentAdapterProvider[] environments)
  • AbstractTestCase.createSuiteForAllIntegratedEnvironments(Class testClass, Class applicationClass)
  • AbstractTestCase.createSuiteForAllIntegratedEnvironments(Class testThatImplementsIApplicationClass)
  • AbstractTestCase.createSuiteForAllRemoteEnvironments(Class testClass, String urlString)
UBA-7330 ULCNotEnabler should not accept more than one dependent enabler ULCNotEnabler.add() now throws an exception if there is already a dependent enabler configured.
UBA-7331 AllPermissionsFileService should not touch FilteringEventQueue  
UBA-7335 Provide convenience methods on AbstractTestCase for test relevant TestContext methods New API:
  • AbstractTestCase.runBooleanCommand(TestCommand command)
  • AbstractTestCase.runByteCommand(TestCommand command)
  • AbstractTestCase.runCharCommand(TestCommand command)
  • AbstractTestCase.runDoubleCommand(TestCommand command)
  • AbstractTestCase.runFloatCommand(TestCommand command)
  • AbstractTestCase.runIntCommand(TestCommand command)
  • AbstractTestCase.runLongCommand(TestCommand command)
  • AbstractTestCase.runObjectCommand(TestCommand command)
  • AbstractTestCase.runShortCommand(TestCommand command)
  • AbstractTestCase.runVoidCommand(TestCommand command)
UBA-7337 Don't enforce an application class for each test class New abstract test base classes that implement IApplication:
  • AbstractSimpleAppletTestCase
  • AbstractSimpleDevelopmentTestCase
  • AbstractSimpleJnlpTestCase
  • AbstractSimpleStandaloneTestCase
The class names of these base classes adhere to the following pattern: AbstractSimple*TetsCase


Known Problems and Limitations

You can find known problems and limitations in our issue database.

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

Copyright (c) 2000-2015 Canoo Engineering AG