Migration notes 5.3

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

Migrate to 5.3.0

Upgrading from version 5.2.0 - see Atoti Market Risk 5.3 Release Notes.

Headline announcement

  • Java 17 upgrade : The Atoti Market Risk is now compatible with, and requires, Java 17. For more details, see Java 17 upgrade
  • Spring Security upgrade : We have upgraded Spring Security to version 5.8.7 to resolve vulnerabilities and prepare for the upgrade to Spring Security 6.0 (via Spring Boot 3).
  • Atoti Server upgrade : The Atoti Market Risk has been upgraded to Atoti Server 6.0.9.
  • Solutions Tools BOM upgrade : The Solutions Tools BOM dependency has been upgraded to 2.0-AS6.0. All included tools are compatible with, and require Java 17.
  • Merged unfiltered pre-aggregated sensitivity measures: Unfiltered, pre-aggregated technical sensitivity measures (e.g. Delta.Native.Vector.SUM.Technical, Gamma.Ladder.Native.Vector.SUM.Technical) are no longer split by sensitivity type. Generic replacement measures are provided: Sensitivities.Native.SUM.Technical/Sensitivities.Native.Vector.SUM.Technical, Sensitivities.Ladder.Native.Vector.SUM.Technical.
  • Defined stores against the GLOBAL schema: All stores in the application are now defined against the GLOBAL schema. The AScalarDataAwareSchema functionality is now achieved through conditionally adding the correct store given the application run mode.
  • Store and reference configuration classes are appropriately named: Store @Configuration classes are now named *StoreConfig and reference @Configuration classes are now named *ReferenceConfig.
  • Removed ActiveMonitor module and dependency: The mr-activemonitor module is no longer part of the MR modules, and the associated dependencies have been removed.
  • Refactored Sensitivities testing framework: Several improvements to the Sensitivities testing framework have been included, based on feedback.
  • Cleaned up dimension configuration: @Configuration classes containing multiple dimension beans have been split up. Common static methods used in multiple similar dimensions are now available in standalone classes.
  • Migration to ConfigurationProperties: The majority of MR properties have been migrated to Spring @ConfigurationProperties classes and the properties files have been consolidated.
  • Simplified market data API: A preview version of a market data API has been introduced. It covers several features of the current market data API, while reducing complexity. The implementation and configuration classes of the current market data API have been marked as deprecated. For details, see Market Data APIs.

Breaking changes

  • Upgrades

    • The MR 5.3.0 release is now compatible with, and requires Java 17.
    • The Solutions Tools BOM dependency has been upgraded to 2.0-AS6.0. All included tools are compatible with, and require Java 17.
    • The Spring Security configuration has been upgraded to version 5.8.7, for future compatibility with Spring 6.0. Customizations built on previous versions will need to be migrated.
  • ConfigurationProperties

    • Due to the introduction of ConfigurationProperties, the names of almost every property used in Atoti Market Risk have changed.
    • A number of unused properties have been removed from properties files and have not been migrated to ConfigurationProperties.
    • A number of properties have been moved to the application.yaml file from other properties files. We will generally prefer to use the application.yaml file because IDEs tend to offer auto-completion and documentation features for this file.
    • A number of property files that have been removed are no longer imported into the application.
    • Static constants that referred to property names have been removed.
    • The most complex properties have been deconstructed to provide a cleaner interface, so the way those properties are defined has changed.
    • Many classes set fields to property values by using the Spring @Value annotation, directly on the field or on a constructor parameter. For all those properties that are now located in ConfigurationProperties classes, these @Value annotations have been replaced by the relevant ConfigurationProperties class.
    • Significant changes have been made to the measure parameter classes, which aggregate and provide access to property values.
    • The keys used to set properties on a number of post-processors have changed, as have the corresponding constants.
    • The static factory methods for a number of post-processors have changed.
    • Removed autowired Environment attributes from classes where this is no longer required.
    • Removed the ISpringEnvAware interface.
    • Removed the getCalculationMethod method on the CommonPostProcessorUtils class.
    • Removed getReferences/getSuffix/getFolder methods on the ATaylorFactory/AVaRESFactory classes.
    • The getFormulaInput method on the IInputSelector interface now returns a SensitivityInput type instead of a String.
    • The copyFilesToWhatif and the createBranch methods on the FileUploadWhatIfService class, and the createBranch method on the FileUploadWhatIfRestfulService class now expect Paths as input instead of Strings.
  • Misc

    • All the dimensions, hierarchies, and level static names are now grouped in the file DimensionConstantsConfig, the dimensions constants are suffixed with _DIMENSION, the hierarchies are suffixed with _HIERARCHY, and the levels with _LEVEL.
    • The SensiAggregatedCubeExport, SensiScalarAggregatedCubeExport and SensiSummaryExport DEE templates have been updated.
    • The Source and InputType columns have been removed from the default Summary Cube input files.
    • The ATenorAwareSchema class has been moved to the mr-common-config module, and its package has been changed accordingly.
    • The improvements to the Sensitivities testing framework have resulted in several changed classes.

Input file formats

The Source and InputType columns have been removed from the default Summary Cube input files (below). These columns are required for Sign-Off enabled applications and you should continue to include them if you have Sign-Off enabled. However, by default, Sign-Off is disabled, so they have been removed from the default reference files in src/main/resources/data. In this same directory you will still find the old files, which you can use instead. These are named in the format Sensitivity Signoff Cube....

Datastores

Removed

The following fields have been removed from the stores, but only where Sign-Off is disabled (configuration.sign-off.enabled=false). These fields are only required for Sign-Off. In a Sign-Off enabled application they are still present.

Modification Store Field
Removed BaseStore, SensiBaseStore, PnLBaseStore Source
Removed BaseStore, SensiBaseStore, PnLBaseStore InputType

Cube schema

Removed

The following hierarchy has been removed from the Summary Cubes, but only where Sign-Off is disabled (configuration.sign-off.enabled=false). This hierarchy is only required for Sign-Off. In a Sign-Off enabled application, it is still present.

Cube Dimension Hierarchy Levels
PnL Summary, Sensitivity Summary, VaR-ES Summary, Combined Adjustment Source [ALL, Source, InputType]

Measures

Added

Merging pre-aggregated sensitivity measures
Cube Measure Details
Sensi Sensitivities.Native.SUM.Technical Pre-aggregated measure on the Values field of the TradeSensitivities store, with scalar values.
Sensi Sensitivities.Native.Vector.SUM.Technical Pre-aggregated measure on the Values field of the TradeSensitivities store, with vector values.
Sensi Sensitivities.Ladder.Native.SUM.Technical Pre-aggregated measure on the Ladder field of the TradeSensitivities store.

Removed

Merging pre-aggregated sensitivity measures
Cube Measure Details
Sensi *.Native.SUM.Technical (e.g. Delta.Native.SUM.Technical) Replaced by Sensitivities.Native.SUM.Technical
Sensi *.Native.Vector.SUM.Technical (e.g. Gamma.Native.Vector.SUM.Technical) Replaced by Sensitivities.Native.Vector.SUM.Technical
Sensi *.Ladder.Native.Vector.SUM.Technical (e.g. Volga.Ladder.Native.Vector.SUM.Technical) Replaced by Sensitivities.Ladder.Native.Vector.SUM.Technical

Configuration classes

Files added

Dimensions configuration
Class Description
TradeAttributesCommonDimensionConfig Configuration class for the standard TradeAttributes dimension.
TradeAttributesLightDimensionConfig Configuration class for the light TradeAttributes dimension (i.e. with an analysis hierarchy for VaR inclusion).
TradeAttributesDimension Static methods for creating TradeAttributes dimensions.
OrganisationLightDimensionConfig Configuration class for the light Organisation dimension (i.e. with analysis hierarchies for books and legal entities).
DateWithMarketShiftDateDimensionConfig Configuration class for the Date dimension containing market shifts.
Application configuration
Class Description
CommonPropertiesConfig Imports Spring ConfigurationProperties classes for the mr-common-config module.
PnlPropertiesConfig Imports Spring ConfigurationProperties classes for the mr-pnl-config module.
SensiPropertiesConfig Imports Spring ConfigurationProperties classes for the mr-sensi-config module.
SignOffPropertiesConfig Imports Spring ConfigurationProperties classes for sign-off configuration.
VarPropertiesConfig Imports Spring ConfigurationProperties classes for the mr-var-config module.
ContentServiceConfig Groups LocalContentServiceConfig and RemoteConfigService and enables the ContentServerProperties ConfigurationProperties.

Files Modified

Dimensions configuration
Classes Details
MarketDataDimensionLightConfig Renamed to MarketDataLightDimensionConfig.
OrganisationDimensionConfig Moved the light Organisation dimension to the OrganisationLightDimensionConfig class.
CSV configuration

