Skip to main content

Documentation Index

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

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

This page explains the changes required to migrate from Atoti CVA Risk Capital 5.1.3 to 6.0.0. For new features and fixes included in this release, see the Atoti CVA Risk Capital 6.0.0 release notes. For Atoti Server changes, see the Atoti Server release notes.

Migrate to 6.0.0

This is a major version that upgrades the underlying stack from Atoti Server 6.0.9 on Java 17 to Atoti Server 6.1.19 on Java 21. The scope of work depends on how much the default source tree has been modified.

Choose your migration path

PathWho it is for
Path A — No customizationSource was cloned and built as-is, with no edits to the Java or configuration files.
Path B — Light customizationA single isolated @Configuration class is wired in via one @Import line on ApplicationConfig. Everything else is stock.
Path C — Heavy customizationMultiple Java files across two or more modules have been modified in place.
When in doubt, start by producing a patch against a pristine 5.1.3 checkout (Step 0 of Path C). If the patch touches only one file, follow Path B. If the patch is empty, follow Path A.

Headline changes

Every migration path accepts these changes. Paths B and C require additional handling.
  • Java 21: Java 17 is no longer supported. The Maven build enforces requireJavaVersion 21.
  • Atoti Server 6.1.19: Upgraded from ActivePivot 6.0.9. All com.qfs.* and com.quartetfs.* package roots move to com.activeviam.{activepivot,tech,database,web}.*.
  • Spring Boot 3 / Jakarta EE 10: javax.* replaced by jakarta.* across the board.
  • Spring Security 6: WebSecurityConfigurerAdapter removed; replaced by SecurityFilterChain beans.
  • OpenTelemetry 1.43.0: Spring Cloud Sleuth and Zipkin Brave removed.
  • Module restructuring: 5 modules become 8. cvarc-application is the new executable; cvarc-starter becomes an auto-config library. See Module rename.
  • What-If 2.1.6-AS6.0 → 5.0.0-AS6.1: Hibernate-based persistence, JWT authentication, new file-upload distributed mode. See What-If 2.1.6-AS6.0 → 5.0.0-AS6.1.
  • Atoti Server 6.1.19: New Spring Boot starters replace hand-wired configuration. See Atoti Server 6.1.19 starters.
  • Atoti Limits 4.2.1: GroupId and artifact ID changed; disabled by default. See Atoti Limits 4.2.1.
  • Common Accelerator Library 2.1.15-AS6.1.
Smaller breaking changes apply to specific audiences: DispatcherServlet configuration removal (only if a fork overrode the bean), JGroups protocol files (AtotiAuthTokenSharedSecretAuthToken), Hibernate group ID (org.hibernateorg.hibernate.orm, only relevant for module POMs that pull Hibernate directly), and CVARCEnvConstants constant suffix renames (_SYSPROP/_SYNSPROP/_PROP_PROPERTY).

Path A — no customization

This path is for users who cloned the source, built it, and run the resulting jar or Docker image without any local edits. The total work is installing a new JDK, swapping the source tree, rebuilding, and updating the launch command.

Step 1: install JDK 21

5.1.3 enforced JDK 17. 6.0.0 enforces JDK 21 via requireJavaVersion in the root POM. The Maven build fails immediately on the wrong JDK.
# verify before building
java -version          # must report 21.x
mvn -version           # "Java version" must be 21.x
export JAVA_HOME=/path/to/jdk-21
No Java 21 language features are required by the upgrade itself. This is a toolchain bump driven by the Atoti Server 6.1.19 stack.

Step 2: replace the source tree

Swap the 5.1.3 working copy for the 6.0.0 source. The module list changes as follows:
5.1.3 module6.0.0 replacement
cvarc-commoncvarc-common-lib + cvarc-common-config
cvarc-ba-activepivotcvarc-ba-config
cvarc-sa-activepivotcvarc-sa-config
cvarc-starter (executable)cvarc-starter (auto-config library) + cvarc-application (new executable) + cvarc-application-tests
cvarc-isda-testscvarc-isda-tests (unchanged)
With git, this is a single checkout of the 6.0.0 tree over the 5.1.3 tree. There are no merge decisions for an as-is user — every file at the same logical path moves together. See Complete change inventory for the full scope of what this swap brings in.

Step 3: rebuild

Run from the project root:
mvn clean install
The new executable jar is:
cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar
5.1.3 produced cvarc-starter/target/cvarc-starter-5.1.3-exec.jar. The 5.1.3 cvarc-starter module remains in 6.0.0 but no longer produces an exec jar — its POM has no spring-boot-maven-plugin repackage execution.

Step 4a: update your launch command — direct jar

Old (5.1.3):
java \
  -Dactiveviam.chunkAllocatorClass=com.qfs.chunk.direct.allocator.impl.MmapDirectChunkAllocator \
  --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
  -jar cvarc-starter/target/cvarc-starter-5.1.3-exec.jar \
  --content-service.db.url='jdbc:h2:file:./content_service;DB_CLOSE_DELAY=-1' \
  --contentServer.factory-reset=folder \
  --contentServer.factory-reset.folder-name=file:./bookmarks
New (6.0.0):
java \
  -Xms1024m -Xmx2048m -Xss5m \
  -Dactiveviam.chunkAllocatorKey=mmap \
  --add-opens=java.base/java.util.concurrent=ALL-UNNAMED \
  --add-opens=java.base/java.util=ALL-UNNAMED \
  -jar cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar \
  --contentServer.factory-reset=folder \
  --contentServer.factory-reset.folder-name=file:./bookmarks \
  --csv.topic.path=./data-samples/data
Key differences:
  • Jar path and name change to cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar.
  • chunkAllocatorClass=…MmapDirectChunkAllocatorchunkAllocatorKey=mmap.
  • --add-opens=java.base/java.util=ALL-UNNAMED is a new required flag.
  • --content-service.db.url=… is no longer needed — now configured in application.yml.
  • --csv.topic.path is new, pointing the Data Load Controller at the CSV samples directory.
  • Spring Boot context path moves from /cvarc-starter to /cvarc-application. Update any client or proxy pointing at the old path.

Step 4b: update your launch command — Docker

The Dockerfile has moved from cvarc-starter/Dockerfile to cvarc-application/Dockerfile. The new Dockerfile already has the updated chunk-allocator flag, so no launch-command changes are needed beyond using the new image. Before building, pre-copy the files the Dockerfile expects:
# pre-copy the data the Dockerfile expects
cp -r cvarc-application-tests/src/test/resources/data-samples cvarc-application/src/test/resources/
cp -r bookmarks cvarc-application/src/main/resources/

# build and run
docker build -t cvarc:6.0.0 cvarc-application/
docker run --rm -p 9090:9090 cvarc:6.0.0
A direct docker build cvarc-application/ without the pre-copy step will fail. The same pre-copy pattern existed for 5.1.3, but the source paths are different.

Step 5: update external file references

The repo-root bookmarks/ directory contents have not changed between 5.1.3 and 6.0.0. data-samples/ moves from cvarc-starter/data-samples/ to cvarc-application/data-samples/, with unchanged contents. If --contentServer.factory-reset.folder-name, --csv.topic.path, or any CI/Docker mount points at one of these directories, update the path or symlink. See Path C step 6 for the full list of fixture relocations, including the removed cvarc-isda-tests/content_service.mv.db and the property-files move.

Path B — light customization (single @Configuration)

This path is for users who maintain one isolated @Configuration class wired into the application via a single @Import(MyCustomConfig.class) line on ApplicationConfig. Everything else is stock. Follow this path only if all of these are true:
  • The custom file is a single @Configuration class with @Bean methods, wired by exactly one @Import(...) line on 5.1.3’s ApplicationConfig.
  • It does not extend, subclass, or override any of the configs deleted from cvarc-common or cvarc-starter — including all *Tracing* (BraveTracingConfig, TracingConfig, TracingRestServiceConfig), *Monitoring* and ActiveMonitor* (JmxMonitoringConfig, MonitoringRestServicesConfig, ApplicationMonitoringConfig, ActiveMonitorSupportConfig), *CsvSourceConfig, DataLoadControllerConfig, DatastoreConfig, LimitsIntegration, JwtAuthenticationConfigurer, CorsConfig, WhatIfConfig (cvarc-common), WhatIfRestServices, CVARCWhatIfSecurityManager, DoctorPivotConfig, CVAI18nConfig, and I18nConfig. See Step 5 for the full list with replacement guidance.
  • It does not customize util.ReferenceLevelUtils (deleted with no upstream replacement). Other ReferenceLevel* types moved upstream to com.activeviam.accelerator.common.{context,postprocessor}.* — Path A still applies if you’re comfortable doing the import rename.
  • JDK 21 runtime is acceptable.
If any of those conditions does not hold, follow Path C instead.

Step 1: check out the 6.0.0 tree — do not forward-port

