CUBA Platform Changelog


Version 6.0.9

  1. The Component.ActionsHolder interface now has the addAction(Action action, int index) method that allows you to add an action to the specified position.
  2. The autocomplete attribute of the PasswordField component allows you to enable saving passwords in the web browser.
  3. The cuba.gui.genericFilterMaxResultsOptions application property allows you to specify the options for the Show rows drop-down of the Filter component.
  4. Filter's join condition can have more than one join.
  5. The inputPrompt is supported in the desktop client.
  6. [Reports] The Run reports screen now has a filter on top.
  7. [Charts and Maps] MapViewer info windows now have CSS styles in various elements of the info window DOM.
  8. Bug fixes, including:
    1. The Embedded component does not show URL resources.
    2. Error when executing a JPQL query with several fields in the select clause.
    3. File uploading does not work in IE9 if the server uses local service invocations (which is the default for fast deployment in Tomcat).
    4. TreeTable.expandAll() is too slow.
    5. Some issues with dynamic attributes.
    6. [BPM] "Unfetched attribute" exception when starting a BPM process.

Version 6.0.8

  1. The portal module is automatically included in WAR building.
  2. Views can now be used with queries returning attributes, like select c from app$Order o join o.customer c.
  3. Bug fixes, including:
    1. ResizableTextArea.ResizeListener doesn't return previous values for width and height.
    2. Unable to reset the expanded state of a child component via the ExpandingLayout interface.
    3. FileDataProvider cannot be used with the Embedded component.
    4. The empty Embedded component with the type BROWSER shows the application page.
    5. Mime-types for BMP and SVG are missing.
    6. FUNCTION keyword cannot be used in JPQL.
    7. An exception occurred when opening a screen with entities sorted by an embedded field.
    8. Script generation in System Information is wrong if there are string values.
    9. UniqueConstraintViolationHandler does not work on HSQL.
    10. Unable to remove an entity with a reference to a soft-deleted entity.
    11. Screen History browser does not work.
    12. Dynamic classloader fails if the class is defined not inside a package.
    13. Unable to start the cluster node if user sessions on other node contain binary-incompatible data.
    14. Guava repacked by Vaadin conflicts with the one used in the platform.

Version 6.0.7

  1. File size should be specified when uploading file via REST API.
  2. The handling of the captionProperty attribute of Table column has been changed.
  3. The cuba.uniqueConstraintViolationPattern application property can contain a regexp with | (OR) which is useful for defining patterns in different languages.
  4. The accept attribute has been added to the FileUploadField and FileMultiUploadField components.
  5. The setIconProvider() method has been added to the Tree component.
  6. The Tomcat AJP connector port can be specified in build.gradle.
  7. The setParamValue() method has been added to the Filter component.
  8. Filter is saved immediately after closing its editor window by clicking the OK button.
  9. Batch type "IN" is used by default when fetching collection entity attributes.
  10. PortalAuthenticationProvider is now included in the platform portal module.
  11. The buildWar Gradle task can now create WAR file for portal module.
  12. Bug fixes, including:
    1. Firefox 43 renders error and warning notifications slowly.
    2. Slow commit in cascade editor if a deep composition with many entity instances is used.
    3. Exception while trying to delete an entity with many-to-many relationship and @OnDeleteInverse(DeletePolicy.DENY) specified on the collection attribute.
    4. Passing null parameter to native query fails with "wrong parameter type" exception on PostgreSQL.
    5. Comparing an attribute value with null works in JPQL select, but does not in JPQL update and delete.
    6. Query where entity.attr is null returns wrong result if entity.attr is included into the view.
    7. Unable to turn off softDelete condition in a JPQL update query.
    8. Deleting a hard-delete entity can trigger "Cannot get unfetched attribute" exception.
    9. "Cannot get unfetched attribute" exception when loading a complex object graph with one-to-many and one-to-one links.
    10. "Cannot get unfetched attribute" exception on Reset Password screen.
    11. Query transformer fails parsing query with like escape and (?i) parameters.
    12. Incorrect handling of the JPQL 'member of' operator in security constraints.
    13. Users do not appear in the list of substituted users.
    14. Duplicate values are possible in UniqueNumbers API on MS SQL Server.
    15. Client-side exception stack trace is missing in the log.
    16. Exception on opening a screen with Table that has been sorted by a collection attribute.
    17. The main menu bar shows items with keyboard shortcuts incorrectly.
    18. The CubaWarBuilding Gradle task does not handle the webResourcesTs context param.
    19. The CubaDelpoyment Gradle task doesn't work with Gradle 2.8 and 2.9.
    20. TabSheet.Tab.setEnabled(true) does not enable the tab contents.
    21. NPE on server start if cuba.automaticDatabaseUpdate=true and there are spaces in the server installation path.
    22. The unique constraint violation exception occurs when editing attributes in the Entity Log setup tab.
    23. Entity Log registers existing sec$User entities as "created" when some other entities are modified.
    24. Filter expression of the 'OR' group is missing in the resulting logical expression.
    25. Filter displays RowsCount component for TreeTable after switching to FTS mode.
  13. Over 100 other bug fixes and improvements.