In the interface ISourceConfiguration:

  • the constant DEFAULT_CSV_SEPARATOR has been removed, as the default separator for CSV sources is now defined in the CSVProperties ConfigurationProperties class.
  • the method ``CSVProperties getCsvProperties()` has been added.
  • the signature of the method defineTopic changed: the parameter Environment env has been removed.

As a consequence, in the default implementation of the method defineTopic in the interfaces ILocalCsvSourceConfig and ILocalCsvSourceConfig, the getCsvProperties() method is used instead of the logic used with the Environment env parameter.

In the abstract class ACSVSourceConfig:

  • the attribute representing the Spring environment has been removed.
  • the attribute IDatastoreConfig datastoreConfig is no longer autowired.
  • the following constants have been removed:
    • DEFAULT_CSV_PARSER_THREADS
    • DEFAULT_CSV_BUFFER_SIZE
    • DEFAULT_CSV_LINES_TO_SKIP
      They have been replaced by default values for the attributes of the CSVProperties ConfigurationProperties class.
  • a new attribute representing the CSVProperties ConfigurationProperties has been added, with the corresponding getter method.

As a consequence, the implementation of the abstract class ACSVSourceConfig now inject the following attributes in their constructors:

  • IDatastoreConfig datastoreConfig
  • CSVProperties csvProperties Here is the list of those implementations:
Module Class name
mr-common-config AdjustmentCsvSourceConfig (abstract class)
mr-common-config AdjustmentAzureCsvSourceConfig
mr-common-config AdjustmentLocalCsvSourceConfig
mr-common-config CommonCsvSourceConfig (abstract class)
mr-common-config CommonAzureCsvSourceConfig
mr-common-config CommonLocalCsvSourceConfig
mr-pnl-config PnLCsvSourceConfig (abstract class)
mr-pnl-config PnLAzureCsvSourceConfig
mr-pnl-config PnLLocalCsvSourceConfig
mr-pnl-config PnLSummaryCsvSourceConfig (abstract class)
mr-pnl-config PnLSummaryAzureCsvSourceConfig
mr-pnl-config PnLSummaryLocalCsvSourceConfig
mr-sensi-config ASensiCsvSourceConfig (abstract class)
mr-sensi-config SensiAzureCsvSourceConfig
mr-sensi-config SensiLocalCsvSourceConfig
mr-sensi-config ASensiImportCsvSourceConfig (abstract class)
mr-sensi-config SensiImportAzureCsvSourceConfig
mr-sensi-config SensiImportLocalCsvSourceConfig
mr-var-config VaRCsvSourceConfig (abstract class)
mr-var-config VaRAzureCsvSourceConfig
mr-var-config VaRLocalCsvSourceConfig
mr-var-config VaRSummaryCsvSourceConfig (abstract class)
mr-var-config VaRSummaryAzureCsvSourceConfig
mr-var-config VaRSummaryLocalCsvSourceConfig
Measures configuration
Merging pre-aggregated sensitivity measures
Classes Details
*BaseSensitivityChain Added measures aggregating the TradeSensitivities store Values and Ladder fields.
*NativeCurrencyChain, *LadderExpansionChain Removed type-specific measures aggregating the TradeSensitivities store Values and Ladder fields.
SensiMeasureNames getScalarSumTechnical(), getSumTechnical() and getLadderSumTechnical() no longer use getType() as a prefix for the returned measure name.
BaseParametersConfig getScalarSumTechnical(), getSumTechnical() and getLadderSumTechnical() no longer use getType() as a prefix for the returned measure name.
Store configuration

All store and reference @Configuration classes are now appropriately named.

Old class name New class name(s)
PnLDatastoreDescriptionConfig PnLStoreConfig
SensiAggregatedDatastoreDescriptionConfig SensiAggregatedStoreConfig and VectorSensiAggregatedStoreConfig
SensiFlatDatastoreDescriptionConfig SensiFlatStoreConfig and VectorSensiFlatStoreConfig
WhatIfDatastoreDescriptionConfig WhatIfStoreConfig
AllStandardReferences AllStandardReferencesConfig
CounterpartyToCountry CounterpartyToCountryReferenceConfig
TradeAttributesToBookHierarchy TradeAttributesToBookHierarchyReferenceConfig
TradeAttributesToCounterpartyHierarchy TradeAttributesToCounterpartyHierarchyReferenceConfig
TradeAttributesToCounterparty TradeAttributesToCounterpartyReferenceConfig
TradeAttributesToLegalEntity TradeAttributesToLegalEntityReferenceConfig
AllCommonStores AllCommonStoresConfig
AllStandardStores AllStandardStoresConfig
BookHierarchy BookHierarchyStoreConfig
BookParentChild BookParentChildStoreConfig
CounterpartyHierarchy CounterpartyHierarchyStoreConfig
CounterpartyParentChild CounterpartyParentChildStoreConfig
Counterparty CounterpartyStoreConfig
Country CountryStoreConfig
FxRate FxRateStoreConfig
LegalEntityHierarchy LegalEntityHierarchyStoreConfig
LegalEntityParentChild LegalEntityParentChildStoreConfig
MarketDataSet MarketDataSetStoreConfig
MarketShift MarketShiftStoreConfig
Quantiles QuantilesStoreConfig
RiskFactorsCatalogue RiskFactorsCatalogueStoreConfig
Rounding RoundingStoreConfig
Scenarios ScenariosStoreConfig
TradeAttributes TradeAttributesStoreConfig
PnLAggregatedDatastoreDescriptionConfig PnLAggregatedStoreConfig
PnLFlatDatastoreDescriptionConfig PnLFlatStoreConfig
AllSensiReferences AllSensiReferencesConfig
TradeSensitivitiesToRiskFactorsCatalogue TradeSensitivitiesToRiskFactorsCatalogueReferenceConfig
TradeSensitivitiesToTradeAttributes TradeSensitivitiesToTradeAttributesReferenceConfig
AllSensiStores AllSensiStoresConfig
CorporateAction CorporateActionStoreConfig
DynamicTenors DynamicTenorsStoreConfig
MarketData MarketDataStoreConfig
SensiLadders SensiLaddersStoreConfig
Tenors TenorsStoreConfig
TradeSensitivities TradeSensitivitiesStoreConfig
VectorMarketData VectorMarketDataStoreConfig
VectorTradeSensitivities VectorTradeSensitivitiesStoreConfig
VaRDatastoreDescriptionConfig VaRStoreConfig
VaRAggregatedDatastoreDescriptionConfig VaRAggregatedStoreConfig
VaRFlatDatastoreDescriptionConfig VaRFlatStoreConfig
Application configuration
Changes to configuration classes
Class Changes
MarketRiskManagerConfig Implements IDatastoreSchemaDescriptionConfig instead of IParameterAwareDatastoreSchemaDescriptionConfig.
MarketRiskConfig No longer imports ParameterStoreConfig.
Added beans

The following beans have been added in the mr-common-config module. They can be replaced by defining a new bean, with the relevant @Qualifier and an @Primary annotation.

Constant Qualifier Type Details
SP_QUALIFIER__DAY_COUNT_CONVENTION “day-count-convention” IDayCountConvention Provides the day count convention to apply in the maturity converter.
SP_QUALIFIER__TENOR_CONVERTER “tenor-converter” ITenorConverter Provides the tenor converter to use in the maturity converter.

The MaturityConverterConfig class no longer implements the interface IMaturityConverterConfig, that was unused.

Modified beans

The following qualifiers have been added to existing beans. Those beans can be replaced by defining a new bean, with the relevant @Qualifier and an @Primary annotation.

Constant Qualifier Type Details
SP_QUALIFIER__DIRECT_QUERY_DATES_INITIAL_LOAD_FILTER_CONDITION “direct-query-dates-initial-load-filter-condition” com.qfs.condition.ICondition As of dates to include in initial load on a DirectQuery node
SP_QUALIFIER__DIRECT_QUERY_DATES_ACTIVEPIVOT_INSTANCE_DESCRIPTION_FILTER_CONDITION “direct-query-dates-activepivot-instance-description-filter-condition” com.quartetfs.fwk.filtering.ICondition As of dates to include in initial load on a DirectQuery node (with a different type of condition object)
Changes to conditional interfaces

The @ConditionalOnLocalData will now match if the corresponding mr.data-load.source property is not set.

Files removed

Store configuration
Class Details
ParameterDatastoreDescriptionConfig Configuration for the ActiveMonitor-specific Parameters store, no longer required.
Dimensions configuration
Class Details
CommonDimensionsConfig Class containing static methods for the creation of common dimensions. Replaced by individual *DimensionConfig or *Dimension classes.
TradeAttributesDimensionConfig Replaced by TradeAttributesCommonDimensionConfig and TradeAttributesLightDimensionConfig for dimension beans and TradeAttributesDimension for static dimension creation methods.

Properties

With this release, the vast majority of MR properties have been migrated to Spring ConfigurationProperties classes. This ensures that each property has a single source of truth for default values, and allows us to inject properties throughout the codebase in a type-safe, reusable manner. Furthermore, developers gain useful auto-completion - including descriptions, default, and available values - when updating property values in the application.yaml or application.properties file.

Changes to properties files

Removed properties files

Properties that are defined in ConfigurationProperties classes no longer need to be present in .properties or .yaml files, and so we have been able to remove a number of property files:

  • greek-based-pl-formula-rules.properties
  • hibernate.properties
  • mr-config.properties
  • mr.properties
  • signoff.export.properties
  • signoff-properties

Properties in these files will no longer be imported into the application.

Changes to properties

Removed properties

A number of properties have been removed as they were no longer used:

Property name Property file
cash.currency.level mr-config.properties
correlation.currency.level mr-config.properties
cross.gamma.currency.level mr-config.properties
ctx.dynamic.bucketing.set mr-config.properties
daytoday.hierarchy mr-config.properties
delta.currency.level mr-config.properties
dynamic.maturities.hierarchy mr-config.properties
dynamic.moneyness.hierarchy mr-config.properties
dynamic.tenors.hierarchy mr-config.properties
gamma.currency.level mr-config.properties
notional.currency.level mr-config.properties
risk.mandate.level mr-config.properties
theta.currency.level mr-config.properties
vanna.currency.level mr-config.properties
vector.index.interpolation.setting mr-config.properties
vega.currency.level mr-config.properties
volga.currency.level mr-config.properties
activemonitor.restUrl mr.properties
csvSource.dataset.import.aggregated mr.properties
csvSource.dataset.import.store mr.properties
csvSource.pollingDelay mr.properties
sensiFilePattern mr.properties
signOffMandatesFromBaseFilePattern mr.properties
Modified properties
Moved to application.yaml

A number of properties have been moved to the application.yaml file:

Old property name Old property file New property name
content-service.db.defaultAutoCommit hibernate.properties mr.application.content-server.db.defaultAutoCommit
content-service.db.driverClassName hibernate.properties mr.application.content-server.db.driverClassName
content-service.db.file.name hibernate.properties mr.application.content-server.db.file.name
content-service.db.hibernate.connection.provider_class hibernate.properties mr.application.content-server.db.hibernate.connection.provider_class
content-service.db.hibernate.dialect hibernate.properties mr.application.content-server.db.hibernate.dialect
content-service.db.hibernate.format_sql hibernate.properties mr.application.content-server.db.hibernate.format_sql
content-service.db.hibernate.show_sql hibernate.properties mr.application.content-server.db.hibernate.show_sql
content-service.db.jdbcInterceptors hibernate.properties mr.application.content-server.db.jdbcInterceptors
content-service.db.url hibernate.properties mr.application.content-server.db.url
sign-off.adjustments.scheduler-pool-size signoff.properties sign-off.adjustments.scheduler-pool-size
starter.documentationRoot mr.properties starter.documentationRoot
starter.javadocBaseUrl mr.properties starter.javadocBaseUrl
starter.javadocVersion mr.properties starter.javadocVersion
starter.serverUrl mr.properties starter.serverUrl
Migrated to ConfigurationProperties classes

The majority of the remaining properties have been migrated to ConfigurationProperties classes and removed from the properties files.

ConfigurationProperties enforce hierarchical naming for properties that are grouped in the same class. As a result, most of the properties in MR have been renamed. We have taken this opportunity to apply a few semantic rules to property names:

  • each MR property is now prefixed with mr..
  • where a property is used in relation to another tool, that tool is included in the prefix, e.g. mr.sign-off.date-hierarchies or mr.whatif.file-upload.
  • where a property is solely used in a module or predominantly relates to a module, that is indicated in the prefix, e.g. mr.sensi.agg-cache, or mr.sign-off.sensi.levels.

In some cases there is a one-to-one mapping between an old property name and a new property name, and you simply have to swap the old for the new in your properties/yaml files. For example bucketing.days.month is now mr.bucketing.days.month.

In other cases, we have deconstructed the more complex properties to provide a cleaner interface.

In simple cases we have taken properties where the value is a string containing a comma-separated list and converted it to a property of type list. For example, you may have previously used mr.bucketing.sets.maturities=DEFAULT,REDUCED, whereas you would now use:

in yaml format:

bucketing:
  sets:
    maturities:
      - DEFAULT
      - REDUCED

in properties format:

bucketing.sets.maturities[0]=DEFAULT
bucketing.sets.maturities[1]=REDUCED

This provides type safety and allows you to focus on providing the appropriate values rather than ensuring the correct format is used.

In more complex cases the properties have been deconstructed further:

  • properties in the greek-based-pl-formula-rules.properties prefixed with formula.rule have been deconstructed. Previously, each of these properties contained a sensitivity type and a risk class in the name, and the value was a comma-separated list of rule components, i.e. formula.rule.<sensi_name>.<risk_class>=<type>,<shift>....
    Now, the components have been separated into distinct properties. Default properties have been provided for each of the previously defined rules and custom rules can be provided for a new risk class on an existing sensitivity, or a new sensitivity and risk class. This would appear as follows:
mr:
  sensi:
    rules:
      delta:
        base:
          type: ABSOLUTE
          ...
        custom:
          my-new-risk-class:
            type: RELATIVE
            ...
      custom:
        my-new-sensi:
          mew-new-risk-class:
            type: RELATIVE
            ...
  • properties named (maturities|moneyness|tenors).fact.levels.* had values that were maps of sensitivity types to lists of levels, for instance, maturities.fact.levels.labels=Vega::Maturity@Maturities@Risk,Vanna::Maturity@Maturities@Risk,Volga::Maturity@Maturities@Risk. Each sensitivity type that was previously defined is now a separate property and the value is a list of LevelIdentifiers. Lists can also be provided for custom sensitivity types. For example:
mr:
  maturities:
    vanna-fact-levels:
      - Maturity@Maturities@Risk
    custom-fact-levels:
      delta:
        - Maturity@Maturities@Risk
  • the sign-off.extraction.templates property contained a similar map of cubes to a list of filenames, for instance, DEFAULT:CubeAdjustmentExport,FXRateExport,BookParentChildExport;VaR-ES Cube:VaRESCubeExport,VaRESAggCubeExport,VaRESCubeMetricExport,VaRSummaryExport;VaR-ES Cube|VaR:VaRESCubeMetricVaROnlyExport;Sensitivity Cube:SensiCubeExport,SensiAggCubeExport,SensiCubeMetricExport;PLCube:PLCubeExport,PLAggCubeExport,PnLSummaryExport. This property is now a map type with the cube name as the key and a strongly-typed ExportFilenamesMdxTemplate class as the value. For example:
mr:
  sign-off:
    extraction:
      templates:
        var-es:
          cube-name: VaR-ES Cube
          export-file-names: VaRESCubeExport,VaRESAggCubeExport,VaRESCubeMetricExport,VaRSummaryExport
        pl:
          cube-name: PLCube
          export-file-names: PLCubeExport,PLAggCubeExport,VaRESCubeMetricExport,PnLSummaryExport
  • for properties prefixed with formula.input, formula.order, or sensi.type, you could configure custom sensitivity types by appending the type to the property prefix, for example formula.input.my-new-type. These properties have now been grouped under the mr.sensi.types prefix. To add new sensitivity types, you now add custom to the prefix: mr.sensi.types.custom.my-new-type.(input|order|regex).

This spreadsheet provides an overview of all the MR properties now contained in ConfigurationProperties classes, along with the type of the property, a description, the default value, and the old property(s) that it replaces.

Unchanged properties

Atoti Market Risk includes configuration for Atoti Data Connectors and Atoti Sign-Off. Neither of these have been migrated to ConfigurationProperties and so properties for these continue to be externalized in properties files (dee.export.properties, azureCredentials.properties and application.yaml). Where these properties are accessed in the code, the Spring @Value annotation is used.

ConfigurationProperties classes

A number of new ConfigurationProperties classes have been created. These are all public, however, they are final and all fields are immutable. Where the class implements an interface, we would suggest using this in your application. The classes are structured to provide the best API for setting properties. For example, by using inner classes for nested properties. The interfaces abstract this implementation to provide simplified access for properties, often in a way that is consistent with the previous format of the property.

Module Class Property prefix Description
mr-application com.activeviam.mr.application.config.content.ContentServerProperties mr.application.content-server Properties to configure the content server.
mr-application com.activeviam.mr.application.config.properties.SignOffProperties mr.sign-off Properties to configure the Sign-Off module for Atoti Market Risk.
mr-application com.activeviam.mr.application.whatif.upload.properties.WhatIfFileUploadProperties mr.whatif.file-upload.data Properties to configure the What-if module for Atoti Market Risk.
mr-combined-config com.activeviam.mr.combined.cube.CombinedAggregateCacheProperties mr.combined.agg-cache Properties to configure the aggregate cache for the combined cube.
mr-common-config com.activeviam.mr.common.config.spring.properties.TenorMaturityAndMoneynessProperties mr Properties to configure features related to tenors, maturities, and moneyness.
mr-common-config com.activeviam.mr.common.config.spring.properties.BucketingDayProperties mr.bucketing.days Properties to configure bucketing based on pillars. Implements IBucketingDayValues.
mr-common-config com.activeviam.mr.common.config.spring.properties.BucketingSetProperties mr.bucketing.sets Properties to configure bucketing based on context values.
mr-common-config com.activeviam.mr.common.config.spring.properties.CommonFilePatternProperties mr.common.file-patterns Properties to configure file patterns for common sources.
mr-common-config com.activeviam.mr.common.config.spring.properties.ConfidenceProperties mr.confidence Properties to configure VaR confidence levels. Implements IConfidenceService.
mr-common-config com.activeviam.mr.common.config.spring.properties.ContextValueProperties mr.cubes.context-values Properties to configure context values.
mr-common-config com.activeviam.mr.common.config.spring.properties.CubeFormatProperties mr.cubes.formatters Properties to configure cube formatting. Implements IFormatterService.
mr-common-config com.activeviam.mr.common.config.spring.properties.LevelsProperties mr.cubes.levels Properties to configure cube levels.
mr-common-config com.activeviam.mr.common.config.spring.properties.DataLoadProperties mr.data-load Properties to configure loading of source data.
mr-common-config com.activeviam.mr.common.config.spring.properties.FeatureProperties mr.enable Properties to enable or disable specific features.
mr-common-config com.activeviam.mr.common.config.spring.properties.FXProperties mr.fx Properties to configure FX-related features.
mr-common-config com.activeviam.mr.common.config.spring.properties.MessengerProperties mr.messenger Properties to configure distribution.
mr-common-config com.activeviam.mr.common.config.spring.properties.MetricProperties mr.metrics Properties to configure relative metrics for VaR-ES calculations. Implements IMetricsService.
mr-common-config com.activeviam.mr.common.config.spring.properties.PnlDistributionProperties mr.pnl-distribution Properties to configure the PnLDistributionPostProcessor. Implements IPnlDistributionConfigurationService.
mr-common-config com.activeviam.mr.common.config.spring.properties.RiskProperties mr.risk Properties to configure risk related features.
mr-common-config com.activeviam.mr.common.config.spring.properties.sensi.rules.SensiRuleProperties mr.sensi.rules Properties to configure rules for PnL Explain calculations. Implements ISensiRuleConfigurationService.
mr-common-config com.activeviam.mr.common.config.spring.properties.CommonSignOffHierarchyProperties mr.sign-off.common.hierarchy Properties to configure hierarchies for the Sign-Off module for multiple modules.
mr-common-config com.activeviam.mr.common.config.spring.properties.SparseVectorProperties mr.sparse-vectors Properties to configure sparse vectors.
mr-common-config com.activeviam.mr.common.config.spring.properties.TaylorProperties mr.taylor Properties to configure Taylor calculations.
mr-common-config com.activeviam.mr.common.config.spring.properties.CommonVarProperties mr.var Properties to configure VaR calculations across multiple modules. Implements IWeightedVarConfigurationService, IComponentVarConfigurationService.
mr-pnl-config com.activeviam.mr.pnl.config.properties.PnlAggregateCacheProperties mr.pnl.agg-cache Properties to configure the aggregate cache for the PnL cubes.
mr-pnl-config com.activeviam.mr.pnl.config.properties.PnlFilePatternProperties mr.pnl.file-patterns Properties to configure file patterns for PnL sources.
mr-pnl-config com.activeviam.mr.pnl.config.properties.PnLSignOffProperties mr.sign-off.pnl Properties to configure the Sign-Off module for PnL cubes.
mr-sensi-config com.activeviam.mr.sensi.config.properties.SensiAggregateCacheProperties mr.sensi.agg-cache Properties to configure the aggregate cache for the sensitivity cubes.
mr-sensi-config com.activeviam.mr.sensi.config.properties.SensiFilePatternProperties mr.sensi.file-patterns Properties to configure file patterns for sensitivity sources.
mr-sensi-config com.activeviam.mr.sensi.config.properties.SensiMaturityProperties mr.sensi.maturity.default Properties to configure maturity for sensitivities.
mr-sensi-config com.activeviam.mr.sensi.config.properties.types.SensiTypeProperties mr.sensi.types Properties to configure behavior for specific sensitivity types. Implements ISensiTypeConfigurationService.
mr-sensi-config com.activeviam.mr.sensi.config.properties.SensiSignOffProperties mr.sign-off.sensi Properties to configure the Sign-Off module for sensitivity cubes.
mr-var-config com.activeviam.mr.var.config.properties.VaRSignOffProperties mr.sign-off.var Properties to configure the Sign-Off module for VaR cubes.
mr-var-config com.activeviam.mr.var.config.properties.VarAggregateCacheProperties mr.var.agg-cache Properties to configure the aggregate cache for the VaR cubes.
mr-var-config com.activeviam.mr.var.config.properties.VarFilePatternProperties mr.var.file-patterns Properties to configure file patterns for VaR sources.

Changes to impacted classes

The move to ConfigurationProperties has impacted a number of areas of the codebase. These additional changes are indicated here:

Removal of static constants

A number of static constants existed to refer to property names. These have now been removed. The removed constants are as follows:

Module Class Constant
mr-common-lib BucketConstants * (this class has been removed entirely)
mr-common-lib ConfigConstants * (this class has been removed entirely)
mr-application EnvironmentConstants DEFAULT_APP_ENV_PROPS_FILE_PATH
mr-common-lib CalculationsConstants MAXIMUM_BUCKET_NUMBER
mr-common-lib PropertyConstants SPARSE_VECTORS_STORES
mr-common-lib PropertyConstants SPARSE_VECTOR_DENSITY_THRESHOLD
mr-common-lib SpringConstants SP_CONFIG__DATA_LOAD_PREFIX
mr-common-lib SpringConstants SP_CONFIG__DATA_MODEL_PREFIX
mr-common-lib SpringConstants SP_CONFIG__SCALAR_PROPERTY
mr-common-lib SpringConstants SP_CONFIG__AGGREGATED_PROPERTY
mr-common-lib SpringConstants SP_CONFIG__SOURCE_PROPERTY
mr-common-lib SpringConstants SP_CONFIG__AZURE_SOURCE
mr-common-lib SpringConstants SP_CONFIG__LOCAL_FILESYSTEM
mr-common-lib SpringConstants SP_CONFIG__ENABLE_CUBES_PREFIX
mr-common-lib SpringConstants SP_CONFIG__VAR
mr-common-lib SpringConstants SP_CONFIG__PNL
mr-common-lib SpringConstants SP_CONFIG__SENSI
mr-common-lib SpringConstants SP_CONFIG__VAR_SUMMARY
mr-common-lib SpringConstants SP_CONFIG__PNL_SUMMARY
mr-common-lib SpringConstants SP_CONFIG__SENSI_SUMMARY
mr-common-lib SpringConstants SP_CONFIG__MARKET_DATA
mr-common-lib SpringConstants SP_CONFIG__COMMON
mr-common-lib SpringConstants SP_PROFILE__EMBEDDED_MONITOR - not props related
mr-common-lib PropertyConstants TRADE_PNLS_FILE_PATTERN
mr-common-lib PropertyConstants PNLS_FILE_PATTERN
mr-common-lib PropertyConstants TRADE_ATTRIBUTES_FILE_PATTERN
mr-common-lib PropertyConstants FX_RATES_FILE_PATTERN
mr-common-lib PropertyConstants SCENARIOS_FILE_PATTERN
mr-common-lib PropertyConstants BOOK_PARENT_CHILD_FILE_PATTERN
mr-common-lib PropertyConstants LEGAL_ENTITY_PARENT_CHILD_FILE_PATTERN
mr-common-lib PropertyConstants COUNTERPARTY_PARENT_CHILD_FILE_PATTERN
mr-common-lib PropertyConstants COUNTERPARTIES_FILE_PATTERN
mr-common-lib PropertyConstants COUNTRIES_FILE_PATTERN
mr-common-lib PropertyConstants RISK_FACTOR_MARKET_SHIFTS_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_TENORS_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_MATURITIES_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_MONEYNESS_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_DYN_TENORS_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_DYN_MATURITIES_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_DYN_MONEYNESS_FILE_PATTERN
mr-common-lib PropertyConstants RISK_FACTORS_CATALOGUE_FILE_PATTERN
mr-common-lib PropertyConstants MARKET_DATA_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_LADDER_DATA_FILE_PATTERN
mr-common-lib PropertyConstants MARKET_DATA_SETS_FILE_PATTERN
mr-common-lib PropertyConstants ROUNDING_METHODS_FILE_PATTERN
mr-common-lib PropertyConstants QUANTILES_FILE_PATTERN
mr-common-lib PropertyConstants VAR_IMPORT_FILE_PATTERN
mr-common-lib PropertyConstants SUMMARY_TRADES_PNL_FILE_PATTERN
mr-common-lib PropertyConstants SUMMARY_SENSITIVITY_FILE_PATTERN
mr-common-lib PropertyConstants SUMMARY_PNL_FILE_PATTERN
mr-common-lib PropertyConstants PNL_IMPORT_FILE_PATTERN
mr-common-lib PropertyConstants SENSI_IMPORT_FILE_PATTERN
mr-common-lib PropertyConstants CORPORATE_ACTION_FILE_PATTERN
mr-common-lib PropertyConstants DIGEST_STORE_NAME_FILE_PATTERN
mr-common-lib EnvironmentConstants HIBERNATE_ENV_PROPS_FILE_PATH_SYSPROP
mr-common-lib EnvironmentConstants DEFAULT_HIBERNATE_ENV_PROPS_FILE_PATH
mr-common-lib EnvironmentConstants BOOKMARK_PROPERTIES_FILE
mr-common-lib EnvironmentConstants CONTENT_SERVER_BOOKMARKS_DEFAULT_OWNERS_PROP
mr-common-lib EnvironmentConstants CONTENT_SERVER_BOOKMARKS_DEFAULT_READERS_PROP
mr-common-lib EnvironmentConstants EXPORT_BOOKMARKS_TO_FILE
mr-common-lib EnvironmentConstants EXPORT_BOOKMARKS_TO_FOLDER
mr-common-lib EnvironmentConstants CONTENT_SERVER_URL
mr-common-lib EnvironmentConstants EXPORT_FOLDER
mr-common-lib LocalContentServiceConfig HIBERNATE_PROPERTIES_FILE
mr-common-lib LocalContentServiceConfig CALCULATED_MEMBER_ROLE_PROPERTY
mr-common-lib LocalContentServiceConfig KPI_ROLE_PROPERTY
mr-common-lib RemoteContentServiceConfig REMOTE_API_URL_PROPERTY
mr-common-lib RemoteContentServiceConfig REMOTE_PREFIX_PROPERTY
Changes to MeasureParameter classes

The measure parameter classes and interfaces are largely constructed with property values and return property values from their method calls. As a result, they have changed significantly with the move to ConfigurationProperties. These changes are as follows:

Class Removed constructor parameters Added constructor parameters Removed methods Added methods
CommonMeasureParameters Environment env IPnlDistributionConfigurationService pnlDistributionConfigurationService, String getDoubleFormatter() IPnlDistributionConfigurationService getPnlDistributionConfigurationService,
String asOfDateLevel IFormatterService formatters String getDoublePercentageFormatter() IFormatterService getFormatters
String scenarioSetLevel IMetricsService metricsService String getIntFormatter() IMetricsService getMetricsService
String dayToDayHierarchy LevelsProperties levelParameters String getTimestamp() LevelsProperties getLevelParameters
String specificDates IConfidenceService confidenceService String getDoubleArrayFormatter() IConfidenceService getConfidenceService
String marketDataSetLevel String getFxRiskClass()
String marketShiftDateLevel String getQuantile2rankLevel()
String currencyLevel getVaeDefaultConfidence()
String displayCurrencyLevel String getMarketShiftSpecificDates()
String riskFactorLevel
String riskClassLevel
String roundingLevel
String quantilesLevel
String tradesLevel
String quantile2rankLevel
double vaeDefaultConfidence
String notionalCurrencyLevel
String scenarioAnalysisLevel
String percentileLevel
String doubleFormatter
String doublePercentageFormatte
String intFormatter
String timestamp
String doubleArrayFormatter
String startIndex
String endIndex
String marketShiftSpecificDate
MarketDataMeasureParameters String doubleFormatter IFormatterService formatters String getDoubleFormatter() IFormatterService getFormatters()
String intFormatter FXProperties fxProperties String getIntFormatter() FXProperties getFxProperties()
String timestampFormatter LevelsProperties levelParameters String getTimestampFormatter()
String displayedCcyOrder String getDisplayedCcyOrder()
String sensitivityLevel String getSensitivityLevel()
String tenorLevel
String maturityLevel
String moneynessLevel
String asOfDateLevel
String marketDataSetLevel
String riskFactorLevel
String riskClassLevel
String sensitivityNameLevel
String tenorDateLevel
String maturityDateLevel
String scenarioSetLevel
String scenarioAnalysisLevel
String startIndexLevel
String endIndexLevel
String sensitivityKindLevel
String srcCcyLevel
String displayCcyLevel
String mdCcyLevel
String riskFactor2Level
String tenor2Level
String maturity2Level
String tenorDate2Level
String maturityDate2Level
String moneyness2Level
PnLMeasureParameters String doubleFormatter LevelsProperties levelParameters String getDoubleFormatter() IFormatterService getFormatters()
String intFormatter IFormatterService formatters String getIntFormatter()
String timestampFormatter String getTimestampFormatter()
String asOfDateLevel
String currencyLevel
String displayCcyLevel
SensiMeasureParameters String tradesLevel LevelsProperties levelParameters String getDefaultMaturity() LocalDate getDefaultMaturity()
String booksLevel TenorMaturityAndMoneynessProperties tmmProps boolean isCrossSensi()
String currencyLevel LocalDate defaultMaturity String getMarketShiftSpecificDates()
String displayCurrencyLevel RiskProperties riskProperties
String riskClassLevel IConfidenceService confidenceService
String sensitivityNameLevel IPnlDistributionConfigurationService pnlDistributionConfigurationService
String asOfDateLevel TaylorProperties taylorProperties
String riskFactorLevel IMetricsService metricsService
String dynamicTenorsHierarchy
String dynamicMaturitiesHierarchy
String dynamicMoneynessHierarchy
String tenorsFactLevels
String maturitiesFactLevels
String moneynessFactLevels
String tenorsAnalysisLevel
String maturitiesAnalysisLevel
String moneynessAnalysisLevel
String tenorAndMaturityDefaultValue
String riskFactorLevel2
String scenarioSetLevel
String scenarioAnalysisLevel
String marketDataSetLevel
String marketShiftDateLevel
String ladderShiftsLevel
String ladderAvailabilityLevel
String startIndex
String endIndex
String dayToDayHierarchy
String specificDates
String defaultMaturity
String riskLevelSplit
String doubleFormatter
String doublePercentageFormatter
String intFormatter
String timestamp
String doubleArrayFormatter
String roundingLevel
String quantilesLevel
String quantile2rankLevel
double vaeDefaultConfidence
String notionalCurrencyLevel
String percentileLevel
Environment env
String marketShiftSpecificDates
VaRMeasureParameters Environment env IPnlDistributionConfigurationService pnlDistributionConfigurationService String[] getSignOffMemberNames() RiskProperties getRiskProperties
String tradesLevel IFormatterService formatters List getReferences(String listId)
String quantile2rankLevel LevelsProperties levelParameters
String asOfDateLevel IConfidenceService confidenceService
String currencyLevel IMetricsService metricsService
String notionalCurrencyLevel RiskProperties riskProperties
String displayCurrencyLevel
String scenarioSetLevel
String scenarioAnalysisLevel
String percentileLevel
String marketDataSetLevel
String marketShiftDateLevel
String riskClassLevel
String riskFactorLevel
String roundingLevel
String quantilesLevel
String fxRiskClass
String dayToDayHierarchy
String specificDates
String[] signOffMemberNames
String doubleFormatter
String doublePercentageFormatter
String intFormatter
String timestamp
String doubleArrayFormatter
double vaeDefaultConfidence
List riskClasses
List confidenceLevels
String startIndex
String endIndex
String marketShiftSpecificDates
Changes to class constructors

Many classes set fields to property values by using the Spring @Value annotation, directly on the field or on a constructor parameter. For all those properties that are now contained within ConfigurationProperties classes, these @Value annotations have been replaced by the relevant ConfigurationProperties class. In accordance with Spring best practice, we have preferred constructor injection to autowiring at field level. Therefore, the constructors for many classes have changed (some substantially) whilst other classes now have a constructor where previously they did not. Every constructor change is not listed exhaustively here but the affected classes are as follows:

  • ACopperPostProcessor
  • ACopperWPostProcessor
  • ATenorAwareSchema
  • CashSourceParameters
  • CopperESPostProcessors
  • CopperETGPostProcessor
  • CopperShiftPercentilePostProcessor
  • CopperVaEPostProcessor
  • CopperVaRPostProcessors
  • CopperWEsPostProcessor
  • CopperWEtgPostProcessors
  • CopperWVaEPostProcessors
  • CopperWVaRPostProcessor
  • CorrelationSourceParameters
  • CrossGammaSourceParameters
  • CubeLevelAdjustedMeasuresBuilder
  • DateWithMarketShiftDateDimensionConfig
  • DeltaSourceParameters
  • DQMarketDataCubeAggregateProviderConfig
  • DQPnlCubeAggregateProviderConfig
  • DQSensiCubeAggregateProviderConfig
  • DQVarESCubeAggregateProviderConfig
  • FileUploadWhatIfService
  • GammaSourceParameters
  • InitialDataDirectQueryConfig
  • InputSelector
  • InterpolationConfiguration
  • LocalContentServiceConfig
  • MarketDataCubeAggregateProviderConfig
  • MarketDataCubeDimensionsConfig
  • MarketDataStoreConfig
  • MarketShiftStoreConfig
  • MaturityConverterConfig
  • MRCombinedCube
  • MRCombinedCubeAggregateProviderConfig
  • MRCombinedCubeAlias
  • PnlCubeAggregateProviderConfig
  • PnlCubeMeasuresConfig
  • PnLExplainFormulaProvider
  • PnLlCubeConfig
  • PnLSignOffAnalysisConfig
  • PnlSummaryCubeConfig
  • RemoteContentServiceConfig
  • RiskPostProcessorInjector
  • ScalarSensiCsvSourceParametersProviderConfig
  • SensiCubeAggregateProviderConfig
  • SensiCubeConfig
  • SensiCubeContextValueConfig
  • SensiCubeDimensionsConfig
  • SensiHierarchyUtilsConfig
  • SensiSignOffAnalysisConfig
  • SensiSummaryCubeConfig
  • SensiSummaryCubeDimensionsConfig
  • SensitivitySignOffMeasuresConfig
  • SignOffTaskConfig
  • StaticResourcesHandler
  • StdSensiCsvSourceParametersProviderConfig
  • ThetaSourceParameters
  • TradeSensitivitiesStoreConfig
  • VannaSourceParameters
  • VarESCubeAggregateProviderConfig
  • VarESCubeConfig
  • VarESCubeContextValueConfig
  • VarESCubeDimensionsConfig
  • VarESCubeMeasuresConfig
  • VarESSummaryCubeConfig
  • VarESSummaryCubeDimensionsConfig
  • VarSignOffAnalysisConfig
  • VectorMarketDataStoreConfig
  • VegaSourceParameters
  • VolgaSourceParameters
Changes to post-processors

The keys used to set properties on a number of post-processors have changed, as have the corresponding constants. These are as follows:

Class Old property key Old property constant New property key New property constant
AESPostProcessor es.confidence.default.value ConfigConstants.ES_CONFIDENCE_DEFAULT_VALUE defaultConfidenceLevel AESPostProcessor.DEFAULT_CONFIDENCE_LEVEL_PROPERTY
AETGPostProcessor etg.confidence.default.value ConfigConstants.ETG_CONFIDENCE_DEFAULT_VALUE defaultConfidenceLevel AETGPostProcessor.DEFAULT_CONFIDENCE_LEVEL_PROPERTY
AVaEPostProcessor vae.confidence.default.value ConfigConstants.VAE_CONFIDENCE_DEFAULT_VALUE defaultConfidenceLevel AVaEPostProcessor.DEFAULT_CONFIDENCE_LEVEL_PROPERTY
AVaRPostProcessor var.confidence.default.value ConfigConstants.VAR_CONFIDENCE_DEFAULT_VALUE defaultConfidenceLevel AVaRPostProcessor.DEFAULT_CONFIDENCE_LEVEL_PROPERTY
AWeightedESPostProcessor weightedvar.lambda.default.value ConfigConstants.WEIGHTED_VAR_LAMBDA_DEFAULT_VALUE defaultWeightedVar AWeightedESPostProcessor.DEFAULT_WEIGHTED_VAR_PROPERTY
AWeightedESPostProcessor weightedvar.pnl.oldest.first ConfigConstants.WEIGHTED_VAR_PNL_OLDEST_FIRST isOldestFirst AWeightedESPostProcessor.IS_OLDEST_FIRST_PROPERTY
AWeightedETGPostProcessor weightedvar.lambda.default.value ConfigConstants.WEIGHTED_VAR_LAMBDA_DEFAULT_VALUE defaultWeightedVar AWeightedETGPostProcessor.DEFAULT_WEIGHTED_VAR_PROPERTY
AWeightedETGPostProcessor weightedvar.pnl.oldest.first ConfigConstants.WEIGHTED_VAR_PNL_OLDEST_FIRST isOldestFirst AWeightedETGPostProcessor.IS_OLDEST_FIRST_PROPERTY
AWeightedVaEPostProcessor weightedvar.lambda.default.value ConfigConstants.WEIGHTED_VAR_LAMBDA_DEFAULT_VALUE defaultWeightedVar AWeightedVaEPostProcessor.DEFAULT_WEIGHTED_VAR_PROPERTY
AWeightedVaEPostProcessor weightedvar.pnl.oldest.first ConfigConstants.WEIGHTED_VAR_PNL_OLDEST_FIRST isOldestFirst AWeightedVaEPostProcessor.IS_OLDEST_FIRST_PROPERTY
AWeightedVaRPostProcessor weightedvar.lambda.default.value ConfigConstants.WEIGHTED_VAR_LAMBDA_DEFAULT_VALUE defaultWeightedVar AWeightedVaRPostProcessor.DEFAULT_WEIGHTED_VAR_PROPERTY
AWeightedVaRPostProcessor weightedvar.pnl.oldest.first ConfigConstants.WEIGHTED_VAR_PNL_OLDEST_FIRST isOldestFirst AWeightedVaRPostProcessor.IS_OLDEST_FIRST_PROPERTY

Additionally, the static factory methods for a number of post-processors have changed. Where previously they required the Environment to be passed as a parameter, they now require one or more configuration class. These are as follows:

Class Method name New parameter(s) required
ESIndicesPostProcessor getPostProcessorDescription IConfidenceService
ESPostProcessor getPostProcessorDescription IConfidenceService
ETGIndicesPostProcessor getPostProcessorDescription IConfidenceService
ETGPostProcessor getPostProcessorDescription IConfidenceService
IncrementalESPostProcessor getPostProcessorDescription IConfidenceService
IncrementalETGPostProcessor getPostProcessorDescription IConfidenceService
IncrementalVaEPostProcessor getPostProcessorDescription IConfidenceService
IncrementalVaRPostProcessor getPostProcessorDescription IConfidenceService
ParametricVaRPostProcessor getPostProcessorDescription IConfidenceService
ParametricVaEPostProcessor measure IConfidenceService
PnLDistributionPostProcessor getPostProcessorDescription IPnlDistributionConfigurationService
ScalarVaRPostProcessor getPostProcessorDescription IConfidenceService
VaEIndicesPostProcessor getPostProcessorDescription IConfidenceService
VaEPostProcessor getPostProcessorDescription IConfidenceService
VaRIndicesPostProcessor getPostProcessorDescription IConfidenceService
VaRPostProcessor getPostProcessorDescription IConfidenceService
WeightedESIndicesPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedESPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedETGIndicesPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedETGPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedVaEIndicesPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedVaEPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedVaRIndicesPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
WeightedVaRPostProcessor getPostProcessorDescription IConfidenceService, IWeightedVarConfigurationService
Removal of autowired Environment fields

The Spring Environment class has been removed as an autowired field from a number of classes, these are:

  • FileUploadWhatIfSubmitter
  • ASecurityConfig
  • StaticResourcesHandler
  • FileUploadAddressSuppliers
Changes to Aware interfaces

The ISpringEnvAware interface has been removed as no post-processors now retrieve properties directly from the Environment. The IPnlDistributionAware interface has been added to allow the PnLDistributionPostProcessor to retrieve configuration. The IReferenceLevelsAware interface has been added to allow reference levels to be set for relevant postprocessors.

Changes to formatter properties

The String getDoubleFormatter() method on the IStatisticalMeasures interface has been replaced by the IFormatterService getFormatters() method.

The ILadderExpansionMeasures.getIdentityMeasure and the INativeCurrencyMeasures.getIdentityMeasure methods now expects an IFormatterService parameter in place of a String format.

Changes to sensitivity rule and type properties

The getCalculationMethod methods have been removed from the CommonPostProcessorUtils classes. This functionality is now provided by the ISensiRuleConfigurationService interface and the corresponding SensiRuleProperties` class.

