UltraLightClient Logo

Release Notes

November 15, 2008


About UltraLightClient '08 Update 1

UltraLightClient '08 Update 1 includes the following new features:

Feature Description
New all module The all module contains exactly one jar file per combination of environment and Java version.

No more need to juggle with numerous UltraLightClient jar files.
Enhancements in Easy Configuration
  • configure your custom coders
  • configure your custom error dialog
Enhancements in Easy Deployment
  • compress your client jar files on the fly and shrink the downloadable files by 80%
  • sign your client jar files on the fly
  • embed your application in a custom HTML page
  • configure the client java runtime, e.g. java version, memory size
  • integrate your application in the client desktop, e.g.
    • application title
    • application icons, e.g. splash screen, browser icon
    • menu / desktop shortcuts
    • file / mime type associations
Support Fixes This release contains fixes and features that were reported to the premium support mailing list.

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

To migrate from UltraLightClient '08 to UltraLightClient '08 Update 1, 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-980 Page up / page down do not work on a ULCTableTree in a ULCScrollPane  
UBA-7249 No selection events while expanding a table tree node the first time  
UBA-7454 ULCCheckBoxmenuItem.setSelected() fires valueChanged event twice.  
UBA-7455 The visible property of ULCPopupMenu is not synchronized from the client proxy to the server proxy.  
UBA-7461 Table binding adds listeners to the observable list and the beans in it but never removes them  
UBA-7462 Sorted tables add a listener to the model to sort but never remove this listener  
UBA-7470 ULC should use ordered map for storing client properties so that they are set in the same order as specified in the code.  
UBA-7471 createDefaultColumnsFromModel() is always called even if a ULCTableColumnModel is given in the constructor  
UBA-7481 exception on binding of subbean data  
UBA-7482 If a table row sorter is used then AbstractTableModel.fireTableDataChanged() is not respected  
UBA-7483 Generated application : Extension Skeleton does not work properly .  
UBA-7521 JNLP environment ignores application configuration  
UBA-7523 ULCTable shows a sort icon even if in unsorted mode  
UBA-7524 ULCTable does not display a sort icon if sorted before upload  
UBA-7526 DevelopmentRunner with application class does not completely ignore application configuration file  
UBA-7529 The generated client project is not configured as a dependent J2EE module in the server project  
UBA-7539 TestAppletViewer should not wait forever for the applet to be started  
UBA-7566 Setting the TableModel after setting the TableHeader to null causes a NullPointerException  
UBA-7570 ULCTableTree with TreeselectionListener fires two selection events when you click on a a row while in editing a cell.  
UBA-7571 resetting the currentSession after a session operation should be in a finally block  
UBA-7572 Certain methods of ULCTable do not respect the RowSorter  
UBA-7574 DefaultMutableTableTreeNode allows insert on Leaf nodes New DefaultMutableTableTreeNode API:
  • setLeaf()
UBA-7575 ULCTable.setValueAt() is unable to set value on a sorted table.  
UBA-7582 ULCTable does not display a sort icon in Java6  
UBA-7584 ULCListOperator: selectItem(String item) is not working  
UBA-7587 Clearing an observable list can cause a runtime exception in table binding  
UBA-7588 Removing rows from a sorted table might cause a runtime exception  
UBA-7589 Adding or removing table rows in a sorted table might corrupt selection  
UBA-7590 Changing the structure of a table model results in a runtime exception when sorting the table  
UBA-7592 Setting the model update mode is lost when setting a row sorter  
UBA-7597 Remove on the iterator of an ObservableList does not fire any events  


Implemented Feature Requests

PR Description Comments
UBA-193 ULCField with Validator should only enable when valid  
UBA-7372 Improve the performance of expandAll functionality of ULCTableTree and ULCTree New API on ULCTree and ULCTableTree:
  • collapseAll()
  • collapsePaths(TreePath[] paths, boolean includingDescendants)
  • expandAll()
  • expandPaths(TreePath[] paths, boolean includingDescendants)
