UltraLightClient Logo

Release Notes

February 11, 2009


About UltraLightClient '08 Update 2

UltraLightClient '08 Update 2 includes the following new features:

Feature Description
Enhancements in Eclipse project generator In addition to the template project for a database application the Eclipse project generator can now generate an empty project.

Empty Project Generator

Enhancements in application framework You can now specify data types and borders in your resource files.
And you can specify the styles for your components in your program code, e.g. in a form builder.

DataType Border Converters

New ULCColorChooser component

Color Chooser

Premium Support Fixes This release contains fixes and features that were reported to the premium support mailing list.

Premium Support

Please see the UltraLightClient '08 Update 1 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 1 and UltraLightClient '08 Update 2.

To migrate from UltraLightClient '08 Update 1 to UltraLightClient '08 Update 2, 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-7048 NPE when the default icons for leaf, open and closed nodes are missing or removed from UIDefaults in the L&F.  
UBA-7424 ULCTableOperator.findCell() should not assume that view column index == model column index  
UBA-7591 Using EaSynthLookAndFeel with ULCTableTree results in StackOverFlowError  
UBA-7601 ULCMenuBar.getParent() always returns null  
UBA-7605 Unable to run multiple Applets with Java 6 Update 10  
UBA-7616 NullPointerException in table binding when adding a bean with indexed properties  
UBA-7618 Generated application does not run in Internet Explorer  
UBA-7619 ULCTable with hidden columns throws IndexOutOfBounds exception while requesting renderers.  
UBA-7620 ULCTable with hidden columns throws IndexOutOfBounds exception while requesting cell editors.  
UBA-7624 Sorting / modifying an unsorted table with selection may results in an ArrayIndexOutOfBoundsException  
UBA-7627 Adding an empty list to a sorted observable list in table binding results in exception  
UBA-7632 ULC's renderer / editor implementation should not ignore value typeString value to enable client side renderer / editor code  
UBA-7636 Dragging large number of rows and columns from ULCTable results in OutOfMemory error. Drag image considers only selected cells that are visible.
UBA-7639 Properties instances are wrong encoded  
UBA-7643 Default value for titlePosition property of ULCTitledBorder should be DEFAULT_POSITION instead of TOP  
UBA-7646 Having a RowSorter on a ULCTable with null TableHeader results in NPE on the client side.  
UBA-7647 ULCTableOperator.getTableHeader() does not return ULCTableHeaderOperator.  
UBA-7670 Dragging unuploaded rows in ULCTable will result in wrong transfer data Drag data only considers selected cells that already have been uploaded.


Implemented Feature Requests

PR Description Comments
UBA-7528 All AbstractFormBuilder methods that add a component should enable the use of resources to resolve property values AbstractFormBuilder.startTab() => The key prefix into the resource map is .Tab., e.g.
  • general.Tab.title=General
  • general.Tab.icon=general.png
  • general.Tab.tip=Tooltip of the tab !!
AbstractFormBuilder.addLabel() => The key prefix into the resource map is .Label., e.g.
  • general.Label.text=General
AbstractFormBuilder.addTitle() => The key prefix into the resource map is .Label., e.g.
  • general.Label.text=General
UBA-7534 ULCComboBoxOperator.selectItem takes too long or even times out.  
UBA-7542 Allow to set and get styles via API New API:
  • LayoutParameter.style()
  • LayoutParameter.getStyle()
Style can be set as client property:
  • ULCComponent.putClientProperty(ResourceMap.STYLE_CLIENT_PROPERTY, "Header");
UBA-7544 Provide additional resource converters New converters for IDataType subclasses:
  • ULCDateDataType => Date(formatPattern,twoDigitYearStartYear)
  • ULCNumberDataType => Number(formatPattern,localeString,min,max,roundingMode)
  • ULCPercentDataType => Percent(localeString,fractionalDigits,roundingMode,groupingUsed)
  • ULCRegularExpressionDataType => Regexp(validateExpression, inputFilterExpression)
  • ULCStringDataType => String(maxLength,mode,ignoreLongStringCompeletely)
New converters for ULCAbstractBorder subclasses:
  • ULCBevelBorder => Bevel(bevelType, highlightOuter, highlightInner, shadowOuter, shadowInner)
  • ULCCompoundBorder => Compound(outsideBorder, insideBorder)
  • ULCEmptyBorder => Empty(insets)
  • ULCEtchedBorder => Etched(etchType, highlight, shadow)
  • ULCLineBorder => Line(color, thickness, roundedCorners)
  • ULCMatteBorder => Matte(insets, color), Matte(insets, icon)
  • ULCResourceBorder => Resource(resourceKey)
  • ULCSoftBevelBorder => SoftBevel(bevelType, highlight, shadow), SoftBevel(bevelType, highlightOuter, highlightInner, shadowOuter, shadowInner)
  • ULCTitledBorder => Titled(border,titleText,titleJustification,titlePosition,titleFont,titleColor)
UBA-7545 Provide endColumn() method on form build parameter objects New API:
  • LayoutParameter.endColumn()
UBA-7546 AbstractFormBuilder.addLabel("foo") should implicitly set widget name to "foo.Label"  
UBA-7547 AbstractFormBuilder.addTitle() should return the general parameter object of its label component  
UBA-7548 AbstractFormBuilder.addTextField() should set trailing horizontal alignment for numeric text fields  
UBA-7549 Abstract form builders parameter objects should support horizontal alignment New LabelParameter class with the following API:
  • horizontalAlignment()
  • verticalAlignment()
  • horizontalTextPosition()
  • verticalTextPosition()
  • text()
New TextFieldParameter API:
  • horizontalAlignment()
UBA-7550 Read only form fields should not receive focus  
UBA-7595 Improve handling of client system properties  
UBA-7598 Log attribute information when creating a new renderer / editor template  
UBA-7599 Immutable borders should have a proper equals() / hasCode() implementation  
UBA-7602 UlcUtilities methods should correctly handle menus  
UBA-7612 Project generator should be able to generate an empty project The setup dialog now contains a checkbox that decides if an empty project or a template project is being generated.
UBA-7621 Some sources for bundled jar files are missing in the generated application  
UBA-7625 Generated client project should be a Java 1.4 project  
UBA-7631 ContentPane and MenuBar should be treated as child components in ULCRootPane's containment hierarchy.  
UBA-7633 Provide ULCTable.editCellAt() API New API:
  • ULCTable: public boolean editCellAt(int row, int column)
  • ULCTree : public void startEditingAtPath(TreePath path)
  • ULCTableTree: public boolean editCellAt(int row, int column)
  • ULCTableTree: public void startEditingAtPath(TreePath path,int column)
UBA-7637 Generated project should have no "-server" postfix  
UBA-7654 AbstractFormBuilder.setLabelHorizontalAlignment() should affect all form labels  
UBA-7660 Provide ULCColorChooser API New API:
  • ULCColorChooser


Migration Notes

Migrating an existing application

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