Migration notes 4.0

This page explains the changes required to migrate to the stated version of the Atoti Limits.

Migrate to 4.0.0-BETA

Upgrading from version 3.3.0, see the Atoti Limits 4.0.0-beta Release Notes.

Atoti Limits is using Atoti Server 6.1.0 and Atoti UI 5.2.x.

For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.

warning

Please note that Atoti Server version 5.11 is now out-of-support. Therefore, we will no longer support connections to servers of this version as of this release of Atoti Limits.

Headline announcement

  • Atoti Server upgrade : Atoti Limits has been upgraded to Atoti Server 6.1.0. For the required changes, see Atoti Server upgrade.
  • Atoti UI upgrade : Atoti UI has been upgraded to version 5.2.0. For the required changes, see the Atoti UI migration guide.
  • Maven Artifact group ID changes: The groupIDs for maven artifacts have been updated from com.activeviam.limits to com.activeviam.solutions.limits to align with other ActiveViam Business Solutions. Please update your groupIDs when importing Atoti Limits artifacts. This change does not affect package names.
  • Improvements to the auto-configuration modules : These improvements will require you to update dependencies and properties.
  • Simplified scopes migration script : We have added an optional script for migrating CSV files to use the simplified scope notation. See CSV migrations to 4.0.0.

Breaking changes

  • Starter changes : Multiple classes have been removed from the starter module. See Starter changes for more details.
  • Removal of DTO suffix : The “DTO” suffix has been removed from Java objects that were not pure data transfer objects. See the full list of changes below.
  • Manual configuration removal : Manual configuration has been removed in favor of auto-configuration.

Atoti Server upgrade

For details on migrating your code to Atoti Server 6.1.0, see the Atoti Server migration notes.

tip

There is a java-api-migration-tool available to help you migrate your code. We highly recommend that you use this tool.

Here are the main changes you need to make to your Atoti Limits code:

Java 21

Update your Java version to Java 21 or later in order to run Atoti Limits.

Atoti Spring Boot Starter changes

Atoti Server now ships with a suite of Spring Boot Starters. These dependencies auto-configure default imports required by Atoti Server, that you may override at runtime.

If you do not use the out-of-the-box limits-starter, import these starter dependencies and remove any explicit import of classes that are now auto-configured. If you do use the out-of-the-box limits-starter, no further changes are required.

The following core classes have been removed in limits-activeviam or limits-starter as they are now inherited from starters:

  • ActivePivotServicesConfig.class
  • ActivePivotWebSocketServicesConfig.class
  • ActivePivotWithDatastoreConfig.class
  • ActivePivotXmlaServletConfig.class
  • ActiveViamRestServicesConfig.class
  • AdminUIResourceServerConfig.class
  • AtotiServerWebMvcConfigurer.class
  • ContentServerWebSocketServicesConfig.class
  • FullAccessBranchPermissionsManagerConfig.class
  • JwtConfig.class
  • LocalI18nConfig.class
  • NoSecurityDatabaseServiceConfig.class
  • TracingConfig.class
Security configuration changes

The upgrade to Atoti Server 6.1.0 includes changes to the security configuration. We expect you to implement your own security, but we provide a sample configuration in the com.activeviam.limits.starter.cfg.security package.

warning

This is not a production grade sample.

For details on how to implement your own security, please see the Atoti Server documentation.

Starter changes

warning

The starter changes are still in progress. For example, we still explicitly import some dependencies used as the default implementation of required beans, meaning that to override them you must mark your implementation as @Primary. This will be fixed for the final release.

Most of the limits-starter module has been moved into limits-activeviam. The goal of these changes is ultimately to improve the developer experience when migrating, particularly in the context of client customizations. Please see the Recommended custom project structure for more details on how to structure your project.

