Sunday, January 2, 2011

Lessons learned with Bonita Open Solution

Why BPM
IT operations and IT development in our company is subject of outsourcing. It has some consequences among others also the lack of knowledge how our business processes are automated by SW solutions.
Business processes are often documented in various styles. We decided to take advantage of BPM tools where there is process documentation tightly coupled with process implementation.
We started with a study that compared many open source BPM tools (ODE, WSO2, jBPM, INTALIO, OW2, SARASVATI, ENHYDRA, TAVERNA, ACTIVE BPEL, RUNA, BOS). The Bonita Open Solution BPM tool was decided as a winner for our POC (proof-of-concept).
POC automates process of the application audit (APA). APA is a poll where our business and IT users fill various questionnaires. These answers are then compiled into reports of threats and opportunities, reports of portfolio clusters and answers are also an important resource for our application portfolio documentation.

BPM in Bonita
In Bonita we implemented a process as can be seen from following picture. The current APA process is not important - we want to highlight some of its parts.





On the picture you can see that:
• a process has its starting (green) and ending point (red)
• a process flow is noted with arrows – a flow can be conditional (a good practice is note the condition)
• an activity can have more enter points – in such a case there is a gate (diamond sign) used – e.g. the NotifyDistribute activity has a preceding gate
• An activity can have a human character. There is a form GUI which allows a human to interact with the process. In such a case there is a figure sign in top left coroner.
• an activity can have other functionalities which are called connectors – see the sign of a socket plug in top right coroner

Bonita allows you to design a process – it has its own design studio. Bonita allows you also manage of running process instances (which are called cases) in a component called Bonita User Experience (management console) and Bonita has also its API.

Positives
Following chapters are listed by importance from our personal view.
1. Process documentation
As you can see it is the major function of BPM tools. It is pretty easy to understand a process also from a user perspective.
2. Human tasks
Bonita has very strong support for user forms – a case has simple web forms. A design of a form in a studio and a resulting web form are on following pictures. Button “Odeslat” is a submit button – the human activity has finished then. A “Zpet” button is back button for previous form – in this activity there are two forms designed for the user interaction.



A GUI component has its layout settings, data settings (you can see variables used for component initialization or for save on the picture) or validation settings (you can write a Java class used for validation purpose).




3. Monitor console
It is pretty easy to see running cases in Bonita User Experience. It is a GUI where administrator can see all processes, cases, users and has basic functionality for a management. GUI can be accessed also by other users – they can see history of cases what they participated or can see in their inbox tasks to be done.





4. Web services connector
Connectors enable designer trigger procedures or component calls during events of an activity. There can be multiple connectors for an activity (e.g. Database call during initialization event, Groovy script execution after a submit event etc.).
We appreciate the Web service client connector. It is pretty easy to invoke a web service. You can see that activity “Aktualizace technickych charakteristik” has 4 connectors (read facts from a database; send a web service request – both during the initialization activity event “On Ready”. After submit event there is a Groovy script used for a variable serialization and then a database save connector is launched.)
Web service detail shows how the request and connection are configured – we use variables for reuse. Later I will discuss problems with reuse – this web service is responsible for user notification. The notification contains also URL of the task. Each activity has a dynamic URL which can be recognized only during the activity life (see the getStepURL method of the Bonita API).




5. Actor assignment
With Bonita you can set actors also during run time. You simple set a variable that is global for the whole case (process instance).

Negatives
1. Testability, configuration and bug fixing
Testing of a process is not easy. There are times when you need your process running without for example notifying a user. In APA process we use a connector and it would be nice to enable or disable via configuration a specific connector.
Bug fixing is possible but you have to save a new version of your process. The fixed version is running next to the version with a bug. A simple replace is not possible because when there is at least a case of a process running you are not allowed to delete the process.

2. Error messages
The error messages are poor and you often don’t recognize where the problem dwells. Sometimes you get more info from log but it is not the rule. You can for example run into these errors - see our workaround.
2.1. Error “Cannot seal oracle class when starting a new case”. Means deployment problem - you have duplicities with jdbc library – you have to remove the library reference from process definition.
2.2. Error “Could not execute JDBC batch update”. Means database problem on the server backend database. Bonita needs a database for storing processes, users and cases. We ran into a problem when Bonita started the numbering of cases from the beginning while we were at least on the number 87 (I’m still not sure how it happened). Fortunately there is a database constraint that prevents some duplicity in case numbering.

Unfortunately the finished cases are not presented in BN_PROC_INST table so the 2nd error causes that yet finished cases will be overwritten - also with its variables. On the following picture notice that after the activity “Aktualizace technickych charakteristik” should be activity NotifyDistribute and the End1 activity (default name for final activity).
Database constraint has not found the case number in database and allowed to start the case with the same ID (name plus number) again. You can see the activity “Nastaveni hlasovani” which is first human activity in APA process like an actual activity task. Notice also that variable values from the first case run are missing. Luckily we are storing results of APA in a custom database table!

And there are many other smaller bugs – every product has a bug.




3. Reuse of connectors
Reuse helps to design a solution once and use multiple times. Our process has a Groovy routine which normalizes a text (capital letters, national characters etc.) that we use in more activities. Groovy reuse is cool. On the other hand we miss a possibility to reuse the mentioned notification web service client connector. Currently there are 4 almost identical definitions of a web service call and our APA process is not too much complicated.
Other option that we are missing could enable or disable a connector during the run time.

4. Deployment
Deployment of Bonita on server is not trivial – so is not the deployment of a process. From studio you can start a case locally. On the background you have a jetty server in let’s say Windows XP - everything seems fine.
Your server environment may not have a jetty and may not have Windows. We have a Tomcat on CentOS Linux. It is source of many problems. For example the national characters or operation system calls (we wanted to configure process via OS variables).
In general for process deployment you need two java binaries for each process – all of them are produced via BOS development studio:
4.1. the WAR binary which is hosted on the application server
4.2. the BAR binary which is loaded into Bonita management console (User Experience)
Deployment of fixes leads often to delete BAR and undeploy WAR and vice versa. Especially when you change the graphical design – e.g. the web forms for human activities.
It is very important to choose the embedded version of WAR deployment. In development studio you will need to eliminate duplicities of libraries via lib references of the process.
See dialog for building a WAR file.




Summary
The product is relatively stable and under the active development. We started to play with the version 5.1.1 in May 2010 and now in December 2010 there is version 5.3.1. We are using APA on the version 5.2.2.
Bonita is still not mature for a business critical process where you cannot lose any transaction e.g. customer orders.

Robert Srna, 2011
Links to Bonita

3 comments:

Anonymous said...

Hi,

How would you compare this with Activiti - the latest BPMS on the block?

Thanks.

Anonymous said...

With Bonita you can set actors also during run time. Can you please tell me how to do this ??

Anonymous said...

What about using a subprocess to solve the need to copy web service connector four times?

http://www.bonitasoft.com/resources/documentation/bos-58/process-design/subprocesses