tags:

views:

128

answers:

4

Hi,

We have an issue where a Database table has to be updated on the status for a particular entity. Presently, its all Java code with a lot of if conditions and an update to the status. I was thinking along lines of using a Workflow engine since there can be multiple flows in future. Is it an overkill to use a Workflow Engine here... where do you draw the line ?

+3  A: 

It depends on the complexity of your use case.

In a simple use case, we have a database column updated by multiple consumers for each stage in an Order lifecycle. This is done by a web service calling into the database. The simple lifecycle goes from ACKNOWLEDGED > ACCEPTED/REJECTED > FULFILLED > CLOSED. All of these are in the same table on the same column. This is executed in java classes with no workflow.

A workflow engine is suited in a more complex use case which involves actions on multiple data providers eg: database or Content Mgmt or Document Mgmt or search engine, multiple parallel processes, forking based on the success/failure of a previous step, sending an email at a certain step, offline error alerting.

You can look at Apache ODE to implement this.

JoseK
A: 

I think you should consider a workflow engine. Workflow should be separated from application logic.

Reasons:

  1. Maintainable: Easier to modify, add new flows and even easier to replace by another workflow engine.
  2. Business Process management: Workflows are mostly software representations of BPM. So it is usually designed by process designers (Non-tech people). So it is not a good idea to code inside the application. Instead BPM products such as ALBPM or JPBM should be used which support graphical workflow designs.
  3. Monitoring business flows: They are often monitored by the Top level managers and used to make strategic decisions.
  4. Easier for Data mining/Reports/Statistics.

ALBPM(Now Oracle BPM): is a commercial tool from Oracle suitable for large scope projects.

My recommendation is JBPM. Open source tool from JBOSS. Unlike ALBPM which requires separate DB and application server, it can be packaged with your application and runs as another module in your application. I think suitable for your project.

Sujee
+2  A: 

We have an issue where a Database table has to be updated on the status for a particular entity. Presently, its all Java code with a lot of if conditions and an update to the status.

Sounds like something punctual, no need for orchestrating actions among workflow participants.

Maybe a rule engine is better suited for this. Drools could be a good candidate. When X then Y.

jmettraux
Thanks for this. Any good resources on Drools with Spring integration that you might know ?
Icarus
Found it here -> Drool with Spring. Thanks !https://springmodules.dev.java.net/docs/reference/0.7/html/jsr94.html
Icarus
+1  A: 

If you're using Spring, this is a good article on how to implement your requirement

http://www.javaworld.com/javaworld/jw-04-2005/jw-0411-spring.html

romesub