Migrate to 6.2
This page describes the best strategy to upgrade to 6.2. Read the Release notes to get familiar with major changes for this release. This guide refers to changes in migration order. The Release notes refers to the changes based on their importance or significance. For this migration, an automated OpenRewrite migration recipe is provided. Run it at the specified step of the migration process.Packaging changes
All the artifacts are available on JFrog Artifactory. There are two client-facing entrypoints: Read the download page to see how to configure those entry points. The channelmvn includes mvn-prod and also includes pre-release (alpha, beta, milestone, release candidate) and continuous builds.
Visibility of Maven artifacts depends on the access rights of the account.
Some artifacts, such as continuous build, may not be accessible if the required permissions are not granted.
Atoti is not distributed on artifacts.activeviam.com.
Preparatory work
- Upgrade at least to version 6.1.20
- Check for use of
avinternal/internal/private_in imports and replace them. Do not hesitate to fill a support ticket to seek for an alternative - Fix Spring deprecations, follow Spring guide
- Try building the project with JDK 25. Some dependencies may require an upgrade for the build to succeed — for example, Lombok must be upgraded to a JDK 25-compatible version (1.18.40+).
- Check for use of removed features
Upgrade
- Run the automated OpenRewrite migration recipe
- Update the poms to the new Java version, Spring Boot version and Atoti version
- Atoti Server 6.2 moves to Spring Boot 4, which brings Jackson 3 (
com.fasterxml.jackson.*→tools.jackson.*). Migrate your Jackson usage with OpenRewrite’sUpgradeJackson_2_3recipe. - If you overrode the
admin-ui.versionMaven property to pin the Atoti Admin UI version, this property is removed: all Atoti UI artifacts (atoti-ui,atoti-ui-initial-content,atoti-admin-ui) are now versioned by the singleatoti-ui.versionproperty - Logging configuration
- If JUL is used for logging, add a dependency to
org.slf4j:slf4j-jdk14 - If a different logging framework is used, remove the dependency to
org.slf4j:jul-to-slf4j
- If JUL is used for logging, add a dependency to
- Compile and test
Post-upgrade
As part of the migration, the name of some loggers and JVM property may have changed. Warnings will be logged at runtime when using the legacy names in order to allow to identify the ones to migrate. Monitor the logs for these warnings.Manual changes
The following changes are not handled by the automated recipe and must be applied manually.-
IActivePivotContentServiceConfigis deprecated. If you implement this interface, the@Beanannotation is not inherited from the interface foractivePivotContentService(). Add@Beanexplicitly to your implementing method, or migrate to declaringIActivePivotContentServiceas a standalone@Bean. -
ICsvParserConfigPolicy,LineAndFileLimitCsvParserPolicy, andNoRestrictionCsvParserConfigPolicyhave been removed from the CSV source API, along withCsvParserConfiguration.getParserPolicy()andsetParserPolicy(). These APIs allowed limiting the number of lines or files read and sampling rows with a step; this functionality has been removed with no replacement. Remove any reference to these types and methods. -
IParquetReaderPolicyandIParquetParserBuilder.withPolicy(IParquetReaderPolicy)have been removed from the Parquet source API. These APIs allowed limiting the number of lines or files read and sampling rows with a step; this functionality has been removed with no replacement. Remove any reference to this type. -
SnowflakeDatabaseSettings.lastAlteredMarginhas been removed. A recently-altered table is now read at the SnowflakeCURRENT_TIMESTAMPsampled when the version is built instead of at its (possibly lagging)LAST_ALTERED. -
Range sharing can now be configured only through the
IQueryExecutioncontext value:- Default behavior — add a
QueryExecutioncontext value to the cube’s shared context withwithSharedContextValue(QueryExecution.builder().rangeSharingEnabled(false).build()). - Per-query behavior — include the same
QueryExecutioncontext value in the query’s context values.
- Default behavior — add a
-
IActivePivotManagerDescriptionConfigis deprecated. If you implement this interface, removeimplements IActivePivotManagerDescriptionConfigfrom your class declaration and add@Beanexplicitly to yourmanagerDescription()method. If you relied on the defaultepochManagementPolicy()provided by the interface, it is no longer needed: the defaultKeepLastEpochPolicyis applied automatically. To use a custom policy, declare anIEpochManagementPolicy@Beanin your configuration. -
IDatastoreConfigis deprecated. If you implement this interface, removeimplements IDatastoreConfigfrom your class declaration and add@Bean @DependsOn("poolsCleaner")explicitly to yourdatabase()method. If you are using the Atoti Spring Boot starter,poolsCleaneris provided automatically byAtotiSystemAutoConfiguration— no further changes are needed. Otherwise, also copy thepoolsCleanerbean into your configuration class: -
IRoleContextConfigis deprecated. If you implement this interface, removeimplements IRoleContextConfigfrom your class declaration and add@Beanexplicitly to yourentitlementsProvider()method. -
IDatastoreSchemaDescriptionConfigis deprecated. If you implement this interface, removeimplements IDatastoreSchemaDescriptionConfigfrom your class declaration and add@Beanexplicitly to yourdatastoreSchemaDescription()method. -
IParameterAwareDatastoreSchemaDescriptionConfigis deprecated. If you implement this interface, removeimplements IParameterAwareDatastoreSchemaDescriptionConfigfrom your class declaration and add@Beanexplicitly to yourdatastoreSchemaDescription()andparameterStoreConfiguration()methods. The beanCollection<UnaryOperator<IDatastoreSchemaDescription>> descriptionTransformations()has been deleted. If you had custom transformations, those should be applied when implementing theIDatastoreSchemaDescription datastoreSchemaDescription()bean. -
Several methods of the Datastore transaction API (package
com.activeviam.database.datastore.api.transaction) no longer declarethrows DatastoreTransactionException, because they could never actually throw it. The affected methods are:ITransactionalWriter#remove(String, Object...)ITransactionalWriter#removeAll(String, Collection)IOpenedTransaction#updateWhere(ISelection, ICondition, IUpdateWhereProcedure)IOpenedTransaction#rollback()ITransactionManager#rollbackTransaction()ITransactionManager#stop()
DatastoreTransactionExceptionis a checked exception, atryblock wrapping only calls to these methods with acatch (DatastoreTransactionException e)clause will no longer compile. Remove the now-deadcatchclause, or the entiretryif it was the only catch. In a multi-catch such ascatch (DatastoreTransactionException | SomeOtherException e), remove only theDatastoreTransactionExceptionalternative. Methods that still throw it, such ascommitTransaction(),startTransaction(...)andremoveWhere(...), are unaffected, so acatchthat also wraps one of those stays as-is. -
The
String-based distributing level APIs have been removed. Replace usages as follows, converting each formerStringlevel name to aLevelIdentifier(constructed with dimension name, hierarchy name, and level name):IApplicationDescriptionBuilderWithId#withDistributingFields(String...)→withDistributingLevels(LevelIdentifier...)QueryClusterDefinition.DistributedApplicationDefinition(String, List<String>)→QueryClusterDefinition.DistributedApplicationDefinition(String, List<LevelIdentifier>)
-
IDistributedApplicationDefinition#getDistributingFields()has been removed. UsegetDistributingLevels()instead, which returns aList<LevelIdentifier>.
com.activeviam.database.api.schema.DataTablehas been removed. This change is not handled by the automated migration recipe — replace constructor calls manually with the description API matching your stack:- Datastore tables:
new DataTable(name, keyFieldNames, fields)becomesStoreDescription.simpleBuilder().name(name).keyFieldNames(keyFieldNames).fields(fields).build(). Thefieldslist should now containIFieldDescriptioninstances (fromcom.activeviam.database.datastore.api.description) instead ofIDataTableField. Replacenew DataTableField(...)withFieldDescription.builder()…build()from the same package. - DirectQuery tables:
new DataTable(name, keyFieldNames, fields)becomesTableDescription.builder().externalTable(...).withSameLocalName().fields(fields).keyFieldNames(keyFieldNames).build(), supplying the appropriateExternalTable. Thefieldslist should now containAFieldDescriptioninstances (fromcom.activeviam.directquery.api.schema) instead ofIDataTableField. Replacenew DataTableField(...)withFieldDescription.builder()…build()from the same package.
- Datastore tables:
-
IActivePivotBranchPermissionsManagerConfighas been deprecated and no longer carries@Configurationor@Bean. Implementing it no longer exposes a branch permissions manager bean. Stop implementing this interface and exposeIBranchPermissionsManageras a@Beanfrom a@Configurationclass directly. -
IActivePivotConfighas been deprecated and no longer carries@Configurationor@Bean. Implementing it no longer exposes a branch permissions manager bean. Stop implementing this interface and exposeIActivePivotManageras a@Beanfrom a@Configurationclass directly. -
MapGetAggregatesQueryandMapDrillthroughQuerynow always convert to the built-inGetAggregatesQueryandDrillthroughQueryimplementations. It is no longer possible to use a custom implementation registered underIGetAggregatesQuery.PLUGIN_KEYorIDrillthroughQuery.PLUGIN_KEY. -
IGetAggregatesContinuousQueryinterface has been moved to an internal package; there shouldn’t be any reason to need it. -
Conditions (package
com.activeviam.tech.core.api.filtering) are no longer extended-plugin values:ILogicalConditionandIMatchingConditionno longer extendIExtendedPluginValue, so the plugin-1ey constants and thegetType()method are removed from all conditions.- Instantiate conditions directly with their public constructors instead of going through the registry:
Registry.getExtendedPlugin(IMatchingCondition.class).valueOf(IMatchingCondition.EQUAL).create(value)→new EqualCondition(value)Registry.getExtendedPlugin(IMatchingCondition.class).valueOf(IMatchingCondition.IN).create(values)→new InCondition(values)Registry.getExtendedPluginValue(ILogicalCondition.class, ILogicalCondition.AND).create(conditions)→new AndCondition(conditions)
- Replace
getType()string comparisons withinstanceof/pattern matching on the concrete condition class, e.g.condition.getType().equals(ILogicalCondition.AND)→condition instanceof AndCondition.
-
ClickhousePropertieshas been removed. UseClickhousePropertiesV2instead, as the ClickHouse connector has been upgraded to use a new client. There is no recipe to automatically build the new properties. -
IContextualQuery,IListQuery,IStringQueryandAListQueryhave been moved to an internal package. There should be no need to migrate customer code unless you were directly importing or subclassing these types, which is an unsupported pattern. -
The deprecated class
com.activeviam.tech.core.api.tracking.Tracinghas been removed. -
The Netty max message size property (
nettyMessageMaxSize) and thesetMaxSizeForMessageMBean operation no longer accept fully-qualified class names. Replace any class name with the matching public message-type keyword listed inNettyMessageType. An unknown key now raises a configuration error. -
CubeFilter.getSubCubeFromContext(IContext)has been removed. UseCubeFilter.getSecurityAndFilter(IContext)instead. -
CubeFilter.intersectWithSecurity(ICubeFilter, IContext)has been removed. There is no public replacement for this method. -
IQueriesService.execute()method has been changed to use the query concrete classes:execute(IMDXQuery)->execute(MdxQuery).execute(IGetAggregatesQuery)->execute(GetAggregatesQuery, String).execute(IMapGetAggregatesQuery)->execute(MapGetAggregatesQuery, String).execute(IDrillthroughHeadersQuery)->execute(DrillthroughHeadersQuery, String).execute(IMDXDrillthroughHeadersQuery)->execute(MdxDrillthroughHeadersQuery).execute(IDrillthroughQuery)->execute(DrillthroughQuery, String).execute(IMapDrillthroughQuery)->execute(MapDrillthroughQuery, String).execute(IMDXDrillthroughQuery)->execute(MdxDrillthroughQuery).
-
The generic
IStreamingService.createStream()method has been split into different methods to use the query concrete classes:createStream(MdxQuery, IStreamProperties).createStream(MdxDrillthroughQuery, IStreamProperties).createStream(GetAggregatesQuery, String, IStreamProperties).createStream(DrillthroughQuery, String, IStreamProperties).createStream(MapGetAggregatesQuery, String, IStreamProperties).createStream(MapDrillthroughQuery, String, IStreamProperties).
-
The generic
IStreamingService.updateStreamQuery()method has been split into different methods to use the query concrete classes:updateStreamQuery(String, String, MdxQuery).updateStreamQuery(String, String, MdxDrillthroughQuery).updateStreamQuery(String, String, GetAggregatesQuery).updateStreamQuery(String, String, DrillthroughQuery).updateStreamQuery(String, String, MapGetAggregatesQuery).updateStreamQuery(String, String, MapDrillthroughQuery).
-
The interface
IQueryis no longer generic. -
IMember#getHierarchyInfo()andIMember#getLevelInfo()are deprecated since 6.2.0 and planned for removal in 6.3.0. -
To replace
getHierarchyInfo(): usegetLevelIdentifier()and navigate viaLevelIdentifier#getHierarchy()when only an identifier is needed. When full hierarchy metadata is required, look up the hierarchy directly through the cube’s hierarchies. -
To replace
getLevelInfo(): use narrower accessors when only a single attribute is needed. For example, replacegetLevelInfo().getOrdinal()withIAxisMember#getLevelOrdinal(), or usegetLevelIdentifier()to identify the level. When full level metadata is required, look up the level directly through the cube’s hierarchies. -
The
starter-ai-mcp-servernow defaults the MCP transport to Streamable HTTP (spring.ai.mcp.server.protocol=STREAMABLE, served atPOST /mcp) instead of the previous Server-Sent Events transport (/sseplus/mcp/messages). This aligns with the MCP specification’s move to Streamable HTTP and is required by current MCP clients such as Claude Code. If you rely on the SSE transport, restore it explicitly:
Automated OpenRewrite Migration Recipe
The automated OpenRewrite migration recipe handles the following API changes from 6.1.20 to 6.2.0. Run it during the Upgrade step. The recipe is published to JFrog as the artifactcom.activeviam.migration:6_1_20-to-6_2_0:<version>, where <version> should be replaced with the latest available version from JFrog.
How to run
From your project root, preview the changes first:dryRun with run
Running a subset of the migration
The aggregator recipecom.activeviam.migration.v6_1_20_to_6_2_0 runs everything. Each migration is split into three phases so you can adopt it gradually. Swap
-Drewrite.activeRecipes= for one of the phase recipes instead of the aggregator:
| Phase | Recipe name | When to run |
|---|---|---|
| Before | com.activeviam.migration.v6_1_20_to_6_2_0_before | On the 6.1 code base, before upgrading. The old code still compiles. |
| During | com.activeviam.migration.v6_1_20_to_6_2_0_during | Together with the upgrade to 6.2. The old code cannot accommodate these changes. |
| After | com.activeviam.migration.v6_1_20_to_6_2_0_after | Once the project runs on 6.2, to clean up deprecated API usages. |
Change of behavior
-
Applications built on the Atoti Spring Boot starter no longer expose the legacy ActivePivot services
IAdministrationServiceandILicensingServiceas Spring beans. These services mirror the payloads of the removed SOAP web services, and their information is available through the REST APIs. If your application still injects them, set theatoti.server.service.legacy.enabledproperty totrueto restore them, and please share your use case with ActiveViam: these services are planned for removal in a future version. -
The query-service monitoring previously provided by the APM module is now built into Atoti Server: query counters are always recorded, and exceptions thrown during query processing are always logged. The single
name=QueriesService,type=MonitoringMBean previously registered by the APM module is replaced by two MBeans:name=QueriesServiceStatistics,type=Monitoring(query counters) andname=QueriesServiceLogging,type=Monitoring(runtime logging toggles). The per-query report logs (query/result description, completion time, optional memory statistics) are now disabled by default. If you relied on the APM module to produce these logs, enable them with theatoti.server.query.service.logging=trueapplication property (and optionallyatoti.server.query.service.detailed-loggingandatoti.server.query.service.log-memory-stats), or at runtime through theQueriesServiceLoggingMBean. These logs are now emitted on theatoti.server.query.servicelogger. -
Similarly, the JSON queries-service monitoring previously provided by the APM module is now built into Atoti Server: query counters are always recorded, and exceptions thrown during query processing are always logged. The
name=JsonQueriesService,type=MonitoringMBean previously registered by the APM module is replaced byname=JsonQueriesServiceStatistics,type=Monitoring(query counters) andname=JsonQueriesServiceLogging,type=Monitoring(runtime logging toggles). The per-query report logs are disabled by default; enable them with theatoti.server.query.service.json.logging=trueapplication property (and optionallyatoti.server.query.service.json.detailed-loggingandatoti.server.query.service.json.log-memory-stats), or at runtime through theJsonQueriesServiceLoggingMBean. The total query counters now correctly include drillthrough queries, which were previously omitted from the totals. These logs are now emitted on theatoti.server.query.service.jsonlogger. -
Similarly, the streaming-service monitoring previously provided by the APM module is now built into Atoti Server: stream counters are always recorded, and exceptions thrown during stream processing are always logged. The per-query report logs are now disabled by default — note that the APM module previously enabled them by default (
activeviam.apm.enable.streaming.service.loggingdefaulted totrue). If you relied on the APM module to produce these logs, enable them with theatoti.server.query.service.streaming.logging=trueapplication property (and optionallyatoti.server.query.service.streaming.detailed-loggingandatoti.server.query.service.streaming.log-memory-stats), or at runtime throughStreamingQueriesServiceLoggingMBean. The streaming statistics counters are exposed through the newname=StreamingQueriesServiceStatistics,type=MonitoringMBean. These logs are now emitted on theatoti.server.query.service.streaminglogger. -
The query performance evaluator (adaptive slow-query detection) previously provided by the APM module has been removed: its role is superseded by OpenTelemetry traces and metrics together with the query history module. The query executor performs the (OpenTelemetry-native) monitoring. The
activeviam.apm.query.performance.evaluation.{min.sample.size,max.sample.size,coefficient}configuration properties and thecom.activeviam.apm.query.slowslow-query logger no longer exist; remove any references to them from your configuration. -
The APM startup configuration dump has been removed. When the
com.activeviam.apm.springlogger was set toDEBUG, the APM module used to log every resolved Spring environment property at startup along with the application classpath. Use Spring Boot’s built-in equivalents instead: the Actuatorenvandconfigpropsendpoints expose the resolved configuration and sanitize sensitive values out of the box, and starting the application with--debugprints the auto-configuration report. -
The XMLA monitoring JMX MBean has been renamed from
XmlaAPMonitoringtoXmlaMonitoring. Update any JMX client, script, or dashboard that references the MBean by name. -
The node-instance-name logging property has been renamed from
activeviam.apm.node.instance.nametoatoti.server.node.instance.name, and its default value changed fromactivepivottoatoti. This property sets the node name shown for the source of each log line (through theLogInstanceConverterLogback converter). Deployments that set the old property must move it to the new key; deployments relying on the default will see the logged node name change fromactivepivottoatoti. -
The
apmmodule has been removed; its remaining function is now built into Atoti Server (wired by theatoti-server-starterand the observability plugin). Three behavior changes follow:- Thread-status monitoring. The former
ThreadsStatusMonitoringBeanand itsname=ThreadStatus,type=MonitoringJMX MBean (which exposed running/blocked/waiting thread counts) have been removed. Per-state thread counts are available from the standard JVMjava.lang:type=ThreadingMBean or from Micrometer’sJvmThreadMetrics. The passive blocked-thread detection it performed is preserved as a watchdog that logs a full thread dump (built fromThreadDumpUtils) when blocked threads are detected. The watchdog is now disabled by default because the dumps can be verbose; opt in withatoti.server.monitoring.blockedThreadWatchdog.enabled=true. Its scan interval isatoti.server.monitoring.blockedThreadWatchdog.scanIntervalMs(replacingactiveviam.apm.jmx.thread.status.cache.timeout). Theactiveviam.apm.node.starter.jmx.enabledstarter property, which used to gate the now-removed JMX beans, no longer exists. - Health log category. The watchdog now emits on
atoti.server.monitoring.healthandatoti.server.monitoring.health.blocked-thread; the legacycom.activeviam.apm.healthandcom.activeviam.apm.health.blocked-threadnames keep working as back-compatibility aliases. - Native memory allocator JMX. The
DirectChunkAllocatorMBean and theactiveviam.apm.enable.all.apmanager.statisticsproperty that enabled all its statistics at startup have been removed. The native memory allocator is already exposed by the Atoti starter as theMemoryAllocatorMBean; enable its recursive statistics on demand through that MBean if needed.
- Thread-status monitoring. The former
-
The
atoti-server-apm-starterSpring Boot starter has been removed. Its auto-configuration is now part of the mainatoti-server-starter: node-instance-name logging is always set up (theactiveviam.apm.node.starter.logging.enabledtoggle no longer exists), and the blocked-thread watchdog is opt-in viaatoti.server.monitoring.blockedThreadWatchdog.enabled. -
A distributed application can no longer declare several distributing levels that belong to the same hierarchy. Previously the manager description accepted such a configuration with no error, and every entry was kept as an independent distributing level even though the levels of one hierarchy are nested, so the extra level brought no additional partitioning. The configuration is now rejected when the description is validated, raising a
DescriptionException. Keep at most one distributing level per hierarchy. -
A virtual (non-measure) hierarchy whose level resolves to an
OBJECTcontent type without a member name parser now throws aConfigurationExceptionwhen the cube is built. Previously this misconfiguration only logged aSEVEREmessage and let the cube build in a degraded state. To migrate, either define a member name parser on the level (for example via the level builder’swithMemberNameParserPluginKeymethod, or in theIAxisLevelDescriptionimplementation describing the level) or avoid theOBJECTdiscriminator.
Removed features
No longer supported
IParquetParsingInfo#getSkippedRecordCount()has been removed. It always returned0.SnowflakeDialectSettings#SnowflakeDialectSettingsBuilder#arrayAggWrapperFunctionName(String)has been removed. The built-in SQL function from Snowflake is now faster.DatabricksDialectSettings#DatabricksDialectSettingsBuilder#xxxNativeArrayUdafName(String)have been removed. Databricks has deprecated the use of Spark UDAFs. Review your database schema to use emulated vectors (multi-row or multi-column) instead.- The concealed measures feature has been removed from the distributed data cluster definition. The
withConcealedMeasures(...)builder methods,IDataClusterDefinition#getConcealedMeasures/setConcealedMeasures, and the now-redundantwithAllMeasures()builder step no longer exist. Remove any call towithAllMeasures()from data cluster definitions; the builder now goes straight from the hierarchy concealment step to branch concealment. Concealing hierarchies and branches remains available.
With alternatives
IParquetParsingInfo#getPublishedRecordCount()has been removed. UsegetRecordCount()instead.IApplicationDescriptionBuilderWithId#withoutDistributingFields()has been renamed towithoutDistributingLevels().QueryClusterDefinition.DistributedApplicationDefinitionV2has been renamed toQueryClusterDefinition.DistributedApplicationDefinition.IJdbcSourcehas been removed. Replace all usages with the concreteJdbcSourceclass.- Deprecated method
IQueryExecution#shouldBypassNonJitProvidershas been removed. UseIQueryExecution#skipNonJitProvidersinstead. - The
BITMAP_PLUGIN_TYPE,JIT_PLUGIN_TYPEandLEAF_PLUGIN_TYPEconstants onIBuildableAggregateProviderDescriptionBuilderhave been removed. Use the equivalents onIAggregateProviderDefinition. - Deprecated method
IMultiVersionDistributedActivePivot#unloadMembersFromDataNodehas been removed, along with theIMessengerDefinition#UNLOAD_MEMBERS_MESSAGE_TIMEOUTproperty and thedistribution.unload_members_from_data_node.*metrics. UseIMultiVersionDataActivePivot#maskMembersinstead. - Deprecated method
IMultiVersionDistributedActivePivot#getDistributedApplicationInformation()has been removed. UsegetApplicationNames()instead, which returns only the distributed application names and not the per-application distributing levels. - The Maven modules
com.activeviam.activepivot:activepivot-implandcom.activeviam.activepivot:activepivot-intfhave been merged intocom.activeviam.activepivot:core, use it directly. - The Maven modules
com.activeviam.activepivot:activepivot-server-implandcom.activeviam.activepivot:activepivot-server-intfhave been merged intocom.activeviam.activepivot:server, use it directly. - The empty Maven module
com.activeviam.activepivot:activepivot-copperhas been removed. Importcom.activeviam.activepivot:coreand optionallycom.activeviam.activepivot:activepivot-dist-implinstead. - The empty Maven module
com.activeviam.activepivot:activepivot-exthas been removed. Importcom.activeviam.activepivot:coreand optionallycom.activeviam.activepivot:activepivot-dist-implinstead. - The empty Maven module
com.activeviam.springboot:atoti-runtime-starter, kept as an alias since it was renamed in 6.1, has been removed. Usecom.activeviam.springboot:atoti-server-application-starterinstead. - Memory sampling (activated via the property “activeviam.mmap.tracking”, and triggered via JMX operations) has been removed. You should now rely on a JFR instead of JMX operations, as those include dedicated JFR events for memory operations. The associated properties “activeviam.mmap.sampling.depth”, “activeviam.mmap.sampling.start” and “activeviam.mmap.sampling.percent” have been removed.
MDXQueryis now immutable and the constructors should be used.MDXDrillthroughHeadersQueryis now immutable and the constructors should be used.- The deprecated
IFieldDescriptionaccessors have been removed:IFieldDescription#isNullable()→IFieldDescription#getType().isNullable()IFieldDescription#supportEmptyString()→IFieldDescription#getType().supportEmptyString()IFieldDescription#getDefault()→IFieldDescription#getType().getDefaultValue()IFieldDescription#getContentClass()→IFieldDescription#getType().getDataClass()
- The
activeviam.jwt.*application properties, deprecated since 6.1, have been removed. Use theatoti.jwt.*equivalents instead.
| Previous name | New name |
|---|---|
activeviam.jwt.expiration | atoti.jwt.expiration |
activeviam.jwt.key.private | atoti.jwt.key.private |
activeviam.jwt.key.public | atoti.jwt.key.public |
activeviam.jwt.claim_key.authorities | atoti.jwt.claim_key.authorities |
activeviam.jwt.claim_key.principal | atoti.jwt.claim_key.principal |
activeviam.jwt.enabled | atoti.jwt.enabled |
activeviam.jwt.check_user_details | atoti.jwt.check_user_details |
-
The deprecated ActiveViam Property
activeviam.contentService.nameGenerator.defaultSizehas been removed, useactiveviam.contentService.nameGenerator.sizeinstead. See the Properties page for its definition. -
Deprecated method
StartBuilding.Builder#withEpochManager(IEpochManager)has been removed. UseStartBuilding.Builder#withEpochPolicy(IEpochManagementPolicy)instead, passing the epoch policy directly rather than wrapping it in anEpochManager. -
Deprecated method
PersistedBuilder#lockOptions(boolean)has been removed. UsePersistedBuilder#databaseLocks(LockOptions)instead.lockOptions(true)becomesdatabaseLocks(LockOptions.defaultOptions())andlockOptions(false)needs no call. -
The deprecated duplicate types under
io.atoti.runtime.api.measuresandio.atoti.server.common.api.pluginshave been removed. Use the identically named types undercom.activeviam.atoti.application.api.measuresandcom.activeviam.atoti.server.common.api.plugins. The automated recipe rewrites these package references. -
The deprecated 4-argument constructor of
ActivePivotTransactionCommittedEventhas been removed. Use the 6-argument constructor, passing-1, -1for the start and commit timings when they are unknown. -
The deprecated
IGenericAggregationFunction.SUM_PRODUCT_FUNCTION_PLUGIN_KEYconstant has been removed. UseIMultiSourceAggregationFunction.SUM_PRODUCT_FUNCTION_PLUGIN_KEYinstead, which is the canonical home for the multi-source sum-product key. The automated recipe rewrites these references. -
The deprecated
integerandinteger[]parser type keys (including sized and delimited variants such asinteger[10]andinteger[][:]) are no longer recognized. Replace them with the canonicalintandint[](and their sized and delimited variants). -
The public method
ICanBuildCommonCubeDescription#withQueryExecutor()has been removed. The cube’s query executor can no longer be replaced through the builder. To observe the query lifecycle, subscribe to theActivePivotQueryStartedandActivePivotQueryDonehealth events. Both events carry the query task identifier, a top-level flag, and the user name and roles. To cancel an in-flight query, pass the task identifier to the Query REST API V10killQueryByIdendpoint. -
Three deprecated members of
AAdvancedPostProcessorhave been removed:- The
OUTPUT_TYPEconstant → useIPostProcessor.OUTPUT_TYPE_PROPERTYinstead. - The protected
getLevel(String)method → callHierarchiesUtil.getLevel(getActivePivot(), levelDescription)instead. - The protected
getHierarchy(String)method → callHierarchiesUtil.getHierarchy(getActivePivot(), hierarchyDescription)instead.
HierarchiesUtil. The automated recipe rewrites both the constant reference and the calls inside yourAAdvancedPostProcessorsubclasses. - The
-
The deprecated
IDatastoreSchemaDescriptionaccessors have been removed:IDatastoreSchemaDescription#getStoreDescriptions()→IDatastoreSchemaDescription#getTables()IDatastoreSchemaDescription#getReferenceDescriptions()→IDatastoreSchemaDescription#getJoins()
-
The deprecated
IReferenceDescriptionaccessors have been removed:IReferenceDescription#getOwnerStore()→IReferenceDescription#getSourceTableName()IReferenceDescription#getTargetStore()→IReferenceDescription#getTargetTableName()
-
The deprecated
IStoreDescription#getKeyFields()accessor has been removed. UseIStoreDescription#getKeyFieldNames()instead. -
The deprecated constructors of
ReferenceDescriptiontaking field mappings as aList<? extends IPair<String, String>>have been removed. Use the constructor taking aSet<ITableJoin.FieldMapping>instead. -
The deprecated
StoreDescription(String, Collection<String>, List<? extends IFieldDescription>)constructor has been removed. UseStoreDescription.builder()orStoreDescription.simpleBuilder()instead. -
The deprecated
QueryExecution(Boolean)constructor has been removed. UseQueryExecution.builder()instead.
API syntax changes
CsvParserConfigurationconstructors are replaced by a new builder:new CsvParserConfiguration()→CsvParserConfiguration.builder().withColumnCount(0).build()new CsvParserConfiguration(int)→CsvParserConfiguration.builder().withColumnCount(n).build()new CsvParserConfiguration(List<String>)→CsvParserConfiguration.builder().withColumnNames(names).build()new CsvParserConfiguration(Map<Integer, String>)→CsvParserConfiguration.builder().withColumnNamesMapping(map).build()- Full constructors (7-param and 8-param) are migrated using the builder.
- Setter calls (e.g.
config.setSeparator(';')) are replaced by the corresponding builder methods (e.g..separator(';')). createCharsetmethod has been removed
- The
ActivePivotQueryStartedandActivePivotQueryDoneconstructors take new required parameters for the query task identifier and the top-level flag. Atoti builds these events internally, so update any code that instantiates them directly.
CsvSourceFactory.create()static methods are replaced byICsvSource.builder():CsvSourceFactory.create()→ICsvSource.builder().build()CsvSourceFactory.create(name)→ICsvSource.builder().name(name).build()CsvSourceFactory.create(closeCallback)→ICsvSource.builder().closeCallback(closeCallback).build()CsvSourceFactory.create(name, closeCallback)→ICsvSource.builder().name(name).closeCallback(closeCallback).build()
- The
ICsvParserConfigurationinterface has been removed; replace all usages (return types, variable declarations, and parameter types) with the concreteCsvParserConfigurationclass. - The
IFileParserConfigurationinterface has been removed; replace all usages (return types, variable declarations, and parameter types) with the concreteCsvParserConfigurationclass. - The concrete
FileParserConfigurationclass has been removed; replace all usages (return types, variable declarations, and parameter types) with the concreteCsvParserConfigurationclass. CsvSourceConfigurationandCsvSourceConfigurationBuilderconstructors are replaced by the builder:new CsvSourceConfiguration(int, int, boolean, IComparator)→CsvSourceConfiguration.builder().parserThreads(t).bufferSize(b).synchronousMode(s).fileComparator(c).build()new CsvSourceConfigurationBuilder()→CsvSourceConfiguration.builder()CsvSourceConfigurationBuilder.DEFAULT_PARSER_THREADSis deprecated; useCsvSourceConfiguration.getDefaultParserThreads()instead.
- The
ICsvSourceConfigurationinterface has been removed; replace all usages (return types, variable declarations, and parameter types) with the concreteCsvSourceConfigurationclass. SnowflakeProperties#SnowflakePropertiesBuilder#additionalOption(SFSession, String)is replaced bySnowflakeProperties#SnowflakePropertiesBuilder#additionalOption(String, String). Inline the former call usingSFSession#getPropertyKey().IParquetReaderFactory#create(InputFile, ReadSupport<IParquetRecord>, Configuration)is replaced byIParquetReaderFactory#create(InputFile, ReadSupport<IParquetRecord>, ParquetConfiguration). Wrap the formerConfigurationargument usingnew HadoopParquetConfiguration(configuration).- The three
IParquetParser#parseoverloads that take a Hadooporg.apache.hadoop.fs.Pathhave been removed:parse(org.apache.hadoop.fs.Path, IStoreToParquetMapping, IStoreToParquetMapping...)→parse(java.nio.file.Path, IStoreToParquetMapping, IStoreToParquetMapping...)parse(org.apache.hadoop.fs.Path, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)→parse(java.nio.file.Path, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)parse(org.apache.hadoop.fs.Path, Configuration, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)→parse(java.nio.file.Path, ParquetConfiguration, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...). Wrap the former HadoopConfigurationargument withnew HadoopParquetConfiguration(configuration).
- The
factoryparameter type in fourIParquetParser#parseoverloads changed fromFunction<ICloudEntityPath<EntityT>, ? extends SeekableByteChannel>toICloudEntityChannelFactory<EntityT>. The affected overloads are:parse(ICloudDirectory<EntityT>, Function<ICloudEntityPath<EntityT>, ? extends SeekableByteChannel>, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)parse(ICloudDirectory<EntityT>, ParquetConfiguration, Function<ICloudEntityPath<EntityT>, ? extends SeekableByteChannel>, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)parse(ICloudEntityPath<EntityT>, Function<ICloudEntityPath<EntityT>, ? extends SeekableByteChannel>, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)parse(ICloudEntityPath<EntityT>, ParquetConfiguration, Function<ICloudEntityPath<EntityT>, ? extends SeekableByteChannel>, IParquetFieldParsers, IStoreToParquetMapping, IStoreToParquetMapping...)
ICloudEntityPath#getLastModifiedTime()now returns ajava.time.Instantinstead of ajava.util.Date. The value is still the object’s last-modification instant (UTC). Convert withinstant.toEpochMilli()where you previously calleddate.getTime(), or withDate.from(instant)if you need aDate.IAgentno longer extendsIExtendedPluginValue. Implementations ofIAgentshould now also explicitly implementIExtendedPluginValueif needed.- The three Logback conversion-rule converters have been moved out of the
apmmodule into dedicated logging artifacts. Update the fully-qualified class names referenced in yourlogback.xml/logback-spring.xml<conversionRule>declarations:com.activeviam.apm.api.logging.LogInstanceConverter→com.activeviam.tech.logging.logback.api.LogInstanceConverter(artifactcom.activeviam.tech:logging-logback-utils)com.activeviam.apm.api.logging.LogThreadConverter→com.activeviam.tech.logging.logback.api.LogThreadConverter(artifactcom.activeviam.tech:logging-logback-utils)com.activeviam.apm.api.logging.LogUserConverter→com.activeviam.tech.logging.logback.spring.api.LogUserConverter(artifactcom.activeviam.tech:logging-logback-spring)
- The
IMultiVersionDataActivePivotinterface has been moved from packagecom.activeviam.activepivot.dist.impl.api.cubetocom.activeviam.activepivot.dist.datanode.impl.api.cube. NoTransactionExceptionhas been moved in the public API, from packagecom.activeviam.database.datastore.internaltocom.activeviam.database.datastore.api.transaction.- The
IMapQuery,IMapDrillthroughQueryandIMapGetAggregatesQueryinterfaces have been removed from public API; replace all usages (return types, variable declarations, and parameter types) with the concreteMapDrillthroughQueryorMapGetAggregatesQueryclasses.getPivotId()method and all the setters of the concrete classes have been removedIMapDrillthroughQuery.builder()has been moved toMapDrillthroughQuery.builder().MapDrillthroughQueryBuilder#pivotId(String)has been removedMapDrillthroughQuery#getIsFormatted()has been renamedMapDrillthroughQuery#isFormatted()
- The
IDrillthroughHeadersQueryinterface has been moved to an internal package; replace all usages (return types, variable declarations, and parameter types) with the concreteDrillthroughHeadersQueryclass. In addition, the methodsgetFirstResult(),setFirstResult(int),getMaxResults(),setMaxResults(int)have been removed; they had no effect on the results. - The
IMDXQueryinterface has been moved to an internal package; replace all usages (return types, variable declarations, and parameter types) with the concreteMDXQueryclass. - The
IMDXDrillthroughHeadersQueryinterface has been moved to an internal package; replace all usages (return types, variable declarations, and parameter types) with the concreteMDXDrillthroughHeadersQueryclass. In addition, the methodsgetFirstResult(),setFirstResult(int),getMaxResults(),setMaxResults(int)have been removed; they had no effect on the results. - The
IMDXDrillthroughQueryinterface has been moved to an internal package; replace all usages (return types, variable declarations, and parameter types) with the concreteMDXDrillthroughQueryclass. The methodgetContent()has been renamedgetMdx(); the setters have been removed as the class is now immutable. - The
IGetAggregatesQueryinterface has been moved to an internal package; replace all usages (return types, variable declarations, and parameter types) with the concreteGetAggregatesQueryclass. In addition,getPivotId(), the builder’s pivotId() method, and all the setters have been removed. - The
IDrillthroughQueryinterface has been moved to an internal package; replace all usages (return types, variable declarations, and parameter types) with the concreteDrillthroughQueryclass. GetAggregatesQueryconstructors are replaced byGetAggregatesQuery.builder(). Use the builder methods corresponding to the fields you were passing to the constructor, then call.build().DrillthroughQueryconstructors are replaced byDrillthroughQuery.builder(). Use the builder methods corresponding to the fields you were passing to the constructor, then call.build().MDXQuery,MDXDrillthroughQueryandMDXDrillthroughHeadersQueryhave been moved to packagecom.activeviam.activepivot.core.api.query, and renamed toMdxQuery,MdxDrillthroughQueryandMdxDrillthroughHeadersQuery.