Application Lifecycle

Axon Ivy projects can be installed on an Axon Ivy Engine to bring business processes to life. Several Axon Ivy projects can be installed on an Axon Ivy Engine. The following section explains how to manage individual Axon Ivy projects on an Axon Ivy Engine.

Security System

Users, roles and permissions are managed in a security system. Users can be managed manually or made available via an identity provider. The role definitions are read from the project during deployment and the corresponding structures in the Axon Ivy Engine are adapted. In addition, new roles can also be added and deleted at runtime.

By default, every Axon Ivy Engine comes with the default` security system. This is sufficient in the vast majority of cases. An additional security system is only required if you want to set up a test environment on the same engine or operate multi-tenancy. Security systems completely sealed off from other security systems and can consist of several applications.

Security System "default"
│
Security System "test"

Application

An application is part of a security system. Axon Ivy projects live in an application. Ideally, applications are cut feature-driven with different release cycles. In our example, the HR processes are independent of the financial processes. Furthermore, applications have sovereignty over the configuration, such as variables, rest clients, web service clients and databases.

Security System "default"
├── Application "Finance"
├── Application "HR"
Security System "test"
└── Application "Finance"

Process Model

A process model (PM) is part of an application, which ultimately represents an Axon Ivy project. Nevertheless, it is only a virtual construct, as it is possible to run several versions of an Axon Ivy project at the same time on an Axon Ivy Engine, we refer to this as a Process Model Version (PMV).

Security System "default"
├── Application "Finance"
│   └── Process Model "Invoices"
├── Application "HR"
│   └── Process Model "Vacation"
│   └── Process Model "Expenses"
Security System "test"
└── Application "Finance"
    └── Process Model "Invoices"

Process Model Version

A process model can contain several versions of an Axon Ivy project, which is called process model version. This makes it possible to make breaking changes to projects without disturbing the old running cases. The disadvantage of multiple versions is that you also have to maintain multiple versions, for example a bugfix may have to be applied to each version. Tasks and cases are assigned to a process model version.

Security System "default"
├── Application "Finance"
│   └── Process Model "Invoices"
|       └── ProcessModelVersion 1 (Project "Invoices", V1, 12 cases)
|       └── ProcessModelVersion 2 (Project "Invoices", V2, 104 cases)
├── Application "HR"
│   └── Process Model "Vacation"
|   |   └── ProcessModelVersion 1 (Project "Vacation", V1, 4 cases)
│   └── Process Model "Expenses"
|       └── ProcessModelVersion 1 (Project "Expenses", V1, 16 cases)
Security System "test"
└── Application "Finance"
    └── Process Model "Invoices"
        └── ProcessModelVersion 1 (Project "Invoices", V1, 0 cases)
        └── ProcessModelVersion 1 (Project "Invoices", V2, 4 cases)

A process model version has a release state. The release state of a process model version is responsible how the version is used by the system. The most important release state is the state RELEASED. Within a process model only one version can be in this state. All processes that are started in a process model are started in the released process model version. A complete list of release state can be found in the following list:

Release States

  • PREPARED: The process model version has been created and the project may already have been deployed. However, the process model version is not yet used.

  • RELEASED: The process model version is the currently released version. This means that all new processes are started in this version. Program Start, Web Service Process and Rest Endpoints are only active for process model versions in this state. Only one process model version of a process model can be in state RELEASED. If a process model version get’s released, then the current released process model version gets DEPRECATED or ARCHIVED.

  • DEPRECATED: The process model version has previously been in state RELEASED, but then another version was released. Therefore, this version is now not in RELEASED state but in DEPRECATED state. All cases that were started in this process model version will continue to run in this version. As soon as all cases of this version have been ended, the state will change to ARCHIVED automatically.

  • ARCHIVED: The process model version has previously been in state RELEASED, but then another version was released, and running cases has been finished in this process model. Consequently, this version is now not in RELEASED state anymore but has been ARCHIVED. Actually the engine administrator can change a process model version from state ARCHIVED back to state RELEASED if necessary.

  • DELETED: The process model version has been deleted. All project data belonging to this version has been deleted.

Release State Transitions

digraph overview { layout=neato; node [shape=box, height="0.8", width="2", color="#007095", style=filled, fixedsize="true", margin=0, fontname="Roboto,Helvetica Neue,Arial,sans-serif", fontcolor="white", fontsize=15 ]; /* nodes */ start [ label="START", pos="0,0!", height="0.2", width="0.2", shape="point"]; prepared [ label="PREPARED\n(0)", pos="2,0!", height="0.8", width="1.5"]; released [ label="RELEASED\n(1)", pos="5,0!", height="0.8", width="1.5"]; deprecated [ label="DEPRECATED\n(2)", pos="8,-1!", height="0.8", width="1.5"] archived [ label="ARCHIVED\n(3)", pos="5,-2!", height="0.8", width="1.5"] deleted [ label="DELETED\n(4)", pos="2,-2!", height="0.8", width="1.5"] /* edges */ start -> prepared; prepared -> released; released -> deprecated; prepared -> deleted; deprecated -> released; deprecated -> archived; archived -> deleted; archived -> released; released -> archived; /* edge labels */ prepared_released [ label="release", pos="3.5,0.2!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; released_deprecated [ label="deprecate [running cases]", pos="7.2,-0.2!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; deprecated_released [ label="release", pos="6.5,-0.8!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; prepared_deleted [ label="delete", pos="1.7,-1.0!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; deprecated_archived [ label="[no running cases]", pos="6.8,-1.8!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; archived_deleted [ label="delete", pos="3.5,-1.78!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; archived_released [ label="release", pos="4.5,-1!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; released_archived [ label="deprecate\n[no running cases]", pos="5.8,-1!", width="1.7", height="0.8", shape=none, fillcolor=none, fontcolor="black", fontsize="11" ]; }

Feature driven

In Axon Ivy, a project consists of one or more related processes. Applications consist of one or more projects. If you structure your Axon Ivy projects well into several applications, you benefit from processes being technically isolated and having independent release cycles. Understanding the application lifecycle helps developers and administrators to implement projects faster.

Imagine a process developer who digitizes business processes with the Axon Ivy Designer in an Axon Ivy project. At some point, he deploys his resulting processes onto an Axon Ivy Engine and brings them to life. At that time, he has to package his projects into an application. For deployment, it is suitable to package a complete application from one or more projects that belong together and then deploy the resulting application. A simple example:


Lynn is a low coder and is digitizing business processes for the HR department. She has just finished her first process so that employees can report expenses. She has packaged this process into the report-expense project and is packaging this project into an application called HR.


digraph hrapp { layout=neato; node [shape=box, height="0.8", width="2", color="#007095", style=filled, fixedsize="true", margin=0, fontname="Roboto,Helvetica Neue,Arial,sans-serif", fontcolor="white", fontsize=15 ]; /* nodes */ hrapp [ label="HR Application", pos="0.0,0.0!", width="2.5" height="1.5" style="dashed" fontcolor="black" labelloc="t"]; newemployee [label="Expense Report\nProject", pos="0.0,-0.05!", width="1.8" height="0.8"]; }


John is a software developer and develops business processes for the finance department. He has already successfully implemented several processes with Axon Ivy. To structure the processes well, he has packaged them into different Axon Ivy projects and packages them into the finance application.


digraph financeapp { layout=neato; node [shape=box, height="0.8", width="2", color="#007095", style=filled, fixedsize="true", margin=0, fontname="Roboto,Helvetica Neue,Arial,sans-serif", fontcolor="white", fontsize=15 ]; /* nodes */ financeapp [label="Finance Application", pos="0,0.0!", width=2.5, height=2.5, style="dashed", fontcolor="black", labelloc="t"]; sendinvoice [label="Credit Request\nProject", pos="0,0.4!", width=1.8, height=0.8]; newinvoice [label="New Invoice\nProject" pos="0,-0.6!", width=1.8, height=0.8]; }


John and Lynn are independent in their work both from a business point of view - requirements and change requests from their departments (HR and Finance), as well as from a technical point of view. They can develop in a decoupled manner and install their applications on the same Axon Ivy Engine whenever they want.


Thus, applications containing processes are deployed on an Axon Ivy Engine. The process users log in and can start the processes and are assigned to work on tasks. It is essential to understand how users are managed on an Axon Ivy Engine. The users are part of a security system. Each Axon Ivy Engine always comes with the default security system. Adding more security systems only makes sense in a multi tenancy use case. Users, their roles, and permissions are part of the security system. When you create an application, you have to define which security system this application lives in. By default, a new application is put into the default security system.


Now Gunther comes into play. Gunther runs the Axon Ivy Engine for the DevOps Lynn and John. The process users are synchronized from the company Active Directory. Process users only have one unified process start list and task list covering all applications.


digraph engine { layout=neato; node [shape=box, height="0.8", width="2", color="#007095", style=filled, fixedsize="true", margin=0, fontname="Roboto,Helvetica Neue,Arial,sans-serif", fontcolor="white", fontsize=15 ]; /* nodes */ engine [ label="Axon Ivy Engine", pos="0.0,0.0!", width="6.0", height="5.0", style="dashed", fontcolor="black", labelloc="t"]; default [ label="default", pos="0.0,-0.1!", width="5.5", height="4.5", style="dashed", fontcolor="black", labelloc="b"]; processes [ label="Processes", pos="0.0,0.0!", width="5.0", height="0.5" ]; tasklist [ label="Task list", pos="0.0,-0.7!", width="5.0", height="0.5" ]; hrapp [ label="HR Application", pos="-1.35,-1.5!", width="2.3", height="0.5" ]; financeapp [ label="Finance Application", pos="1.35,-1.5!", width="2.3", height="0.5" ]; users [ label="Users", pos="0.0,1.5!", width="5.0", height="0.5", style="dashed" fontcolor="black" labelloc="t"]; roles [ label="Roles", pos="0.0,0.8!", width="5.0", height="0.5", style="dashed" fontcolor="black" labelloc="t"]; bob [ shape="ellipse" label="Bob", pos="-1.0,1.5!", width="0.7", height="0.35"]; marc [ shape="ellipse" label="Marc", pos="1.0,1.5!", width="0.7", height="0.35"]; rick [ shape="ellipse" label="Rick", pos="1.8,1.5!", width="0.7", height="0.35"]; james [ shape="ellipse" label="James", pos="-1.8,1.5!", width="0.7", height="0.35"]; hrmanager [ shape="ellipse" label="HR Manager", pos="-1.4,0.8!" width="1.7", height="0.35"]; backoffice [ shape="ellipse" label="Backoffice", pos="1.4,0.8!" width="1.7", height="0.35"]; }

Applications are used by developers to package related processes and enable independent release cycles of different processes. This promotes feature-driven development. The process users do not realize that the individual processes are part of different applications. They only have a unified process start list and one task list. The structure of the projects can also change at any time.

Read Deployment If you want to learn how you can craft your own applications and deploy them on an Axon Ivy Engine.