The getFormulaInput method on the IInputSelector interface now returns a SensitivityInput type, in place of a String. This is intended to provide type-safety.

The ABSOLUTE, RELATIVE, FX_RELATIVE & DHS constants on the PnLExplainFormulaProvider class have been removed. The SensiRuleType class should be used instead for type-safety. There are a number of static constant singletons on this class, each representing one of the previous constants.

The SENSI_ONLY, LADDER_ONLY, LADDER_FIRST constants on the SensitivitiesConstants class have been removed. The SensiInput enum should be used instead for type-safety.

Changes to metric properties

The abstract measure factory classes - ATaylorFactory/AVaRFactory - previously provided methods which returned metric configuration from properties: getReferences/getSuffix/getFolder. This configuration is now encapsulated in the IMetricsService interface and the corresponding MetricsProperties class. Therefore, these methods have been removed. You can instead retrieve the IMetricsService from the corresponding get method on the ATaylorChain/AVaRESChain abstract chain classes. All provided measure chains have been updated to use the new service.

Changes to What-If properties

The following method signatures have changed to improve type-safety:

  • FileUploadWhatIfService.copyFilesToWhatif - now expects a Path[] instead of a String[]
  • FileUploadWhatIfService.createBranch - now expects a Path instead of a String
  • FileUploadWhatIfRestfulService.createBranch - now expects a Path[] instead of a String[]
