Skip to main content

How To Configure Application Extensions in Estate Manager


Introduction​

A Local Application Extension allows you to upload custom JAR files (containing business logic or packages) through the Estate Manager UI, store them in the database, and dynamically deploy them into the running Enactor platform at startup - without modifying the core codebase or redeploying the entire application.

The purpose of this guide is to demonstrate how to upload an application extension package, package an entity extension, and create, deploy, activate, and deactivate a Local Application Extension in Estate Manager.


Overview​

The following steps are required to configure an application extension:

  1. Uploading an Application Extension - Upload the extension package through Application Update Detail Maintenance and verify its updatePackage.xml properties
  2. Entity Extensions (optional) - Package entity deployment resources into the same application JAR
  3. Creating a Local Application Extension - Register the uploaded update as a Local Application Extension
  4. Deploying a Local Application Extension - Mark the extension for deployment to its applicable runtime contexts
  5. Activating a Local Application Extension - Restart the servlet so the extension content is extracted and applied
  6. Deactivating a Local Application Extension - Remove an active extension's content on the next restart

Prerequisites​

Before starting, you should have the following resources in place:

  • Enactor Estate Manager
  • A packaged application extension JAR and an accompanying updatePackage.xml
  • An Estate Manager user with the relevant Local Application Extension privileges (see User Role Configuration below)
note

Local Application Extension Maintenance is only available where the device type is Estate Manager, and is restricted to Enactor Admin users.


User Role Configuration​

The following privileges should be enabled for the User:

Application PackageFunction IDDescription
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.Run.NameAllows the EM User to run Local Application Extension Maintenance Application.
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.List.NameAllows the EM User to list entries in Local Application Extension Maintenance Application.
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.View.NameAllows the EM User to view records in Local Application Extension Maintenance Application.
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.New.NameAllows the EM User to add a new record to Local Application Extension Maintenance Application.
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.Remove.NameAllows the EM User to remove a record from Local Application Extension Maintenance Application.
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.Deploy.NameAllows the EM User to deploy a Local Application Extension record.
Enactor Web Maintenanceenactor.localApplicationExtensionMaintenance.Deactivate.NameAllows the EM User to deactivate a Local Application Extension record.

This completes the User Role configuration.


Uploading an Application Extension​

Navigate to Application Update Detail Maintenance using the Search or the path:

Administration > Data Management > Broadcasts > Application Update Detail

Click Create a New Application Update at the bottom of the page.

Application Update Maintenance list page with the Create a new Application Update button highlighted

The Application Update Maintenance list page shows all uploaded update packages. Select Create a New Application Update to upload a new extension package.

Select the File Repository storage type and upload the zip file. The zip file must contain the JARs related to the update and an updatePackage.xml.

Application Update Maintenance editing screen showing the Update Package XML content and the Extract Content button

After uploading the zip file, the Update Package field displays the parsed updatePackage.xml content. Review the properties described below, then select Extract Content.

In the updatePackage.xml, verify that the following properties are included with the correct values:

PropertyDescription
<core:updateId>Uniquely identifies the application extension. Used as the Application Extension ID in Local Application Extension Maintenance.
<core:applicationId>The target application ID. Both POS and Estate Manager compare versions based on the application ID and version value.
<core:version>The version of the update. Duplicate versions and lower versions are not permitted; validation occurs when the update is selected.
<core:applicableContext>The runtime contexts, as comma-separated values. During development, all listed contexts should be considered active deployment contexts.
<core:updateType>The update type shown when selecting the update in Local Application Extension Maintenance. Must be APPLICATION_EXTENSION or JAVA_EXTENSION.
<core:validFrom>(Optional) If not provided, the extension is always active. If specified, the extension becomes active only after the given date and time.
<core:updateId>estate-manager-update-beanshell-2.7.1794.5784</core:updateId>
<core:applicationId>Enactor Pos</core:applicationId>
<core:version>2.7.1794.1939.5001</core:version>
<core:applicableContext>Enactor Web Core,Enactor Web Maintenance</core:applicableContext>
<core:updateType>APPLICATION_EXTENSION</core:updateType>
<core:validFrom>2026-01-25T21:29:07+05:30</core:validFrom>

Click Extract Content, then click Save. The new application update is now visible as an entry in the table.

This completes the Uploading an Application Extension configuration.


Entity Extensions​

Entity extensions are packaged and deployed using the same Local Application Extension mechanism described above. The deployment process is identical to other application extensions; the difference is that the application JAR contains the entity deployment resources.

The application update zip must contain the application JAR and an updatePackage.xml:

<EntityExtension>.zip
- <EntityExtension>.jar
- UpdatePackage.xml

The updatePackage.xml is configured as described in Uploading an Application Extension above. Entity extensions use the APPLICATION_EXTENSION update type.

The application JAR must include the entity deployment resources under the META-INF/deployments directory. These resources may include entity mappings, server definitions, default data, processes, message resources, transforms, and other deployment artifacts required by the extension:

META-INF/
deployments/
- DefaultData/
- EntityMapping/
- Process/
- ServerDefinition/
- MessageResource/
- Transforms/
- ...

Once the application update has been uploaded, the entity extension is managed through Local Application Extension Maintenance. Creation, deployment, activation, deactivation, version validation, and restart requirements are identical to those described in the Local Application Extension sections below.

This completes the Entity Extensions configuration.


Creating a Local Application Extension​

Navigate to Local Application Extension Maintenance using the Search or the path:

Administration > Data Management > Broadcasts > Local Application Extension

Click Create a new Local Application Extension at the bottom of the page.

Local Application Extension Maintenance list page with the Create a new Local Application Extension button highlighted

The Local Application Extension Maintenance list page shows all registered extensions. Select Create a new Local Application Extension to register an uploaded application update as an extension.

Select a previously uploaded Application Update from the dropdown list. The list only shows Application Update records where the update type is APPLICATION_EXTENSION or JAVA_EXTENSION.

Local Application Extension Maintenance Application Update dropdown showing the available uploaded package

Select the Application Update to register from the dropdown, then select Create.

Selecting Create auto-populates the following fields from the corresponding updatePackage.xml:

Local Application Extension Maintenance auto-populated fields, showing Application Update, Application Extension ID, Update Version, and Applicable Runtime Contexts

Review the auto-populated Application Extension ID, Update Version, and Applicable Runtime Contexts against the source updatePackage.xml, then select Save.
FieldDescription
Application UpdateThe uploaded update package this extension is created from. Populated automatically.
Application Extension IDTaken from <core:updateId> in updatePackage.xml.
Update VersionTaken from <core:version> in updatePackage.xml.
Applicable Runtime ContextsTaken from <core:applicableContext> in updatePackage.xml.

After reviewing the populated fields, select Save. The new Local Application Extension is now visible as an entry in the table with:

  • Status: RECEIVED
  • Row Operation: a Deploy button is visible for the record

After saving, the ApplicationExtensionDetails and ApplicationExtensionData database tables should each contain a new record, sharing the same Application Extension ID and Version values.

This completes the Creating a Local Application Extension configuration.


Deploying a Local Application Extension​

Only Application Extension records with a status of RECEIVED are eligible for deployment.

Local Application Extension Maintenance list page with the Deploy icon highlighted on a Received record

Select the Deploy icon on the record with status Received.

A confirmation dialog displays the applicable contexts defined in updatePackage.xml under <core:applicableContext>. Review the contexts and select Yes to proceed.

Deploy confirmation dialog listing the applicable runtime contexts, with Yes and No buttons

Confirm the listed runtime contexts match the target deployment, then select Yes.

Upon successful deployment, a success message is displayed. Select OK to dismiss the message and return to the list page.

Deployment success message confirming the extension will be applied at the next restart

The extension has been marked for deployment. Select OK to dismiss the message and return to the list.

After deployment, the status of the Application Extension record updates as follows: RECEIVED -> STAGED.

Local Application Extension Maintenance list page showing the record status updated to Staged

The record's Status updates from Received to Staged, confirming the extension is queued for activation on the next restart.

This completes the Deploying a Local Application Extension configuration.


Activating a Local Application Extension​

After deployment, a manual restart of the servlet is required.

On restart, the server reads the database records and picks up all STAGED records, then performs the following validations:

  • Runtime Context - verifies that the applicable contexts match the current runtime environment
  • ValidFrom Date - verifies that the date and time condition is satisfied

If both validations pass, the extension content is extracted and stored under the Application Data Home directory in the following layout:

{AppHome}/Data/{contextName}/LocalApplicationExtension/
{applicationExtensionId}/
{version}/
{fileName}.zip (written from DB blob)
extracted/ (ZIP extracted here on every startup)
- *.jar
- (subdirectories recursively scanned)

After logging in to Estate Manager, the Application Extension record status updates as follows: STAGED -> ACTIVE.

warning

Both the Runtime Context and ValidFrom validations must pass on every startup for the extension to remain active. A mismatch on either leaves the record staged rather than active.

This completes the Activating a Local Application Extension configuration.


Deactivating a Local Application Extension​

Once an Application Extension record has an ACTIVE status, a Deactivate button is available in the row options.

To deactivate, select Deactivate. A confirmation dialog appears; select Yes to proceed. Upon confirmation, the status updates immediately as follows: ACTIVE -> DEACTIVATION REQUESTED.

Local Application Extension Maintenance list page showing the record status updated to Deactivation Requested

The record's Status updates to Deactivation Requested until the next servlet restart removes the extension's content.

On the next servlet restart, all records with a DEACTIVATION REQUESTED status are filtered out and their corresponding content is deleted from the Application Data Home directory.

After logging in to Estate Manager following the restart, the status updates as follows: DEACTIVATION_REQUESTED -> DEACTIVATED.

This completes the Deactivating a Local Application Extension configuration.