UltraLightClient Logo

Release Notes

November 1, 2009


About UltraLightClient '08 Update 4

Please see the UltraLightClient '08 Update 3 release notes for previous release notes.

The sections Fixed Bugs and Implemented Feature Requests give an overview of the most important differences between UltraLightClient '08 Update 3 and UltraLightClient '08 Update 4.

To migrate from UltraLightClient '08 Update 3 to UltraLightClient '08 Update 4, please see the migration notes.


Version Notes

UltraLightClient requires the Java Runtime Environment (JRE) 1.4.2 or later on the server and on the client. Some addons (e.g. the application framework) require JRE 1.5 or later on the server-side.

To deploy an UltraLightClient application in a JEE 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_HOME> UltraLightClient home directory
Add-ons to the UltraLightClient base framework
   base UltraLightClient base framework
   all For convenience, all UltraLightClient classes
Server integrations including EJB container integration and Servlet container integration and integration into local container for stand-alone (single JVM) ULC applications.
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-7839 DividerLocation on ULCSplitPane is not set correctly when first setting it as a percentage and then later absolute  
UBA-7830 All AbstractFormBuilder method names to add a combo box are misspelled  
UBA-7815 ULCTable / ULCTableTree should do nothing in JTable.configureEnclosingScrollPane()  
UBA-7813 ULCTableTreeOperator should not create a new JTreeOperator for each operation  
UBA-7796 Anything.toMap should return LinkedHashMap if the underlying Map is a LinkedHashMap  
UBA-7790 ULCTableTree.preloadCells() does not work for all columns  
UBA-7787 IModelAdapterProvider.registerModelAdapter should take a constant value for ModelType instead of and instance of Class  
UBA-7782 For a field bound to a bean property of type long, the enable/disable logic on Ok button in the Form does not work.  
UBA-7781 Invoking InputBlocker.removeBlockedSession without invoking InputBlocker.addBlockedSession results in NPE.  
UBA-7780 Check for row count > 0 before invoking preloadCells ULCTree, ULCList, ULCTable and ULCTableTree  
UBA-7775 'ULCComboBox.getSelectedIndex' throws a NPE when the model contains a null value  
UBA-7770 AbstractTestCase.tearDown should not throw an exception  
UBA-7769 NPE while uploading ULCTree which has root with no children and setRootVisible set to false  
UBA-7757 invokeULC(UlcEventConstants.SYNCHRONOUS_MODE,...) does not block the UI  
UBA-7741 New application configuration file does not work for shared library deployment  
UBA-7563 Should check for fUserParameters == null in UISession .sendStartApplication  
UBA-7345 DevelopmentRunner with -useGui argument ignores DevelopmentRunner.setSessionProvider()  
UBA-6935 DevelopmentRunner with -useGui argument ignores setSessionStateListener  
UBA-952 UINumberDataType never returns Long  
UBA-7804 ULCDialogOperator.close() does not respect DO_NOTHING_ON_CLOSE DefaultCloseOperation  
UBA-7791 Setting a null model on a ULCTree throws a NullPointerException  
UBA-7573 ULCComponent.add/removeNotify() does not work inside ULCTabbedPane and ULCCardPane  
UBA-7580 Missing column selection event for ULCTableTree with expansion listener  
UBA-7760 [Mac OS X 10.5.7, JRE 1.5] Installing shortcuts on the dock messed up the dock  
UBA-7852 ULCTextField getValue() returns null when field is emptied  


Implemented Feature Requests

