What architecture to provide a modular BPM solution? - java

I search for an architecture to implement an egovernment solution with java. I would like the possible solution present the following features:
Based on Java (JSF, Spring, JPA)
Modular architecture
Strongly designed around BPM
processes
Isolate workflow engine from user
task forms (in order to provide fault
tolerance)
I have found several bpm alternatives such as jBPM, Activiti, Intalio or Enhydra. By now, I like Activiti approach but I don't find a suitable solution for a modular architecture and user task forms isolation. Perhaps, a multimodule maven project (ie, one jar module per procees) or a OSGi option would fit but I don't know how to wire up all these pieces.
What would you recommend me in my quest?
Thanks very much in advance

Intalio runs the user tasks in a separate web application. It can be deployed to a different server from the runtime engine.

I think that you might be interested by the upcoming version 7 of Bonita BPM.
Engine conception is services oriented and all implementations are injected using Spring. Persistence is handle directly by Hibernate (no JPA) but make use of JTA.
Architecture is separated into three main components:
Studio: the development environment for BPMN process modeling
UI Designer: to define forms and pages that will be used for process execution as well as for applications creation. it's a custom AngularJS solution that is used here but you can as well use any alternative solution you want thanks to Engine API.
Portal: web interface for administration and end users operation.
Engine: component that actually execute the process definition build using the Studio. Engine provides a set of API available using REST or a Java client library.
The Engine is the core of the Solution and Portal is built on top of it using Engine API.
Process definition actually declare a set of contract at process and step level to define what data must be provided by the forms in order to start a new process instance or execute a task. So we have a loosely coupled design here.

Related

JBPM User Interface - KIE Workbench vs Custom UI

I have built a process using JBPM. I am evaluating building forms using form builder provided by KIE Workbench. I saw that it uses Uberfire under the hood. What are the pros and cons of using KIE workbench for building forms vs using another are UI technology (angular js etc) and integrating that with JBPM process? Also is there a way to customize the form builder module to use other UI framework such as Angular JS , if needed?
Much of the functionality to add data items to Forms was removed in early jbpm 7.x including the ability to customise pages in an useful way. I'm not sure the reasoning for the removal of functionality it could be related to the migrations from the previous platform to uberfire etc.
It is so limiting now my project has struggled to even populate a listbox with data dynamically and chaining forms together is now impossible. We may have to end up building a custom front end - which kind of defeats the purpose of the no-code solution for workflow requirements. I'm not sure how this compares with the state of the commercial redhat product.

Activiti vs Imixs which Work Flow is better to integrate to an application existing?

Reference-
http://www.activiti.org/
http://www.imixs.org/doc/core/index.html
I am having a requirement of creating tickets and manage its status one after the other depending on work flow process and i need to give roles to the users and give authority of who should edit data and who shouldn't
so which of the 2 above is better(easy) to integrate to a java application already existing to get work flow process to the java application
Activiti and Imixs-Workflow follow different approaches. Where Activiti is a BPM plattform focusing on process automation, Imixs-Workflow is a workflow engine focusing on human-centric workflows. Human-centric workflow mean to track a business process form the users perspective (e.g. provide a task list, send e-mail notifications or control the access and ownership of a process instance). Assigning roles and user rights to a process instance is one of the core concepts of Imixs-Workflow. So from your requirement description Imixs-Workflow is possible more aligned to your requirement.
Both engines support BPMN. So you can model your process with the BPMN 2.0 standard. Imixs-Workflow uses the BPMN 2.0 extension mechanism to encapsulate the technical details inside a process. Activiti processes a BPMN 2.0 model directly and uses the technical aspects and BPMN 2.0.
Activiti integrates with Spring where Imixs-Workflow is based on Java EE. So there is also a architectural aspect you should consider.

Java workflow with fork / join capabilities

