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 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.
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 | *.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. |
Store configuration
All store and reference @Configuration classes are now appropriately named.
| 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. |
Application configuration
Changes to configuration classes
| Classes | Details |
|---|
MarketDataDimensionLightConfig | Renamed to MarketDataLightDimensionConfig. |
OrganisationDimensionConfig | Moved the light Organisation dimension to the OrganisationLightDimensionConfig class. |
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.
| 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. |
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
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.
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.