UBA-7459 ULC Reflection utilities should not wrap Unchecked Exceptions and wrap the TargetException from InvocationTargetException.  
UBA-7464 View.show() should not pack the content  
UBA-7465 Provide a convenience method in ResourceManager to build resource map chains New API:
  • getResourceMap(Class startClass, Class endClass, ResourceMap parent)
UBA-7466 Consolidate method names in SingleFrameApplication New API in SingleFrameApplication to define startup user interface:
  • createStartupMainContent()
  • createStartupStatusBar()
  • createStartupToolBar()
  • createStartupMenuBar()
  • buildToolBar()
  • buildMenuBar()
New API in SingleFrameApplication to access / alter user interface:
  • getMainContent() / setMainContent()
  • getStatusBar() / setStatusBar()
  • getMenuBar() / setMenuBar()
  • getToolBar() / setToolBar()
New API in SingleFrameApplication to get main window
  • getFrame()
  • getAppletPane()
  • getRootPane()
UBA-7467 Application.main() does not throw Exception which makes it impossible to throw Exception in subclasses  
UBA-7468 DefaultJnlpLauncher / DefaultStandaloneLauncher should provide an empty constructor as in 6.2 and before  
UBA-7472 Wrong Javadoc for ULCListSelectionModel.getMaxSelectionIndex()  
UBA-7474 Provide jar files for development, client, and server environment that contains all modules Added a new module to the release: the all module. The all module contains exactly one jar file per combination of environment and Java version. This jar file contains all ULC classes:
  • Java 1.4
    • Development environment => ulc-all14-development.jar
    • Client environment => ulc-all14-client.jar
    • Server environment => ulc-all14-server.jar
  • Java 5
    • Development environment => ulc-all5-development.jar
    • Client environment => ulc-all5-client.jar
    • Server environment => ulc-all5-server.jar
In addition the all module contains all dependent jar files, e.g. JUnit, Jemmy, Jetty.
UBA-7476 Add a ant build script for the generated sample application Added build.xml Ant script to the generated application.
UBA-7479 Change the persistence layer from hibernate to jpa  
UBA-7496 Provide a Servlet that delivers pack200 compressed Jar files on the fly The client jar files (placed in WEB-INF/lib and ending in -client.jar) are prepared by a servlet context listenener you can find in the easy deployment module:
  • com.ulcjava.easydeployment.server.ClientJarPreparationListener
UBA-7497 Provide a Servlet that delivers signed Jar files on the fly The client jar files (placed in WEB-INF/lib and ending in -client.jar) are prepared by a servlet context listenener you can find in the easy deployment module:
  • com.ulcjava.easydeployment.server.ClientJarPreparationListener
The client jar files are signed if a keystore is specified in the jarsigner.properties file. For testing purposes the project generator creates a ulctest certificate and copies it into the generated project.
UBA-7499 Provide a tag lib that renders a nice ULC compliant Applet tag The applet page in the generated project is rendered by a JSP page which uses a taglib to render the Applet HTML code. You can find the files in a generated project:
  • <PROJECT>.jsp => <PROJECT_HOME>/WebContent/
  • ulcApplet.tag => <PROJECT_HOME>/WebContent/WEB-INF/tags/
Another option is to copy and work with the original files in the UltraLightClient release:
  • appletPage.jsp => <ULC_HOME>/addon/generators/templates/projecttemplates/server/WebContent/
  • ulcApplet.tag => <ULC_HOME>/addon/generators/templates/projecttemplates/server/WebContent/WEB-INF/tags/
Both of theses files can be adapted by the clients for customization towards their needs.
UBA-7500 Provide abstract test cases that respect the ULCApplicationConfiguration.xml configuration file New API:
  • AbstractIntegratedTestCase.getConfigurationResourceName()
If getApplicationClass() returns null (which is the default) then the test uses the application configuration file. By default this is the ULCApplicationConfiguration.xml file. A test can specify another application configuration file by overriding getConfigurationResourceName().
UBA-7502 Application configuration should enable coder configuration New tags in ULCApplicationConfiguration.xml file:
  • coders
    • asymmetricCoder => coder with different implementation on client and server
      • clientCoder
        • class
        • coderClassName
      • serverCoder
        • class
        • coderClassName
    • symmetricCoder => coder with same implementation on client and server
      • class
      • coderClassName
