Contact Us 1-800-596-4880

Feature Flagging Mechanism

Mule runtime engine incorporates a feature flagging mechanism that enables Mule applications to change the behavior of the Mule instance depending on the required minimum Mule version. This feature ensures backward compatibility because it allows Mule applications to continue working on later Mule runtime versions, while new Mule applications can benefit from the latest bug fixes implemented in the Mule instance.

The feature flagging mechanism is automatic. For each Mule application deployed to a Mule instance, Mule determines which features are enabled or disabled based on the application’s minimum Mule version configured in the application descriptor file (mule-artifact.json) of the Mule app.

By default, Mule runtime engine disables any new features or bug fixes that are not backward compatible with Mule applications running in earlier Mule versions. However, it is possible to manage the feature flags configured for each Mule application or all applications running in the same Mule instance.

Configure Feature Flags for a Mule Application

To configure feature flags for a Mule application, change the minMuleVersion value in the mule-artifact.json file of your app. This configuration instructs the Mule instance to run this application implementing all features and bug fixes that were released to that particular version and disabling features and bug fixes that are active by default in later Mule versions.

For example, you can run a Mule application in Mule 4.4.0 instructing the Mule instance to apply only the features that do not change core functionality up to Mule 4.1.0:

Example mule-artifact.json file
{
  "minMuleVersion": "4.1.0"
}

Configure Feature Flags for the Mule Instance

An alternative way to configure feature flags is by using system properties. In this case, you can enable or disable each one of the available feature flags. However, configuring feature flags through system properties applies the changes at the Mule instance level, so all applications deployed to this Mule instance behave according to the configured feature flags.

Note that this configuration is compatible with on-premise deployments only because you cannot configure system properties in other deployment targets.

For example, you can configure a Mule 4.3.0 instance to enable and disable specific features for all applications running on this instance:

Example wrapper.conf file
…
wrapper.java.additional.999=-DHONOUR_RESERVED_PROPERTIES_PROPERTY=true
wrapper.java.additional.1000=-DCOMPUTE_CONNECTION_ERRORS_IN_STATS_PROPERTY=false

Feature Flags Reference

The following table shows the available feature flags, a description of their functionality, the Mule version in which the flag became available, the earlier minor version releases that enable the flag by default, and the issue ID in which the change was implemented:

Feature Flag Description

mule.batch.fixed.aggregator.transaction.record.buffer

When enabled, batch aggregators with fixed size aggregators commit only when a full block is processed.

Available Since

  • 4.4.0

  • 4.3.0-20210304

  • 4.2.2-20210304

Enabled by Default Since

  • Not enabled by default in any Mule version

Issue ID

  • MULE-19218

mule.compute.connection.errors.in.stats

When enabled, connection errors are computed as part of alerts triggering.

Available Since

  • 4.4.0

  • 4.3.0-20210304

Enabled by Default Since

  • 4.4.0

Issue ID

  • MULE-19020

mule.enable.default.errorhandler.not.rollback.incorrect.tx

When enabled, the default error handler added by the Runtime doesn’t roll back a transaction if it doesn’t correspond to have this roll back made.

Available Since

  • 4.4.0-20211227

  • 4.3.0-20211222

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • MULE-19919

mule.dw.remove_shadowed_implicit_inputs

When enabled, DataWeave removes implicit inputs when a variable with the same name is declared at the root level.

Available Since

  • 4.4.0-20211026

Enabled by Default Since

  • 4.4.0

Issue ID

  • DW-893

mule.enable.byteBuddy.objectCreation

When enabled, the object’s factories are created with Byte Buddy instead of CGLIB.

Available Since

  • 4.4.0-20220321

  • 4.3.0-20220321

Enabled by Default Since

  • 4.4.0

Issue ID

  • W-10672687

mule.enable.policy.isolation

When enabled, Mule manages extensions imported by a policy in complete isolation from the extensions imported by the Mule application. Also, validations prevent the use of explicit configurations that the application declared as part of the policy initialization.

Available Since

  • 4.4.0

  • 4.3.0-20210622

Enabled by Default Since

  • 4.4.0

Issue ID

  • MULE-19226

mule.enable.profiling.service

When enabled, the Runtime profiling capabilities become available.

Available Since

  • 4.4.0

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • MULE-19588