Changes to Sign-Off properties
Module Class Comment
mr-application MarketRiskConfig The MarketRiskConfig class now imports the SignOffPropertiesConfig configuration class.
“classpath:reporting.properties” has been removed from the @PropertySource import since ConfigurationProperties are used instead.
mr-application AdjustmentExecutionConfig The class AdjustmentExecutionConfig does not use autowiring anymore, but constructor injection instead. It injects the three new classes:
_ VaRSignOffProperties
_ SensiSignOffProperties
* PnLSignOffProperties
The code in the cubeLevelAdjustment() method has been changed to use these three classes.
mr-application SignOffServiceConfig The code in the class SignOffServiceConfig has been changed to use the CommonSignOffHierarchyProperties and SignOffProperties ConfigurationProperties classes.
mr-application SignOffTaskConfig The class SignOffTaskConfig used the three new classes:
_ VaRSignOffProperties
_ SensiSignOffProperties
* PnLSignOffProperties
The line @PropertySource(“classpath:signoff.properties”) has been removed since ConfigurationProperties are now used.
mr-application SignOffParentConfig The import:
@PropertySource(value = {
"classpath:signoff.export.properties"
})
has been removed since ConfigurationProperties are now used.
mr-common-config CubeLevelAdjustedMeasuresBuilder The signature of the methods buildAdjustmentMeasures and buildAdjustmentMeasures have been changed to use strong types instead of strings.
mr-common-lib CubeLevelAdjustmentPostProcessor The signature of the method measure has been changed to use strong types instead of strings.
mr-common-lib ACubeLevelAdjustedMeasuresBuilder The init method now checks for strong types instead of strings when post-processor properties are defined.
mr-common-lib PropertyConstants The following constants have been removed:
_ ADJUSTABLE_MEASURES_PREFIX
_ ASOFDATE_LEVEL_DESCRIPTION_PREFIX
_ MARKET_DATA_SET_LEVEL_DESCRIPTION_PREFIX
_ SIGN_OFF_STATUS_LEVEL_DESCRIPTION_PREFIX
* HIERARCHIES_TO_EXCLUDE_DESCRIPTION_PREFIX
mr-pnl-config PnLImportSignOffAnalysisConfig The PnLImportSignOffAnalysisConfig class now injects the CommonSignOffHierarchyProperties and PnLSignOffProperties ConfigurationProperties classes in its constructor instead of property values.
PnLSignOffAnalysisConfig The PnLSignOffAnalysisConfig class now injects the CommonSignOffHierarchyProperties and PnLSignOffProperties ConfigurationProperties classes in its constructor instead of property values.
PnlCubeMeasuresConfig The PnlCubeMeasuresConfig class now injects the CommonSignOffHierarchyProperties and PnLSignOffProperties ConfigurationProperties classes in its constructor instead of one of the property values that is injects. The body of the buildCubeLevelAdjustmentsMeasures method has been changed according to that change.
mr-sensi-config SensiImportSignOffAnalysisConfig The SensiImportSignOffAnalysisConfig class now injects the CommonSignOffHierarchyProperties and SensiSignOffProperties ConfigurationProperties classes in its constructor instead of property values.
SensiSignOffAnalysisConfig The SensiSignOffAnalysisConfig class now injects the CommonSignOffHierarchyProperties and SensiSignOffProperties ConfigurationProperties classes in its constructor instead of property values.
SensitivitySummaryCubeMeasuresConfig The SensitivitySummaryCubeMeasuresConfig class now injects the CommonSignOffHierarchyProperties and SensiSignOffProperties ConfigurationProperties classes in its constructor instead of one of the property values that is injects. The body of the buildCubeLevelAdjustmentsMeasures method has been changed according to that change.
mr-var-config VaRImportSignOffAnalysisConfig The VaRImportSignOffAnalysisConfig class now injects the CommonSignOffHierarchyProperties and VaRSignOffProperties ConfigurationProperties classes in its constructor instead of property values.
VaRSignOffAnalysisConfig The VaRSignOffAnalysisConfig class now injects the CommonSignOffHierarchyProperties and VaRSignOffProperties ConfigurationProperties classes in its constructor instead of property values.
VarESCubeMeasuresConfig The VarESCubeMeasuresConfig class now injects the CommonSignOffHierarchyProperties and VaRSignOffProperties ConfigurationProperties classes in its constructor instead of one of the property values that is injects. The body of the buildCubeLevelAdjustmentsMeasures method has been changed according to that change.
Changes to FXProperties

