Category Archives: Development

Development

Running Imixs-Workflow in a Docker Container

For the development of a business application, which meets the needs of a human-centric workflow, it is a good choice to use the Imixs-Workflow Engine to separate the business and workflow logic. On the other hand the separation of services is one of the core concepts of a modern microservice architecture. With the new Imixs-Microservice project, Imixs-Workflow provides a Docker image, which is containing the Imixs-Workflow Engine running in a WildFly Java EE server. This Docker image can act as a black box for any modern business application. In this architecture, the Imixs-Workflow is responding to RESTful API calls from any core business application.

The Docker Image

The Docker image, provided by the Imixs-Microservice project, can be used out of the box for testing purpose or as a template for a custom docker image to be used in a productive environment. Once the container is started from this image, a custom business process model can be developed and deployed into the workflow engine via the Rest Service API. The project provides a example workflow. This BPMN 2.0 model was designed with the Imixs-BPMN Modeller:

imixs-microservice-ticket

This workflow is a simple example how to track tickets by a support team in a call-centre or a customer-support. After a new ticket was created it is assigned to a support team. Each member of a support team can accept the ticket for further processing. The ticket can be reassigned to the team or closed by solving the ticket.

The following JSON request object shows how a new process instance for the ticket workflow looks like when using the RESTful API :

{"item":[
     {"name":"$modelversion","value":{"@type":"xs:string","$":"my-model-definition-0.0.2"}},
     {"name":"$processid","value":{"@type":"xs:int","$":"2000"}}, 
     {"name":"$activityid","value":{"@type":"xs:int","$":"1"}}, 
     {"name":"namteam","value":[
                {"@type":"xs:string","$":"admin"},
                {"@type":"xs:string","$":"eddy"},
                {"@type":"xs:string","$":"anna"}
                   ]},
     {"name":"_subject","value":{"@type":"xs:string","$":"Some usefull data.."}}
   ]}  

After this JSON object was send to the Rest Service by a POST request, the Imixs-Workflow engine creates a new process instance assigned to the task ‘New Ticket’ and triggers the Event ‘Submit’ to assign the ticket to the support team. The process instance is stored into a Postgres Database.

Each member of the team can now request a task list with all open tickets assigned to himself.

curl --user admin:adminadmin http://localhost:8080/imixs-microservice/workflow/worklist

Each workitem included in the result provides a set of attributes managed by the Imixs-Workflow engine. This information can be used to track the status of each ticket.

Using the Imixs-BPMN modelling tool each event can be modelled with a custom behaviour. For example using the Imixs Mail Plug-In a e-mail notification can be send automatically to the support team after a new ticket arrived. Imixs-Workflow provides a set of plug-ins to fit the needs of typical human-centric business tasks.

Access Control and User Management

One of the core features of a human-centric-workflow engine is the routing and user management of process instances. Each process instance running in the Imixs-Workflow engine is assigned to a dedicated list of owners and a read- and write-access-list.

Using this access control list (ACL), it is possible to manage also complex business tasks by managing the visibility of a process instance within an organisation. The ACL of a running process instance maps to the role- and user management provided by the Java EE Application server. The Imixs-Microservice provides a integrated user service which can be used to add new users or changing there access level within the workflow engine.

Conclusion

Running Imixs-Workflow as a black box workflow server is an exciting approach which can bring a new point of view to a modern microservice architecture. Providing a Docker file the Imixs-Microservice can be deployed and started easily, thus the configuration of a own server environment is no longer necessary. This is also a good starting point to develop a Docker container for productive environments.

Read more about the Imixs-Microservice on the project documentation.

Development

BPMN Modeller not Loading Correctly

After an update of the Eclipse-BPMN Plugin or the Imixs-BPMN Plugin in some cases it can happen, that an existing process model is no longer loaded correctly into the BPMN editor. In this case it is recommanded to remove the file

org.eclipse.bpmn2.modeler.core.prefs

which is located in the Eclipse workspace under the folder .settings/

After restarting Eclipse the BPMN Plugin is working again correctly.

Development

