Release Notes
December, 2011
About Canoo RIA Suite ULC - Update 5
Canoo RIA Suite ULC includes the following new features:
| Feature | Description |
| ULCWorker: Widget to facilitate long running asynchronous tasks | To spawn threads to handle long running and non-(GUI-)blocking (hence asynchronous) tasks is a delicate task to server-side
programmers but still it has to be done from time to time.
So far the only support was ULCPollingTimer, which allows to poll for the asynchronous task's completeness. With ULCWorker an API shall be provided that can take the same place in ULC programming as SwingWorker in Swing programming. |
| Support for property change events | Using a custom event in ULC extensions is somewhat cumbersome. It is easier to use an already existing event like ActionEvent.
However none of the supported events offers the possibility to pass a single property value. This means that as soon as you have an event that contains a value you are forced to implement a custom event. PropertyChangeEvents are events that hold a single value. See com.ulcjava.base.shared.event for more details. |
| Client proxies sent to server | When we transport a server proxy (aka ULCProxy) from server to client, the serialization engine converts it into
an Oid. But the same did not happen when a client proxy (aka UIProxy) were transported from client to server
(see UBA-7066). This is now possible.
This change has been triggered by a critical bug in ULCLoad (see UBA-8508) and forces us to make some changes in the API. See migration notes for more details. |
Please see the Canoo RIA Suite Update 4 release notes for previous release notes.
The sections Fixed Bugs and Implemented Feature Requests give an overview of the most important differences between Canoo RIA Suite ULC Update 4 and Canoo RIA Suite ULC Update 5.
To migrate from Canoo RIA Suite Update 4 to Canoo RIA Suite ULC Update 5, please see the migration notes.
Version Notes
Canoo RIA Suite ULC Update 5 requires the Java Runtime Environment (JRE) 1.5 or later on the server and on the client.
The deployment of a Canoo RIA Suite ULC application requires a JEE server that supports at least the Servlet 2.4 specification.
Packages, Modules, Parts and Release Structure
UltraLightClient is part of the Canoo RIA Suite. It consist of the ULC Core that includes all components required to successfully develop and deploy UltraLightClient applications. Additionally there are several extension packages that provide extended functionalities. The UltraLightClient modules, parts, packages, and the structure of the current release are described in the following sections.
Package ULC Core
ULC Core contains everything that was in previous version of ULC enhanced with the new features: extended visual Effects, Charts, Animations and export to Google App engine.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 Servlet container.
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.
Package ULC Table Plus 1.0.4 (JIDE Grids v3.1.1)
ULC Table Plus integrates the JIDE grids library that provides a table with various extended features.
Package ULC Web Integration 1.0.3 (JxBrowser v2.9.1)
ULC Web-Integration integrates the JxBrowser library. With this package you can integrate any web page directly into your ULC Application.
Package ULC Enterprise Portal Integration 1.0.2
With this package you can integrate an ULC Application into your enterprise web applications or your enterprise portal server.
Package ULC Office Integration 1.0.1
This package bundles Apache POI and iText to produce PDF and MS Office documents integrated into your ULC Application.
Release Structure
| <ULC_HOME> | UltraLightClient home directory |
| addon applicationframework easydeployment generators testframework qtpintegration |
Add-ons to the UltraLightClient base framework |
| base | UltraLightClient base framework |
| all | For convenience, all UltraLightClient classes |
| container servlet local |
Server integrations including 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 ULCExtensionGuide.pdf |
UltraLightClient documentation |
| environment applet jnlp standalone |
Client environment integration for applet deployment, JNLP deployment, and standalone deployment. |
| ext | contains the libraries of installed packages |
| license | the jar file with the deployment license key |
| previous_releasenotes | Previous release notes |
| sample chart hello onlineshop pie teammembers jetty trusted ulcdndset ulcset |
Sample applications with ready to run Jetty Servlet container |
| thirdpartylicenses | licenses of included third party libraries |
| tool ulc-license-manager.jar |
license manager tool |
| build.txt | Contains the build number |
| LicenseAgreement.pdf | The license Agreement |
| releasenotes.html | This document |
Fixed Bugs
| PR | Description | Comments |
| UBA-1089 | 'Content-length' header missing | |
| UBA-7449 | ULCDialog.setVisible(true/false) in same roundtrip will cause dialog to stay | |
| UBA-7826 | ColumnBinding.columnName() has no effect | |
| UBA-8254 | ClassCastException upon right-click on table in case the renderer component is not of type JComponent | |
| UBA-8278 | Exception by substance L&F when displaying ULC application as applet | |
| UBA-8391 | ULCComponents size is not respected when wrapped into a JXLayer | |
| UBA-8472 | NPE when trying to remove a table / table tree row containing a cell being currently edited | |
| UBA-8479 | ResourceMap.containsKey throws NPE if key is not found | |
| UBA-8480 | Cell selection on ULCTableScrollPane does not work. | |
| UBA-8481 | In ULCTableScrollPane hiding the last column and then showing it again changes its position. | |
| UBA-8483 | ULCInternalFrame.setFrameIcon(null) still displays icon on the frame on the client side. | |
| UBA-8486 | ULCFrame[] returned by ULCFrames.getFrames() may have null frames in it. | |
| UBA-8494 | AbstractButton.doClick does not select checkbox/radio button | |
| UBA-8496 | UITableModelAdapter throws an exception when fireTableStructureChanged is performed after the column count has changed on a table with row sorter | |
| UBA-8498 | "No coder registered ..." exception when sending an empty IProxy array over the wire | |
| UBA-8502 | 'UISession.setExitOnLastSessionStop(false)' not respected in 'StandaloneTestEnvironmentAdapter' resp. 'JnlpTestEnvironmentAdapter' | |
| UBA-8505 | The new splash screen seems to generate two sessions | |
| UBA-8508 | UIProxy.getId is of type int instead of Oid |
Implemented Feature Requests
| PR | Description | Comments |
| UBA-7066 | Transporting proxy from client to server | |
| UBA-7073 | ULC should provide base support for PropertyChangeEvents | |
| UBA-7827 | Improve documentation of TableBinding.getBeanForRow() method | |
| UBA-7850 | Facilitate use of a different test framework like JUnit4 or TestNG | |
| UBA-8200 | ULCTableTree client proxy calls repaint() method 3 times on cell edit | |
| UBA-8232 | Improve the documentation for Coders | |
| UBA-8240 | HTMLUtilities should escape given text into HTML entities if needed | |
| UBA-8442 | Add setRowHeight(int row, int rowHeight) API to ULCTable and ULC Table Plus also. | |
| UBA-8464 | Update JxBrowser to version 2.9 | |
| UBA-8467 | It is not possible to extend ULCJideTable within ULCTableScrollPane | |
| UBA-8468 | Column parameter does not seem to be considered in UITableTreeModelAdapter.tableTreeNodesChanged | |
| UBA-8476 | Provide the ability of closing instances of ULCInternalFrame programmatically on server side. | |
| UBA-8478 | Reintroduce a way to actively remove the roundtrip listener for a form | |
| UBA-8482 | U4 is using the regular Jide libraries (without line numbers in stack trace) | |
| UBA-8484 | Make FormModel.update(boolean) protected | |
| UBA-8487 | AbstractFormBuilder/LayoutParameter should set a style on the Labels | |
| UBA-8488 | Create a ULCWorker widget to facilitate long running asynchronous tasks | |
| UBA-8500 | Allow the creation of action map hierarchies | |
| UBA-8503 | When embedded behind a portal, the user has to login twice: the first time in the portal itself (WAM, SSO) and the second time in the ULC application | |
| UBA-8504 | Add 'user-agent' to Error dialog |
Migration Notes
- Deprecated methods have been removed from abstract extensions of com.ulcjava.testframework.AbstractTestCase.
- Specification of
maxFailCountno longer supported in com.ulcjava.testframework.AbstractTestCase and subclasses. Use com.ulcjava.testframework.MaxFailCountTest or a modern test framework like JUnit4 or TestNG to automatically repeat failing tests. handleConfiguration()resp.unhandleConfiguration()of com.ulcjava.testframework.AbstractTestCase is now invoked insetUp()resp.tearDown(). To facilitate use of a test framework using annotations like JUnit4 or TestNG, com.ulcjava.testframework.AbstractTestCase does no longer overriderunBare().- Deprecated methods have been removed from com.ulcjava.base.client.launcher.LauncherUtilities:
getClientConfiguration(Properties).getKeepAliveInterval()replacesgetKeepAliveInterval(Properties)getClientConfiguration(Properties).getClientLogLevel()replacesgetLogLevel(Properties)getClientConfiguration(Properties).getDataStreamProviderClassName()replacesgetDataStreamProviderClassName(Properties)getClientConfiguration(Properties).getCarrierStreamProviderClassName()replacesgetCarrierStreamProviderClassName(Properties)getClientConfiguration(Properties).getClientCoderRegistryProviderClassName()replacesgetClientCoderRegistryProviderClassName(Properties)
- Deprecated empty constructor removed from com.ulcjava.base.server.AbstractContainerServices.
- Deprecated
getBackgroundColor()andgetComponent()have been removed from com.ulcjava.base.client.UIComponent. - Deprecated methods removed from com.ulcjava.applicationframework.application.SingleFrameApplication.
- Deprecated method
getAccelerator(int, int, boolean)has been removed from com.ulcjava.base.application.util.KeyStroke. - Deprecated constructor removed from com.ulcjava.base.application.ULCAbstractButton.
- Deprecated methods
getTableColumnIndex(),modelIndex(int)removed from com.ulcjava.applicationframework.application.binding.table.TableBinding.ColumnBinding . - com.ulcjava.base.client.UIWindow does no longer implement java.awt.event.ComponentListener and related deprecated methods have been removed.
- Deprecated method
getContainer()removed from com.ulcjava.base.client.UIContainer. - Deprecated method
fromAnything(Anything)resp.toAnything()removed from com.ulcjava.base.server.ClientInfo resp. com.ulcjava.base.client.ClientInfo. - Deprecated class com.ulcjava.container.servlet.server.SessionStore has been removed.
- Deprecated methods have been removed from com.ulcjava.base.server.ULCSession.
- Method
nodesChanged(int[][])of class com.ulcjava.base.client.UITableTreeModelAdapter marked as deprecated. UsenodesChanged(int[][], int)instead. - Widget label instantiated via
createLabel()of com.ulcjava.applicationframework.application.form.LayoutParameter is now named<property-name>.WidgetLabel(used to be<property-name>.Label) to make a distinction between such labels and label created via com.ulcjava.applicationframework.application.form.LabelParameter. - Deprecated protected field
fColumnsof com.ulcjava.base.client.UITableColumnModel has been removed. UsegetColumnsMap()instead. - API changes related to the transport of client proxy from client to server:
- Method
updateColumnOrder(int[])of class com.ulcjava.base.application.AbstractColumnModel has been changed toupdateColumnOrder(List). Deprecation was not possible in this case! - Method
updateRemovedInternalFrames(int[])of class com.ulcjava.base.application.ULCDesktopPane has been changed toupdateRemovedInternalFrames(List<ULCInternalFrame>). Deprecation was not possible in this case! - Method
updateInvoker(int)of class com.ulcjava.base.application.ULCPopupMenu has been changed toupdateInvoker(ULCComponent component). Deprecation was not possible in this case! - Method
setErrorMap(Map<Integer, ErrorObject>)of class com.ulcjava.base.application.datatype.ULCAbstractErrorManager has been changed tosetErrorMap(Map<ULCComponent, ErrorObject>). Deprecation was not possible in this case! - Method
createActionEvent(int, int)of class com.ulcjava.base.application.ULCAbstractHeader has been changed tocreateActionEvent(int, AbstractColumn). Deprecation was not possible in this case! - Method
getComponentId()of interface com.ulcjava.base.client.dnd.IDnDData replaced bygetComponent(). - Methods
requestCellRendererComponents(int[], int[]),requestHeaderRendererComponents(int[]),requestCellEditorComponents(int[], int[])of class com.ulcjava.base.application.ULCTable have been changed: the latter method argument is nowList<ULCTableColumn>. Deprecation was not possible in this case!
- Method
- Methods
getCustomOperatorMappings()resp.setCustomOperatorMappings(Properties)have been removed from class com.ulcjava.testframework.operator.AWTOperator. UsesetCustomOperatorMapping(String, String)instead. - com.canoo.common.SerialVersionUID made package protected. Use
com.ulcjava.base.shared.internal.VersionInfo.sSerialVersionUIDinstead. - In Application Framework, the name of widget label has been change from
<property-name>.Labelto<property-name>.WidgetLabel. This is to make a differentiation between a form widget which is a label (see com.ulcjava.applicationframework.application.form.LabelParameter) itself and a label coming along with a widget.
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.