In the configuration classes in which the old properties were used, the FXProperties ConfigurationProperties class is now used instead. In the following classes or beans, the FXProperties class is injected in the constructor:

Module Class or bean
mr-common-config FXRatesServiceConfig.fxRates
mr-common-config FXRatesServiceConfig.fxShifts
mr-common-config CurrencyDimensionConfig.currencyDimension
mr-market-data-config MarketDataCubeDimensionsConfig
mr-market-data-config MarketDataCubeDimensionsConfig
mr-market-data-config MarketDataCubeDimensionsConfig
mr-market-data-lib MarketDataMeasureParameters
mr-market-data-config MarketDataMeasureParametersBeans.mdMeasureParameters
mr-pnl-config PnlCubeDimensionsConfig.createOtherDimensions
mr-pnl-config PnlSummaryCubeDimensionsConfig.createPnlSummaryOtherDimensions
mr-pnl-config PnlSummaryCubeDimensionsConfig.createPnlSummaryOtherAggregatedDimensions
mr-sensi-config CurrenciesDimensionConfig.currenciesDimension
mr-sensi-config SensiCubeDimensionsConfig.sensiCubeDimensions
mr-sensi-config SensiCubeDimensionsConfig.sensiCubeScalarDimensions
mr-sensi-config CashParametersConfig.cashParameters
mr-sensi-config CorrelationParametersConfig.correlationParameters
mr-sensi-config CrossGammaParametersConfig.crossGammaParameters
mr-sensi-config DeltaParametersConfig.deltaParameters
mr-sensi-config DividendParametersConfig.DividendParametersConfig
mr-sensi-config GammaParametersConfig.gammaParameters
mr-sensi-config ThetaParametersConfig.ThetaParametersConfig
mr-sensi-config VannaParametersConfig.vannaParameters
mr-sensi-config VegaParametersConfig.vegaParameters
mr-sensi-config VolgaParametersConfig.volgaParameters
mr-var-config VarESCubeDimensionsConfig.createVarDimensions
mr-var-config VarESSummaryCubeDimensionsConfig.createVarFlatDimensions
mr-var-config VarMeasureParametersBeans.cubeMeasureParameters