PR Description Comments
UBA-7824 Use of a custom UIMandatoryInputStyle in UIMandatoryAndEnabler not possible  
UBA-7818 ULC Installer will not work on Mac OS X Snow Leopard  
UBA-7814 It should be possible to configure the default comparator  
UBA-7810 Extend Logger by a 'isLoggable' (or 'isEnabledFor') method  
UBA-7808 Ugly frame default background color in Applet environment on Mac with Safari  
UBA-7798 Add a reflection cache for the renderer templates  
UBA-7776 Improve performance of caching strategy for method lookups ULC uses several static caches to look up methods:
* String concatenation (e.g. "color" => "setColor")
* Reflection (e.g. "foo(int)" => Method instance for reflection

The caches are implemented using maps. As the usual HashMaps are not thread safe we synchronized the critical parts.

Other (better?) approaches would be:
* use ConcurrentMap (but requires Java 5)
* use unsychronized maps in ThreadLocals (but requires memory per session instead of per application)

Maybe a way to configure the strategy would be the best solution.

UBA-7774 ULCTableHeaderOperator should provide API to find a column by String  
UBA-7773 ULCListOperator should provide an API to get the number if items Like it is available for other components:
* ULCComboBoxOperator.getItemCount()
* ULCTreeOperator.getRowCount()
* ULCTableOperator.getRowCount()
UBA-7743 Easy deployment should not rely on file write access on the server as this cannot be guaranteed for all server environments, e.g. Google App Engine
UBA-7740 ErrorDialog should have a better owner The current error dialog has a null owner. The result is that the error dialog does not belong to any other host window. So when you select another host window and then jump back the the main host window of the ULC application (e.g. the browser, JFrame) then the error dialog is behind the host window and is not visible. This is strange as the error really belong to the main host window of the ULC applicaiton.
UBA-7739 Make client jar handling more customizable  
UBA-7532 Generator in overwrite mode should overwrite everything not just generated classes  
UBA-7438 Clean up serializable implementation  
UBA-1120 Failure behavior of ServletConnector should be customizable  
UBA-641 ULCNumberDataType does not support currency settings  
UBA-41 ULCNumberValidator too restrictive  


Migration Notes

API changes

Minor adaptions where made in the form builder API. Combobox and Checkbox in method and class names are replaced by ComboBox and CheckBox. The same replacements have to be done by clients using the API.

Migrating an existing application to ULC 08

To integrate the new features into an existing application you can perform the following steps.

  1. Application configuration file
  2. Copy the files from <ULC_HOME>/base/configuration/ into the root source directory of your project. Open the ULCApplicationConfiguration.xml file and specify the application class name of your application. Provide all the configuration elements that you want to use, as for example the lookAndFeel, carrierStreamProvider or modelAdapterProvider. Add the servlet configuration for the client properties access to your web.xml:
    			delivers the client configuration data
  3. Libraries
  4. The number of libraries you need to cope with is reduced dramatically. You find then in the <ULC_HOME>/all/lib directory. For an overview of the libraries see Section 3.4 in the ULCApplicationDevelopmentGuide.
  5. Application framework
  6. To use the features of the application framework it is neccessary that your application class inherits from com.ulcjava.applicationframework.application.Application. Rename the start() method to startup(). You could also inherit from com.ulcjava.applicationframework.application.SingleFrameApplication and distribute the creation of the GUI into the different createStartup...() methods. Code that must be executed before the GUI is created goes into the initialize() method.
    Create a resources package beneath the package of the application class and create the <ApplicationClassName>.properties file.
  7. Easydeployment
  8. For the easydeployment feature to be working you must have the application configuration file and the application class must inherit from com.ulcjava.applicationframework.application.Application.
    • Copy the content of the WebContent directory that is in <ULC_HOME>/addon/generators/templates/projecttemplates/server/ to the projects web content directory.
    • Remove the PersistenceServletContextListener configuration entry from the web.xml
    • Replace the placeholder tokens in the web.xml :
      • @projectname@, an arbitrary name of your project.
      • @rootpackage@, the root package of your project (for example com.sample.ulc)
      • @rootpackagepath@, the root package as path formated (for example com/sample/ulc)
    • Rename the appletPage.jsp into @projectname@.jsp.
    • Copy the libraries for the servlet environment into the WEB-INF/lib directory. Copy the libraries of your project into the WEB-INF/lib directory, the libraries that are to be downloaded by the client must be (re)named to end with -client.jar.
      • ulc-all5-server.jar
      • ulc-all5-client.jar
      • commons-beanutils-1.8.0.jar
      • commons-collections-3.2.1.jar
      • commons-logging-1.1.1.jar
      • jstl.jar
      • jnlp-servlet.jar
      • jdk5tools.jar


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