Check out 6.0.0 cleanly. Do not forward-port the 5.1.3 working copy. Starting from the clean 6.0.0 tree is cheaper because:
  • The parent POM jumps from common-parent-pom 1.2.0 to 2.5.0, which retunes the entire dependency graph (Tomcat 9 → 11, slf4j 1.7 → 2.0, logback 1.2 → 1.5, Jakarta servlet API).
  • The module list reshapes: cvarc-common splits into cvarc-common-lib + cvarc-common-config; cvarc-ba-activepivotcvarc-ba-config; cvarc-sa-activepivotcvarc-sa-config; cvarc-starter is demoted from executable to auto-config library; the new cvarc-application module owns the executable plus the main ApplicationConfig. Replaying these renames over a 5.1.3 checkout is more work than dropping one file into the new tree.
  • The @Import graph is now centered on cvarc-application/.../cfg/ApplicationConfig.java with about 25 entries (down from ~50 in 5.1.3), because the deleted configs are now provided transitively by the Atoti Spring Boot starters. The entry point moved from CVAWebApplication (@Configuration @EnableAutoConfiguration @EnableWebMvc, hand-rolling several DispatcherServlet/Filter/ServletContextInitializer beans) to CVARCApplication (@SpringBootApplication @EnableWebMvc; those beans are gone).

Step 2: move the custom file

From (5.1.3)To (6.0.0)
cvarc-starter/src/main/java/<your-package>/MyCustomConfig.javacvarc-application/src/main/java/<your-package>/MyCustomConfig.java
The new ApplicationConfig lives at cvarc-application/src/main/java/com/activeviam/cvarc/application/cfg/ApplicationConfig.java. Placing the custom file in the same module avoids cross-module dependency edits. Keep the original Java package — Spring @Import is package-agnostic.

Step 3: re-wire the import

Open cvarc-application/src/main/java/com/activeviam/cvarc/application/cfg/ApplicationConfig.java and add the class to the existing @Import list:
@Import(value = {
        ParameterRetrieverConfig.class,
        DatastoreCustomisationsConfig.class,
        SecurityConfig.class,
        // …
        ActivePivotWithDatastoreConfig.class,

        MyCustomConfig.class,        // <-- add this line
})
Add the corresponding import <your-package>.MyCustomConfig; at the top of the file. Do not add it to CVARCApplicationCVARCApplication only @Imports ApplicationConfig, exactly as 5.1.3’s CVAWebApplication only imported ApplicationConfig.

Step 4: fix package and API changes

Run mvn -pl cvarc-application compile. The compiler errors identify exactly which symbols to rename. Drive edits from those errors — do not pre-emptively rewrite anything that still resolves. The renames most likely to appear, based on the imports of the new ApplicationConfig:
Old symbol (5.1.3)New symbol (6.0.0)
com.qfs.server.cfg.IActivePivotConfigcom.activeviam.activepivot.server.spring.api.config.IActivePivotConfig
com.qfs.server.cfg.IDatastoreConfig (interface returning IDatastore)inject com.activeviam.database.datastore.api.IDatastore directly
com.qfs.server.cfg.impl.ActivePivotWithDatastoreConfigcom.activeviam.cvarc.common.ref.cfg.impl.ActivePivotWithDatastoreConfig (in cvarc-common-config)
com.qfs.server.cfg.impl.DatabaseRestServicesConfigcom.activeviam.activepivot.server.spring.private_.config.impl.DatabaseRestServicesConfig
com.quartetfs.fwk.Registrycom.activeviam.tech.core.api.registry.Registry
Registry.setContributionProvider(new ClasspathContributionProvider(...))Registry.initialize(Registry.RegistryContributions.builder().build())
com.qfs.agg.impl.SumFunctioncom.activeviam.tech.aggregation.internal.impl.SumFunction
com.quartetfs.fwk.monitoring.jmx.impl.JMXEnablercom.activeviam.web.spring.internal.JMXEnabler
com.activeviam.cvarc.common.context.impl.ReferenceLevelTranslatorcom.activeviam.accelerator.common.context.impl.ReferenceLevelTranslator (moved upstream)
ReferenceLevelTranslator.KEYReferenceLevelTranslator.TRANSLATOR_KEY
javax.servlet.*jakarta.servlet.*
import brave.Tracing;gone — use io.opentelemetry.api.GlobalOpenTelemetry.getTracer(...) if a tracer is actually needed
org.springframework.boot.autoconfigure.EnableAutoConfigurationnot needed at customization sites; @SpringBootApplication on CVARCApplication covers it
For any com.qfs.* or com.quartetfs.* types not listed above, search them in the 6.0.0 tree (grep -r 'class TypeName' .) before guessing. The Atoti Server 6.1.19 reorganization moved most types from com.qfs/com.quartetfs to com.activeviam.{tech,activepivot,database,web}.*.

Step 5: remove or replace references to deleted configs

Remove any references to the following, if they appear in the custom file. For replacement details (where the behavior now lives, what to redesign against), see Path C bucket D.
  • TracingBraveTracingConfig, TracingConfig, TracingRestServiceConfig, brave.Tracing.
  • JMX / monitoringJmxMonitoringConfig, MonitoringRestServicesConfig, ApplicationMonitoringConfig.
  • ActiveMonitorActiveMonitorSupportConfig, the ActiveMonitor stack (activemonitor-activepivot-impl, repository-activepivot, apm), and activemonitor-support.properties.
  • CSV sourcesBa{Aws,Azure,Google,}CsvSourceConfig, Sa{Aws,Azure,Google,}CsvSourceConfig, Shared{Aws,Azure,Google,}CsvSourceConfig, Crif{,Azure}CsvSourceConfig, CommonCloudSourceConfig, and the ACsvSourceConfig family.
  • Data loadDataLoadControllerConfig, InitialDataLoadConfig (the first is gone; the second is reshaped under cvarc-starter/.../cfg/impl/dlc/).
  • SecurityJwtAuthenticationConfigurer and CorsConfig are deleted outright; CORS is now config-driven. All other security classes have relocated from cvarc-starter/.../security/ to cvarc-application/.../security/ with the same class names.
  • What-IfWhatIfConfig (cvarc-common copy), WhatIfRestServices. Controllers (StressedSensitivityWhatIfRestController, ParameterSetRestServiceController, TradeRescaleRestServiceController) relocated to cvarc-application/.../whatif/ with the same names.
  • LimitsLimitsIntegration. The new limits-auto-config-61 starter is auto-wired but disabled by default; set limits.autoconfiguration.enabled=true if the customization relied on it.
  • DoctorPivotDoctorPivotConfig, doctorpivot-api, doctorpivot-web-app.
  • i18nCVAI18nConfig, I18nConfig, CVARCWhatIfSecurityManager.
  • ReferenceLevel context-value chainIReferenceLevelContextVal, ReferenceLevelContextVal, ReferenceLevelVisualTotalsModeContextVal, ReferenceLevelVisualTotalsModeTranslator, postprocessor.ReferenceLevelLocationShift. Moved upstream to com.activeviam.accelerator.common.{context,postprocessor}.* — see Bucket C for the import rename. util.ReferenceLevelUtils was deleted with no replacement; see Bucket D.

Step 6: update the POM (only if the custom file lives in a sibling module)

If the custom file was moved into cvarc-application in step 2, the POM does not need to change. Skip this section. If the customization instead lives in a sibling module:
  • Inherit from <artifactId>cvarc</artifactId> <version>6.0.0-SNAPSHOT</version> parent (no version on dependencies; let the parent BOM manage them).
  • Add cvarc-common-lib, cvarc-common-config, and cvarc-starter as compile dependencies if the customization needs constants or configs from them.
  • Remove these old artifacts if the module POM declares them: com.activeviam.io:data-connectors-{csv,jdbc,aws,azure,gcp}, com.activeviam.activemonitor:*, com.activeviam.apm:apm, com.activeviam.apps:whatif, com.activeviam.apps:cvarc-{ba,sa}-core, org.springframework.cloud:spring-cloud-{starter-sleuth,sleuth-zipkin}, io.zipkin.brave:brave-instrumentation-spring-webmvc, com.activeviam.apps:doctorpivot-{api,web-app}, org.junit:junit-bom, com.activeviam.activepivot:activepivot-test.
  • Switch any javax.servlet:javax.servlet-api to jakarta.servlet:jakarta.servlet-api (scope provided).

Step 7: update the Dockerfile (only if a custom Dockerfile is maintained)

The shipped Dockerfile moves from cvarc-starter/Dockerfile to cvarc-application/Dockerfile. For a forked Dockerfile, apply the JVM flag changes from Java 21 upgrade and the full Dockerfile diff from Docker configuration. Update any reverse proxy or client referencing the old /cvarc-starter context path; it is now /cvarc-application.

Step 8: build and smoke-test