To this end, we have made the following changes:

  • We have added a new LimitsCoreAutoConfiguration class in limits-activeviam. This is a base configuration class for the imports required by Atoti Limits and is auto-configured on startup.
    • Most of LimitsAppConfig has been moved to LimitsCoreAutoConfiguration.
  • LimitsApplicationConfigurationPropertiesConfig has been removed and the properties have been moved into the @EnableConfigurationProperties annotation in LimitsCoreAutoConfiguration.
  • We have added a new LimitsRestServicesAutoConfiguration class to import all the REST services required by Atoti Limits.
  • LimitsProcessExceptionHandler has been removed and the exception handlers it contained have been merged into RestExceptionHandlerControllerAdvice.

We have converted many of the *Config classes explicitly imported in LimitsAppConfig to *AutoConfiguration classes and moved them to the com.activeviam.limits.autoconfigure package in limits-activeviam. These new classes will be automatically registered via Spring Auto-configuration, so there is no more need to explicitly import them. The beans that were exposed by these classes are now annotated with @ConditionalOnMissingBean, so you can define your own implementations of the interfaces to override the default beans. The following classes have been affected by this change:

Old *Config class New *AutoConfiguration class Description
DefaultManagedObjectIdentityGeneratorConfig ManagedObjectIdentityGeneratorAutoConfiguration Configuration for the ID generators.
EvaluationServiceConfig LimitsEvaluationServicesAutoConfiguration Configuration for the services used when evaluating limits.
LimitsContentConfig ContentServiceAutoConfiguration Configurations for the content service.
LimitsDatastoreConfig LimitsDatastoreAutoConfiguration Configuration for the datastores.
LimitsValidationConfig LimitsValidationAutoConfiguration Configuration for the validation API.
LimitsWorkflowConfig LimitsWorkflowAutoConfiguration Configurations for the workflow.
PivotConfig LimitsManagerAutoConfiguration Configuration for the services used when evaluating limits.

The following classes have been moved from LimitsAppConfig to LimitsCoreAutoConfiguration:

  • LimitsActivitiAuthenticationManager,
  • LimitsDataProperties
  • LimitsDimensionsConfig
  • LimitsCubeConfig
  • LimitsAsOfDateLoader
  • DataLoadControllerConfig
  • CSVSourceConfig
  • LimitsProcessEngineMailConfig
  • ConnectedAtotiServersManager (previously RemoteAtotiServersProperties)
  • LimitsManagerConfig (previously PivotConfig)

The following classes have been moved from LimitsAppConfig to the new LimitsRestServicesAutoConfiguration class:

  • AutoConfigRestService
  • DataLoadControllerRestServiceConfig
  • IncidentRestController
  • IncidentsSseController
  • KPICrudRestService
  • LimitsAsOfDateRestService
  • LimitsDefinitionCrudRestService
  • LimitsEvaluationRestService
  • LimitsServerSettingsRestController
  • RemoteCubeRestService
  • RestExceptionHandlerControllerAdvice
  • ScopeRetrievalRestService
  • UploadCsv

The following classes have been moved from LimitsAppConfig to the new LimitsDatastoreAutoConfiguration class:

  • AtotiServerWithDatastoreConfig
  • DatastoreConfiguratorSetup
  • LimitsDatastoreService
  • LimitsDatastoreVersionService
  • LimitsDefinitionDatastoreConfig
  • LimitsProcessInstanceDatastoreConfig
  • LimitsSchema
  • ScopeTupleGenerator
  • TuplePublisherConfig

The following classes have been moved from LimitsAppConfig to the new LimitsCrudServicesAutoConfiguration class:

  • IncidentCrudService
  • KpiCrudService
  • LimitsCrudService
  • LimitsRetrievalService

The following classes have been moved from LimitsAppConfig to the new LimitsEvaluationServicesAutoConfiguration class:

  • DefaultEvaluationService
  • DefaultEvaluationTaskManager
  • EvaluationErrorHandler

The following classes have been moved from LimitsAppConfig to the new LimitsJpaAutoConfiguration class:

  • LimitsJpaConfig
  • LimitsProcessJpaConfig

