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.
- Atoti Market Risk uses Atoti Server 6.0.9 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
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. TheAScalarDataAwareSchema
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 theCommonPostProcessorUtils
class. - Removed
getReferences/getSuffix/getFolder
methods on theATaylorFactory/AVaRESFactory
classes. - The
getFormulaInput
method on theIInputSelector
interface now returns a SensitivityInput type instead of a String. - The
copyFilesToWhatif
and thecreateBranch
methods on theFileUploadWhatIfService
class, and thecreateBranch
method on theFileUploadWhatIfRestfulService
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
andSensiSummaryExport
DEE templates have been updated. - The
Source
andInputType
columns have been removed from the default Summary Cube input files. - The
ATenorAwareSchema
class has been moved to themr-common-config
module, and its package has been changed accordingly. - The improvements to the Sensitivities testing framework have resulted in several changed classes.
- All the dimensions, hierarchies, and level static names are now grouped in the file
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 theCSVProperties
ConfigurationProperties class. - the method ``CSVProperties getCsvProperties()` has been added.
- the signature of the method
defineTopic
changed: the parameterEnvironment 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 theCSVProperties
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.
- Removed properties files
- Removed properties
- Moved to application.yaml
- Migrated to ConfigurationProperties classes
Also see this spreadsheet for an overview of all the MR properties now contained in ConfigurationProperties classes.
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
ormr.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
, ormr.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 withformula.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 ofLevelIdentifier
s. 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
, orsensi.type
, you could configure custom sensitivity types by appending the type to the property prefix, for exampleformula.input.my-new-type
. These properties have now been grouped under themr.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
- MeasureParameter classes
- Class constructors
- Post-processors
- Removal of autowired Environment fields
- Aware interfaces
- Formatter properties
- Sensitivity rule and type properties
- Metric properties
- What-If properties
- Sign-Off properties
- FXProperties
- BucketingDayProperties
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 |
||
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 |
||||
List |
||||
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 aString[]
- FileUploadWhatIfService.createBranch - now expects a
Path
instead of aString
- FileUploadWhatIfRestfulService.createBranch - now expects a
Path[]
instead of aString[]
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 themr-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 themr-common-config
test package: it is an implementation of theDimensionsFilter
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.
- It is no longer conditional on the sensitivities cube being enabled (tha annotation
-
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
.