Platform
Breaking Changes
-
Due to this enhancement,
build.gradle
of an existing project must be changed in the part where the entities enhancing is declared. Instead of usingCubaEnhancing
task like this:task enhance(type: CubaEnhancing) { persistenceConfig = 'custom-persistence.xml' // optional } task testEnhance(type: CubaTestEnhancing) { persistenceConfig = 'test-persistence.xml' }
use the following DSL:
entitiesEnhancing { main { enabled = true persistenceConfig = 'custom-persistence.xml' // optional } test { enabled = true persistenceConfig = 'test-persistence.xml' } }
If you are using Studio, the migration will be done automatically.
-
While implementing the new theme, we had to refactor the standard login window. If you have extended the login window in your project, you should adapt your code to be compatible with the new base implementation. See changes and example migration for details.
-
Due to this enhancement your code may not compile if you have created a custom
DataSupplier
and implemented thecommit()
method. In order to fix the code, change the method return type toEntitySet
. -
REST API v1 is now disabled by default (see #1027). To enable it in your project, add the following line to the
web-dispatcher-spring.xml
orportal-dispatcher-spring.xml
:<context:component-scan base-package="com.haulmont.cuba.restapi"/>
-
If
anonymous
session cannot be loaded due to a database connection problem or other error, server does not start at all. See #1080. -
Java system properties are now cached at server startup, so if your application relies on ability to override an app property with a system property defined at runtime, you have to reset the cache using the
clearSystemPropertiesCache()
methods of theCachingFacadeMBean
JMX beans available in thecore
andweb
modules. See #1222. -
Non-persistent entities are now sent to the middleware when created or updated. If you are using standard browser and editor screens for a non-persistent entity, you will get the "Access denied" exception on attempt to edit an entity displayed in the browser screen. To fix this, define a custom
DataSupplier
for the editor screen, for example:package com.company.sample.web; import com.haulmont.chile.core.model.MetaClass; import com.haulmont.cuba.core.entity.Entity; import com.haulmont.cuba.core.global.View; import com.haulmont.cuba.gui.data.impl.GenericDataSupplier; import javax.annotation.Nullable; public class NonPersistentDataSupplier extends GenericDataSupplier { @Override public <E extends Entity> E reload(E entity, View view, @Nullable MetaClass metaClass, boolean loadDynamicAttributes) { return entity; } }
<window xmlns="http://schemas.haulmont.com/cuba/window.xsd" class="com.company.sample.web.SomeEntityEdit" ... dataSupplier="com.company.sample.web.NonPersistentDataSupplier"> <dsContext> ...
-
Since version 6.10.11 cookies which set programmatically with
AppCookies
arehttpOnly
by default. It potentially can break some client-side code accessing cookies.
Generic UI
-
We have created a new visual theme - Hover, which can be used as is or customized in your applications. See details in the issue. Please pay attention to the breaking changes in the standard login window, explained above.
-
Now it is possible to exclude properties from the
Filter
component recursively down to the object graph. See the excludeRecursively property.
Polymer UI
We replaced paper-
form elements which implement Material Design with more customizable Vaadin components. By default the app imports components based on Lumo theme. In order to use Material theme change <link rel="import" href="lumo-imports.html">
to <link rel="import" href="material-imports.html">
in app-shell.html
REST API
-
A certain service method can be marked as available without authentication even when the anonymous access to the whole REST API is disabled. See the
anonymousAllowed
attribute of a service configuration. -
Optimistic locking based on the
version
attribute can be enabled by the cuba.rest.optimisticLockingEnabled application property.
Charts Addon
-
Pivot Table data can now be exported and downloaded in XLS and JSON formats using PivotTableExtension.
-
The new ShowPivotAction allows users to quickly export data from Table, Tree, or DataGrid to a pivot table.
Full-Text Search Addon
-
Search process and visualization of results have been changed considerably for better performance and accuracy. Now the results are checked for row-level security in batches. The search results screen has pages, which guarantees sequential loading of all available results. See #26 for details.
Reporting Addon
-
Reports can be generated and downloaded via REST API.
-
The new Copy button allows users to copy report templates. See #70 for details.
-
Ports available for OpenOffice can be set in the reporting.openoffice.ports application property.
Miscellaneous
-
Now CUBA projects can be imported as Gradle projects into Intellij IDEA, so the default Intellij IDEA Gradle plugin can be used. See above for migration guidelines and #48 and #12 for more details about the implementation.
-
A new experimental API has been introduced in this release:
EntityChangedEvent
andTransactionalDataManager
.EntityChangedEvent
is a Spring’s ApplicationEvent of the middle tier which is sent when an entity instance is saved to the database. The event can be handled both inside the transaction and after its completion (using@TransactionalEventListener
). The event is sent only for entities annotated with@PublishEntityChangedEvents
.EntityChangedEvent
does not contain the changed object but only its id. Also, thegetOldValue(attributeName)
method returns ids of references instead of objects. This is done intentionally to make the developer reload objects with required view, dynamic attributes and other parameters. This also allows us to keep the security and other logic just in one place - in the loading mechanism, and saves from potential bugs and inconsistencies.TransactionalDataManager
mimics theDataManager
interface but can join to an existing transaction. It has the following properties:-
If there is an active transaction,
TransactionalDataManager
joins it, otherwise it creates and commits a transaction same asDataManager
. -
It returns entities in detached state, so no automatic saving of changes on transaction commit is performed. Lazy loading also doesn’t work, so a developer has to load entities with appropriate views.
-
No persistence context, no implicit flushes.
-
It applies row-level security, works with dynamic attributes and cross-datastore references as expected.
Please be informed that these features are not stable yet and we can change the API and implementation in the near future. See some additional information here.
-
-
Standard JPA lifecycle callbacks (
@PrePersist
,@PreUpdate
,@PostLoad
, etc.) can be used for simple changes of entity attributes before saving and after loading. -
The
create()
andgetReference()
methods have been added to the DataManager interface. -
The new @IdSequence annotation can be used to specify an existing database sequence name for generating identifiers of entities inherited from
BaseLongIdEntity
orBaseIntegerIdEntity
.
Updated Dependencies
com.google.code.gson/gson = 2.8.5 com.haulmont.thirdparty/eclipselink = 2.6.2.cuba24 com.vaadin = 7.7.14.cuba.0 commons-codec/commons-codec = 1.11 commons-io/commons-io = 2.6 io.swagger/swagger-models = 1.5.21 org.apache.commons/commons-collections4 = 4.2 org.apache.commons/commons-compress = 1.18 org.apache.commons/commons-dbcp2 = 2.5.0 org.apache.commons/commons-lang3 = 3.7 org.apache.commons/commons-pool2 = 2.6.0 org.apache.httpcomponents/fluent-hc = 4.5.6 org.apache.httpcomponents/httpclient = 4.5.6 org.apache.httpcomponents/httpcore = 4.4.10 org.apache.httpcomponents/httpmime = 4.5.6 org.apache.tika/tika-parsers = 1.18 org.apache.tomcat/tomcat = 8.5.33 org.aspectj/aspectjrt = 1.9.1 org.aspectj/aspectjweaver = 1.9.1 org.codehaus.groovy/groovy-all = 2.4.15 org.freemarker/freemarker = 2.3.28 org.javassist/javassist = 3.23.1-GA org.jgroups/jgroups = 3.6.16.Final org.json/json = 20180130 org.jsoup/jsoup = 1.11.3 org.mybatis/mybatis = 3.2.8 org.mybatis/mybatis-spring = 1.2.5 org.springframework = 4.3.18.RELEASE org.springframework.security = 4.2.7.RELEASE org.springframework.security.oauth/spring-security-oauth2 = 2.1.2.RELEASE