Version 6.0.6

  1. The Filter component now supports two new attributes related to Full Text Search functionality: defaultMode and modeSwitchVisible.
  2. The new sortable attribute can be used for disabling sorting of a single table column.
  3. When generating Eclipse project files, app project name prefix is now replaced with the real project name specified in settings.gradle. This helps to avoid names collision when working with several CUBA projects in one Eclipse workspace.
  4. [Reports] Run Reports screen has been improved.
  5. Bug fixes, including:
    1. Unable to use full-text search in Filter component if the view in the datasource includes collection properties or references to the same entity.
    2. Error in the Users screen while trying to reset a password.
    3. Table column with link="true" does not work
    4. Error on uploading/downloading files without extensions.
    5. QueryTransformerAstBased makes wrong copy of "where" clause with subquery if a "where" clause already exists in the transformed query.
    6. A custom datatype can accidentally override default datatype with the same javaClass.
    7. cuba.uniqueConstraintViolationPattern application property does not take effect.
    8. [Reports] The order of parameters in the report editor is not changed when pressing the Up and Down buttons.

Version 6.0.4

  1. Incomplete French localization has been moved from the platform artifacts to the translations repository on GitHub.
  2. The new cuba.cluster.stateTransferTimeout application property allows you to set the timeout for receiving state when joining the cluster on server startup.
  3. Fixed bug that makes a newly created filter available to all users.
  4. Fixed bugs in dynamic attributes.
  5. Fixed default login page in portal.
  6. [Reports] Fixed bugs in report parameters.
  7. [Charts and Maps] Support for polygon click events.
  8. [Charts and Maps] Fixed chart loaders and XSD.

Version 6.0.2

This is the first public release of platform version 6.0. All significant changes from version 5.6 are listed below.

Breaking changes

  1. Java 8 is required to build and run applications.
  2. JPA implementation has been changed to EclipseLink.
  3. An attempt to get or set a value for a not loaded attribute (not included into a view) raises an exception. You can check whether the attribute was loaded using the PersistenceHelper.isLoaded() method.
  4. EntityManager.fetch() method is deprecated and does nothing. ViewProperty.isLazy() is always false and deprecated. All attributes defined in a view are always loaded. You can specify a method of loading - see FetchMode explanation in the Improvements section.
  5. ORM is unable to save two objects with circular references in one transaction automatically. Implement custom saving logic.
  6. If you have a service that returns an entity after merging, use EntityManager.merge(entity, view) to ensure all required attributes of the merged instance are loaded and available to the calling code.
  7. DataManager does not support queries for single attributes and aggregates like
    select u.group from sec$User u
    or
    select count(u) from sec$User u
    For getting count, use the new DataManager.getCount() method.
  8. Removed the ability to load entities without applying security constraints:
  9. Attribute permissions are checked on Middleware by default. Denied attributes are returned to the client as nulls, read-only attributes are not saved.
    To turn off this behaviour, use the cuba.entityAttributePermissionChecking application property.
  10. The setVersion() method has been added to the Versioned interface. Add obvious implementation to the entities that implement Versioned but do not extend StandardEntity.
  11. Removed deprecated and unused code:
  12. Removed generics from return types in:
  13. A type parameter has been added for ListComponent and LoadContext.
  14. BaseAction does not implement CollectionDatasourceListener anymore. For correct work of ItemTrackingAction just add it to an ActionHolder component (Table/Tree)
  15. IFrame has been renamed to Frame both in XML and in Java code.
  16. DbTypeConverter methods do not throw SQLException.
  17. Logging implementation has been changed to Logback.
    Log4j loggers will work thanks to log4j-over-slf4j library, so no application code modification is required.
    log4j.xml configuration file should be replaced with logback.xml, see documentation for details.
    Renamed methods:
    com.haulmont.cuba.desktop.App.getDefaultLog4jConfig() to getDefaultLogConfig()
    CubaTestCase.getTestLog4jConfig() to getTestLogConfig()
  18. ActiveDirectory has been renamed to ExternalAuthentication.
  19. The dataSource Spring bean has been renamed to cubaDataSource.
  20. ext.* properties in build.gradle have been replaced with the closure configuration block. See documentation for details.
  21. Tomcat 8 is required for fast deployment.
  22. Microsoft SQL Server datasource configuration requires validationQuery="select 1" parameter to avoid java.lang.AbstractMethodError exceptions if jTDS JDBC driver is used.
  23. The test infrastructure has been reworked. In tearDown() methods of classes inherited from CubaTestCase, invocation of super.tearDown() must be the last statement.

