App Management

Listing Apps

To list all apps available to the current user, use the applications() method:

glue.appManager().applications();

The applications() method returns a Map<String, ApplicationInstance> result containing the available app instances keyed by app name.

Starting Apps

To start an app, use the start() method:

glue.appManager().start("clientlist")
        .whenComplete((instance, error) -> {
            if (error != null) {
                // App failed to start.
            }
        });

You can also pass a context object (an app-specific object that will be available in the new app) or override any of the pre-configured window settings:

glue.appManager().start("clientcontact", Collections.singletonMap("selectedUser", 2));

Listing Running Instances

To list all running app instances, use the instances() method:

Collection<ApplicationInstance> allInstances = glue.appManager().instances();

Current Instance

Available since Glue42 Enterprise 3.18

To retrieve the current app instance, use the myInstance() method:

Optional<ApplicationInstance> myInstance = glue.appManager().myInstance();

Stopping Instances

To stop a running instance, use the close() or closeAsync() method:

instance.closeAsync();

Events

Shutdown

Available since Glue42 Enterprise 3.18

The shutdown event provided by the App Management API allows you to execute custom code before Glue42 Enterprise shuts down. The available time for the execution of your code is 60 seconds.

The handler accepts a ShuttingDownArguments object as an argument, which you can use to determine whether Glue42 Enterprise is shutting down or restarting. The handler must return a stage completed with a Boolean value indicating whether shutdown should be prevented or not.

ShuttingDownHandler handler = shuttingDownArguments -> {
    // Check whether GLue42 Enteprise is restarting.
    boolean restarting = shuttingDownArguments.isRestarting();
    boolean prevent = false;

    if (restarting) {
        System.out.println("Restarting...");
    } else {
        // Indicate that shutdown must be prevented.
        prevent = true;
    }

    return CompletableFuture.completedFuture(prevent);
};

// Register the shutdown handler.
glue.appManager().registerShuttingDownHandler(handler);

Multi Window Apps

Available since Glue42 Enterprise 3.12

Glue42 Java offers support for apps consisting of multiple windows. Each child window of an app can be registered in the context of a child Glue42 app that you can save and restore in a Layout, start directly from the Glue42 Toolbar, etc.

The following example demonstrates how to register an ApplicationInstanceHandler using the registerInstanceHandler() method. It will be invoked when a child window of the specified app is started. The handler in the example registers the child window as a Glue42 Window (for more details, see Window Management) using a WindowRegistration builder. When the child window has been registered, it starts to listen for context updates using its onContextUpdated() method. Finally, when a Layout save is requested, the child window will save its current context using the addSaveListener() method in order to be able to retrieve it later when the Layout is restored:

glue.appManager().registerInstanceHandler("my-child-window", applicationInstance -> {

    glue.windows().register(
            WindowRegistration.builder(glue.windows().getWindowHandle(childFrame))
                    .withInstanceId(applicationInstance.getId())
                    .build()
    ).thenAccept(window ->
            window.onContextUpdated(e ->
                selector.setSelectedIndex(selectedIndex);
            {
                int selectedIndex = (Integer) e.getContext().getOrDefault("SelectedIndex", -1);
            }));
    glue.layouts().addSaveListener(applicationInstance.getId(), request ->
            Collections.singletonMap("SelectedIndex", selector.getSelectedIndex()));
});