The following classes have been moved from LimitsAppConfig to the new LimitsPersistenceServicesAutoConfiguration class:

  • DefaultLimitsAppCrudService
  • DefaultLimitsAppDatastoreCrudService

The following classes have been renamed:

Old class name New class name
PivotManager LimitsManagerDescriptionConfig

Improvements to the auto-configuration modules

Although we do not intend for these modules to be extended, we have made improvements to the auto-configuration modules that are breaking.

You won’t need to update code, but you’ll need to update dependencies and properties. For more information see the connected server section.

Changes requiring action
Breaking change Action required
The limits-auto-config-ap<ATOTI_SERVER_VERSION_PREFIX> artifacts have been renamed to limits-auto-config-<ATOTI_SERVER_VERSION_PREFIX>. Update your dependency import.
The limits-auto-config modules are now true auto-configuration modules, meaning you now only have to import the dependency, you do not have to import any classes. Remove the previous import of LimitsAutoConfig.
The old autoconfiguration properties have been replaced with new properties. Update your properties accordingly.

note

Only four properties are marked as REQUIRED.

Changes not requiring action
  • LimitsAutoConfig has been renamed to LimitsConnector.
  • RemoteAtotiServersProperties was used in the past to store the connected servers in Atoti Limits and as a configuration source for the manual configuration. As we have removed the manual configuration, it has been renamed to ConnectedAtotiServersManager.
  • The com.activeviam.limits.autconfig.* packages have been renamed to com.activeviam.limits.autoconfigure.*.
  • The com.activeviam.limits.integration.common.* packages have been renamed to com.activeviam.limits.autoconfigure.common.*.
  • The limits-auto-config-ap<ATOTI_SERVER_VERSION_PREFIX> artifacts have been renamed to limits-auto-config-<ATOTI_SERVER_VERSION_PREFIX>.
  • The lookup-post-processor-ap<ATOTI_SERVER_VERSION_PREFIX> artifacts have been renamed to lookup-post-processor-<ATOTI_SERVER_VERSION_PREFIX>.

Artifact changes

This release includes artifacts for connecting with instances of Atoti Server on version 6.0.x using Java 11, in addition to the already supported 6.0.x-sb3 version using Java 17.

The artifact changes are as follows:

Old Name New Name Comment
lookup-post-processor-ap60 lookup-post-processor-60-sb3 The old artifact has been renamed and requires Java 17.
N/A lookup-post-processor-60 This new artifact is compatible with Java 11.
limits-auto-config-ap60 limits-auto-config-60-sb3 The old artifact has been renamed and requires Java 17.
N/A limits-auto-config-60 This new artifact is compatible with Java 11.
limits-atoti-server-60 limits-atoti-server-60-sb3 The old artifact has been renamed and requires Java 17.
N/A limits-atoti-server-60 This new artifact is compatible with Java 11.

Removal of DTO suffix

We have removed the “DTO” suffix from classes that were not pure data transfer objects. Please update any references to these classes in your custom code:

  • LimitDTO.java
  • LimitStructureDTO.java
  • IncidentDTO.java
  • LimitsProcessInstanceDTO.java
  • HistoricalClassDifferenceDTO.java
  • HistoricalFieldDifferenceDTO.java
  • CalculatedMeasureDTO.java
  • CalculatedMeasuresDTO.java
  • ContentServerElementDTO.java
  • ContentServerEntryDTO.java

CSV migrations to 4.0.0

The migration script migrates the limits.csv files from Atoti Limits 3.3.0 to 4.0.0 by converting the scope value to the new simplified notation.

warning

Migrating the limits.csv files from Atoti Limits 3.3.0 to 4.0.0 is NOT a required migration. Scopes in the old format will still work in Atoti Limits 4.0.0.

How it works

This script expects the following program arguments (in this order):

  1. The target version of Atoti Limits (should be 4.0.0).
  2. The source limits input file path.
  3. The target limits output file path.
Steps
  1. Run mvn clean install on limits-migrations.
  2. Run java -jar path/to/limits-migrator-tool-exec.jar 4.0 path/to/source/limits.csv path/to/target/limits.csv path/to/properties/folder.
    Your files are now converted to the new format and can be found in the target directory.

    note

    The output directory must already exist, but the file will be created.