E-Mail validation with Imixs-Workflow

With the help of the Imixs RulePlugin the validation of a E-Mail address entered by the user is very simple.

Just add the following JavaScript in the corresponding Workflow Activity:

 var isValid=true;
 var errorCode="VALIDATION_ERROR",errorMessage;

 // E-Mail validierung
 if (!validateEmail("_contact")) {
   isValid=false; 
   var errorMessage='Bitte geben Sie eine gültige E-Mail Adresse ein';
 }

function validateEmail(fieldName) {
 var email = workitem.get(fieldName);
 if (email == null ) 
    return false;  
 var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
 return re.test(email[0]);
}

 

Architecture Development

BPMN Versioning

Running BPMN models in a BPM system often requires to take care about the internal version of a BPMN model. This occurs, for example, in scenarios where you run multiple instances of an active process in a live system with different versions of the same BPMN model.

The Imixs-Workflow Engine provides a nice mechanism to manage different versions of a BPMN 2.0 model. This allows to setup complex production environments with different models and different model versions at the same time. A model version, which is placed as an extension element of a BPMN 2.0 model can be evaluated by the Imixs-Workflow engine:
imixs-bpmn-versioning
read more »

Development

How to use latest Imixs-Workflow-Engine in Imixs-Office-Workflow

This short tutorial explains how the latest version of Imixs-Workflow can be used in a custom build of Imixs-Office-Workflow.

In some cases it is necessary to use a newer version of the Imixs-Workflow engine event if the custom build of Imixs-Office-Workflow forces to use an older version because of the maven dependencies. To solve this problem you can do this:

1.) Update the imixs-workflow version in the parent pom.xml

First change the version number of the imixs-workflow engine in the parent pom.xml by changing the property ‘org.imixs.workflow.version’

For example:

 <org.imixs.workflow.version>3.4.0-SNAPSHOT</org.imixs.workflow.version>

2.) Remove the ‘imixs-office-workflow-ejb’ dependency

The dependency of the artefact ‘imixs-office-workflow-ejb’ is not necessaray in a custom build. You can remove this dependency form the parent pom.xml and the ear module of the custom build. In the ear pom.xml also remove the imixs-office-workflow-ejb module from the application module configuration.

3.) Change the overlay of the web module

