Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt

Use this file to discover all available pages before exploring further.

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

Migrate to 6.0.8

Atoti Market Risk uses Atoti Server 6.1.19 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.

Migration Helper REST endpoint

The new MRMigrationHelperRestController is automatically registered when running in in-memory mode via InMemoryDatastoreExtractionMigratorConfig (com.activeviam.mr.migration.config), which is imported by the default MarketRiskConfig. If you maintain your own copy of MarketRiskConfig, add InMemoryDatastoreExtractionMigratorConfig.class to your @Import list to pick up the new controller.
The migration helper requires in-memory data cubes: it reads rows directly from the in-memory IDatastore to produce the CSV exports and the DDL. It therefore does not apply to DirectQuery deployments (starter.deployment.type=direct-query) or to query-only nodes (starter.deployment.type=query-node) — the controller is skipped on both. See the Migration helper page in the DirectQuery section for the intended workflow (extract an in-memory dataset, then start the application in DirectQuery mode).
CSV file exports (POST /extract and POST /extractForDatabase/{database}) are restricted to a configurable base directory via mr.migration.export.base-dir (defaults to the JVM temp directory). To allow exports to a custom path, set this property:
mr:
  migration:
    export:
      base-dir: /data/mr-exports
To disable the endpoint entirely (for example, in production deployments where the extraction helper is not needed), set mr.migration.export.enabled to false (defaults to true):
mr:
  migration:
    export:
      enabled: false
If your project implements a custom ISideStoresToMigrate bean or sets the storesToMigrate field on DirectQueryActivePivotConfig, note that both are now deprecated. The migration helper controller manages store selection through its getDefaultExtractionBuilder() method. You can continue using the deprecated APIs, but they will be removed in a future release.

Deprecated APIs

Deprecated APIReplacement
ISideStoresToMigrateStore selection is configured in MRMigrationHelperRestController.getDefaultExtractionBuilder()
DirectQueryActivePivotConfig.storesToMigrateStore selection is configured in MRMigrationHelperRestController.getDefaultExtractionBuilder()

Atoti Server upgrade to 6.1.19

Atoti Market Risk 6.0.8 upgrades to Atoti Server 6.1.19 (from 6.1.17). PIVOT-12863 patch files removed. The patch files for PIVOT-12863 (CompositeVersionAccessor and SqlVersionAccessorWithCache) that were introduced in 6.0.5 have been removed, as the fix is now included in core. If your project overrides or references these classes, remove those overrides. QueryCubeSync test utility relocated. The QueryCubeSync test utility class has been relocated from com.activeviam.activepivot.dist.test.internal.cube to com.activeviam.activepivot.dist.querynode.test.internal.cube. If your test code imports this class, update the import accordingly. Distributed messaging API rework. Atoti Server 6.1.19 also reworks the distributed messaging API. The legacy broadcast-message types (ABroadcastMessageV2, IMessageAnswer, IMessageHandler, IMessageHandlerRegistrar, SyncMessageHandler, IBroadcastResult) have been replaced with the new Request / Answer / ProcessedOutput records and the CommunicationRegistration builder.
Atoti Market Risk does not reference any of the distributed messaging classes affected by this change. No code change is required in projects that build on top of the standard Atoti Market Risk configuration. The sections below describe the underlying changes for projects that extend the distributed messaging or Snowflake integration directly.
Removed helper types. The following helper types are no longer available because their Atoti Server base classes were removed in 6.1.19:
Removed typeReplacement / notes
com.activeviam.accelerator.common.utils.AUniqueBroadcastMessageNo replacement — base class ABroadcastMessageV2 removed from Atoti Server.
com.activeviam.accelerator.common.utils.AUniqueSyncBroadcastMessageHandlerNo replacement — base class SyncMessageHandler removed.
com.activeviam.accelerator.common.distribution.SharedMessageHandlerRegistrarDistributedParametersRetriever registers its handler itself.
com.activeviam.services.ServicesMessageHandlerRegistrarEndPointFinderService registers its handler itself.
com.activeviam.accelerator.common.parameter.impl.DistributedParametersMessageHandlerLogic moved into DistributedParametersRetriever.
com.activeviam.services.endpointfinder.EndPointFinderMessageHandlerLogic moved into EndPointFinderService.
If a Registry.RegistryContributions setup listed SharedMessageHandlerRegistrar or ServicesMessageHandlerRegistrar, simply drop those entries. Message types are now records. DistributedParametersMessage and EndPointFinderMessage are now record types implementing com.activeviam.activepivot.dist.impl.avinternal.communication.Request. DistributedParametersData and EndPointFinderMessage.EndPointFinderMessageAnswer now implement Answer (the latter also ProcessedOutput). Replace getter calls with record accessors (message.getBranch()message.branch(), etc.). DistributedParametersRetriever constructor change. The retriever now registers its own message handler at construction time via CommunicationRegistration, so it needs the IActivePivotManager:
// Before
new DistributedParametersRetriever(parameterSetSelector, epochCacheManager);

// After
new DistributedParametersRetriever(parameterSetSelector, epochCacheManager, activePivotManager);
Snowflake JDBC driver package moves. The Snowflake JDBC driver bundled with Atoti Server 6.1.19 relocates several public classes. If you reference them in Java imports, update them:
ClassOld packageNew package
SFSessionPropertynet.snowflake.client.corenet.snowflake.client.internal.core
SnowflakeStatementnet.snowflake.client.jdbcnet.snowflake.client.api.statement
If you have custom JGroups protocol XML files and are upgrading from 6.0.5 (or earlier), also apply the auth_class change described in SharedSecretAuthToken replaces AtotiAuthToken in the 6.0.6 → 6.0.7 section.

