Improvements, including:
FieldGroup
now supports AUTO for fields width.Bug fixes, including:
BackgroundTask
timer does not send events to server in BackgroundWorkProgressWindow
.ComponentsHelper.getComponent()
method doesn't search components in all inner containers.StackOverflowError
is possible when changing parent in Access Group.Improvements and bug fixes, including:
cuba.email.smtpSslEnabled
application property enables SSL connection to SMTP servers.CubaWarBuilding
task does not add widgetset
folder to WAR file if web-toolkit
module is used.OnDeleteInverse=UNLINK
.BigDecimal
datatype are formatted with a wrong locale if it is set via user properties.cuba.web.ExternalAuthentication
property from cuba-web-app.properties
.LookupField
does not conform to order of items in enum.GanttChart
: GraphItemClickListener
does not work; and others.Improvements and bug fixes, including:
CubaWarBuilding
task:
webXmlPath
is the path to single-WAR web.xml
relative to the project root. Use it instead of absolute path in the deprecated webXml
property.coreContextXmlPath
is the path to context.xml
of the core module relative to the project root. Use it instead of absolute path in the deprecated coreContextXml
property.UUID
type are not converted to valid strings without dashes in JPQL queries for MySQL.Embedded
component does not show images from FileDataProvider
.This is the first public release of platform version 6.1. All significant changes from version 6.0 are listed below.
build.gradle
, for example:
maven { url 'https://repo.cuba-platform.com/content/groups/premium' credentials { username(System.getProperty('CUBA_PREMIUM_USER')) password(System.getProperty('CUBA_PREMIUM_PASSWORD')) }
cuba.reporting.* => reporting.* cuba.fts.* => fts.* cuba.charts.* => charts.* cuba.amazon.s3.* => cuba.amazonS3.* cuba.security.EntityLog.enabled => cuba.entityLog.enabled cuba.web.ExternalAuthentication => cuba.web.externalAuthentication cuba.clusterMessageSendingThreadPoolSize => cuba.cluster.messageSendingThreadPoolSize cuba.reporting.entityTreeModelMaxDeep => reporting.entityTreeModelMaxDepth cuba.client.maxUploadSizeMb => cuba.maxUploadSizeMb cuba.systemInfoScriptsEnabled => cuba.gui.systemInfoScriptsEnabled cuba.manualScreenSettingsSaving => cuba.gui.manualScreenSettingsSaving cuba.showIconsForPopupMenuActions => cuba.gui.showIconsForPopupMenuActions cuba.gui.tableInsertShortcut => cuba.gui.tableShortcut.insert cuba.gui.tableAddShortcut => cuba.gui.tableShortcut.add cuba.gui.tableRemoveShortcut => cuba.gui.tableShortcut.remove cuba.gui.tableEditShortcut => cuba.gui.tableShortcut.edit cuba.reporting.parameterPrototype.queryLimit => reporting.parameterPrototypeQueryLimit
cuba.schedulingActive
, fts.*
, charts.*
, cuba.amazonS3.*
. You don't have to change anything in your existing projects, because your values set in app.properties
files have priority over database-stored values.
app.properties
files can be overridden by Java system properties with the same name. For example, this server command line option will ensure that automatic database update is on, regardless of what is set in app.properties
:
-Dcuba.automaticDatabaseUpdate=true
web-dispatcher-spring.xml
:
<context:component-scan base-package="com.haulmont.cuba.restapi"/>If you use classes from the
com.haulmont.cuba.portal.restapi
package, change imports to com.haulmont.cuba.restapi
. For example:
import com.haulmont.cuba.restapi.Authentication;
DataManager
now checks user permissions only on the client tier. If you want to check permissions on middleware, you have the following options:
DataServiceBean
does this):
dataManager.secure().load(context)
boolean saved = AppContext.getSecurityContext().isAuthorizationRequired(); AppContext.getSecurityContext().setAuthorizationRequired(true); try { // all calls to DataManagers will apply security restrictions } finally { AppContext.getSecurityContext().setAuthorizationRequired(saved); }Please note that
DataManager
obtained inside EntityListener
s does not checks permissions even if earlier in the call chain there was a secure DataManager
invocation by using this or previous method. So if you want a secure DataManager
inside EntityListener
s, always use dataManager.secure()
or wrap your code.
cuba.dataManagerChecksSecurityOnMiddleware
application property for the whole application.
cuba.serialization.impl = com.haulmont.cuba.core.sys.serialization.StandardSerialization
AbstractFrame.getDialogParams()
and DialogParams
are deprecated. Recommended methods:
openEditor(entity, OpenType.DIALOG.width(480).height(320));
@Override public void init(Map<String, Object> params) { getDialogOptions().setWidth(480).setHeight(320); }The same in XML descriptor:
<dsContext/> <dialogMode width="480" height="320"/> <layout/>
@Override public void init(Map<String, Object> params) { getDialogOptions().setForceDialog(true); }The same in XML descriptor:
<dsContext/> <dialogMode forceDialog="true"/> <layout/>
OptionsList
visual component presents a list of options as a vertical scrollable list.Accordion
visual component is a tab sheet with vertical placement of tabs.LookupField
and all other implementors of the OptionsField
interface can take the list of options from an enum, even if not connected to an entity property. See the OptionsField.setOptionsEnum()
method.Table
attributes: columnHeaderVisible
, showSelection
.reversePosition
attribute of SplitPanel
allows you to specify a position from the opposite side.CloseWithCommitListener
is notified when the screen is closed with commit action.Persistence.callInTransaction()
and Persistence.runInTransaction()
methods can be used to run a piece of code as a lambda-expression in a new transaction with or without return value.LockManagerAPI.lock(Entity)
, LockManagerAPI.unlock(Entity)
methods.CustomCollectionDatasource
, CustomGroupDatasource
and CustomHierarchicalDatasource
base classes should be used for creating custom datasource implementations.KeyValueEntity
can be used to show arbitrary sets of named values in CUBA Generic UI. See also KeyValueCollectionDatasourceImpl
, KeyValueGroupDatasourceImpl
and KeyValueHierarchicalDatasourceImpl
.CubaJelasticDeploy
Gradle task can be used for deployment to the Jelastic cloud.uuid-ossp
extension is not used for PostgreSQL, so superuser privileges are not needed anymore when creating the database.connectionParams
property. The value of this property is added to the database URL as is. For example:
task createDb(dependsOn: assembleDbScripts, description: 'Creates local database', type: CubaDbCreation) { dbms = 'mssql' host = 'localhost' dbName = 'demo' connectionParams = ';instance=myinstance'
zipProject
Gradle task is added to application projects by default. So now you can quickly make an archive of a demo project to attach to a topic on support forum or send by email.EntityImportExportService
interface.query
method can be invoked through HTTP POST too.logback.xml
file to your server (for example, when deploying to the cloud), the console output will contain the reasonable level of details.DataProvider
and DataItem
interfaces have been refactored.SimpleDataItem
class.updateDb
Gradle task.