- 4.11-RC2
- 4.11-RC1
- 2026-09-20 Expression profiles are now fully enforced
- 2026-09-20 Default expression profiles for midPoint [bulk] actions were changed
- 2026-09-14 Classes related to script execution were renamed
- 2026-09-11 Script execution in reports may behave slightly differently
- 2026-09-03 Password hints now stored as protected string
- 2026-09-03 Changed objects used by Smart integration functionality
- 4.11-M6
- 4.11-M5
|
Warning
|
This page is written for internal purposes, and we don’t give any guarantee that these instructions and notes are complete, nor that it will work at all… but we do our best. |
This page contains the upgrade instructions and incompatibility changes that could cause problems during upgrades from a milestone to a milestone, before the "in development" version is released. Useful for continuous testing of the developed features etc.
The upgrade instructions between releases are in the release notes.
Task: 10948 Description:
Expression profiles are now enforced throughout the system.
The idea is that the expression profile for any expression present an object in midPoint repository is derived from the object type (with archetype and/or subtype, if present). These profiles were partially enforced in the previous versions, but now their enforcement is to the full extent.
Although the default setting is still "allow all" - in order to provide smooth migration - there may be situations where expressions were set up but not enforced. In such situations they may now start to fail. Hence, it is necessary to review and optionally adapt your existing expression profile setting to make sure the expressions are compliant with the declared expression profiles.
In rare cases when midPoint cannot determine the expression profile because of missing information about the origin of an expression, it will report them as "TrustDescriptor is required but not set in …" exceptions. This may indicate a bug in midPoint code. Please report it using the support portal.
Required Upgrade Steps:
-
Check and test your expressions according to declared expression profiles.
-
Watch the migration guide (to be published before 4.11 release) and set up your profiles and manage your expressions accordingly.
Task: 10948 Description:
As part of hardening the enforcement of expression profiles, the defaults for midPoint actions were changed. Please see the documentation.
Required Upgrade Steps:
-
Set explicit expression profiles (via archetypes) on all objects that contain midPoint actions - strongly recommended.
-
Migrate now-deprecated default settings to newly introduced ones.
-
Test your deployment thoroughly.
Notes & References:
-
Related commits: cdb65600
-
Docs: XSD (DefaultExpressionProfilesConfigurationType); regular documentation and migration guide will be provided soon
Task: 10948 Description:
As part of hardening the enforcement of expression profiles, clarification of concepts and refactoring of internal classes implementing script execution were done. Specifically, the following classes were renamed:
-
ScriptExpression → Script
-
ScriptExpressionFactory → ScriptFactory
-
ScriptExpressionEvaluationContext → ScriptExecutionContext
-
ScriptEvaluator → ScriptExecutor
It should be generally invisible to a midPoint engineer. The only exceptions are if someone used these classes in scripts, in an overlay, or reference them for detailed logging.
In particular, there is a possibility that isEvaluateNew was checked in this (incorrect) way:
boolean isNew = com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluationContext.getThreadLocal().isEvaluateNew()
The correct way is to simply use:
boolean isNew = midpoint.isEvaluateNew()
Required Upgrade Steps:
-
Check if scripts or an overlay use the above classes, and adapt their use accordingly. In particular, adapt the logging configuration if needed.
Notes & References:
-
Related commits: <this one>
Task: 10948 Description:
As part of hardening the enforcement of expression profiles, evaluation of scripts in reports was unified with the evaluation of other scripts and expressions in midPoint. This may affect deployments that depend on the subtleties of previous implementation, for example, that the order of values returned by the script is preserved, which is no longer the case. (MidPoint generally does not guarantee ordering of values.)
Required Upgrade Steps:
-
Check correctness of the reports, especially if they depend on the ordering of values provided by scripts.
Notes & References:
-
Related commits: <this one>
Task: 12111 Description: Password hints now stored as ProtectedStringType instead of plain strings. See migration guide.
Task: 11337
Description: We now use SmartIntegrationArtifactType for data storage, instead of GenericObjectType
Required Upgrade Steps - before upgrade:
-
Delete all tasks related to Smart integration. These tasks carry out intermediate results and are transient in nature. So they can be safely deleted. It is necessary to avoid errors when new data format is used. (If not deleted before the upgrade, it can be done also afterwards, risking some warnings and errors in the log and in GUI.)
Required Upgrade Steps:
-
Apply DB upgrade script
-
Related commits: <this one>
-
Task: 12034 Description: Obsolete xercesImpl dependency was removed.
Required Upgrade Steps:
-
Only if you used this dependency in custom Groovy code or overlay code: please find a replacement.
Notes & References:
-
Related commits:
Task: 11992 Description:
Internal APIs for caching were cleaned-up.
-
Legacy
com.evolveum.midpoint.repo.api.Cacheandcom.evolveum.midpoint.repo.api.CacheListenerare gone. -
They are replaced by
com.evolveum.midpoint.repo.api.CacheInvalidationDispatcherandcom.evolveum.midpoint.repo.api.CacheDiagnostics(usually you need both). -
repo.api.CacheDispatcherwas renamed torepo.api.ClusterwideCacheInvalidationDispatcher. -
Cache diagnostics were changed as well, see
repo.api.CacheDiagnosticsService.
Required Upgrade Steps:
- If you implemented custom caching code (class that extends Cache or CacheListener interfaces): please update your code according to changes in this commit.
- If you called CacheDispatcher#dispatchInvalidation method: please call it on ClusterwideCacheInvalidationDispatcher.
- If you need cache diagnostics, check the repo.api.CacheDiagnosticsService.
Notes & References:
-
Related commits: <this one>
-
Docs: See
CacheInvalidationListener,ClusterwideCacheInvalidationDispatcher,CacheDiagnostics, andCacheDiagnosticsServiceinterfaces.
Task ID: #11952
Description:
Iteration specification (IterationType) has a new boolean property useTokenOnlyOnConflict and a changed default value for start.
By default, useTokenOnlyOnConflict is true, which means the token expression is not evaluated for the first (non conflicting) attempt.
The default start value is now 0 when maxIterations is defined, and 1 when it is not.
The default of 0 when maxIterations is present preserves backward compatibility for existing deployments (even when adding end), so that new records continue to be iterated starting from 0 consistently with existing records.
This can break existing custom token expressions that expect to be evaluated on the first (non conflicting) attempt.
In that case, set useTokenOnlyOnConflict to false explicitly.
Required Upgrade Steps:
-
If you use a custom token expression that must be evaluated on the first (non conflicting) attempt, explicitly set
useTokenOnlyOnConflicttofalsein the iteration specification. -
Review existing iteration configurations to ensure the new default
startvalues (0whenmaxIterationsis defined,1otherwise) still produce the expected token sequence. -
If necessary, explicitly set
startandendto the desired values.
Rollback Procedure (If Upgrade Fails):
-
If unexpected token values appear, explicitly set
useTokenOnlyOnConflicttofalseand review iteration specification according to this description.
Notes & References:
-
Related commits: f9685dbabce0320e622b0deea147eff6ff4a3d82
-
Docs: See
unique-account-username.adocandunique-midpoint-user-name.adoc -
Affected configs: Object template / Iteration specification