Finally you need to change the overly setting in the web moudle of the custom build. Per default all elements form the overlay war-module (in this case imixs-office-workflow-web’ will be copied into the target web module. This includes also artifacts form the Imixs-Workflow faces and jax-rs dependencies. To avoid this overlay of libs you can add the following plugin configuration into the web module of the custom build:

 <build>
 <plugins>
 <plugin>
 <artifactId>maven-war-plugin</artifactId>
 <version>2.6</version>

 <configuration>
 <workDirectory>target/overlay-war-folder</workDirectory>

 <!-- We exclude libs form the parent WAR artifact -->
 <overlays>
 <overlay>
 <groupId>com.imixs.workflow</groupId>
 <artifactId>imixs-office-workflow-web</artifactId>
 <excludes>
 <exclude>WEB-INF/lib/*.jar</exclude>
 </excludes>
 </overlay>
 </overlays>

 </configuration>

 </plugin>
 </plugins>
 </build>

That’s it! Now only the latest version of Imixs-Worklfow will be included into the custom build of Imixs-Office-Workflow.

Development

Why you should prefer XML to JSON

If you are developing Single Page Applications with JavaScript, REST Services play a central role. REST Services allow you to deal with data in a simple way. In most JavaScript applications REST Services based on JSON become very important in particular. But the JSON format can cause problems if you need to process type save objects. In this case, XML is much more reliable. read more »

Architecture Development

Microservice Architecture for Workflow Applications

With our new project Imixs-Microservice we now provide a solution to build workflow management applications based on a modern microservice architecture.

Imixs-Microservice encapsulates the Imixs-Workflow Engine into a microservice architecture. The service can be bound to any business application, independent from the technology behind. This allows business applications to change the business logic without changing a single line of code. Thus the state of a business object can be controlled through the workflow model.

Based on the comprehensive functionality of the Imixs-Workflow Engine the Imixs-Microservice is empowered to control business data in various ways. Imixs-Microservice can send E-Mail notifications, log business transactions and secures any kind of business data.

The Imixs-Workflow Modeller can set an ACL for each single state in a business process model. This allows the definition of highly complex business applications and waves a security layer around each process instance.

 

The Rest Service API

Imixs-Microservice provides a flexible REST Service API which can be accessed from any platform and any kind of application. The Web Service is based on JSON and XML objects and allows an easy integration in existing projects (Java, .Net, PHP, …). Once deployed a new Workflow Model can be defined using the Eclipse based Imixs-Workflow Modeller. Any business object can be bound to a new business process by posting a JSON or XML based process instance. The state is then controlled by the Imixs-Workflow engine and can be requested and updated in various ways.

Runns with Docker

DockerImixs-Microservice provides a docker image. This makes is easy to run Imixs-Microservice in a Docker container and provides a powerful way to integrate a full featured workflow engine into a microservice architecture. The Docker image can be used as a template for custom projects and provides a scaffold to start with a microservice achitecture.

 

Imixs-Workflow and Imixs-Microservice are Open Source projects and can simplify the development of business applications in various ways. The Imixs Software Solutions provides professional services and support for building enterprise workflow management solutions.

 

Development

Drag & Drop Fileuploads with Imixs-Workflow

With the latest Update of the Imixs-Workflow the project now supports Drag&Drop functionallity for FileUplods. The Imixs-Web-Tool libray provide several JSF Components for building workflow forms fast and easy. The library extends the functionality of the FileUpload Component.

Files which where uploaded can now be viewed in the browser before they are persisted by the Imixs-Workflow Engine. The new FileUpload widget includes the jquery fileupload plugin and supports most browser platforms.

In different to most other frameworks Imixs-Workflow persists files with an access-control-list (ACL). This ACL can be configured by the Workflow Model and restricts access to files for different actors. Each process instance controlled by Imixs-Workflow can have an individual access list. With this functionality also confidential documents can be controlled by the Workflow Engine.

The integration of the new FileUpload control is quite simple as Imixs-Workflow provides a custom tag library:

<i:imixsFileUpload workitem="#{workflowController.workitem}"
   context_url="#{facesContext.externalContext.requestContextPath}/rest/workflow/workitem/#{workflowController.workitem.item['$uniqueid']}" />

The component can be tested within the Imixs Sample Web Application.

imixs_fileupload_032

 

 

Architecture Development

Building transaction save business logic

As I posted in my last blog about JSF and Transactioncontext, it is importend to keep the transaction context in mind when developing a business application within JSF. When you use the Imixs-Workflow Engine you normaly don’t need to think about transactions because Imixs-Workflow takes care about processing a workitem in a full controlled transaction context. But developing with JSF can lead into situations where the business logic is not allways encapsulated correctly in a single transaction. Look at the following example of an Imixs-Workflow web application based on JSF:

//jsf bean...
@EJB WorkflowService workflowService;
...
public String process(ItemCollection workitem) {
 workitem=workflowService.process(workitem);
 // evaluate result and trigger another process step...
 if (workitem.getItemValueString('department').equals('finance')) {
    workitem.replaceItemValue('$activity',APPROVE_BY_MANAGEMENT);
    workitem=workflowService.process(workitem);
 }
 ....
}

In this example, the process method of the front-end controller evaluates the result of a process step and calls a second process for the same business object. Now you have the problem that the workflowService will run in two separate transactions. As I mentioned in my blog this can result into unexpected database results.

When you are working with Imixs-Workflow, the solution is quite simple: Just put your business logic into Imixs-Workflow Plugi-In. Plug-Ins are always controlled by the WorkflowManager and called inside a single transaction. So there is no risk that your business process runs in an undefined context.

Development

What are the benefits of a workflow engine?

Today I was asked by a friend what the benefits of a workflow engine are. And this make me think about the ‘why’ we have started the open source project ‘Imixs-Workflow‘. read more »