Updates since 3.3 Beta
This page lists the changes since 3.3.0-BETA, and explains any changes required to migrate from 3.3.0-BETA to the stated version of Atoti Limits.
warning
Please note that Atoti Server versions 5.9 and 5.10 are now out-of-support. Therefore, we no longer support connections to servers of these versions starting with this release of Atoti Limits.
Changes since 3.3.0-beta
Added
Issue Key | Details |
---|---|
LIM-1002 | Added Liquibase changesets to facilitate database migrations. |
LIM-1094 | Added the maxScopeMembersQueryResult setting to retrieve more members before having to resort to a search. |
LIM-1149 | Added a preValidation method to the IValidator interface. |
LIM-1173 | ID’s are now required fields in the limit_structures.csv and limit_approve.csv files. |
LIM-1196 | Limit files can now be previewed in a table before uploading. Any error when uploading will be shown in the table. |
LIM-1209 | Upgraded Atoti Server to 6.0.14-sb3. |
LIM-1210 | Real-time updates can now be disabled/enabled in the UI. |
LIM-1215 | Column index is now reported for validation errors. |
LIM-1236 | Added a new limits-migrations module for migrating CSV files. See CSV migrations to 3.3.0. |
LIM-1239 | Atoti Limits now sends the business server’s asOfDate dimension in the limits /settings endpoint. |
Changed
Issue Key | Details |
---|---|
BAS-1879 | Renamed KpiAlertTask and LimitAlertTask to LimitStructureEvaluationTask and LimitEvaluationTask respectively. |
LIM-1142 | Moved the default cube configuration classes into the limits-activeviam module. Added beans to allow clients to override the cube configuration. See Custom Cube Configuration |
LIM-1146 | Replaced IAlertTaskManager with new interfaces to separate evaluation and scheduling logic. See Adding Custom Evaluation Logic for more information. |
LIM-1150 | Refactored the exceptions thrown in DefaultLimitTuplePublisher to be handled by the IValidationErrorHandler . |
LIM-1171 | Upgraded the common-dependencies-bom and common-parent-pom versions to 2.0.1. This bumps Spring Boot to version 3.2.4, inheriting bug fixes and improvements. |
LIM-1186 | Improved performance and UX when creating limits. Nodes from the scope tree will now be lazy-loaded when a scope is being selected. |
LIM-1195 | Updated default validation behavior to be non-blocking for limits loaded through the DLC. Loading through REST (i.e. file upload) is still an atomic operation. |
LIM-1197 | Moved REST constants to a dedicated LimitsRestServiceConstants class. |
LIM-1198 | Moved datastore constants to a dedicated LimitsDatastoreConstants class. |
LIM-1208 | Expanded support for reporting line numbers in the default validators. |
LIM-1218 | Improved UX for the Create Limit Structure button on the Limit Structure screen. |
LIM-1240 | The availableApplicationServers setting has changed from a record to an array of server keys. AsOfDate settings that used to sit under this property are now supplied by the server. |
Removed
Issue Key | Details |
---|---|
LIM-499 | Removed all *.properties files from the Atoti Limits. Removed CsvDataExtractionEngineConfig from the default configuration. |
Fixed
Issue Key | Details |
---|---|
LIM-570 | Fixed a performance issue on startup when reloading workflows. |
LIM-1138 | Fixed a data quality issue by preventing multiple limit structures with the same name to be created. |
LIM-1223 | Made the order of incidents in the status screen consistent between realtime-enabled and disabled modes. |
LIM-1226 | Real time incidents can now be filtered by multiple dates. |
LIM-1244 | Fixed issue where incidents could be reviewed multiple times. |
LIM-1248 | On evaluation, incident CSV files will now only be written in the CSV data load mode. |
LIM-1253 | Fixed an issue that prevented Atoti Limits from starting in persistent mode due to null workflow statuses. |
LIM-1256 | The Inventory now generates limit structure creation templates according to server keys derived by checking the names coming from the server settings endpoint against server keys supplied to LimitsModuleSettings.availableApplicationServerKeys . |
For Removal
Issue Key | Details |
---|---|
LIM-1230 | Manual configuration has been deprecated in favor of auto-configuration and will be removed in the next version of Atoti Limits. |
Fixed issues introduced in 3.3.0-BETA
Issue Key | Details |
---|---|
LIM-1190 | Fixed bug where copying and saving a limit structure cleared the limit structure form. |
Migrate to 3.3.0 from Beta
Upgrading from version 3.3.0-beta, see Atoti Limits 3.3 Release Notes.
Atoti Limits uses Atoti Server 6.0.14-sb3 and Atoti UI 5.1.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.
Summary
- Validation API Improvements : Additional methods have been added to
IValidator
to make it easier to interact with the validators. For more details, see IValidator changes. - Modified Default Validation Behavior : The default validation behavior has been updated to be non-blocking for limits loaded through the DLC. Loading through REST (i.e. file upload) is still an atomic operation.
- Custom Evaluations : The
IEvaluationService
andIEvaluationTaskManager
interfaces have been introduced to facilitate custom evaluation logic. See Adding Custom Evaluation Logic for more information. - Migration scripts : We have added a new
limits-migrations
module for migrating CSV files. See CSV and properties migrations to 3.3.0.
Breaking Changes
Managed Object ID behavior
The behavior has changed for how IDs are used in Atoti Limits. Previously, for each structure,
limit, or incident, a *key
field was generated using a hash of that object’s key fields. Now we expect
the following:
- when the user creates a structure/limit/incident using the DLC or the UI file upload, we expect the ID to be populated in the file.
- when the user creates a structure/limit/incident, we don’t expect the ID to be
populated and instead we will auto-generate it on the server using implementations of
IIdentityGenerator
.
This behavior was introduced to simplify the user experience, to enhance data integrity, and to prevent potential hash-collisions.
Starter customizations
If you previously modified the data loading or cube configuration code in the limits-starter
module then you will have to migrate that code. Please see the dev extensions section for how to do so.
Split of IAlertTaskManager
The IAlertTaskManager
interface has been replaced with two interfaces to separate evaluation logic from scheduling logic. If you have a custom implementation
of IAlertTaskManager
, you will need to replace it with implementations of one or both of IEvaluationService
and IEvaluationTaskManager
. For more information on the
new interfaces and how to implement them, see Adding Custom Evaluation Logic.
Entity field type changes
The following entity fields have been converted from arrays to singular values:
Entity | Field | Old Type | New Type |
---|---|---|---|
LimitEntity | limitValue | Double Array | Double |
LimitsWorkflowProcessInstanceEntity | limitValues | Double Array | Double |
LimitsWorkflowProcessInstanceEntity | scopeArray | String Array | String |
If you persist these in a database then the column type should be updated accordingly.
*ActivePivot*
classes renamed to *AtotiServer*
Classes that follow the naming convention *ActivePivot*
have been renamed to match *AtotiServer*
.
If you have any custom code that references these classes, you will need to update them.
UI Settings change
The availableApplicationServers
setting has changed from a record to an array of server keys. AsOfDate settings that used to sit under this property are now supplied by the server, and therefore no longer need to be provided in the UI settings.
CSV and properties migrations to 3.3.0
The migration script migrates the limit_structures.csv
files and limits.csv
files from Atoti Limits 3.2.0 to 3.3.0. For details on how it works, see the 3.3.0 Migration Notes.
Input file formats
No changes.
Configuration files
The following *.properties
property files have been deleted. Properties still in use have been moved to @ConfigurationProperties
classes or application.yml:
env-default.properties
jwt.properties
limits.properties
limits_test.properties
tracing.properties
Files Modified
application.yml
New properties:
Property Name | Comment | Value |
---|---|---|
spring.liquibase.enabled | True if Liquibase database schema migrations listed in limits-starter/src/main/resources/liquibase/master-changelog.yaml should be applied on startup. |
false |
spring.liquibase.change-log | The location of the changelog file if Liquibase database schema migrations are applied on startup. | classpath:/liquibase/master-changelog.yaml |
Datastores
Modified stores
Modification | Store | Field | Type | Description |
---|---|---|---|---|
Renamed | Limit Structures | Reference ID |
string | Reference ID has been renamed to Structure ID . |
Deleted | Limit Structures | structureKey |
string | structureKey has been deleted. Structure ID will be used instead. |
Renamed | Limits | Reference ID |
string | Reference ID has been renamed to Structure ID . |
Renamed | Limits | parentLimitKey |
string | parentLimitKey has been renamed to Source Limit ID . |
Deleted | Limits | limitKey |
string | limitKey has been deleted. Limit ID will be used instead. |
Deleted | Limits | structureKey |
string | structureKey has been deleted. Structure ID will be used instead. |
Deleted | Limits | Limit Name |
string | The unused Limit Name column has been deleted. |
Renamed | Incidents | incidentKey |
string | incidentKey has been renamed to Incident ID . |
Renamed | Incidents | limitKey |
string | limitKey has been renamed to Limit ID . |
Cube schema
The limitKey
hierarchy has been renamed to limitId
.
Measures
No changes.
Context values
No changes.
Other changes
IValidator
changes
The following methods have been added to the IValidator
interface. If you previously implemented a custom IValidator
class, you will need to update it to include these methods.
If you have not implemented a custom IValidator
class, you do not need to make any changes.
/** Operations to be performed before validation is started. */
void preValidation(Collection<T> objectsToValidate);
/**
* @return true if validation succeeds for the tuple, false otherwise
*/
boolean validateTuple(Object[] tuple, int lineNumber);
/**
* @return objects that have passed validation
*/
List<T> getValidObjects();
/**
* @return objects that have failed validation
*/
List<T> getInvalidObjects();
/**
* Clears the state of the validator, so it is ready to validate a new set of objects.
*
* @param throwException if true, an exception will be thrown if there are validation errors
*/
void reset(boolean throwException);
/**
* @return true if there are validation errors, false otherwise
*/
boolean hasErrors();
The intent behind these changes is to have the validators keep better track of their state. This allows for better separation between validation logic and handling of valid/invalid objects.
getValidObjects
, getInvalidObjects
and hasErrors
allow calling code to access the state of the validator, and reset
is used to clear the state of the validator between validation operations.
Additionally, to pair with the existing postValidation
method, we have added a preValidation
method to the IValidator
interface. This method is called before the validate
/validateAll
methods and can be used to perform any pre-validation checks or operations.
The default implementations of IValidator
included with Atoti Limits have been updated to include an implementation of preValidation
that populates a map of row indexes by ID to help with reporting line numbers for validation errors.
A validateTuple
method has also been added to the IValidator
interface. This method is called for each tuple in a file being validated. This allows for more fine-grained control over the validation process, validating
tuples prior to converting them to objects.
Changes to ILimitsProcessInstanceWorkflowService
You will need to modify the update
method to the new signature which includes the
additional publishTuples
and refreshKpis
parameters.