POM file changes

The upgrade bumps the activepivot.version and common-lib.version properties in the root pom.xml — see the Dependencies page for the resolved versions per release. A new com.activeviam.apps:services library dependency is also introduced. It contains REST endpoint services (such as EndPointFinderService and LevelPathService) that were previously bundled inside com.activeviam.apps:shared and the Atoti Server core. Managed entry to add in the root pom.xml <dependencyManagement> block:
<dependency>
    <groupId>com.activeviam.apps</groupId>
    <artifactId>services</artifactId>
    <version>${common-lib.version}</version>
</dependency>
Direct dependency to add in mr-application/pom.xml:
<dependency>
    <groupId>com.activeviam.apps</groupId>
    <artifactId>services</artifactId>
</dependency>
If your project repackages mr-application or maintains a pom.xml derived from Atoti Market Risk, add the services dependency (no <version> needed if you import the Atoti Market Risk BOM or copy the managed entry above).

FX shift factor moved to IFxShift service

The FX shift factor (mr.fx.shift-factor) was previously applied within the measure chain, which caused incorrect results for inverse and cross-currency pairs. The shift factor is now applied directly inside the IFxShift service before any pair inversion or cross-currency computation.
If your project uses a non-unit shift factor (mr.fx.shift-factor != 1.0), results for inverse and cross-currency FX pairs will change after upgrading. The previous behavior applied the shift factor incorrectly for these pairs, so the new results are mathematically correct. Review your FX risk outputs after migration to confirm the expected values.
If you use the default FXShift implementation (provided by FXShiftsServiceConfig), no action is required. The shift factor is automatically read from IFxProperties.getShiftFactor(). If you have a custom IFxShift implementation, ensure the shift factor is applied to the raw shift vectors before any inversion or cross-currency resolution.

FX relative sensitivity formula fix

The FX_RELATIVE sensitivity formula in ASensiFormulaProvider.fxRelativeShiftFormula() applied the priceFactor after the non-linear FX inversion, which is mathematically incorrect. The formula has been corrected to apply the priceFactor before the inversion:
// Before (incorrect): invert first, then scale
sensitivity × [(1 - 1/(1 + shift)) × priceFactor]^order / order!

// After (correct): scale first, then invert
sensitivity × [1 - 1/(1 + shift × priceFactor)]^order / order!
If your project uses FX_RELATIVE sensitivity rules with a priceFactor other than 1.0, Taylor VaR and PnL Explain results for FX sensitivities will change after upgrading. The new results are mathematically correct. This fix is consistent with the FX shift factor fix in the IFxShift service described above.

Stable names for hidden technical measures