I'm a Linux Python programmer with a (long) past Java experience
I need a reference to a workflow management system that supports async fork/join, I understand that jBPM does, though I prefer using Spring but could not understand if Spring Workflow support forking as well. or is there a Python system that supports it?
Thanks,
Guy
You could look through this list of Open Source Workflow Engines in Java and check the features list of each tool to see if one of them supports asynchronous fork/join.
You reference Spring Workflow, but actually link to Spring Web Flow. There is a Spring Workflow extension project in incubator status; is this what you meant? From its web page:
The Workflow extension brings Spring to the world of workflow programming. Jan Machacek originally started this extension because he was not happy with the complexity of other workflow management libraries. The Spring Workflow extension treats all components of the workflow as first-class Spring beans. As a result, your flows, states and transitions can take advantage of all features in the Spring Framework.
If you prefer using Spring than in my opinion the natural choice for you would to to check out the Apache Camel project. Camel supports most of Enterprise Integration Patterns where you can fork, join, process asynchronously, whatever you want.
Spring web flow is not a BPM engine, it is a web framework based on workflow page navigation.
You can look at Activity

Java desktop application to Client/Server (Web)

We have a desktop java application (image-processing) that is working great, now we have to add a client/server architecture using Java EE plateform.
We must use also MVC, and interacting with many other libraries like JDOM, JMatlink(MATLAB), and calling some exe files.
Based on your experience what is the best choice to do that (framworks, ... )
Correct, you must use an MVC framework to design a flexible and reusable web application on the Java EE platform.
I suggest the following design:
Use JSF (Java Server Faces) to design the front end. As you are migrating your desktop application then it will better suit you becuase it's Component and Event driven framework.
Middlware: EJB 3(or EJB3.1) This will provide best available flexibility, performance and security to call your Business components directy from JSF Beans or any other remote application.
Over here you can use various design pattern to encapsulate Library and database access i.e. DAO (Data Access Object).
Use DTO (Data Transfer Objects) to transfer your request/response.
Hope it will give base to start your research.
If you can abstract the layers that talk to the backends such that your frontend (Swing?) doesn't need to know where those service are located, you are half-way there.
The key should be a good module concept. Frameworks like the NetBeans platform help you with that, and they can easily integrate non-visual modules that handle the backend code.
I'm not sure what you mean with "We must use also MVC"
MVC is a design pattern not a library or framework.
But if you use something like the NetBeans platform, you'll be applying that pattern anyway, because it forces you to think in modules. Each module will have a defined responsibility and during startup it registers itself with the application.
Take an application that allows you to manage people (e.g. for a human resource department). One module is responsible for displaying a form where the user can look at a single employee. That module in turn looks for a provider that can load or list all employees. How that provider gets the data is invisible to the front end. It could use a flat file, a relational database or a call to a remote EJB server (this is were you could plug your JavaEE stuff in)
The application could even download the modules from the server if correctly configured.
The key is to make the modules independent from each other. This is true for any large scale application regardless of the technology used (web application, a server side daemon or a desktop application)

What OSS project should I look at if I need to do Spring friendly WorkFlow?

We need to add WorkFlow to our Spring managed application. Does anyone have any useful experience in using any of the myriad of OSS Work Flow solutions? Which one is best? Which one integrates with Spring best? Which ones should we avoid?
If you only need some simple process orchestration, Spring's own Web Flow, despite its name can serve as a orchestration task manager. If you need to preserve state for several days then you will need to become an 'early adopter' of one of the open-source projects. You may want to look at Eclipse's BPEL project.
My hunch is that once a clearer picture of the BPEL/BPM/Workflow space emerges you will see Spring provide an abstraction layer the same way they have for JDBC, Transactions, ORM frameworks etc...
Like Brian said if you're doing anything of great complexity you might look at using BPEL.
There are a number of open source BPEL engines, one that comes to mind is Apache Orchestration Director Engine
I second Spring Web Flow. Depending on how complex the process is, Web Flow is great for managing various states and I've found that it's pretty easy to pick up and there's a good amount of documentation out there for it.
ActiveVOS is by far the best BPEL engine in my opinion. Download the evaluation version and give it a go. JBoss have even adopted their open source offering.
We're looking at Drools/Guvnor, possibly integrated with jBPM (as in this presentation), to add a workflow engine to our Spring/Java EE app, but we're still in the very early phases of trying it out.

Categories

Resources