Also, the CurrenciesDimensionConfig does not use autowiring anymore for the attribute sensiCurrencyHierarchies, but constructor injection for the bean CurrencyDimensionConfig.currencyDimension.

In the following, class, the FXProperties class is autowired:

Module Class
mr-sensi-config SensiSummaryCubeDimensionsConfig
Changes to BucketingDayProperties
Module Class or bean Comment
mr-common-lib CalculationsConstants _ In the method staticConfig the interface IBucketingDayValues is injected.
_ The constants DAYS_IN_YEAR_DEFAULT, DAYS_IN_MONTH_DEFAULT, and DAYS_IN_WEEK_DEFAULT have been removed.
* The unused attribute and the unused method getReferenceCurrencies() have been removed.
mr-application MarketRiskConfig.startManager The IBucketingDayValues interface is injected in the constructor and passed to the CalculationsConstants.staticConfig method.

Java 17 upgrade

The Solution is now built and intended to be run within a Java 17 JVM. Some functionality in the full application and in the regressions tests requires deep reflection access to Java packages. To enable access, please use the following JVM parameters, either through the command line or maven surefire/failsafe configuration.

--add-opens=java.base/java.util.concurrent=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED

note

The Solution will not work in a Java 11 JVM.

Other changes

Spring Security upgrade

