Release NotesDecember, 2011
About Canoo RIA Suite ULC - Update 5
Canoo RIA Suite ULC includes the following new features:
|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
Please see the Canoo RIA Suite Update 4 release notes for previous release notes.
To migrate from Canoo RIA Suite Update 4 to Canoo RIA Suite ULC Update 5, please see the migration 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 CoreULC 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.
The UltraLightClient release is split into modules. Each module belongs to exactly one of five categories:
All UltraLightClient classes.
For convenience, contains all other modules (except samples).
The UltraLightClient core.
Always needed, for development and deployment.
Server-side integrations into Servlet container.
Only needed for server deployment.
Client-side integrations into environments, e.g. Applet, JNLP.
Only needed for client deployment.
Utilities and extensions, e.g. application framework, 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.
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.2With this package you can integrate an ULC Application into your enterprise web applications or your enterprise portal server.
Package ULC Office Integration 1.0.1This package bundles Apache POI and iText to produce PDF and MS Office documents integrated into your ULC Application.
|<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 Servlet container integration and integration into local container for stand-alone (single JVM) ULC applications.|
|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 applications with ready to run Jetty Servlet container|
|thirdpartylicenses||licenses of included third party libraries|
|license manager tool|
|build.txt||Contains the build number|
|LicenseAgreement.pdf||The license Agreement|
|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|
|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|
- 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.
unhandleConfiguration()of com.ulcjava.testframework.AbstractTestCase is now invoked in
tearDown(). To facilitate use of a test framework using annotations like JUnit4 or TestNG, com.ulcjava.testframework.AbstractTestCase does no longer override
- Deprecated methods have been removed from com.ulcjava.base.client.launcher.LauncherUtilities:
- Deprecated empty constructor removed from com.ulcjava.base.server.AbstractContainerServices.
getComponent()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
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
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.
nodesChanged(int)of class com.ulcjava.base.client.UITableTreeModelAdapter marked as deprecated. Use
- 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. Use
- API changes related to the transport of client proxy from client to server:
updateColumnOrder(int)of class com.ulcjava.base.application.AbstractColumnModel has been changed to
updateColumnOrder(List). Deprecation was not possible in this case!
updateRemovedInternalFrames(int)of class com.ulcjava.base.application.ULCDesktopPane has been changed to
updateRemovedInternalFrames(List<ULCInternalFrame>). Deprecation was not possible in this case!
updateInvoker(int)of class com.ulcjava.base.application.ULCPopupMenu has been changed to
updateInvoker(ULCComponent component). Deprecation was not possible in this case!
setErrorMap(Map<Integer, ErrorObject>)of class com.ulcjava.base.application.datatype.ULCAbstractErrorManager has been changed to
setErrorMap(Map<ULCComponent, ErrorObject>). Deprecation was not possible in this case!
createActionEvent(int, int)of class com.ulcjava.base.application.ULCAbstractHeader has been changed to
createActionEvent(int, AbstractColumn). Deprecation was not possible in this case!
getComponentId()of interface com.ulcjava.base.client.dnd.IDnDData replaced by
requestCellEditorComponents(int, int)of class com.ulcjava.base.application.ULCTable have been changed: the latter method argument is now
List<ULCTableColumn>. Deprecation was not possible in this case!
setCustomOperatorMappings(Properties)have been removed from class com.ulcjava.testframework.operator.AWTOperator. Use
- com.canoo.common.SerialVersionUID made package protected. Use
- In Application Framework, the name of widget label has been change from
<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.
You can find known problems and limitations in our issue database.
Product and company names herein may be trademarks of their respective owners.