Release NotesSeptember 12, 2007
About UltraLightClient 6.2
Release 6.2 includes the following new features:
|Test Framework||The test framework is a tool to enable functional testing of
UltraLightClient applications. It shields the test developer from all
|QuickTest Professional Integration||Use the popular record & replay tool to define your functional tests. The QuickTest Professional integration saves you from writing complex synchronization code and therefore enables fast and reliable functional tests for your UltraLightClient applications.|
|Support Fixes||This release contains a lot of fixes and features that were reported to the support mailing list.|
|Cell Based Pop Up Menus||Some components are built out of smaller sub-elements. These
sub-elements are usually referred to as cells. UltraLightClient
supports the following cell-based widgets: ULCList, ULCTable,
ULCTree, and ULCTableTree. For these widgets it is
now possible to define a component pop-up menu that shows different
menu items for each cell.
|Custom Blocking Feedback||UltraLightClient blocks the user interface during a
synchronous server round-trip. By default, UltraLightClient indicates
a blocking user interface by means of a special mouse cursor. It is
now possible to define a custom blocking feedback.
|Multi File Selection||UltraLightClient's file chooser dialog is now able to select more than one file at once.|
|Swing API||This release contains almost 100 new properties and methods for existing components plus one completely new component. You can find detailed information for the most important features in the next sections.|
|ULCSpinner||ULCSpinner is a new control that enables an easy
selection for numbers, dates and list elements.
|ComponentOrientation||All components now support left-to-right and the
right-to-left component orientation.
|Full Mnemonic Support||It is now possible to set mnemonics, as well as the exact
mnemonic index on labels, buttons, and tabs.
|L&F Window Decoration||Dialogs and frames now support look & feel window decoration.
Therefore dialogs and frames can now inherit the window decoration
from the installed look & feel and not from the underlying host
operating system, e.g. Windows.
|Slider Labels||The labels in ULCSlider can now be defined in detail
to show their various values.
|Progress Bar String||ULCProgressBar can now contain an information
string, e.g. to display the percentage completed or the time required
for an operation.
|Tab Layout Policy||A ULCTabbedPane with a lot of tabs can now display
scroll buttons for faster tab navigation.
To migrate from UltraLightClient 6.1.3 to UltraLightClient 6.2, please see the migration notes.
UltraLightClient 6.2 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 UltraLightClient core.
Always needed, for development and deployment.
Server-side integrations into containers, e.g. Servlet, EJB.
Only needed for server deployment.
Client-side integrations into environments, e.g. Applet, JNLP.
Only needed for client deployment.
Utilities and extensions, e.g. test framework, QTP integration.
Only needed on demand.
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:
Jar files that contain the module classes.
For sample and add-on modules the required libraries.
Only for sample modules: the required resources, e.g. images, property files
Either complete source code or source stubs.
The source stubs are used to enable code completions in IDEs.
Only for sample modules: ready to deploy web application, i.e. war files
Each of these modules can contain up to four parts:
Contains classes to be deployed on the client side.
Runs inside the sandbox.
Contains classes to be deployed on the client side.
Does not run inside the sandbox. The additional permissions required depend on the module.
Contains classes to be deployed on the server side.
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.
|ulc-6.2||UltraLightClient 6.2 home directory|
|Add-ons to the UltraLightClient base framework|
|base||UltraLightClient base framework|
|J2EE server integration including EJB container integration and Servlet container integration.|
|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|
|UBA-7220||UISession.waitForIdle() does not respect low priority events|
|UBA-7221||UISession.waitForIdle() does not respect multi cycle round trips|
|UBA-7222||UISession.waitForIdle() may lead to a deadlock|
|UBA-7183||Multiple client-side sessions in one VM / AppContext may lead to a deadlock|
|UBA-7248||DefaultTableModel.isCellEditable javadoc is missing|
|UBA-1101||Drag & Drop triggers an exception when dropping on fields with data type set|
|UBA-6920||It is not possible to set ULCCheckBox as a cell editor on ULCTree|
|UBA-6967||DnD does not work in ULCInternalFrame|
|UBA-6989||ULCTextArea.append : the appended value is lost|
|UBA-7154||ULCAlert.setInitialValue doesn't work|
|UBA-7163||DevelopmentRunnerGui: NullpointerException while setting the connetion type|
|UBA-7217||Disabling of the swing DnD feature is not possible|
|UBA-7232||ULCLayeredPane.setLayer() method causes reset of defaultButton for ULCInternalFrame|
|UBA-7246||ULCPollingTimer's ActionListener should not be fired once the timer is stopped on the server|
|UBA-7247||Infinite loop when there are many users trying to start a session|
|UBA-7252||Focus handling of ULCTable is not the same as in JTable|
|UBA-7259||ULCScrollBar.setPosition(0.0 ) when it is not in sync with the client side value does not work and issue with adjustment event and client'server synch|
|UBA-7260||ULCTextComponent.setCaretPosition(0 ) when it is not in sync with the client side value does not work.|
|UBA-7265||JTable#setSurrendersFocusOnKeystroke(true) does not work when a custom cell editor has been installed|
|UBA-7270||Implementation of addNotify and removeNotify methods should be as per Swing|
|UBA-7049||DefaultTableTreeHeaderCellRenderer does not display background color unless it's opaque property is set to true.|
|UBA-7173||DefaultTableTreeHeaderRenderer is not using the default look and feel border|
|UBA-7201||Removing a listener that has not yet been added to a ULCProxy results in removal of the event category from optional events list.|
|UBA-7102||ULCFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE) removes WindowListener.|
|UBA-7135||Removing the selected card from a ULCCardPane should update the selection state and fire the corresponding event.|
|UBA-7172||In ULCCombobox with a SelectionManager, Registered key event is consumed on the client side|
|UBA-7185||IDnDComponent.restoreDnDSourceData() is never called|
|UBA-7211||UITree does not load / paint TreeNodes|
|UBA-7212||No data (nodes) are fetched on AbstractTreeModel.nodeStructureChanged(rootNode) if setRootVisible(false)|
|UBA-7213||Mac OSX JDK 1.5: the mouse released event is not played on the right component if a mouse click triggers a popup menu|
|UBA-7218||The input blocker filters mouse dragged events - this leads to errors on MAC OSX|
|UBA-7224||Lazy loading is broken if ULCTable / ULCTableTree / ULCTree / ULCList is not direct child of ULCScrollPane|
|UBA-920||ULCTree is not updated when changing the root node's value|
|UBA-7228||componentPopupMenu property is ignored if inheritsPopupMenu property is true|
|UBA-7231||ULCInternalFrame.pack() should reset isIcon and isMaximum flags just like JInternalFrame.pack()|
|UBA-985||Link to bundled sample tomcat does not work on Linux|
|UBA-7249||No selection events while expanding a table tree node the first time|
|UBA-7283||LCTableTree.setShowsRootHandles() has no immediate visual effect but shows up only after repaint|
|UBA-7284||ULCTable.fTable.setDefaultRenderer() has no immediate visual effect but shows up only after repaint|
|UBA-7227||Provide ULC Test Framework|
|UBA-7274||Provide support for QuickTest Professional||UBA-6943||Support JSpinner||New API:
|UBA-715||Support for Cell Based Popup Menus||New behavior:
|UBA-7255||Provide ULCSlider.labelTable property||New API:
|UBA-6946||Add a popup menu listener to ULCComboBox much as for JComboBox||New API:
|UBA-886||Provide a TableColumnModelListener as in Swing||New API:
|UBA-7134||Provide ULCDialog#setUndecorated(boolean) API||New API:
|UBA-7240||Provide ULCTabbedPane.setTabLayoutPolicy() API||New API:
|UBA-7238||Provide ULCProgressBar.setStringPainted() API||New API:
|UBA-7239||Provide ULCLabel.setDisplayedMnemonicIndex() API||New API:
|UBA-1030||Add ULCComponent.setComponentOrientation() API as in Swing||New API:
|UBA-6929||Support Swing API of JDK 1.4 on the ULCComponents||New API:
|UBA-6863||Align the ULCInternalFrame API with Swing.||New API:
|UBA-7241||Provide ULCTable.setSurrenderOnKeyStroke() API||New API:
|UBA-6865||Provide ULCComboBox.setPrototypeDisplayValue(String) API as in Swing||New API:
|UBA-1097||ULCAppletPane should offer getSize() API||New API:
|UBA-7257||Uninstall does not uninstall all files|
|UBA-6653||Unable to find out if a table popup menu has been opened over the empty area||Changed behavior:
|UBA-6854||Package the interfaces that have a serializable and non-serializable version in different JARs.||Changed API:
|UBA-781||ULC's FileChooserConfig does not support selection of multiple files.||Changed/New API:
|UBA-6884||ULCAbstractButton does not provide setSelected(), isSelected()||New API:
|UBA-7188||JNLP File Service returns null for file path, but it can return filename. Should a new API be provided which returns file path and file name?||Changed API:
|UBA-7137||Make AllPermissionsFileService extensible - for example, w.r.t. FileFilter||New API:
|UBA-7206||Improve reflection performance|
|UBA-7253||Component popup menus should only be inherited if all ancestors have the inheritsPopupMenu flag set|
|UBA-7205||Model adapters should not be hard coded||New API:
|UBA-665||API to get type of deployment container||New API:
|UBA-976||The feedback during long lasting server round trips should be configurable||New API:
|UBA-6860||Implement toString() on Insets class||Added implementations to Rectangle and SystemColor class as well.|
|UBA-6918||ULCPercentDataType cannot enter / display negative percent values|
|UBA-7276||ULCPercentDataType shoulld allow input / display of exponential (E) values|
|UBA-6945||IBlockedSessionListener should provide callback for session unblock||New API:
|UBA-7030||Writing a custom container still depends on Anything API|
|UBA-7042||ULC session id used in Servlet deployment should only be valid within specific HTTP session context|
|UBA-7067||ULCDataInputSteam / ULCDataOutputStream should not be final|
|UBA-7079||ULCMenuBar#add(ULCComponent, Object) should support Integer constraints||New API:
|UBA-7128||Open up private API ULCSession.processRequest(ICallable callable, Request request)|
|UBA-7242||ULCMandatoryAndenabler shoud restore the current backgrond color on input to mandatory text field|
|UBA-7243||ULCMandatoryAndEnabler should set the highlight color on a textfield irrespective of whether it is enabled or disabled||New API:
|UBA-7244||Add new API: ULCEnablerNode.getEnablers()|
|UBA-7245||UserInteractionMonitor should check for null component in addMonitoredComponent|
|UBA-7251||ULCStringDataType should ignore too long texts completely||New API:
|UBA-7256||ClientContext.storeFile should also take maxSize parameter||New API:
|UBA-7258||Provide a public method that is equivalent to handleRequest() from the old extension API||New API:
|UBA-7266||ULCTable/ULCTableTree should support the use case where cell editor pops up a window.|
|UBA-1125||Make com.ulcjava.base.application.util.Font immutable|
|UBA-7158||Deprecate session state listener methods in launchers|
|UBA-7170||Make 'targets' available to subclasses of UIHasChangedEnabler|
|UBA-7203||Better null-handling and error reporting|
|UBA-7223||Improve error message on lmethod client-side call|
|UBA-7233||It should be possible to configure the DevelopmentRunner with help of init parameters|
|UBA-7139||com.ulcjava.base.client.Registry.findByBasicObject(Object basicObject) should check that input parameter is not null.|
|UBA-6953||Document how to pass ClientCoderRegisteryProvider to an EJBConnetcor and also Javadoc for EJBConnector|
|UBA-576||DevGuide: do not use renderer/editor models for retrieval of data etc.|
|UBA-627||ULCComponent.requestFocus() only works when widget is uploaded||Added clarification to JavaDoc.|
|UBA-7075||ClientContext.getAvailableFontFamilyNames() has no elements||Added clarification to JavaDoc.|
|UBA-581||Allow events to be sent deferred||Added clarification to JavaDoc.|
|UBA-602||How to Implement IRendererComponent and IEditorComponent Interfaces|
|UBA-6800||Improve Javadoc how to find the keys for the ClientContext.getXXX() methods.|
|UBA-6949||ULC Extension Guide|
|UBA-7025||Add informations concerning coders and streams to the architecture guide|
|UBA-7153||Document how to deploy ULC applications in standalone off-line mode using LocalContainerAdapter|
Enhancements for Client File Access
The enhancements for client file access made it necessary to change the API:
- In addition to the file path the file name is available as well. The file name is now provided as an additional parameter to the IFileChooseHandler.onSuccess(), IFileStoreHandler.onSuccess(), and IFileLoadHandler.onSuccess() methods. This is just an additional parameter that therefore can be ignored in existing code.
- The file chooser now supports multi file selection. The IFileChooseHandler.onSuccess(), and IFileLoadHandler.onSuccess() methods now provide the result as an array parameter instead of regular ones. For single file selection the corresponding information can be found in the first element of the array parameter.
Removal of deprecated ULCComponent.setPopupMenu() methods
The methods ULCComponent.setPopupMenu() / ULCComponent.getPopupMenu() have been removed. Use ULCComponent.setComponentPopupMenu() / ULCComponent.getComponentPopupMenu() instead.
You can find known problems and limitations in our issue database.
Product and company names herein may be trademarks of their respective owners.