mvn -DskipTests clean install
java -jar cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar
Common startup failures and which step resolves each:
Startup symptomRoot cause and step
requireJavaVersion ... required is 21Install JDK 21 (step 1)
cannot find symbol class IActivePivotConfig / class Registry / class SumFunctionStep 4 rename not applied
BeanDefinitionStoreException: Failed to import class ... XxxConfig for any name in the step 5 listStep 5 cleanup not done
NoClassDefFoundError: javax/servlet/...jakarta.servlet swap missed (step 4 or step 6)
IllegalStateException: cannot find ApplicationConfig in @ImportImport was added to CVARCApplication instead of ApplicationConfig (step 3)
HTTP 404 at /cvarc-starter/...Context path is /cvarc-application now (step 7)

Path C — heavy customization (multi-module edits)

This path is for users who have spent significant time editing 5.1.3 source files in place — multiple modified @Configuration classes across cvarc-common, cvarc-starter, cvarc-sa-activepivot, cvarc-ba-activepivot, possibly inline tweaks to listeners, publishers, post-processors, and security wiring. The critical risk for heavy customizers is misreading the removed-class list. About half of the classes that appear “deleted” were relocated to upstream binary dependencies and still appear in 6.0.0’s @Import block. Treating them as deletions and redesigning wastes weeks. Treating them as overrideable bean seams using @ConditionalOnMissingBean takes hours. The first job is to bucket every customized file before touching code. Assume JDK 21, Jakarta servlet, parent-POM bumps, Brave → OpenTelemetry, and the cvarc-startercvarc-application split as known background from Paths A and B.

Step 0: capture customizations as a patch set

Before opening 6.0.0, run this against a pristine 5.1.3 checkout:
git -C 5.1.3-clean checkout v5.1.3
diff -ruN 5.1.3-clean/ your-5.1.3-checkout/ > customizations.patch
Then split customizations.patch per file — one hunk per modified Java class. This is the input to the bucket triage in step 2. Without it, hunks will be misclassified and the same file merged twice.

Step 1: start from a clean 6.0.0 checkout

Do not rebase 5.1.3 onto 6.0.0. Module renames, the com.qfs.*/com.quartetfs.*com.activeviam.* mass rename, and the parent-POM 1.2.0 → 2.5.0 jump make a backward merge strictly more expensive than a clean-tree replay.
git checkout v6.0.0
mvn -version   # must report Java 21

Step 2: bucket every customized file