Hidden intermediate technical measures in the MTM, Notional, and OriginalNotional chains have been renamed. Previously their names were generated automatically by Copper (for example MTM.SUM__#__0__#__VaR). These names are now stable, explicit, and include the cube name (for example MTMVaR-ES Cube.TECHNICAL). Impact on DirectQuery aggregate tables. If your DirectQuery aggregate table configuration references any of the old auto-generated names, update those references to the new names:
CubeOld auto-generated name patternNew stable name
VaR-ES CubeMTM.SUM__#__…MTMVaR-ES Cube.TECHNICAL
VaR-ES CubeNotional.SUM__#__…NotionalVaR-ES Cube.TECHNICAL
VaR-ES CubeOriginalNotional.SUM__#__…OriginalNotionalVaR-ES Cube.TECHNICAL
VaR-ES Summary CubeMTM.SUM__#__…MTMVaR-ES Summary Cube.TECHNICAL
Sensitivity CubeNotional.SUM__#__…NotionalSensitivity Cube.TECHNICAL
Sensitivity CubeOriginalNotional.SUM__#__…OriginalNotionalSensitivity Cube.TECHNICAL
PLCubeNotional.SUM__#__…NotionalPLCube.TECHNICAL
PLCubeOriginalNotional.SUM__#__…OriginalNotionalPLCube.TECHNICAL
Impact on MDX queries. If any MDX query targeted one of these technical measures by its auto-generated name, update the measure name accordingly. Extenders overriding the suffix. The nameTechnicalMeasure(String) method is a default method on IMeasureParameters. If a custom suffix is needed, override it in your IMeasureParameters implementation. Clash risk for deprecated factory overloads. The deprecated no-arg factory methods INotionalMeasures.notional(), INotionalMeasures.originalNotional(), and IVaRESMeasures.mtmNative() produce unqualified names such as Notional.TECHNICAL. If an extender calls a deprecated overload from more than one cube, startup will fail with a duplicate-measure-name error. Migrate to the cube-aware overloads (notional(String cube), originalNotional(String cube), mtmNative(String cube)) without delay.

Deprecated APIs

The following APIs have been deprecated for removal in a future version:
Deprecated APIReplacement
IMeasureParameters.getFxShiftFactor()Configure mr.fx.shift-factor — now applied in the IFxShift service
FxRiskPostProcessorBuilder.withShiftFactor(double)No replacement needed — shift factor is applied in the IFxShift service
ApplyShiftPostProcessorBuilder.withShiftFactor(double)No replacement needed — shift factor is applied in the IFxShift service
FXShift(String, IMarketDataRetrievalService, String, IRiskFactorFXPairTranslator)FXShift(IFxProperties, IMarketDataRetrievalService, IRiskFactorFXPairTranslator)
INotionalMeasures.notional()INotionalMeasures.notional(String cube) — pass the cube name to avoid clashes
INotionalMeasures.originalNotional()INotionalMeasures.originalNotional(String cube) — pass the cube name to avoid clashes
IVaRESMeasures.mtmNative()IVaRESMeasures.mtmNative(String cube) — pass the cube name to avoid clashes

FXShift constructor change

The FXShift class now accepts IFxProperties instead of individual String parameters for the common currency. The new constructor also reads the shift factor from IFxProperties.getShiftFactor(). If you instantiate FXShift directly, update your code:
// Before (deprecated)
new FXShift("EUR", marketDataRetrievalService, "FX", riskFactorFXPairTranslator);

// After
new FXShift(fxProperties, marketDataRetrievalService, riskFactorFXPairTranslator);

Properties added

mr-common-config module:
PropertyDefault valueDescription
mr.migration.export.enabledtrueWhether the MRMigrationHelperRestController (the /migrationHelper REST endpoints) is registered. Set to false to remove the migration helper from deployments that don’t need it.
mr.migration.export.base-dirjava.io.tmpdirAllowed base directory for CSV file exports. Any outputDirectory requested by POST /migrationHelper/extract* that resolves outside this path after normalization is rejected.
mr.fx.enable-fx-risk-on-var-cubetrueWhether FX risk is included in the VaR cube computation. Set to false to exclude FX risk from both the complete and summary VaR chains, and to suppress synthetic *_FX Risk Factor members.

Exclude FX risk from the VaR cube

The new property mr.fx.enable-fx-risk-on-var-cube defaults to true. No action is required to preserve the current behavior. To opt in and exclude FX risk from the VaR cube, set the property to false:
mr:
  fx:
    enable-fx-risk-on-var-cube: false
Setting this property to false is incompatible with mr.fx.enable-var-base-currency-dimension=true. The application will fail at startup if both properties are set together. In distributed deployments, set this property on each data node that hosts the VaR cube. Keep the value consistent across all data nodes to avoid schema reconciliation failures at startup. Setting the property on a query node alone has no effect.

6.0.6 to 6.0.7

Upgrading from version 6.0.6, see Atoti Market Risk 6.0.7 Release Notes. Atoti Market Risk uses Atoti Server 6.1.17 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.

Summary

  • Atoti Server upgrade: Atoti Server has been upgraded to 6.1.17.
  • Base Currency dimension extracted to conditional beans: The Base Currency dimension is now registered as a conditional Spring bean in each cube’s dimension config, replacing inline static method calls. Action required if you override dimension config classes or call BaseCurrencyDimensionConfig.fxEffectDimension() directly in custom dimension builders.
  • Sensitivity cube configuration refactoring: Taylor-specific dimensions have been extracted into a separate configuration class. Action required if you have custom extensions.
  • New CubeMoveKind date members available: Previous=CUB+1 and Next=CUB-1 can now be configured in mr.taylor.market-shift-date-specific and mr.cubes.levels.day-to-day-members to enable cube-relative date shifting. These are opt-in features that must be explicitly added to your configuration.
  • JGroups authentication class changed: The JGroups AUTH protocol class has been changed from AtotiAuthToken to SharedSecretAuthToken. Action required if you have custom JGroups protocol XML files.

Base Currency dimension extracted to conditional beans

The Base Currency dimension was previously added to each cube via inline calls to BaseCurrencyDimensionConfig.fxEffectDimension() inside dimension builder lambdas. These inline calls have been removed. The dimension is now registered as a separate conditional Spring bean in each cube’s dimension config class. The affected classes are:
  • VarESCubeDimensionsConfig: new bean varFxEffectDimension, annotated with @ConditionalOnVarFxDimensionEnabled
  • VarESSummaryCubeDimensionsConfig: new bean varSummaryFxEffectDimension, annotated with @ConditionalOnVarFxDimensionEnabled
  • SensiCubeDimensionsConfig: new bean sensiFxEffectDimension, annotated with @ConditionalOnSensiFxDimensionEnabled
  • SensiSummaryCubeDimensionsConfig: new bean sensiSummaryFxEffectDimension, annotated with @ConditionalOnSensiFxDimensionEnabled
  • BaseCurrencyDimensionConfig: the common fxEffectDimension bean is now annotated with @ConditionalOnSensiFxDimensionEnabled
Impact on custom projects: If you override any of the above dimension config classes, remove any remaining inline calls to BaseCurrencyDimensionConfig.fxEffectDimension() from dimension builder lambdas and define a dedicated conditional bean instead. If you call BaseCurrencyDimensionConfig.fxEffectDimension() directly in a custom dimension builder, replace that call with a bean definition annotated with the appropriate condition annotation, or use the static overload that accepts individual parameters such as displayCurrencies and localRiskMember. No action required if:
  • You use the standard Market Risk configuration without custom extensions
  • You do not override any of the dimension config classes listed above

Configuration changes

Taylor dimensions extraction

The following three dimensions have been moved from SensiCubeDimensionsConfig to a new configuration class TaylorDimensionsConfig:
  • Scenario Analysis Hierarchy
  • Liquidity Horizon Hierarchy
  • Scenario Set Hierarchy
These dimensions are now imported via TaylorMeasuresConfig. Impact on custom projects: If you have custom configuration that extends or overrides SensiCubeDimensionsConfig, you may need to update your imports. If you have custom configuration that directly references these dimension beans, ensure your configuration imports TaylorDimensionsConfig or has a dependency on TaylorMeasuresConfig. No action required if:
  • You use the standard Market Risk configuration without custom extensions
  • You do not override Sensitivity cube dimension configuration

New CubeMoveKind date members available

The CUB prefix is now supported for date shifting in the following properties. The CUB prefix stands for Cube-relative shift: it resolves to the nearest date that actually exists in the cube (dates are sorted in the cube’s natural descending order, from most recent to oldest), as opposed to DAY which shifts by a fixed number of business days.
  • mr.taylor.market-shift-date-specific (MarketShiftDate hierarchy)
  • mr.cubes.levels.day-to-day-members (Day-to-Day hierarchy)
To enable CubeMoveKind add Previous=CUB+1 and/or Next=CUB-1 to your configuration:
mr:
  taylor:
    market-shift-date-specific:
      - TODAY=DAY0
      - YESTERDAY=DAY-1
      - PREVIOUS=CUB+1
      - NEXT=CUB-1
  cubes:
    levels:
      day-to-day-members:
        - Yesterday=DAY-1
        - Day-2=DAY-2
        - Tomorrow=DAY+1
        - End Of Month=EOM-1
        - End Of Quarter=EOQ-1
        - End Of Year=EOY-1
        - Previous=CUB+1
        - Next=CUB-1
Note that the first entry in each list becomes the default member of the hierarchy. To make Previous the default member, place it first in the list.

Dependency upgrades

JGroups authentication class change

SharedSecretAuthToken replaces AtotiAuthToken
The JGroups AUTH protocol class has been changed from com.activeviam.activepivot.dist.impl.internal.distribution.security.impl.AtotiAuthToken to com.activeviam.common.distribution.security.SharedSecretAuthToken. If you have custom JGroups protocol XML files (protocol-tcp.xml or protocol-udp.xml), update the AUTH element:
<!-- Before (6.0.6) -->
<AUTH auth_class="com.activeviam.activepivot.dist.impl.internal.distribution.security.impl.AtotiAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>

<!-- After (6.0.7) -->
<AUTH auth_class="com.activeviam.common.distribution.security.SharedSecretAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>
No action required if you use the standard JGroups protocol files shipped with the accelerator.

6.0.5 to 6.0.6

Upgrading from version 6.0.5, see Atoti Market Risk 6.0.6 Release Notes. Atoti Market Risk uses Atoti Server 6.1.15 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.

Summary

  • Atoti Server upgrade: Atoti Server has been upgraded from 6.1.13 to 6.1.15.
  • Atoti What-If upgrade: Atoti What-If has been upgraded to 4.1.6-AS6.1. To migrate any custom What-If configuration, see the migration guides for this release.
  • Common-lib upgrade: Common-lib has been upgraded from 2.1.11-AS6.1 to 2.1.12-AS6.1.
  • Scenario handling rework: Scenario index decoding now uses a join-based approach via ScenarioNameFromJoinPostProcessor, replacing the old store-based ScenarioNamePostProcessor.
  • DirectQuery incremental refresh: The IRefreshTask interface has a new method signature accepting a ChangeDescription parameter.
  • Branch permissions config moved: ActivePivotBranchPermissionsManagerConfig has moved from mr-common-config to mr-application.
  • Measure parameter constructors updated: VaRMeasureParameters and PnLMeasureParameters constructors now accept an IFxProperties object instead of separate FX parameters.

API updates

IRefreshTask interface change

The IRefreshTask functional interface has been updated. The old refresh() method is now deprecated and replaced by refresh(@Nullable ChangeDescription changeDescription). If you have custom implementations of IRefreshTask, update them to accept the new ChangeDescription parameter:
// Before (6.0.5)
IRefreshTask task = () -> { /* refresh logic */ };

// After (6.0.6)
IRefreshTask task = (changeDescription) -> { /* refresh logic, optionally using changeDescription */ };
The ChangeDescription parameter allows incremental refresh operations. Pass null if a full refresh is desired.

VaRMeasureParameters constructor change

The VaRMeasureParameters constructor that accepted separate String fxRiskClass and Double defaultFxRate parameters has been deprecated. The new constructor accepts an IFxProperties object instead:
// Before (6.0.5)
new VaRMeasureParameters(..., fxProperties.getRiskClassMember(), ..., fxProperties.getDefaultFxRate(), ...);

// After (6.0.6)
new VaRMeasureParameters(..., fxProperties, ..., ...);
The same change applies to PnLMeasureParameters. If you have custom measure parameter beans (e.g. in classes extending VarMeasureParametersBeans or PnlMeasureParametersBeans), update the constructor calls accordingly.

RiskDimension.getRiskClassesHierarchyWithNA() deprecated

The method RiskDimension.getRiskClassesHierarchyWithNA() has been deprecated. Its behaviour (contributing unknown members with AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS) has been merged into getRiskClassesHierarchy(). Replace any calls to getRiskClassesHierarchyWithNA() with getRiskClassesHierarchy().

Deprecated classes and methods

The following deprecations have been introduced in 6.0.6. These will be removed in a future release.

ActivePivotBranchPermissionsManagerConfig in mr-common-config

The class com.activeviam.mr.common.datastore.permissions.ActivePivotBranchPermissionsManagerConfig in the mr-common-config module has been deprecated (@Deprecated(forRemoval = true, since = "6.0.6")). The replacement class is com.activeviam.mr.application.config.security.ActivePivotBranchPermissionsManagerConfig in the mr-application module. The new implementation uses AtotiSecurityProperties to dynamically resolve admin roles instead of a hardcoded list. If you have a custom implementation of branch permissions, migrate to extend or replace the new mr-application version.

Scenario measure methods

Several scenario-related methods have been deprecated in favour of new “Ex” variants that use the ScenarioNameFromJoinPostProcessor (join-based) instead of the old ScenarioNamePostProcessor (store-based):
InterfaceDeprecated methodReplacement
IVaRESMeasuresworstScenario()worstScenarioEx()
IVaRESMeasuresbestScenario()bestScenarioEx()
IFixedConfidenceMeasuresscenariosConfidence(String)scenariosConfidenceEx(String)
IRiskClassFixedConfidenceMeasuresscenariosConfidence(String, String)scenariosConfidenceEx(String, String)
IContextualMeasurescontextScenarios()contextScenariosEx()
IContextualMeasurescontextScenarios(String, String)contextScenariosEx(String, String)
The new methods require an additional underlier for the scenario index measure. If you override any of these methods, update your implementations to use the new variants.

IMeasureResolver.getMeasureBeans()

The method getMeasureBeans() has been deprecated (since 6.0.5). Use getCopperBeans() instead, which returns Publishable<?> beans (a broader scope including both measures and non-measure copper elements).

Scenario join-based configuration

Scenario hierarchies and scenario name decoding have been reworked to use a left-join approach. This is the most significant architectural change in 6.0.6.

New classes

  • JoinScenarioHierarchy (mr-common-config): Provides base left-join configurations for scenario analysis, liquidity horizon, and scenario set hierarchies.
  • JoinScenarioHierarchyVaR (mr-var-config): VaR cube-specific scenario join configuration.
  • JoinScenarioHierarchySensi (mr-sensi-config): Sensitivity cube-specific scenario join configuration.
  • ScenarioNameFromJoinPostProcessor (mr-common-lib): New post-processor that decodes scenario indices using the join rather than direct store lookups. Implements IDistributedPostProcessor for distributed cube support.

New Spring qualifier constants

New qualifier constants have been added to SpringConstants for injecting scenario store joins and hierarchies:
ConstantDescription
SP_QUALIFIER__SCENARIO_STORE_NAME_JOIN_VARScenario store join for VaR cube
SP_QUALIFIER__SCENARIO_STORE_NAME_JOIN_VAR_SUMMARYScenario store join for VaR Summary cube
SP_QUALIFIER__SCENARIO_STORE_NAME_JOIN_SENSIScenario store join for Sensitivity cube
SP_QUALIFIER__SCENARIO_STORE_NAME_JOIN_SENSI_SUMMARYScenario store join for Sensitivity Summary cube
SP_QUALIFIER__SCENARIO_ANALYSIS_HIERARCHY_*Scenario analysis hierarchy for each cube
SP_QUALIFIER__LIQUIDITY_HORIZONS_HIERARCHY_*Liquidity horizon hierarchy for each cube
If you have custom cube dimension configurations, update them to use the new join-based hierarchy builders and Spring qualifiers.

Cube dimension configuration changes

The dimension configuration classes for all cubes have been updated to use the new join-based scenario hierarchies:
  • VarESCubeDimensionsConfig: New beans scenarioAnalysisHierarchyVaR() and liquidityHorizonHierarchyVaR() using JoinScenarioHierarchyVaR. The deprecated method scenarioSetLeftJoinVaR() will be removed in a future release.
  • VarESSummaryCubeDimensionsConfig: Updated to use JoinScenarioHierarchyVaR for summary cube.
  • SensiCubeDimensionsConfig: Updated to use JoinScenarioHierarchySensi.
  • SensiSummaryCubeDimensionsConfig: Updated to use JoinScenarioHierarchySensi for summary cube.
If you maintain custom copies of these configuration classes, align them with the new join-based approach. The Base Currency and FX Effect hierarchies are added to the VaR cube when mr.fx.enable-var-base-currency-dimension=true.

EsVaRMetricLevelsProperties interface extension

The EsVaRMetricLevelsProperties interface has four new default methods:
MethodDefault return
getRiskFactor()null
getRiskClass()null
getSensitivityName()null
getSensitivityTypeLevel()null
These are used by the multi-jurisdiction FX improvements. If you have custom implementations of this interface, these defaults ensure backward compatibility, but you may want to provide actual level identifiers if you use FX risk features.

DirectQuery incremental refresh

This release introduces support for incremental refresh of DirectQuery data sources. The MRDirectQueryRestServices class now propagates ChangeDescription objects through to all IRefreshTask instances. If you have custom refresh tasks or extend the DirectQuery REST services, update your implementations to handle the new ChangeDescription parameter. See the incremental refresh documentation for details.

Dependency version changes

Dependency6.0.56.0.6
Atoti Server6.1.136.1.15
Atoti What-If4.0.4-AS6.14.1.6-AS6.1
Common-lib2.1.11-AS6.12.1.12-AS6.1

6.0.4 to 6.0.5

Apply patched Atoti Server 6.1.13 classes.

Atoti Server 6.1.13 has a few issues which require the application of patched classes to every project using DirectQuery features. We provide these patched classes in the mr-application module. If you are not using this module as-is, please copy the following classes to the application module of your project: mr-application/src/main/java/com/activeviam/database/composite/internal/version/CompositeVersionAccessor.java mr-application/src/main/java/com/activeviam/databasecache/private_/database/SqlVersionAccessorWithCache.java

SensitivityType hierarchy

The new property named mr.sensi.display-taylor-var-by-sensitivity is by default set to true. If set to false, the Taylor VaR by Sensitivity measures are not displayed in the Sensitivity cube. The SensitivityType hierarchy is created to replace this set of measures. Set the property mr.sensi.display-sensitivity-type-hierarchy to false to hide this new hierarchy. For instance Delta Taylor VaR measure is replaced by Taylor VaR with filter on sensitivityType = Delta. If the FX effect is categorized as “Delta FX”, it is important to hide the original [Sensitivity] Taylor VaR measures by setting mr.sensi.display-taylor-var-by-sensitivity=false. The FX effect is only moved on the [Sensitivities].[SensitivityType] hierarchy but not on the sensitivities specific measures. If the hierarchies used to translate the FX effect must contain the desired location or be virtual. To do so, the Risk Class hierarchy has ‘N/A’ as default parameter that is used when the ‘FX’ member is absent. More precisely, when mr.fx.enable-fx-risk-location-shift=true, a location can only be displayed if the respective hierarchies contains the correct members, or are declared as virtual. Otherwise, the FX risk may not be visible in the cube. To do so, the following analysis hierarchy HierarchyWithFxRiskFactors can be used to add the FX risk factor members to the Risk Factors@Risk hierarchy. In the event that the member is not present on the hierarchy and this one is not declared as virtual, the default member will be used. To display the default member, the property AUTO_CONTRIBUTE_UNKNOWN_MEMBER_PROPERTY=AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS must be set on the hierarchy. The translation between the currency pair and the risk factor is done by the IRiskFactorFXPairTranslator bean. It may be customized to fit your risk factor naming convention. Please see the Relation between RiskFactor and currency pair chapter for more details.

Properties added

Sensitivities module properties:
PropertyDefault valueDescription
mr.cubes.levels.base-currencyBase Currency@Base Currency@Base CurrencyThe name of the Base Currency hierarchy.
mr.cubes.levels.fx-effectFX Attribution@FX Effect@Base CurrencyThe name of the FX Effect hierarchy.
mr.cubes.levels.sensitivity-type-levelSensitivityType@SensitivityType@SensitivitiesThe name of the SensitivityType hierarchy.
mr.fx.enable-fx-risk-location-shifttrueThe forex conversion of the VaR generates a specific risk; if true, this risk is classified under Delta/FX, if false, it stays at the current location.
mr.fx.enable-var-base-currency-dimensionfalseIf true, the Base Currency and the FX Effect hierarchies are created.
mr.fx.fx-risk-memberFX EffectName of the member of FX Effect that holds the forex conversion risk.
mr.fx.local-risk-memberLocal RiskName of the member of FX Effect that holds the local specific risk.
mr.fx.risk-disable-memberLocal RiskName of the member of Base Currency used to turn off the forex risk.
mr.fx.risk-display-memberDisplay CcyName of the member of Base Currency used to link the forex risk with the display currency.
mr.fx.sensitivity-name-memberDeltaName of the Sensitivity member that holds the forex risk.
mr.sensi.display-sensitivity-type-hierarchytrueThe SensitivityType hierarchy is visible on the UI.
mr.sensi.display-taylor-var-by-sensitivitytrueThe Taylor VaR by sensitivity type metrics are displayed, filtering by SensitivityType should replace them.
mr.fx.shift-factor1.0The scale factor applied to FX shift when computing FX Effect of Taylor VaR.
In addition:
  • The Spring properties mr.data-load.csv have been removed, and the default Data Connector properties are now used instead.
  • The source definition is described in the application.yaml configuration file. For convenience, the content specific to Data Connectors is set in the application-dlc-local-csv.yaml and application-dlc-azure-csv.yaml file.
  • The topics used by Atoti Market Risk are defined via Java beans of type ILoadingTopicDescription or IUnloadTopicDescription. The topics defined as ILoadingTopicDescription are still using the file-patterns Configuration Properties, which you can override in the application.yaml configuration file.

Migration to Atoti Market Data

The Market Data API, introduced in Atoti Market Risk 5.3, is now an external dependency called Atoti Market Data, using version 1.3.1 . The market data artifacts (market-data-lib, market-data-config, and market-data-spring-boot-starter) are versioned independently, and the source code is no longer provided alongside the Atoti Market Risk source code. For more information, see the Atoti Market Data Documentation. As part of this migration, several changes have been made:
Property name
directquery.cache.max-slice-count
directquery.cache.max-slice-count-default
mr-common-config module:
PropertyDefault valueDescription
mr.enable.cubes.combinedtrueEnables the MRCombinedCube when set to true. This property has been created to rename and in a future release replace the now deprecated property mr.enable.cubes.common. In this release either property can be used and will have the same effect.
mr.enable.dtd-absolute-increasefalseIf true, the day to day increase formula uses an abolute value.
mr-common-config module:
PropertyDescription
mr.enable.cubes.commonThis has been replaced by mr.enable.cubes.combined as this is more consistent with the name of the MRCombinedCube. In this release either property can be used and will have the same effect.
CubeMeasureDetails
PLCube, MRCombinedCubeDTD PnLThis measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.
PLCube, MRCombinedCubeLTD PnLThis measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.
PLCube, MRCombinedCubeMTD PnLThis measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.
PLCube, MRCombinedCubeYTD PnLThis measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.
mr-common-config:
ModuleClass name
mr-applicationDataLoadControllerConfig
mr-applicationDataLoadControllerFileConfig
mr-common-configCSVProperties
mr-common-configACSVSourceConfig
mr-common-configAdjustmentAzureCsvSourceConfig
mr-common-configAdjustmentCsvSourceConfig
mr-common-configAdjustmentCsvSourceParametersProviderConfig
mr-common-configCommonCsvSourceParametersProviderConfig
mr-common-configCubeMarketDataCsvSourceParametersProviderConfig
mr-common-configCurveMarketDataCsvSourceParametersProviderConfig
mr-common-configFxRateMarketDataCsvSourceParametersProviderConfig
mr-common-configSpotMarketDataCsvSourceParametersProviderConfig
mr-common-configSurfaceMarketDataCsvSourceParametersProviderConfig
mr-common-configAdjustmentLocalCsvSourceConfig
mr-common-configCommonAzureCsvSourceConfig
mr-common-configCommonCsvSourceConfig
mr-common-configCommonLocalCsvSourceConfig
mr-common-configAzureSourceConfig
mr-common-configChannelParameters
mr-common-configChannelParametersHolder
mr-common-configChannelParametersHolderOperator
mr-common-configGlob
mr-common-configLocalSourceConfig
mr-common-configMessageChannelCreator
mr-common-configSimpleCsvSourceConfig
mr-common-configSimpleJdbcSourceConfig
mr-common-configSimpleSourceConfig
mr-common-configTopicConfig
mr-common-configDataLoadControllerConfigurator
mr-common-configIAzureCsvSourceConfig
mr-common-configICsvSourceConfig
mr-common-configIJdbcSourceConfig
mr-common-configILocalCsvSourceConfig
mr-common-configISourceConfig
mr-common-configISourceConfiguration
mr-common-configITupleFieldsAware
mr-common-configStoreAndScopeToConditionConverter
mr-common-configTopicAliasDefines
mr-common-configTopicToScopeToLoadConverter
mr-common-configTopicToScopeToRemoveWhereConditionConverter
mr-common-configACsvSourceParametersProvider
mr-common-configATopicParameters
mr-common-configCsvColumnsProvider
mr-common-configCsvColumnsProviderFunction
mr-common-configCsvPublisherProvider
mr-common-configCsvPublisherProviderFunction
mr-common-configCsvTopicColumns
mr-common-configCsvTopicPublisher
mr-common-config@ConditionalOnAzureData
mr-common-config@ConditionalOnAzureSource
mr-common-config@ConfigurationDirectQueryWithAzureSource
mr-common-config@ConditionalOnLocalData
mr-common-config@ConditionalOnLocalSource
mr-common-config@ConditionalOnDirectQueryWithLocalSource
mr-pnl-configPnLAzureCsvSourceConfig
mr-pnl-configPnLCsvSourceConfig
mr-pnl-configPnLLocalCsvSourceConfig
mr-pnl-configPnLSummaryAzureCsvSourceConfig
mr-pnl-configPnLSummaryCsvSourceConfig
mr-pnl-configPnLSummaryLocalCsvSourceConfig
mr-pnl-configSignoffSummaryPnlPublisher
mr-pnl-configPnLCsvSourceParametersProviderConfig
mr-pnl-configPnLSummaryCsvSourceParametersProviderConfig
mr-sensi-configASensiCsvSourceConfig
mr-sensi-configSensiAzureCsvSourceConfig
mr-sensi-configSensiLocalCsvSourceConfig
mr-sensi-configASensiPnLCsvSourceConfig
mr-sensi-configSensiPnLAzureCsvSourceConfig
mr-sensi-configSensiPnLLocalCsvSourceConfig
mr-sensi-configASensiImportCsvSourceConfig
mr-sensi-configSensiImportAzureCsvSourceConfig
mr-sensi-configSensiImportLocalCsvSourceConfig
mr-sensi-configScalarSensiCsvSourceParametersProviderConfig
mr-sensi-configSignoffSummarySensiPublisher
mr-sensi-configBCCubeMarketDataCsvSourceParametersProviderConfig
mr-sensi-configBCCurveMarketDataCsvSourceParametersProviderConfig
mr-sensi-configBCFxRateMarketDataCsvSourceParametersProviderConfig
mr-sensi-configBCSpotMarketDataCsvSourceParametersProviderConfig
mr-sensi-configBCSurfaceMarketDataCsvSourceParametersProviderConfig
mr-sensi-configDirectQuerySensiCsvSourceParametersProviderConfig
mr-sensi-configSensiCsvSourceParametersProviderConfig
mr-sensi-configSensiSummaryCsvSourceParametersProviderConfig
mr-sensi-configSourceParametersProviderConfig
mr-sensi-configSensiSummaryOnMainCsvSourceParametersProviderConfig
mr-var-configVaRAzureCsvSourceConfig
mr-var-configVaRCsvSourceConfig
mr-var-configVaRLocalCsvSourceConfig
mr-var-configVaRSummaryAzureCsvSourceConfig
mr-var-configVaRSummaryLocalCsvSourceConfig
mr-var-configVarSummarySourceConfiguration
mr-var-configSignoffSummaryVarPublisher
mr-var-configVaRCsvSourceParametersProviderConfig
mr-var-configVaRSummaryCsvSourceParametersProviderConfig
mr-sensi-config:
ModuleOld nameNew Name
mr-common-configAdjustmentSourceConfigurationAdjustmentCsvSourceConfig
mr-common-configCommonSourceConfigurationCommonCsvSourceConfig
mr-common-configMarketDataSourceConfigMarketDataCsvSourceConfig
mr-pnl-configPnLSourceConfigurationPnLCsvSourceConfig
mr-sensi-configSensiSourceConfigurationSensiCsvSourceConfig
mr-sensi-configSensiSummarySourceConfigurationSensiSummaryCsvSourceConfig
mr-sensi-configAllBackwardsCompatibleMarketDataSourcesAllBackwardsCompatibleMarketDataCsvLoadConfig
mr-sensi-configSensiCsvSourceParametersProviderConfigSourceParametersProviderConfig
mr-var-configVarSourceConfigurationVarCsvSourceConfig

Refactor of SensiMeasureParameters

With the removal of the vector data model, the SensiMeasureParameters constructor has been refactored to remove the boolean isVector field.

DirectQuery configuration

The DirectQueryActivePivotConfig class no longer extends the ADirectQueryApplicationConfig class from Atoti Server. Atoti Server 6.1.2 introduced some bean name changes in this class that cause bean resolution issues. These will be resolved in a following Atoti Server release, at which time this change can be reversed.

Schema rebuild

In the MarketRiskConfig class in mr-application we create a bean to schedule an Atoti schema rebuild. Previously this would run after 5 minutes and every 30 minutes thereafter. This was more frequent than necessary and may impact performance. We have increased the default to 1,440 minutes (24 hours) so the rebuild occurs once a day. We have also added new properties (mr.application.rebuild...) to customize this for your requirements.

Sign-Off REST services

The implementation of the Sign-Off REST services now has a Boolean to enable/disable them. Out of the box, the Sign-Off REST services are disabled until the initial load is completed. This prevents the Sign-Off server from sending requests on those services before the end of the initial load. Atoti core exceptions are now used instead of the previously used Javax exceptions. Error messages and constants have been fixed. Their prefix and/or content was previously incorrect. In particular, the constant ERROR_MESSAGE has been replaced by the constant ERROR_MESSAGE_NO_VALID_DTO_PROVIDED.

Webservices

The following outdated dependency has been removed from the POM file of the mr-common-lib module:
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
    <scope>compile</scope>
</dependency>
The String constant for the "application/json" media type from the Spring class org.springframework.http.MediaType is used instead of the corresponding constant from thejavax.ws.rs.core.MediaType class.

Sorting order of beans

The class StartupSpringBeanOrder has been added with constants used to define the order in which some of the beans are loaded: In increasing order:
  • START_MANAGER: Starts the Atoti Server manager.
  • REGISTER_DATABASE_LISTENERS: Registers the parent/child listeners.
  • INITIAL_CONFIGURATION_DATA_LOAD: Starts the initial data load.
  • INITIAL_DATA_LOAD: Instantiates beans after the initial data load is completed.
  • START_DISTRIBUTED_MESSENGERS: Starts the distribution messengers.

Fix for trailing white space incorrectly added with empty string suffix

The methods *Suffix in the class VaRMetricParametersAndNames now trim the generated measure names to avoid the incorrect addition of a trailing white space.

DirectQuery Cache

This release includes a new DirectQuery caching mechanism that dynamically loads slices of data into memory to improve the performance of retrievals from external stores (stores not joined to the base store). Currently, this only supports market data stores - those from Atoti Market Data and the additional stores from the mr-sensi-config module. Additionally, this is a preview feature that is disabled by default. To enable the feature, set the property: mr.enable.preview.directquery-cache=true. When you are using the cache, a “slice” of market data will be stored in memory when it is required for a query. A slice corresponds to all the market data for a given combination of asOfDate and marketDataSet. These slices will be added and removed from the cache based on the maximum number of slices that can be held at any one time. You can configure the maximum number of slices for a particular table with the directquery.cache.max-slice-count property, otherwise the value set in the directquery.cache.max-slice-count-default property will be used.

Scalar reference data

The reference dataset that is provided in mr-application/src/main/resources/data has been updated so that sensitivities are now in a scalar format rather than vectorized. This is primarily for clarity now that the Sensitivities Cube no longer supports a vectorized model. It is still possible to provide sensitivity vectors as input, but be aware that these will be converted and stored as scalar values in the application.

Distribution and measures

Atoti Market Risk cubes and their summary variants (for example the VaR-ES Cube and the VaR-ES Summary Cube) are created as a horizontal distribution. This enables Atoti Market Risk to show a single measure (for example VaR) with some dates coming from the full cube and other date contributions from the summary cube. This is a useful feature, but it comes with a warning. Atoti Server expects that all cubes in a horizontal distribution have exactly identical measure chains. If they do not, this can lead to errors or incorrect results when queries are executed on a query cube with both cubes. The measure chains in Atoti Market Risk are not identical between main and summary cubes but, in this release, we have made changes to avoid these failure scenarios. We strongly recommend that, if you are using summary cubes, you add any new measures both to the main and summary cubes.