Changes to ILimitsRetrievalService

The ILimitsRetrievalService interface has been updated and the default implementation, LimitsRetrievalService, has been significantly changed to improve performance. If you have implemented a custom version of this service, you will need to make the following method changes:

Old signature New Signature Note
ILimitsDatastoreVersionService getLimitsDatastoreVersionService(); N/A This method has been removed.
IDatabaseVersion getDatastoreVersion(LimitsQueryPayload limitsQueryPayload); IDatabaseVersion getDatastoreVersion(String branchName); This method has been modified to accept a string argument specifying the name of the branch on which to execute the query.
Integer getPendingApprovalsForLimitStructure(String limitStructureId); Map<String, Integer> getPendingApprovalsForLimitStructure(Set<String> limitStructureIds); This method has been updated to accept a set of limit structure IDs and return a map of those IDs to the number of pending approvals. This improves performance for UI requests on the Inventory screen.

Removing manual configuration

The manual configuration has been removed from Atoti Limits. Please see the removed properties table for the properties you should remove.

Validator API changes

Several API changes have been made to the IValidator interface:

  • The ILimitValidator, ILimitStructureValidator, and IIncidentValidator interfaces have been moved to the com.activeviam.limits.model.validation.function.intf package.
  • The getInvalidObjects() method has been removed since it was not used.
  • The reset(boolean throwException) method has been updated to an empty default implementation and is overridden by the abstract class, AValidator. To override the reset method, see the custom validator page for more information.

Removing Between and Not Between KPI types

The Between and Not Between Kpi types have been removed as valid KPI types since they were never supported by Atoti Limits.

Input file formats

No changes.

Configuration

Configuration properties

Files Modified
limits-integration-common module

All properties have been replaced. Please see the new properties for the updated list.

limits-activeviam module
Properties added
limits-activeviam module
Property Default value Description
limits.cube.format.kpi-goal #,##0.# Format value for KPI Goal values.
limits.cube.kpi-filters-enabled true True if cube filters are enabled for Limits KPIs, false otherwise.
limits.data-access-control.role-permissions Defines the permissions available to each role.
Properties modified
limits-activeviam module
Property Name Comment New Value Old Value
limits.limit-workflows.* Added token to root. limits.workflow.limit-workflows.* limits.limit-workflows.*
limits.exception-workflows.* Added token to root. limits.workflow.exception-workflows.* limits.exception-workflows.*
limits.workflow-rules.* Added token to root. limits.workflow.workflow-rules.* limits.workflow-rules.*
limits.roles.* Added token to root. limits.workflow.roles.* limits.roles.*
limits-integration-common module
Property Name Comment New Value Old Value
limits.autoconfiguraton.limits-base-url The base URL of the Limits server. limits.autoconfiguraton.limits-base-url
limits.autoconfiguraton.atoti-base-url The base URL of the connected Atoti Server. limits.autoconfiguraton.limits-base-url limits.autoconfiguraton.root-url
limits-atoti-server-61
Properties deleted
Property Name Comment
content.* All properties for the Atoti Limits content server have been removed as it is not used.
limits.connected-server.* These properties used for manual configuration have been removed.
limits.content.server.* These properties used for manual configuration have been removed.
limits.rest-url This property used for manual configuration has been removed.
limits.auth This property used for manual configuration has been removed.

Property files

No changes.

Datastores

No changes.

Cube schema

No changes.

Measures

No changes.

Other changes

ROLE_LIMITS is no longer a required role

The ROLE_LIMITS role is no longer required for all users of Atoti Limits. This role has been repurposed as the full-access role in the permission roles to maintain backward compatibility. Users with this role will continue having full access to all actions in the UI as they previously did.

note

ROLE_LIMITS is still used to tag KPIs created by the module, but user access to the KPIs is controlled by the ROLE_USER role, which is still required.