Improvements and bug fixes

  1. Java 8 language features support.
  2. Added new interfaces to simplify usage of lambda expressions:
    Datasource.ItemChangeListener, Datasource.StateChangeListener, Datasource.StateChangeListener, Datasource.ItemPropertyChangeListener, CollectionDatasource.CollectionChangeListener.
  3. Table's RowsCount component now supports immediate navigation to the last and the first page.
  4. All tables (Table, GroupTable, TreeTable) and Tree now allow null selection by default. All these components allow a user to reset selection by clicking on a row with Ctrl pressed.
  5. The cuba.showIconsForPopupMenuActions application property enables displaying action icons in Table context menu and PopupButton items.
  6. The new mainMsg:// prefix enables using messages from the main message pack in screens XML.
  7. All messages from UI components have been moved to the main message pack. It simplifies localization of common UI elements in the application project.
  8. In default keyboard shortcuts, "Insert" key has been replaced with "\" for easier access from some keyboards.
  9. Datasource.refresh() method for single-value datasource now reloads the entity instance from the database.
  10. JPA 2.1 JPQL features support: ON clause, FUNCTION().
  11. FetchMode enum specifies how to fetch a referenced entity from the database. You can define it for a view property in the fetch attribute. See documentation for details.
  12. Transaction now extends AutoClosable, which enables transaction control in try-with-resources style.
  13. FileStorage improvements:
  14. The buildWar Gradle task now creates a single WAR file by default. See documentation for details.
  15. SQL script delimiter can now be escaped by doubling it. For example, if you want to insert ^[0-9\s]+$, the script should contain ^^[0-9\s]+$.
  16. [FTS] Apache Lucene and related libraries have been upgraded.
    Lucene index structure is changed. Although old index format is still supported, it is recommended to upgrade the index (use the FtsManager.upgrade() JMX bean method).
  17. [FTS] asyncReindexAll() and asyncReindexEntity() methods have been added to the FtsManager JMX bean to enable reindexing of big volumes of data.
  18. [Charts and Maps] AmCharts has been upgraded to version 3.17.1 with the new export plugin.
  19. Over 100 other bug fixes and improvements.

Recommended migration path from 5.6 to 6.0

  1. Run automatic upgrade in Studio by selecting the new version in Project properies > Base projects > Platform version.
  2. Find and replace all occurences of IFrame to Frame in Java code.
  3. Change componentsFactory.createComponent({component}.NAME) to componentsFactory.createComponent({component}.class)
  4. Change componentsFactory.createComponent(BoxLayout.HBOX) to componentsFactory.createComponent(HBoxLayout.class)
  5. Change componentsFactory.createComponent(BoxLayout.VBOX) to componentsFactory.createComponent(VBoxLayout.class)
  6. Cast results of openWindow() to specific window classes.
  7. Cast results of WebComponentsHelper.unwrap() and DesktopComponentsHelper.unwrap() to specific component classes.
  8. Parameterize tables and trees:
    TreeTable<MyEntity> myentitiesTable;
  9. Parameterize LoadContext: LoadContext<MyEntity> loadContext = new LoadContext<>(MyEntity.class);
  10. Remove brackets around list parameter in JPQL queries: c.id in (:ids) should become c.id in :ids
  11. Remove old Tomcat installation in build directory - it will be replaced by the new Tomcat 8 on restart.
  12. Run update database scripts either in Studio by executing Run > Update database, or in command line by executing updateDb Gradle task.