For each entry in the patch set, classify into one of four buckets:
BucketDefinitionAction
AThe class still exists in 6.0.0 source at the same Java package (module may differ).3-way merge: base = 5.1.3 file, mine = 5.1.3 + patch, theirs = 6.0.0 file.
BClass exists in 6.0.0 source but at a different package or module, or has been split.Find its 6.0.0 home in the tables below; port the hunk by hand.
CClass is no longer in 6.0.0 source but is referenced from 6.0.0 @Import blocks — it now lives in an upstream binary dependency.Keep the customization as an overlay: subclass and override beans, or use @ConditionalOnMissingBean to replace the upstream bean. Never re-vendor.
DClass is gone and not referenced anywhere in 6.0.0 — its subsystem was rewritten.Redesign against the new API.
The volume distribution from this codebase is roughly A > B > C > D, but D is the bucket that absorbs the most calendar time per file.
Bucket A — same package path, possibly new module
Apply hunks unchanged (package declarations are identical). Module homes:
Old moduleNew moduleRepresentative files
cvarc-commoncvarc-common-libcommon.constants.* (6 files), common.measures.IncrementalMeasureDTO, common.parameter.impl.CVARCParameter* (3 files), common.postprocessor.impl.{AggregateCapitalCharge, DifferentialPostProcessor, SumNetty}, common.ref.cfg.impl.{ATuplePublisher, CalculationUtils, CrifFileConstants, CrifTuplePublisher, FxRatesTuplePublisher, MeasureDescription, TuplePublisherException}, common.source.CrifAsofDateColumnCalculator, common.util.*
cvarc-sa-activepivotcvarc-sa-configsa.ref.cfg.impl.{CombinedCubeMeasureBuilder, DatabaseServiceConfig, DatastoreRestStoresSecurityConfig, DistributionConfig, SACubeDimensionsConfig, SADatastoreModelConfig, SAMeasureBuilder}, sa.ref.source.*, sa.ref.utils.*
cvarc-ba-activepivotcvarc-ba-configba.ref.cfg.impl.{BACubeDimensionConfig, BADatastoreModelConfig, BAMeasureBuilder}, ba.ref.source.*, ba.ref.utils.NettingSetUtils
cvarc-startercvarc-starterstarter.cfg.impl.{ApplicationMonitoringConfig, BACubeConfig, BASchema, CVARCCatalog, CVARCCubeConfig, CVARCDataLoadRestController, DatastoreCustomisationsConfig, FxRatesServiceConfig, InterpolatorConfig, MessengerDefinitionConfig, MonitorConfig, OlapModelConfig, SACubeConfig, SASchema}
Bucket B — same code, new home
Old (5.1.3)New (6.0.0)
cvarc-common/.../ref/cfg/impl/{CookieUtil, LocalContentServiceConfig, RemoteContentServiceConfig}cvarc-common-config/.../ref/cfg/impl/... (same Java package)
cvarc-common/.../ref/whatif/cfg/StressedSensitivityWhatIfServiceConfigcvarc-common-config/.../ref/whatif/cfg/...
cvarc-common/.../ref/whatif/service/stressedSensitivities/StressedSensitivityWhatIfServicecvarc-common-config/.../ref/whatif/service/stressedSensitivities/...
cvarc-common/.../ref/whatif/service/ParameterSetRestServiceControllercvarc-application/.../whatif/ParameterSetRestServiceController
cvarc-common/.../ref/whatif/service/stressedSensitivities/StressedSensitivityWhatIfRestControllercvarc-application/.../whatif/StressedSensitivityWhatIfRestController
cvarc-starter/.../whatif/TradeRescaleRestServiceController, WhatIfRestServicescvarc-application/.../whatif/TradeRescaleRestServiceController (WhatIfRestServices absorbed by atoti-what-if-spring-boot-starter)
cvarc-common/.../ref/whatif/simulations/{TradeDuplicateSimulationDefinition, TradeScalingSimulationDefinition}cvarc-common-config/.../ref/whatif/rest/...
cvarc-common/.../ref/whatif/simulations/TradeRescaleDTOcvarc-common-lib/.../ref/whatif/rest/TradeRescaleDTO
cvarc-common/.../ref/whatif/submitter/ParameterSetSimulationDefinitioncvarc-common-config/.../ref/whatif/submitter/ParameterSetSimulationDefinition
cvarc-starter/.../starter/CVAWebApplicationcvarc-application/.../application/CVARCApplication (renamed; switched from @Configuration @EnableAutoConfiguration to @SpringBootApplication; hand-rolled DispatcherServletRegistrationBean / FilterRegistrationBean<ContextValueFilter> / ServletContextInitializer beans deleted)
cvarc-starter/.../starter/cfg/impl/ApplicationConfigcvarc-application/.../application/cfg/ApplicationConfig
cvarc-starter/.../starter/cfg/impl/{EnvJsResourceResolver, StaticResourcesHandler}cvarc-application/.../application/cfg/...
cvarc-starter/.../starter/cfg/impl/security/* (all classes)cvarc-application/.../application/security/* (JwtAuthenticationConfigurer and CorsConfig deleted outright)
cvarc-starter/.../starter/cfg/impl/AggregateProviderConfigcvarc-starter/.../starter/cfg/impl/AggregateProviderConfiguration (renamed)
cvarc-starter/.../starter/cfg/impl/InitialDataLoadConfig, DataLoadControllerConfigcvarc-starter/.../starter/cfg/impl/dlc/InitialDataLoadConfig (reshaped — DLC orchestration absorbs the controller config)
Bucket C — gone from source; override the upstream bean
These classes are referenced by 6.0.0’s ApplicationConfig @Import list but have no source file in the tree. They live in upstream artifacts. Do not vendor them back.
ClassUpstream packageOverride mechanism
DatabaseRestServicesConfigcom.activeviam.activepivot.server.spring.private_.config.impl@Bean of the same type with @ConditionalOnMissingBean
JwtRestServiceConfigcom.activeviam.web.spring.internal.configSame
VersionServicesConfigcom.activeviam.web.spring.internal.configSame
JMXEnablercom.activeviam.web.spring.internal (was com.quartetfs.fwk.monitoring.jmx.impl)Construct and expose as @Bean
MaturityConverterConfig, IMaturityConvertercom.activeviam.accelerator.common.cfg.datesProvide own IMaturityConverter @Bean; ApplicationConfig.startManager takes it via parameter injection
IInterpolatorcom.activeviam.cvarc.sa.core.interpolation (now upstream as cvarc-sa-lib)@Bean IInterpolator overrides what InterpolatorConfig provides
CreditQualityMapper, ICreditQualityMappercom.activeviam.cvarc.sa.core.utils (upstream)@Bean ICreditQualityMapper
ReferenceLevelTranslatorcom.activeviam.accelerator.common.context.implPlugin lookup key changed: ReferenceLevelTranslator.KEYReferenceLevelTranslator.TRANSLATOR_KEY. The autowire pattern via Registry.getPlugin(IContextValueTranslator.class) is preserved in the new ApplicationConfig.
IReferenceLevelContextVal, ReferenceLevelContextVal, IReferenceLevelVisualTotalsModeContextVal, ReferenceLevelVisualTotalsModeContextVal, ReferenceLevelVisualTotalsModeTranslatorcom.activeviam.accelerator.common.context{,.impl}Update imports — API preserved.
ReferenceLevelLocationShiftcom.activeviam.accelerator.common.postprocessor.implUpdate import — API preserved. (ReferenceLevelLocationShiftLight is a new sibling variant in the same package.)
IActivePivotConfig, IActivePivotContentServiceConfigcom.activeviam.activepivot.server.spring.api.configInject the new types
DynamicActivePivotManagerMBeancom.activeviam.activepivot.server.impl.private_.observabilityNew package
DynamicActivePivotContentServiceMBeancom.activeviam.activepivot.server.spring.private_.pivot.content.implNew package
Registry, SumFunction, IPostProcessor, IContextValueTranslator, IMultiVersionDataActivePivot, IDistributedMessenger, IDistributedSecurityManagercom.activeviam.{tech,activepivot}.*Mass rename — see step 3
The new ApplicationConfig.startManager carries @ConditionalOnMissingBean(name = "startManager") and InitialDataLoadConfig carries the same annotation. The framework explicitly invites bean replacement via this mechanism.
Bucket D — redesign against the new API
These are the same subsystems flagged as a removal checklist in Path B step 5; the table below adds the redesign target for each.
Old subsystemWhat to redesign against
util.ReferenceLevelUtilsDeleted with no upstream counterpart. Inline the helper at call sites, or redesign on the upstream IContextValueTranslator SPI.
BraveTracingConfig, TracingConfig, TracingRestServiceConfig, brave.Tracing autowireReplace with OpenTelemetryTracingConfig (cvarc-common-config) + io.opentelemetry.api.GlobalOpenTelemetry.getTracer(...).spanBuilder(...).startSpan(). The @DependsOn(TracingConfig.TRACING_BEAN) pattern from 5.1.3’s ApplicationConfig is gone in 6.0.0.
JmxMonitoringConfig, MonitoringRestServicesConfig, ApplicationMonitoringConfigSpring Boot Actuator (management.endpoints.web.exposure.include: "*" is preset in application.yml). Custom MBeans must be re-registered via @Bean JMXEnabler.
ActiveMonitorSupportConfig, apm, activemonitor-activepivot-impl, repository-activepivot, activemonitor-support.propertiesNo in-tree replacement. Drop entirely.
Sa/Ba/Shared/Crif{,Aws,Azure,Google}CsvSourceConfig, ABaCsvSourceConfig, ASaCsvSourceConfig, ASharedCsvSourceConfig, ACrifCsvSourceConfig, ACsvSourceConfig, CommonCloudSourceConfigData Load Controller. New seams: cvarc-starter/.../cfg/impl/dlc/{BASourceDescription, SASourceDescription, SharedSourceDescription, CvaDlcConfig, AliasesDescriptionConfig, CsvSourceDatasetConfigurationProperties, DlcConstants, SourceTopicAliasesConfig, TargetDescriptionsConfig} plus profile YAMLs application-dlc-{local,azure}-csv.yaml. Custom column transforms move from per-class Java to CsvSourceDatasetConfigurationProperties.
WhatIfConfig (cvarc-common — distinct from the new cvarc-application/whatif/WhatIfConfig)atoti-what-if-spring-boot-starter plus cvarc-application/whatif/{WhatIfConfig, WhatIfHibernateProperties, WhatIfFileUploadProperties, BranchNameValidator} and the new whatif/distributed/* package. Custom simulations should subclass FileUploadSimulationDefinition / ParameterSetSimulationDefinition rather than fork the old StressedSensitivityWhatIfSubmitter (deleted).
LimitsIntegration, limits-auto-config-ap60 (com.activeviam.limits)limits-auto-config-61:4.2.1 (com.activeviam.solutions.limits), disabled by default. Re-enable with limits.autoconfiguration.enabled=true. Custom limit rules need to be re-expressed against the 4.x API.
DoctorPivotConfig, doctorpivot-{api,web-app}Deleted, no replacement.
CVAI18nConfig, I18nConfigAuto-config. Drop.

Step 3: run the global find-and-replace for cross-cutting renames

Run these after moving files and before attempting to compile. The Atoti Server 6.1.19 reorganization flips practically every framework import.
Find (regex-friendly)Replace
com\.qfs\.server\.cfg\.IActivePivotConfigcom.activeviam.activepivot.server.spring.api.config.IActivePivotConfig
com\.qfs\.server\.cfg\.content\.IActivePivotContentServiceConfigcom.activeviam.activepivot.server.spring.api.config.IActivePivotContentServiceConfig
com\.qfs\.server\.cfg\.impl\.DatabaseRestServicesConfigcom.activeviam.activepivot.server.spring.private_.config.impl.DatabaseRestServicesConfig
com\.qfs\.server\.cfg\.impl\.ActivePivotWithDatastoreConfigcom.activeviam.cvarc.common.ref.cfg.impl.ActivePivotWithDatastoreConfig
com\.qfs\.server\.cfg\.IDatastoreConfigdrop interface; inject com.activeviam.database.datastore.api.IDatastore directly
com\.qfs\.pivot\.content\.impl\.DynamicActivePivotContentServiceMBeancom.activeviam.activepivot.server.spring.private_.pivot.content.impl.DynamicActivePivotContentServiceMBean
com\.qfs\.pivot\.impl\.MultiVersionDataActivePivotcom.activeviam.activepivot.dist.impl.api.cube.IMultiVersionDataActivePivot
com\.qfs\.agg\.impl\.SumFunctioncom.activeviam.tech.aggregation.internal.impl.SumFunction
com\.quartetfs\.biz\.pivot\.IActivePivotManagercom.activeviam.activepivot.server.spring.api.config.IActivePivotConfig#activePivotManager()
com\.quartetfs\.biz\.pivot\.context\.IContextValueTranslatorcom.activeviam.activepivot.core.intf.api.contextvalues.IContextValueTranslator
com\.quartetfs\.biz\.pivot\.monitoring\.impl\.DynamicActivePivotManagerMBeancom.activeviam.activepivot.server.impl.private_.observability.DynamicActivePivotManagerMBean
com\.quartetfs\.biz\.pivot\.postprocessing\.IPostProcessorcom.activeviam.activepivot.core.intf.api.postprocessing.IPostProcessor
com\.quartetfs\.fwk\.Registrycom.activeviam.tech.core.api.registry.Registry
Registry\.setContributionProvider\(new ClasspathContributionProvider\([^)]*\)\)Registry.initialize(Registry.RegistryContributions.builder().build())
com\.quartetfs\.fwk\.monitoring\.jmx\.impl\.JMXEnablercom.activeviam.web.spring.internal.JMXEnabler
com\.quartetfs\.fwk\.contributions\.impl\.ClasspathContributionProviderdelete (unused with the new Registry.initialize form)
com\.activeviam\.cvarc\.common\.context\.impl\.ReferenceLevelTranslatorcom.activeviam.accelerator.common.context.impl.ReferenceLevelTranslator
ReferenceLevelTranslator\.KEY\bReferenceLevelTranslator.TRANSLATOR_KEY
com\.qfs\.pivot\.tracing\.TracingConfigdelete (OpenTelemetryTracingConfig handles this)
import brave\.Tracing;delete; replace usages with io.opentelemetry.api.GlobalOpenTelemetry.getTracer(...)
javax\.servlet\.jakarta.servlet. (also swap javax.servlet:javax.servlet-apijakarta.servlet:jakarta.servlet-api in POMs)
com\.activeviam\.io:data-connectors-(csv|aws|azure|gcp|jdbc) (POM)com.activeviam.source:{csv-source,cloud-source-aws,cloud-source-azure,cloud-source-google}; for jdbc, drop
com\.activeviam\.apps:whatif (POM)com.activeviam.apps:atoti-what-if-{lib,spring-boot-starter}
com\.activeviam\.apps:cvarc-(ba|sa)-core (POM)cvarc-{ba,sa}-lib
com\.activeviam\.limits (groupId, POM)com.activeviam.solutions.limits; artifact limits-auto-config-ap60limits-auto-config-61
Once done, run:
mvn -DskipTests -pl cvarc-common-lib,cvarc-common-config,cvarc-ba-config,cvarc-sa-config,cvarc-starter,cvarc-application compile
Let the compiler drive the long tail of remaining renames.

Step 4: re-wire @Import and the bootstrap class

The new cvarc-application/.../application/cfg/ApplicationConfig.java carries 25 imports versus 5.1.3’s ~50. The deletions are replaced by starter auto-config. Add custom @Configuration classes to that block — do not add them to CVARCApplication, which only @Imports ApplicationConfig. The new CVARCApplication is @SpringBootApplication @EnableWebMvc @Import({ApplicationConfig.class}). The 5.1.3 CVAWebApplication carried hand-rolled DispatcherServletRegistrationBean, FilterRegistrationBean<ContextValueFilter>, and ServletContextInitializer beans — all deleted. Spring Boot’s auto-wiring covers the equivalent. Port the intent to a Spring Boot property or starter customizer; do not reintroduce the beans. The static { Registry.setContributionProvider(new ClasspathContributionProvider("com.activeviam.apm","com.activeviam","com.quartetfs","com.qfs")); } block in 5.1.3’s ApplicationConfig is replaced by static { Registry.initialize(Registry.RegistryContributions.builder().build()); } — the explicit package list is gone. If the customization added contribution packages, wire them through the new RegistryContributions.builder() API.

Step 5: POM, Dockerfile, and runtime flags

  • Pin nothing. The 6.0.0 parent POM (common-parent-pom:2.5.0) plus common-dependencies-bom:2.5.0 manage versions. Explicit versions in customized POMs cause divergence with the Atoti BOM. If a 5.1.3 customization pinned dataconnectors.version, solutions-tools-bom.version, regression-testing.version, or junit-bom, delete the pin.
  • The new cvarc-starter/pom.xml has no spring-boot-maven-plugin repackage execution. The repackage moved to cvarc-application/pom.xml. Customizations that ran the build via cvarc-starter/target/*-exec.jar must repoint at cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar.
  • Apply the Hibernate group-ID change (org.hibernateorg.hibernate.orm) in any module POM that pulls Hibernate directly.
  • Replace AtotiAuthToken with SharedSecretAuthToken in any custom JGroups protocol XML — see JGroups protocol files.
  • Apply the JVM flag changes from Java 21 upgrade and the full Dockerfile diff from Docker configuration. Servlet context-path moves from /cvarc-starter to /cvarc-application.

Step 6: data samples and external fixtures

bookmarks/ (repo root) contents are unchanged between releases. data-samples/ moves from cvarc-starter/data-samples/ to cvarc-application/data-samples/, with unchanged contents. The committed H2 file cvarc-isda-tests/content_service.mv.db is removed in 6.0.0; if the test rig depended on it, regenerate at test setup. Property files relocate from cvarc-starter/src/main/resources/properties/ to cvarc-application/src/main/resources/properties/; activemonitor-support.properties is dropped.

Step 7: build, validate, and debug

mvn -DskipTests clean install
java -jar cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar
Startup symptomBucket the customization likely failed in
cannot find symbol class IActivePivotConfig / Registry / SumFunction / JMXEnablerStep 3 cross-cutting rename incomplete
package com.qfs.* does not existStep 3 cross-cutting rename incomplete
package javax.servlet does not existStep 3 Jakarta swap missed
BeanDefinitionStoreException: Failed to import class XxxCsvSourceConfig / BraveTracingConfig / JmxMonitoringConfig / LimitsIntegrationBucket D — subsystem rewrite; drop the @Import and redesign
NoSuchMethodError: ReferenceLevelTranslator.KEYBucket C — step 3 missed KEYTRANSLATOR_KEY
Two beans of type IMaturityConverter / IInterpolator / IActivePivotConfigBucket C override conflict — add @ConditionalOnMissingBean on your bean, or remove the duplicate @Import
BeanCurrentlyInCreationException: startManagerBucket C — @Bean startManager lacks @ConditionalOnMissingBean(name = "startManager")
404 at /cvarc-starter/...Step 5 — context path is /cvarc-application
IllegalArgumentException: chunkAllocatorClass at startupStep 5 — flag rename to chunkAllocatorKey=mmap
Pivot manager never finishes initial loadBucket B (What-If/DLC port incomplete) or Bucket D (CSV source descriptions missing)
Effort budget — Bucket A: minutes per file (3-way merge). Bucket B: 15–60 min per file (port hunk to new module/path). Bucket C: 30 min–2 h per file (write override, verify upstream API). Bucket D: 1–5 days per subsystem (genuine redesign). Tracing, ActiveMonitor, CSV → DLC, and What-If together account for almost all Bucket D calendar time. Posture shift — stop editing upstream classes in place. The 6.0.0 stack is built around starter auto-config plus @ConditionalOnMissingBean seams (visible on startManager and InitialDataLoadConfig). Keep customizations as a thin overlay of @Bean overrides, property files, and subclasses of BASourceDescription/SASourceDescription/FileUploadSimulationDefinition. The next upgrade will be much cheaper than this one.

Reference: breaking changes by topic

The following sections provide deeper context for each breaking change area. Migration path steps link here when a specific topic needs investigation.

Complete change inventory

Every change pulled in by replacing the 5.1.3 source tree with 6.0.0, in one place. Path A applies all of these by default; Path B and Path C inherit them and add their own per-customization handling.
Area5.1.36.0.0Impact
Module layout5 modules; cvarc-starter is the exec8 modules; cvarc-application is the exec, cvarc-starter is an auto-config libraryBuild artifact path/name changes; nothing else
Project version5.1.3 (release)6.0.0-SNAPSHOTNone
Parent POMcommon-parent-pom:1.2.0common-parent-pom:2.5.0Pulled transitively
Language/runtimeJava 17 (enforced)Java 21 (enforced)Must install/select JDK 21
Core frameworkActivePivot 6.0.9Atoti Server 6.1.19None — wired transitively
Embedded servletTomcat 9.0.74Tomcat 11.0.6None
Servlet APIjavax.servlet:javax.servlet-apijakarta.servlet:jakarta.servlet-apiNone
Hibernateorg.hibernate:hibernate-c3p0org.hibernate.orm:hibernate-c3p0None
LoggingSLF4J 1.7.30, Logback 1.2.13SLF4J 2.0.17, Logback 1.5.18None
Chunk allocator flag-Dactiveviam.chunkAllocatorClass=…MmapDirectChunkAllocator-Dactiveviam.chunkAllocatorKey=mmapMust change for direct-jar launch
add-opens--add-opens java.base/java.util.concurrent=ALL-UNNAMEDPlus --add-opens=java.base/java.util=ALL-UNNAMEDNew flag required for direct-jar launch
H2 URL flag--content-service.db.url=jdbc:h2:file:./content_service;DB_CLOSE_DELAY=-1Configured in application.ymlDrop the flag
Context path/cvarc-starter/cvarc-applicationUpdate clients/proxies pointing at the old path
Data sourcescom.activeviam.io:data-connectors-{csv,jdbc,aws,azure,gcp}com.activeviam.source:{csv-source,cloud-source-*} + data-load-controllerNone — local CSV is the default profile
Per-cloud CSV configsHand-written Ba/Sa/Shared/Crif*CsvSourceConfig classes (~15 files)DLC config package cvarc-starter/cfg/impl/dlc/ driven by Spring profilesPreserved by local profile / default csv-source.type: local; new --csv.topic.path flag
Tracingspring-cloud-sleuth 3.1.3 + zipkin-brave 5.13.9OpenTelemetry 1.43.0 + Spring Boot starterNone — toggled via tracing.enabled: true in application.yml
Spring Boot startersNone — manual wiringatoti-server-starter, atoti-ui-starter, atoti-admin-ui-starter, atoti-what-if-spring-boot-starter, bookmark-toolReplaces deleted hand-written configs
Swagger UIDisabled (springdoc.swagger-ui.enabled: false)EnabledSwagger UI is now reachable; disable in your own override if needed
What-Ifwhatif:2.1.6-AS6.0atoti-what-if-lib:5.0.0-AS6.1 + spring-boot-starterNone — same default endpoints work
Limitslimits-auto-config-ap60:3.0.0 (enabled by default)limits-auto-config-61:4.2.1 (disabled by default, limits.autoconfiguration.enabled: false)If you relied on Limits, set limits.autoconfiguration.enabled=true in your override
Common Accelerator Library1.15.0-AS6.02.1.15-AS6.1None
Application bootstrapcom.activeviam.cvarc.starter.CVAWebApplicationcom.activeviam.cvarc.application.CVARCApplicationMain-class name moves with the artifact
Removed configsApplicationConfig, BraveTracingConfig, DataLoadControllerConfig, DatastoreConfig, LimitsIntegration, JwtAuthenticationConfigurer, CorsConfig, WhatIfConfig (cvarc-common), all Ba/Sa/Shared/Crif*CsvSourceConfigGoneNone — replaced by Atoti Spring Boot starters and DLC
Removed monitoring stackActiveMonitor, APM, DoctorPivotNot presentNone — health endpoints now via Spring Boot Actuator
Properties/YAML locationcvarc-starter/src/main/resources/cvarc-application/src/main/resources/None
Data samplescvarc-starter/data-samples/{stage,whatif}cvarc-application/data-samples/{stage,whatif}Byte-identical, only the parent module changes
Dockerfilecvarc-starter/Dockerfile, FROM eclipse-temurin:17, old chunk-allocator flagcvarc-application/Dockerfile, FROM eclipse-temurin:21, chunkAllocatorKey=mmapBuild context moves to cvarc-application/; H2 URL flag dropped
Net effect: 6.0.0 moves from a hand-wired ActivePivot 6.0 / Sleuth+Brave / Java 17 / Tomcat 9 stack to an Atoti 6.1 / Spring Boot starter / OpenTelemetry / Java 21 / Tomcat 11 stack. The deleted @Configuration classes are not a regression: their behavior is replicated by the new starters and the DLC local profile, all activated by the default application.yml shipped under cvarc-application/src/main/resources/.

Module rename

The Maven module structure has been reorganized. If a fork or downstream project depends on Atoti CVA Risk Capital modules, update pom.xml dependencies as follows:
Old artifact IDNew artifact ID
cvarc-commoncvarc-common-lib
(no equivalent)cvarc-common-config
cvarc-ba-corecvarc-ba-lib
cvarc-ba-activepivotcvarc-ba-config
cvarc-sa-corecvarc-sa-lib
cvarc-sa-activepivotcvarc-sa-config
cvarc-activemonitor(removed — no replacement)
cvarc-starter (old executable)cvarc-application
(no equivalent)cvarc-starter (new auto-config library)
(no equivalent)cvarc-application-tests
Spring-context integration tests previously in cvarc-starter are now in the dedicated cvarc-application-tests module. Update CI/CD configuration if test classes are referenced by module.

Main class rename

The main Spring Boot application class has been renamed:
// Before (5.1.x)
com.activeviam.cvarc.starter.CVAWebApplication

// After (6.0.x)
com.activeviam.cvarc.application.CVARCApplication
Update references in IDE run configurations, Docker images, and deployment scripts.

Java 21 upgrade

Java 21 is now required. The POM enforces requireJavaVersion 21 and the Maven build fails immediately on the wrong JDK. Two --add-opens flags are now required at launch:
--add-opens=java.base/java.util.concurrent=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
The second flag (java.base/java.util) is new in 6.0.0. Both must be present for the direct-jar launch. The shipped Dockerfile already includes both.

Jakarta EE migration (javax → jakarta)

All javax.* imports have been migrated to jakarta.* as part of the Spring Boot 3 upgrade:
  • javax.servlet.*jakarta.servlet.*
  • javax.persistence.*jakarta.persistence.*
  • javax.validation.*jakarta.validation.*
Update all affected imports in custom code. In POMs, replace javax.servlet:javax.servlet-api with jakarta.servlet:jakarta.servlet-api (scope provided).
// Before (5.1.x)
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletContext;

// After (6.0.x)
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.ServletContext;

Spring security 6 migration

Spring Security 6.x is included as part of the Spring Boot 3 migration. The deprecated WebSecurityConfigurerAdapter has been replaced with SecurityFilterChain beans:
// Before (5.1.x)
public abstract class AJwtSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .antMatcher(JwtRestServiceConfig.REST_API_URL_PREFIX + "/**")
            .csrf().disable()
            .cors().and()
            .authorizeRequests()
            .antMatchers("/**").hasAnyAuthority(APP_ROLE__USER)
            .and()
            .httpBasic().authenticationEntryPoint(authenticationEntryPoint);
    }
}

// After (6.0.x)
@Bean
@Order(3)
protected SecurityFilterChain jwtSecurityFilterChain(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception {
    return http
        .csrf(AbstractHttpConfigurer::disable)
        .cors(Customizer.withDefaults())
        .securityMatcher(mvc.pattern(url(JwtRestServiceConfig.REST_API_URL_PREFIX + "/**")))
        .authorizeHttpRequests(auth -> auth
            .requestMatchers(mvc.pattern(HttpMethod.OPTIONS, "**")).permitAll()
            .anyRequest().hasAnyAuthority(APP_ROLE__USER))
        .httpBasic(basic -> basic.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)))
        .build();
}
A new MvcRequestMatcher.Builder bean is required:
@Bean
@Scope("prototype")
MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) {
    return new MvcRequestMatcher.Builder(introspector);
}
JwtAuthenticationConfigurer and CorsConfig are deleted outright in 6.0.0. CORS is now managed via configuration properties.

OpenTelemetry replaces Spring Sleuth

Spring Cloud Sleuth and Zipkin Brave have been replaced by OpenTelemetry 1.43.0. The following dependencies are added:
  • opentelemetry-spring-boot-starter
  • opentelemetry-sdk-extension-autoconfigure
  • opentelemetry-logback-mdc-1.0
TracingConfig (cvarc-common) and BraveTracingConfig (cvarc-starter) are replaced by OpenTelemetryTracingConfig in cvarc-common-config, already imported by the new ApplicationConfig. New configuration in application.yml:
otel:
  instrumentation:
    annotations:
      enabled: false

tracing:
  enabled: true
For span creation in custom code, replace:
// Before (5.1.x)
@Autowired
brave.Tracing tracing;
// ...
brave.Span span = tracing.tracer().nextSpan();
With:
// After (6.0.x)
var tracer = io.opentelemetry.api.GlobalOpenTelemetry.getTracer("my-instrumentation");
var span = tracer.spanBuilder("my-span").startSpan();
The @DependsOn(TracingConfig.TRACING_BEAN) pattern from 5.1.3’s ApplicationConfig is removed in 6.0.0.

DispatcherServlet configuration removal

The dispatcherServletRegistration bean has been removed from CVARCApplication. This bean registered a DispatcherServletRegistrationBean as a workaround for Spring Boot incompatibilities in previous versions of Atoti Server. This workaround is no longer needed. If a custom application class overrides or references this bean, remove the override.

Atoti Server 6.1.19 starters

The project now uses Atoti Server starters for simplified dependency management. These replace the hand-written configuration classes that were deleted in this release:
<dependency>
    <groupId>com.activeviam.springboot</groupId>
    <artifactId>atoti-server-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.activeviam.springboot</groupId>
    <artifactId>atoti-ui-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.activeviam.springboot</groupId>
    <artifactId>atoti-admin-ui-starter</artifactId>
</dependency>
Version management is handled by the parent BOM. Do not pin atoti-server.version explicitly in module POMs. Swagger UI is now enabled by default (springdoc.swagger-ui.enabled: true in the new application.yml). Disable it via a property override if needed.

Data load controller changes

The data loading framework has been replaced:
5.1.36.0.0
data-connectors-csvcsv-source + data-load-controller
data-connectors-jdbcdropped
data-connectors-awscloud-source-aws
data-connectors-azurecloud-source-azure
data-connectors-gcpcloud-source-google
Per-cloud CSV source classes (Ba/Sa/Shared/Crif{Aws,Azure,Google,}CsvSourceConfig) are replaced by the DLC configuration package in cvarc-starter/.../cfg/impl/dlc/ and the new Spring profile YAMLs (application-dlc-local-csv.yaml, application-dlc-azure-csv.yaml). The default csv-source.type: local in application.yml preserves the 5.1.3 local-CSV behavior. Conditional deployment toggling (dist-data-node / dist-query-node Spring profiles) is replaced by @ConditionalOnDataNode / @ConditionalOnQueryNode. The SP_PROFILE__DATA_NODE and SP_PROFILE__QUERY_NODE constants are removed from CVARCEnvConstants, and the spring.profiles.active property is removed from cvarc.properties.

What-If 2.1.6-AS6.0 → 5.0.0-AS6.1

What-If has been upgraded from whatif:2.1.6-AS6.0 to atoti-what-if-lib:5.0.0-AS6.1 plus atoti-what-if-spring-boot-starter. This introduces breaking API changes that affect custom implementations extending WhatIfConfig. Maven artifact rename: replace com.activeviam.apps:whatif with com.activeviam.apps:atoti-what-if-lib and add com.activeviam.apps:atoti-what-if-spring-boot-starter. Simulation persistence: Hibernate replaces DataStore The persistence layer has changed from a DataStore-based manager to a Hibernate/JPA manager. Before (2.1.6-AS6.0):
@Bean
public ISimulationPersistenceManager persistenceManager(IDatabaseService databaseService) {
    DatabaseSimulationPersistenceManager persistenceManager = new DatabaseSimulationPersistenceManager();
    persistenceManager.setDatabaseService(databaseService);
    return persistenceManager;
}
After (5.0.0):
@Bean
public ISimulationPersistenceManager persistenceManager(WhatIfHibernateProperties whatIfHibernateProperties) {
    var configuration = new org.hibernate.cfg.Configuration();
    var properties = new Properties();
    properties.putAll(whatIfHibernateProperties.getPersistence());
    configuration.addProperties(properties);
    configuration.addAnnotatedClass(DatabaseSimulationJPA.class);
    var sessionFactory = configuration.buildSessionFactory();

    HibernateSimulationPersistenceManager<DatabaseSimulationJPA> persistenceManager =
            HibernateSimulationPersistenceManager.of(DatabaseSimulationJPA.class);
    persistenceManager.setSessionFactory(sessionFactory);
    return persistenceManager;
}
Add @EnableConfigurationProperties({ WhatIfHibernateProperties.class }) to the WhatIfConfig subclass to enable property binding. Default properties use an in-memory H2 database. Security manager: constructor arguments added SpringDatabaseSimulationsSecurityManager now requires ISimulationPersistenceManager and IBranchPermissionsManager to be injected:
// Before (2.1.6-AS6.0)
@Bean
public IDatabaseSimulationsSecurityManager securityManager() {
    return new SpringDatabaseSimulationsSecurityManager();
}

// After (5.0.0)
@Bean
public IDatabaseSimulationsSecurityManager securityManager(
        ISimulationPersistenceManager persistenceManager,
        IBranchPermissionsManager branchPermissionsManager) {
    return new SpringDatabaseSimulationsSecurityManager(persistenceManager, branchPermissionsManager);
}
Distributed REST service: JWT replaces username/password The RestDistributedDatabaseService bean now takes AddressSupplier and AuthenticatorSupplier instead of inline lambdas. Authentication switched from UserAuthenticator (username/password) to JwtAuthenticator (JWT tokens):
// After (5.0.0)
@Bean
@Profile("WhatIf")
@ConditionalOnMissingBean
public AddressSupplier addressSupplier() {
    return () -> mvPivot.getClusterMembersRestAddresses().values().stream()
            .map(addr -> addr.regionMatches(true, 0, "http", 0, 4) ? addr : ("http://" + addr))
            .collect(Collectors.toSet());
}

@Bean
@Profile("WhatIf")
@ConditionalOnMissingBean
public AuthenticatorSupplier authenticatorSupplier(IJwtService jwtService) {
    return () -> new JwtAuthenticator(jwtService);
}

@Bean
@Primary
@Profile("WhatIf")
public IDatabaseService restRemoteService(AddressSupplier addressSupplier, AuthenticatorSupplier authenticatorSupplier) {
    return new RestDistributedDatabaseService(addressSupplier, authenticatorSupplier);
}
In 5.0.0-AS6.1, AddressSupplier and AuthenticatorSupplier have been removed. Distributed What-If communication for file uploads is now handled by Spring 6 HTTP Service Proxies (RestClientConfig), with JWT tokens propagated automatically.
REST API path change
EndpointOld path (2.1.6-AS6.0)New path (5.0.0-AS6.1)
Base URL/services/rest/what-if//activeviam/what-if/rest/v3
Update any client code or configuration that calls the What-If REST endpoints directly. Store coverage expanded Trade duplication now covers 7 stores (previously Delta only): BaBase, TradeDescription, CapitalTreatment, BAHedgeRisk, SaBase, Delta, Vega. Trade scaling now covers 3 stores:
StoreFields scaled
BAHedgeRiskNotional
DeltaSensitivities, DeltaSensitivitiesInterpolated
VegaSensitivities
Error handling change All What-If controllers now throw CVAServiceException with HTTP status codes instead of returning DatabaseSimulationStatus in the response body. REST clients receive 401 Unauthorized or 500 Internal Server Error on failure instead of 200 OK with a FAILED or UNAUTHORISED status body. Update any client code that checks the response body for failure status values. What-If feature flags Each What-If operation can be disabled via properties:
PropertyDefaultDescription
cvarc.whatif.trade-scaling.disablefalseDisables the trade scaling REST endpoint
cvarc.whatif.parameter-set.disablefalseDisables the parameter set REST endpoint
cvarc.whatif.file-upload.data.disablefalseDisables the file upload REST endpoint
Removed What-If classes
  • CVARCWhatIfSecurityManager: superseded by SpringDatabaseSimulationsSecurityManager.
  • TradeScaleDTO: superseded by TradeRescaleDTO.
  • TradeDuplicateAndRescaleSimulationDefinition: replaced by TradeDuplicateSimulationDefinition and TradeScalingSimulationDefinition.
  • WhatIfConfig (from cvarc-common) and WhatIfRestServices: replaced by WhatIfConfig in cvarc-application.
  • StressedSensitivitySimulationDefinition, StressedSensitivityWhatIfException, StressedSensitivityWhatIfSubmitter: replaced by FileUploadSimulationDefinition and FileUploadWhatIfSubmitter.
  • AddressSupplier, AuthenticatorSupplier: superseded by Spring 6 HTTP Service Proxy configuration in RestClientConfig.
Other API changes affecting custom What-If code
  • Exception package: What-If REST exceptions (including CVAServiceException) are now under com.activeviam.tools.whatif.rest. Update any exception imports in custom code.
  • IDistributedQueryResultsMerger: the interface no longer exposes branch-deletion or fast-forward methods. Remove any custom overrides of those methods; they are handled internally by the new distributed What-If pipeline.
  • Lombok annotation processor: several base classes in atoti-what-if-lib now use Lombok. Custom code extending them must declare org.projectlombok:lombok on the annotation processor classpath, otherwise compilation fails on missing constructors and accessors.
Distributed file upload File-upload What-If now supports distributed deployments. Data nodes run StressedSensitivityWhatIfRestController (activated by @ConditionalOnInMemoryDatabase). Query nodes run StressedSensitivityQueryNodeRestController (activated by @ConditionalOnQueryNode), which orchestrates the upload across all data nodes in parallel. A new POST /upload-nosim/{branch} endpoint is available on both data and query nodes. It creates a branch and loads data without running a What-If simulation. No additional configuration is needed. The correct controller is activated automatically based on deployment topology.

Atoti Limits 4.2.1

The Limits add-on has changed GroupId, artifact ID, and version:
5.1.36.0.0
GroupIdcom.activeviam.limitscom.activeviam.solutions.limits
Artifactlimits-auto-config-ap60limits-auto-config-61
Version3.0.04.2.1
Default stateEnabledDisabled (limits.autoconfiguration.enabled: false)
The useLimitsModule property is removed. To re-enable Limits, set limits.autoconfiguration.enabled=true in application.yml or your property override. Custom limit rules need to be re-expressed against the 4.x API.

Hibernate upgrade

The Hibernate dependency group ID has changed:
<!-- Before (5.1.x) -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
</dependency>

<!-- After (6.0.x) -->
<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-c3p0</artifactId>
</dependency>
Version management is handled by the parent BOM.

JGroups protocol files

The AtotiAuthToken class has been replaced with SharedSecretAuthToken. Update all JGroups protocol XML files:
<!-- Before (5.1.x) -->
<AUTH auth_class="com.activeviam.activepivot.dist.impl.internal.distribution.security.impl.AtotiAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>

<!-- After (6.0.x) -->
<AUTH auth_class="com.activeviam.common.distribution.security.SharedSecretAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>

Configuration files (cvarc.properties, application.yml)

cvarc.properties moves from cvarc-starter/src/main/resources/properties/cvarc.properties to cvarc-application/src/main/resources/properties/cvarc.properties. Removed properties (5.1.3 → 6.0.0):
PropertyReplacement
aws.bucket, aws.region, aws.root_directorycsv-source.*
azure.connection.endpoint, azure.connection.stringcsv-source.*
cloud.fetch.threadcsv-source.*
csvSource.polling.delaycsv-source.*
csvSource.subdirectory.datasetcsv-source.*
google.container, google.root_directorycsv-source.*
input.data.root.dir.pathcsv-source.*
server.servlet.context-pathremoved (Spring Boot 3 default)
spring.profiles.active@ConditionalOn* (CVARC-823)
useLimitsModulelimits.autoconfiguration.enabled (defaults to false)
activeviam.apm.zipkin.span.level, spring.sleuth.traceId12OpenTelemetry config
enable.all.datastore.statistics, datastore.jung.schema.drawremoved
INPUT_FILE_PATH_MATCHER_*handled internally by DLC
Added properties (6.0.0):
Property prefixConfiguration classDescription
csv-source.*CsvSourceDatasetConfigurationPropertiesCSV data source configuration, replacing legacy csvSource.*
cvarc.whatif.file-upload.data.*WhatIfFileUploadPropertiesWhat-If file upload configuration
contentServer.remoteToggle for remote vs local content server
initial-load.configurationInitial-load configuration
New application.yml sections:
PropertyValuePurpose
otel.instrumentation.annotations.enabledfalseDisables OpenTelemetry annotation instrumentation
tracing.enabledtrueEnables OpenTelemetry distributed tracing
limits.autoconfiguration.enabledfalseLimits disabled by default
csv-source.typelocalActivates local-CSV DLC profile
springdoc.swagger-ui.enabledtrueSwagger UI now enabled by default
CVARCEnvConstants constant renames Many _SYSPROP / _SYNSPROP / _PROP suffixes were standardized to _PROPERTY:
5.1.36.0.0
APP_ACCELERATOR_PROPS_FILE_PATH_SYNSPROPAPP_ACCELERATOR_PROPS_FILE_PATH_PROPERTY
APP_ENV_PROPS_FILE_PATH_SYSPROPAPP_ENV_PROPS_FILE_PATH_PROPERTY
CONTENT_SERVER_BOOKMARKS_DEFAULT_OWNERS_PROPCONTENT_SERVER_BOOKMARKS_DEFAULT_OWNERS_PROPERTY
CONTENT_SERVER_BOOKMARKS_DEFAULT_READERS_PROPCONTENT_SERVER_BOOKMARKS_DEFAULT_READERS_PROPERTY
DATA_LOAD_ENV_PROPS_FILE_PATH_SYSPROPDATA_LOAD_ENV_PROPS_FILE_PATH_PROPERTY
DEFAULT_DATA_LOAD_ENV_PROPS_FILE_PATHDEFAULT_DATA_LOAD_ENV_PROPS_FILE_PATH_PROPERTY
DEFAULT_HIBERNATE_ENV_PROPS_FILE_PATHDEFAULT_HIBERNATE_ENV_PROPS_FILE_PATH_PROPERTY
EXPORT_BOOKMARKS_TO_FILEEXPORT_BOOKMARKS_TO_FILE_PROPERTY
EXPORT_BOOKMARKS_TO_FOLDEREXPORT_BOOKMARKS_TO_FOLDER_PROPERTY
HIBERNATE_ENV_PROPS_FILE_PATH_SYSPROPHIBERNATE_ENV_PROPS_FILE_PATH_PROPERTY
TEST_PROPERTIES_FILETEST_PROPERTIES_FILE_PROPERTY
SAMeasureBuilder constant renames (typo fix SENSITITIVIESSENSITIVITIES):
5.1.36.0.0
M__DELTA_NET_WEIGHTED_SENSITITIVIES_SQUARED_SUMM__DELTA_NET_WEIGHTED_SENSITIVITIES_SQUARED_SUM
M__DELTA_WEIGHTED_SENSITITIVIES_PRODUCTM__DELTA_WEIGHTED_SENSITIVITIES_PRODUCT
M__DELTA_WEIGHTED_SENSITITIVIES_SQUARED_SUM_HDGM__DELTA_WEIGHTED_SENSITIVITIES_SQUARED_SUM_HDG
M__VEGA_NET_WEIGHTED_SENSITITIVIES_SQUARED_SUMM__VEGA_NET_WEIGHTED_SENSITIVITIES_SQUARED_SUM
M__VEGA_WEIGHTED_SENSITITIVIES_PRODUCTM__VEGA_WEIGHTED_SENSITIVITIES_PRODUCT
M__VEGA_WEIGHTED_SENSITITIVIES_SQUARED_SUM_HDGM__VEGA_WEIGHTED_SENSITIVITIES_SQUARED_SUM_HDG
M__VEGA_UNFILTERED is removed. Eight formerly public constants are now private. getDatastore() and setDatastore() are removed from SAMeasureBuilder.

Docker configuration

The Dockerfile moves from cvarc-starter/Dockerfile to cvarc-application/Dockerfile. A docker build cvarc-application/ without pre-copy steps will fail; CI must copy data-samples and bookmarks first (see Path A step 4b). Full diff of Dockerfile changes:
5.1.36.0.0
Base imageeclipse-temurin:17eclipse-temurin:21
Jar artifactcvarc-starter-*-exec.jarcvarc-application-*-exec.jar
Chunk allocator-Dactiveviam.chunkAllocatorClass=…MmapDirectChunkAllocator-Dactiveviam.chunkAllocatorKey=mmap
H2 URL flag--content-service.db.url=jdbc:h2:file:…removed (in application.yml)
Extra add-opens--add-opens=java.base/java.util=ALL-UNNAMED
JVM heap/stack-Xms1024m -Xmx2048m -Xss5m
CSV path--csv.topic.path via ENV CSV_TOPIC_PATH
ENTRYPOINT["sh","-c"]removed (CMD uses exec form)
COPY permissionsRUN chmod -R 777COPY --chmod=777 / COPY --chmod=666

Migration checklist

Use this checklist to verify a complete migration regardless of path. Build environment
  1. Install JDK 21 and confirm java -version reports 21.x.
  2. Confirm JAVA_HOME points at the JDK 21 installation.
Source tree and modules
  1. Replace the 5.1.3 source tree with the 6.0.0 tree (clean checkout — do not forward-merge).
  2. Update Maven <artifactId> references using the module rename table.
  3. Replace CVAWebApplication with CVARCApplication in IDE run configurations, Docker images, and deployment scripts.
  4. If Spring-context tests are in a fork, move them to cvarc-application-tests.
Imports and symbol renames
  1. Replace all javax.* imports with jakarta.* (servlet, persistence, validation).
  2. Apply the full find-and-replace regex table from Path C step 3.
  3. Rename CVARCEnvConstants constants from _SYSPROP/_SYNSPROP/_PROP to _PROPERTY.
  4. Rename the six SAMeasureBuilder SENSITITIVIES constants to SENSITIVITIES.
  5. Rename ReferenceLevelTranslator.KEY to ReferenceLevelTranslator.TRANSLATOR_KEY.
Deleted and relocated configs
  1. Remove references to BraveTracingConfig, TracingConfig, TracingRestServiceConfig, and brave.Tracing.
  2. Remove references to JmxMonitoringConfig, MonitoringRestServicesConfig, ApplicationMonitoringConfig.
  3. Remove references to ActiveMonitorSupportConfig, the ActiveMonitor stack, and activemonitor-support.properties.
  4. Remove references to all Ba/Sa/Shared/Crif*CsvSourceConfig classes and CommonCloudSourceConfig.
  5. Remove references to LimitsIntegration; if Limits was active, set limits.autoconfiguration.enabled=true.
  6. Remove references to DoctorPivotConfig, doctorpivot-{api,web-app}.
  7. Remove JwtAuthenticationConfigurer and CorsConfig; CORS is now config-driven.
  8. Remove dispatcherServletRegistration bean overrides — see DispatcherServlet configuration removal.
Spring Security 6
  1. Migrate from WebSecurityConfigurerAdapter to SecurityFilterChain beans.
  2. Add the MvcRequestMatcher.Builder bean.
  3. Configure AuthenticationManager as a bean.
What-If
  1. Replace com.activeviam.apps:whatif with atoti-what-if-lib and add atoti-what-if-spring-boot-starter.
  2. Migrate persistenceManager bean to HibernateSimulationPersistenceManager.
  3. Update securityManager bean to inject ISimulationPersistenceManager and IBranchPermissionsManager.
  4. Update any RestDistributedDatabaseService wiring from UserAuthenticator to JwtAuthenticator.
  5. Update REST clients calling /services/rest/what-if/ to /activeviam/what-if/rest/v3.
  6. Update exception imports to com.activeviam.tools.whatif.rest.
  7. Remove overrides of deleted IDistributedQueryResultsMerger branch-deletion and fast-forward methods.
  8. Update imports for TradeRescaleRestServiceController (moved to cvarc-application).
  9. Remove references to CVARCWhatIfSecurityManager, TradeScaleDTO, and TradeDuplicateAndRescaleSimulationDefinition.
  10. Update REST clients that check the response body for failure status to handle HTTP error codes instead.
  11. Ensure Lombok is on the annotation processor classpath if custom code extends affected What-If classes.
Properties
  1. Remove deprecated cvarc.properties entries listed in the configuration files section.
  2. Review logback.xml for compatibility with Logback 1.5.x.
JGroups
  1. Replace AtotiAuthToken with SharedSecretAuthToken in all JGroups protocol XML files.
Launch command and Docker
  1. Update the jar path from cvarc-starter/target/… to cvarc-application/target/cvarc-application-6.0.0-SNAPSHOT-exec.jar.
  2. Replace -Dactiveviam.chunkAllocatorClass=…MmapDirectChunkAllocator with -Dactiveviam.chunkAllocatorKey=mmap.
  3. Add --add-opens=java.base/java.util=ALL-UNNAMED to JVM flags.
  4. Drop --content-service.db.url=… from the launch line.
  5. Add --csv.topic.path=./data-samples/data if using the bundled CSV samples.
  6. Update any reverse proxy or client that references the old /cvarc-starter context path.
  7. Update Docker base image to eclipse-temurin:21.
  8. Move the Docker build context from cvarc-starter/ to cvarc-application/; pre-copy data-samples and bookmarks before building.
Validation
  1. Run mvn -DskipTests clean install from the project root.
  2. Start the application and verify it reaches the ready state.
  3. Verify all security filter chains and What-If simulation flows work correctly.