mule.entityResolver.failOnFirstError

When enabled, the Mule XML DSL parser fails when deploying an application that declares a schema that cannot be located. Otherwise, the parser fails if the application also makes use of the namespace to which such a schema is bound.

Available Since

  • 4.4.0

Enabled by Default Since

  • 4.4.0

Issue ID

  • EE-7827

mule.force.runtime.profiling.consumers.enablement

When enabled, profiling consumers implemented by the Runtime are enabled by default.

Available Since

  • 4.4.0-20220221

Enabled by Default Since

  • Not enabled by default in any Mule version

Issue ID

  • MULE-19967

mule.dw.handle_splitter_exception

When enabled, DataWeave correctly handles internal exceptions while splitting a payload, preventing subsequent serialization errors.

Available Since

  • 4.4.0

Enabled by Default Since

  • 4.4.0

Issue ID

  • DW-383

mule.honour.reserved.properties

When enabled, reserved properties such as app.name can’t be overridden by global properties (overrides are ignored).

Available Since

  • 4.4.0

  • 4.3.0-20220221

Enabled by Default Since

  • 4.4.0

  • 4.3.0

Issue ID

  • MULE-17659

mule.honourErrorMappingsWhenPolicyAppliedOnOperation

When enabled, the operation policy’s error resolution is ignored. Therefore, the error mappings of the processor on which the policy is applied are set successfully.

Available Since

  • 4.4.0-20220722

  • 4.3.0-20220725

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • W-11147961

mule.detailedCompositeRoutingExceptionLog

When enabled, AbstractForkJoinRouter-based processors, such as Parallel For Each and Scatter-Gather routers, now show detailed error information for their failed routes.

Available Since

  • 4.4.0-20220622

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • W-10965130

mule.parallelForeach.flattenMessage

When enabled, if the items to iterate over on a parallel-foreach scope are messages (such as the output of an operation that returns Result objects), they are flattened in a way that is consistent with what the foreach scope does.

Available Since

  • 4.4.0-20220221

  • 4.3.0-20220221

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • MULE-20067

mule.setVariable.WithNullValue

When enabled, the Set Variable component creates a variable even if its value is null.

Available Since

  • 4.4.0

  • 4.3.0-20210622

Enabled by Default Since

  • 4.4.0

Issue ID

  • MULE-19443

mule.startExtensionComponentsWithArtifactClassloader

When enabled, extensions are only able to load exported resources from the deployable artifacts (application, policy, domain).

Available Since

  • 4.4.0

  • 4.3.0-20211026

Enabled by Default Since

  • 4.4.0

Issue ID

  • MULE-19815

mule.transformer.toString.transformIteratorElements

When enabled, managed cursor iterators transformed to strings show the representation of the elements instead of generic value org.mule.runtime.core.internal.streaming.object.-ManagedCursorIteratorProvider$ManagedCursorIterator@.

Available Since

  • 4.4.0

Enabled by Default Since

  • 4.4.0

Issue ID

  • MULE-19323

mule.suppress.mule.exceptions

When enabled, error suppression occurs. This feature prevents components such as the Web Service Consumer connector and the Until Successful scope from reporting errors outside their namespaces.

Example of an error log extract for a connectivity error at the Web Service Consumer (HTTP:CONNECTIVITY is being suppressed):

Error type : WSC:INVALID_WSDL
Caused by  : HTTP:CONNECTIVITY

Suppressed errors are treated as underlying causes that can also be matched by On Error handlers.

Available Since

  • 4.4.0-20220922

Enabled by Default Since

  • 4.4.0-20220922

Issue ID

  • W-11778765

mule.errorTypes.lax

When enabled, error types validations are enforced even for error handlers/components that are not referenced.

Available Since

  • 4.4.0-20211227

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • MULE-19879

mule.support.native.library.dependencies

When enabled, if an application accesses a native library, the rest of its declared native libraries are also loaded. This prevents errors like UnsatisfiedLinkError when the accessed native library depends on another native library. Libraries must be declared at the sharedLibraries configuration following the dependency order, meaning that if library A depends on library B, then A must be declared first. Declaring the native libraries at a domain is also supported.

Available Since

  • 4.4.0-20230417

Enabled by Default Since

  • Not enabled by default in any Mule version.

Issue ID

  • W-11855052