We have upgraded to Spring Security 5.8.7. To do so, we override the version of Spring Security in Spring Boot by importing the common-dependencies-bom version 1.2.0 into the parent pom file. The common-dependencies-bom overrides the Spring Security version using Spring’s migration guide.

You will eventually need to migrate your own custom security configuration(s) in preparation for Spring Security 6.0. We have upgraded our out-of-the-box security configurations to help in this migration.

note

We recommend using your own custom security configuration(s) and referring to the out-of-the-box security configuration provided only as a sample.

The default security users and roles have not changed, only the way we implement the security. We have done so by making the following changes:

Stop Using WebSecurityConfigurerAdapter

We have replaced instances of WebSecurityConfigurerAdapter with SecurityFilterChain beans.

Use the new requestMatchers methods

In Authorize Http Requests, we have replaced invocations of http.authorizeHttpRequests((authz) -> authz.antMatchers(...)) with http.authorizeHttpRequests((authz) -> authz.requestMatchers(...)).

Use the new securityMatchers methods

We have replaced invocations of http.antMatchers(...) with http.securityMatchers(...).

As an example of the previous changes, the configuration for accessing the endpoint which exposes the JWT token changed from:

@Configuration
@Order(1)
public static abstract class AJwtSecurityConfigurer extends WebSecurityConfigurerAdapter {

