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.
|
| 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.
|
| New ULCColorChooser component |
|
| Premium Support Fixes | This release contains fixes and features that were reported
to the premium support mailing list.
|
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.
Modules
The UltraLightClient release is split into modules. Each module belongs to exactly one of five categories:
- All
All UltraLightClient classes.
For convenience, contains all other modules (except samples). - Base
The UltraLightClient core.
Always needed, for development and deployment. - Container
Server-side integrations into containers, e.g. Servlet, EJB.
Only needed for server deployment. - Environment
Client-side integrations into environments, e.g. Applet, JNLP.
Only needed for client deployment. - Addon
Utilities and extensions, e.g. application framework, test framework, QTP integration.
Only needed on demand. - Sample
Samples demonstrating the usage of UltraLightClient, e.g. Hello, ULCSet, OnlineShop.
Not needed during development or deployment.
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:
- lib
Jar files that contain the module classes.
For sample and add-on modules the required libraries. - resource
Only for sample modules: the required resources, e.g. images, property files - src
Either complete source code or source stubs.
The source stubs are used to enable code completions in IDEs. - webapp
Only for sample modules: ready to deploy web application, i.e. war files
Parts
Each of these modules can contain up to four parts:
- Client
Contains classes to be deployed on the client side.
Runs inside the sandbox. - Trusted
Contains classes to be deployed on the client side.
Does not run inside the sandbox. The additional permissions required depend on the module. - Server
Contains classes to be deployed on the server side. - Development
Contains all classes needed during development, i.e. the client, trusted, and server parts plus some additional development classes.
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 |
| addon applicationframework generators testframework qtpintegration |
Add-ons to the UltraLightClient base framework |
| base | UltraLightClient base framework |
| all | For convenience, all UltraLightClient classes |
| container ejb servlet local |
Server integrations including EJB container integration and Servlet container integration and integration into local container for stand-alone (single JVM) ULC applications. |
| doc addon ULCQTPIntegrationGuide.pdf ULCTestFrameworkGuide.pdf apidoc ULCArchitectureGuide.pdf ULCApplicationDevelopmentGuide.pdf ULCDeploymentGuide.pdf ULCEssentialsGuide.pdf ULCExtensionGuide.pdf ULCInstallGuide.pdf ULCReferenceGuide.pdf ULCTestFramework.pdf ULCWhitePaper.pdf |
UltraLightClient documentation |
| environment applet jnlp standalone |
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 hello onlineshop pie teammembers tomcat trusted ulcdndset ulcset |
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
|
| UBA-7534 | ULCComboBoxOperator.selectItem takes too long or even times out. | |
| UBA-7542 | Allow to set and get styles via API | New API:
|
| UBA-7544 | Provide additional resource converters | New converters for IDataType subclasses:
|
| UBA-7545 | Provide endColumn() method on form build parameter objects | New API:
|
| 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:
|
| 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:
|
| 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:
|
Migration Notes
Migrating an existing application
To integrate the new features into an existing application you can perform the following steps.
- Application configuration file 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:
- Libraries 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.
- Application framework 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.
- Easydeployment 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
<servlet> <description> delivers the client configuration data </description> <servlet-name>ConfigPropertiesDownloader</servlet-name> <servlet-class> com.ulcjava.container.servlet.server.servlets.ConfigPropertiesDownloader </servlet-class> </servlet> <servlet-mapping> <servlet-name>ConfigPropertiesDownloader</servlet-name> <url-pattern>/clientconfig.properties</url-pattern> </servlet-mapping>
Create a resources package beneath the package of the application class and create the <ApplicationClassName>.properties file.
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.