The coder class must have either an empty constructor or a constructor that takes a class name.
UBA-7503 Application configuration should enable client session error handler configuration New tag in ULCApplicationConfiguration.xml file:
  • clientSessionErrorHandlerClassName
New API:
  • ISessionErrorHandler
UBA-7504 Application configuration should enable session provider configuration New tag in ULCApplicationConfiguration.xml file:
  • serverSessionProviderClassName
UBA-7505 Application configuration should enable deployment descriptor configuration New tag in ULCApplicationConfiguration.xml file:
  • java
    • version => java version to use
    • vmArgs => java virtual machine arguments
    • initialHeapSize => initial heap size of the java virtual machine
    • maxHeapSize => maximum heap size of the java virtual machine
    • forceAllPermissions => starts the client environment outside of the sandbox
    • desktopIntegration
      • shortcut
        • desktop => create a desktop shortcut
        • menu => create a application menu shortcut
      • association
        • extension => associate the application with this file extension
        • mimeType => associate the application with this mime type
Localizable resources are loaded from resource map. To access this resources from the client environment the ResourceDownloader Servlet from the easy deployment module is needed. The following localizable resource are used:
  • Application.title
  • Application.vendor
  • Application.homepage
  • Application.description
  • Application.icon.64
  • Application.icon.32
  • Application.icon.16
  • Application.splash
  • Application.menu_group
UBA-7511 Make build-setup script of project generator compatible with eclipse 3.2 -> Ant Version 1.6.5  
UBA-7516 Specifiying a keepalive interval less or equal to 0 does not install a keepalive timer  
UBA-7518 Generated application should be self contained New file in generated project:
  • generator.properties
This file holds the absolute path to the UltraLightClient home directory.
UBA-7520 The generator should not overwrite existing classes by default  
UBA-7525 Impossible to set sort order in TableRowSorter New API:
  • setSortColumn(int column, SortOrder order)
UBA-7537 Application configuration should overrule legacy ulclog.properties configuration file  
UBA-7538 Application configuration should enable default client environment configuration New tag in ULCApplicationConfiguration.xml:
  • defaultClientEnvironment which allows the values Applet and JNLP
The configured default client environment is used by the IndexServlet (found in the easy deployment module) to do a client redirect:
  • Applet => redirect to the URL configured in the applet-redirect init-parameter
  • JNLP => redirect to the URL configured in the jnlp-redirect init-parameter
UBA-7543 Application framework's ApplicationContext should implement all static method from com.ulcjava.base.application.ApplicationContext New ApplicationContext API:
  • getUserPrincipal(), isUserInRole()
  • getInitParameterNames(), getInitParameter()
  • getServerContainerType()
  • getAttributeNames(), getAttribute(), setAttribute(), removeAttribute()
  • addRoundTripListener(), removeRoundTripListener(), getRoundTripListeners()
  • getImplementationTitle(), getImplementationVendor(), getImplementationVersion(), getSpecificationTitle(), getSpecificationVendor(), getSpecificationVersion()
com.ulcjava.base.application.ApplicationContext.terminate() is not provided because there is the Application.exit() API to be used to terminate an application.
UBA-7565 Provide ULCTableHeaderOperator API for verify the column header New API:
  • ULCTableHeaderOperator.getRenderedComponent(int column)
UBA-7576 Add documentation for application configuration to Application Development Guide  
UBA-7577 Add migration notes for how to utilize the new ULC08 features without generating a project  
UBA-7578 Application configuration should enable launcher class configuration Added to new tags to ULCApplicationConfiguration.xsd:
  • jnlpLauncherClassName
  • appletLauncherClassName
UBA-7581 The Applet page and the JNLP file of a generated application should be accessable with meaningfull names. New generated URLs:
  • Applet => ProjectName.jsp
  • JNLP file => ProjectName.jnlp
(where ProjectName is the name you specify while generating your project)
UBA-7586 Provide ULCTableOperator API to get the editor component New ULCTableOperator API:
  • getEditorComponent(int row, int column)
  • clickForEdit(int row, int column) now returns the editor component


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-BETA.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