   @Autowired
   protected ApplicationContext context;

   @Autowired
   @Qualifier(BASIC_AUTH_BEAN_NAME)
   protected AuthenticationEntryPoint authenticationEntryPoint;

   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http
              .antMatcher(JwtRestServiceConfig.REST_API_URL_PREFIX + "/**")
              // As of Spring Security 4.0, CSRF protection is enabled by default.
              .csrf().disable()
              // Configure CORS
              .cors().and()
              .authorizeRequests()
              .antMatchers("/**").hasAnyAuthority(ROLE_USER)
              .and()
              .httpBasic().authenticationEntryPoint(authenticationEntryPoint);
   }
}

to

@Bean
@Order(1)
public SecurityFilterChain jwtSecurityFilterChain(HttpSecurity http,ApplicationContext applicationContext){
final AuthenticationEntryPoint basicAuthenticationEntryPoint = applicationContext.getBean(BASIC_AUTH_BEAN_NAME,AuthenticationEntryPoint.class);
        return http
            // As of Spring Security 4.0, CSRF protection is enabled by default.
            .csrf(AbstractHttpConfigurer::disable)
            // Configure CORS
            .cors().and()
            .securityMatcher(url(JwtRestServiceConfig.REST_API_URL_PREFIX,WILDCARD))
            .authorizeHttpRequests(
                auth->auth.requestMatchers(HttpMethod.OPTIONS,url(WILDCARD))
                .permitAll()
                .anyRequest()
                .hasAnyAuthority(ROLE_USER))
            .httpBasic(basic->basic.authenticationEntryPoint(basicAuthenticationEntryPoint))
            .build();
        }

Hierarchy definitions

All the dimensions, hierarchies, and level static names are now grouped in the file DimensionConstantsConfig, the dimensions are suffixed with _DIMENSION, the hierarchies are suffixed with _HIERARCHY, and the levels with _LEVEL.

Export templates

The SensiAggregatedCubeExport, SensiScalarAggregatedCubeExport and SensiSummaryExport DEE templates have been updated to use Sensitivities.Native.SUM.Technical, Sensitivities.Native.Vector.SUM.Technical, and Sensitivities.Ladder.Native.Vector.SUM.Technical as appropriate.

ActiveMonitor removal

Component Details
The mr-activemonitor module The module has been removed from the codebase and the list of modules in the main pom.xml.
The mr-activemonitor Docker image The mr-activemonitor Docker image is no longer created and pushed to Artifactory.
The com.activeviam.activemonitor dependencies The Maven dependencies belonging to the com.activeviam.activemonitor group have been removed. For usages in dependency management, the dependency used is com.activeviam.activepivot.activepivot-server-spring.
The ActiveMonitor properties The activemonitor.restUrl property has been removed from the mr.properties file.
The embedded-monitor Spring profile The embedded-monitor Spring profile is no longer referenced in the application or documentation.

Sensitivity testing improvements

The SensiMeasureTestConfig class is no longer an abstract base class for tests. A SensitivityMeasureTestBase class is provided as a replacement, with more Atoti Server components exposed as Spring Beans.

For usage details, see Testing.

Sign-off REST service

In the class SignOffRestService, the initiate(…) method has been updated following changes in the common library API.

Market Data APIs

Some code changes have been made for the new Market Data API:

  • Classes have been moved from the mr-sensi-config to the mr-common-config module and to a different package:
Module Class Old Package New Package
mr-common-config ATenorAwareSchema com.activeviam.mr.sensi.datastore.description.complete com.activeviam.mr.common.datastore.description.stores
mr-common-config DeferredStartManagerCubeTesterBuilder com.activeviam.mr.sensi.measures com.activeviam.mr.common.tester
mr-common-config DeferredStartManagerCubeTesterBuilderExtension com.activeviam.mr.sensi.measures com.activeviam.mr.common.tester
  • The new TestDimensionsFilter class has been created in the mr-common-config test package: it is an implementation of the DimensionsFilter interface.

  • The following constants corresponding to fields in the newly added market data stores have been added to the StoreFieldConstants class:

Constant Name Constant Value
INSTRUMENT_ID “InstrumentId”
CURVE_ID “CurveId”
SURFACE_ID “SurfaceId”
CUBE_ID “CubeId”
MONEYNESS “Moneyness”
UNDERLYING_MATURITY “UnderlyingMaturity”
  • The following constants corresponding to the names of the newly added market data stores have been added to the StoreConstants class:
Constant Name Constant Value
INSTRUMENT_MARKET_DATA_STORE “InstrumentMarketDataStore”
CURVE_MARKET_DATA_STORE “CurveMarketDataStore”
SURFACE_MARKET_DATA_STORE “SurfaceMarketDataStore”
CUBE_MARKET_DATA_STORE “CubeMarketDataStore”
  • The ATenorAwareSchema class has been changed:

    • It is no longer conditional on the sensitivities cube being enabled (tha annotation @ConditionalOnSensitivityCubeEnabled has been removed).
    • It has been made abstract.
  • The following bean has been added in the mr-application module. It can be replaced by defining a new bean, with the relevant @Qualifier and an @Primary annotation.

Constant Qualifier Type Details
SP_QUALIFIER__DAILY_SENSI_CONFIG_STORES “daily-sensi-config-stores” List Provides the list of market data topics.

The constant SP_QUALIFIER__DAILY_SENSI_CONFIG_STORES has been added to the SpringConstants class.

  • In the DataLoadControllerFileConfig class, the constants corresponding to the new market data stores have been added to switch statements.

  • The configuration and implementation classes for the current Market Data API have been marked as deprecated, to discourage new customizations from using them as a starting point.

Class Deprecation Removal
InterpolationConfiguration From 5.3.0 None scheduled until all measures are migrated to the new API.
MarketDataRetrievalServiceConfig From 5.3.0 None scheduled until all measures are migrated to the new API.
MarketDataRetrievalService From 5.3.0 None scheduled until all features are supported by the new API.
ScalarMarketDataRetrievalService From 5.3.0 None scheduled until all features are supported by the new API.

Integration test changes

In the mr-application-tests module, several files have been changed in the folder src/test/resources/legacy-test-data that contains input data used for integration tests to fix errors and inconsistencies in the test input data. The changes impact some of the expected results in the folders test-bookmarks and test-bookmarks-combined.