Tuesday, July 10, 2012

The Grails Activiti Evolution

In the end of April, I published a message to the Grails Activiti plugin's discussion forum, the plugin development progress will shift to low gear. An active plugin user from US semiconductor firm saw my message and contacted me for a consulting work opportunity related to the plugin, unluckily the deal was not materialized. So, my priority for development of the plugin remain the same.

I would like to see the plugin keep evolving, even I can't promise I will be always active in development and super responsive in community support, you will see me there :). Hence, I write about the future of the Grails Activiti I envisioned in this blog post. You can assume it is evolution roadmap of the plugin, your feedback and comments are very much appreciated.

Business Process Management 101

What is Business Process Management (hereafter called "BPM")? Let's look from BPM as business practice perspective, the following diagram is the BPM process itself:
Diagram 1: taken from slide 12 of slides by Gregor polan
As Grails Activiti plugin is built on top of Activiti BPM suite, let's look at the support of Activiti BPM for the BPM processes above. In my opinion, Activiti BPM had great support the process modeling process with BPMN 2.0 (Eclipse-based Activiti Designer and Web-based Activiti Modeler) and process execution (Activiti Engine) with basic process management and simulation (Activiti Explorer).

Diagram 2: taken from slide 6 of slides by David Noble
Let's look at similar diagram above, the bigger text above are business practices, and the smaller one below are computerized systems.

What is Missing in Activiti BPM?

I break down the BPM Processes and Systems from Diagram 1 and 2 into the following DevOps table:
The black color text is Business BPM and red color text is Technical BPM

I think Activiti BPM has great support for process modeling (Activiti Designer/Modeler) and process execution (Activiti Engine), but the following items have much room to improve:
  1. Process simulation: I think the user interface of Activiti Explorer is not user-friendly enough for production use. Users should able to use the deployed processes for their daily operation works after process engineer deployed the process resources (process definitions, form definitions, etc) to Activiti Engine. This will greatly shorter the process development and management cycle.
  2. Better integration to Business Rule Engine such as Drools and OpenL Tablets
  3. Better integration with Mule ESB or other EAI platforms
  4. Better integration with Portal using Grails Portlets plugin.
  5. Better monitoring and reporting features (which currently unavailable and can be implemented using HistoryService API)
In my opinion, the Grails Activiti Plugin can further expand and evolve quickly to deliver the improvements above by leverage the Grails Framework and it's richness of plugins. I think item #1 and #5 above will create greatest value to the customer business, what do you think?

Going Forward

I think most improvements above will be implemented as separate Grails plugins. When there is enough interest, creating a Grails Activiti Organization in github is more appropriate to host Grails projects/plugins that related to Grails Activiti such as Spring Security Integration plugin and Shiro Security Integration plugin and other upcoming plugins.

Lastly, if you are interested to join the Grails Activiti Organization or your company is user of the Activiti BPM and would like to see these improvements implemented, I'd love to hear from you!

Edited on 11 July 2012:  Great discussion about this blog post in Activiti Forum.

Like this blog?

Thanks for visiting! If you like what you see, I'd really appreciate you linking to it or otherwise sharing it with people you think would find it useful.


Tjad said...

Hi Chee Kin

I would firstly like to say, I am not familiar with or am new to many of the tools you speak of above. I have been reading up on them though and do find them to be useful, and I have left a bit more commentary on this in the Activiti forum thread.

In terms of your first point on 'simulation', to clarify, would you say that you want
a.) an out of the box 'sexy' UI that will generically or with templates bind to any process definition
b.) offer more functionality
c.) offer the same functionality in a different layout
d.) potentially all of the above

A response was made in the Activiti forum where they talk about process simulation in the sense for display purposes. It would be great if one could build some workflow, then setup a 'simulation' demonstrating what actually happens during each task of that workflow definition. I was imagining something similar to Serena Prototype Composer.

As I stated in the forum, the rules engines and reporting engines seem to be a primary investment in larger companies and especially within financial systems where auditing is required.

I fully support the integration with technologies such as Mule and Esper that you mentioned above and in the forum. Frankly, any integration can only be healthy for a system. It would be awesome to have this long list of 'integrates with' :)

I would agree, this does sound somewhat like wishful thinking. The truth is, it all already exists, and it would be excellent to see it be in the Grails Activiti plugin too. The points you discuss remind a bit of MS Biztalk, I am not a developer for it, though I have looked at its architecture which holds many of these components.

Though ones time is densly occupied, any time provided towards this project will add up, ultimately allowing the project to reach complete evolution.


Lim Chee Kin said...

Hi Tjad,

First of all, thanks for taking your precious time to write your comments here and the Activiti forum about my writing, we all busy :). Neither I am expert on tools and technologies I mentioned above, I'm in learning mode too, not so much different from you.

Yeah, I think the 'simulation' point is not clear enough, thanks for pointing it out. To response to your comment, it is d) potentially all of the above. I think why not making it as real 'execution' with great UI, instead of 'simulation'. I am thinking of integrating twitter-bootstrap (learning twitter-bootstrap-scaffolding and kickstart-with-bootstrap). Thanks for sharing the Serena Prototype Composer link, it is similar to my idea of ProcessCanvas, but the scope is big. In mid-term, my target is to generate UI dynamically using twitter-bootstrap theme with input validation (implemented by a Grails plugin created by me, jquery-validation-ui) for uploaded process definitions and form definitions.

I agreed with Ronald's comment stated in the forum about integration with third party tools such as rules engines such as Drools, reporting engines such as JasperReports or BIRT, Mule, Esper, etc., it may not hard for a developer to integrate these tools to Activiti engine (you may get it done by gone through Activiti In Action). Would you be more happy if this integration is done by install a Grails plugin and it just works? I will be very happy, you save me some reading time (as time is finite and precious resource to everyone). That's the key reason why Grails Activiti Plugin exists anyway. K.I.S.S and D.R.Y! :)

Yeah, you got my message and my intention of writing this blog post!

Tjad said...

The idea of this being KISS/DRY is great. Do you think we would be able to create a spring layer(like stand alone libraries) that we could extend into the Grails framework.

This would allow us to use the abstractions in projects that use spring other than Grails.

Lim Chee Kin said...

As Grails was built on top of SpringFramework, I have no idea why would you want to create a spring layer.

Tjad said...

Hmm, I suppose I am getting the idea across incorrectly.

Some of the functions you discuss above could be applied to more than just a Grails project, for instance reporting, If somebody were using a reporting engine with activiti, you could write a lib with this functionality, and your Grails application would depend on this new lib. That way somebody not writing a Grails application can still utilize the code.

I understand that this project is intended to be for Grails as Grails Plugins, though I am sure what you are introducing would not only apply to Grails.

On the other hand, I suppose only implementing it in Grails will create more influence to use Grails.

Lim Chee Kin said...

You are right! Features implemented by lib can be used outside Grails. I focus on Grails at the moment as it simplify the implementation of those features.

Natarajan said...

Hi Lim,

I would like to integrate the Grails web framework with Activiti Workflow. Something like leave mgmt application. which is explained in the Grails-Activiti plug-in example.But i'm not finding any clue how exactly it's integrated. So could you please show the direction with respect to the implementation perspective.

Thanks in advance for your time,

Lim Chee Kin said...

Hi Nat,

Thanks for your interest to the plugin. Please join the online group of the plugin at https://groups.google.com/forum/?fromgroups#!forum/grails-activiti-plugin and post your question there. I will post my answer there.