Sunday, July 29, 2012

JQuery Validation UI Plugin 1.2.4 Released - Client Side Validation without writing JavaScript

I would like to announce the JQuery Validation UI Plugin 1.2.4 Released.

The JQuery Validation UI Plugin will bring Javascript Validator, Custom Constraints, Remote Constraints, jQuery Validation plugin and qTip (jQuery tooltip plugin) under the same root and deliver comprehensive client-side validation solution.

What's New:
  • Fixed Issue #8: Added backslash escaping for regex matches and updated version. (by bluesliverx)
  • Fixed Issue #12: 'jQueryValidatorUI is not defined' error. (by Kevin Stricker)
  • Fixed Issue #13: Failed to resolve dependencies net.sf.json-lib:json-lib:2.4.
Find Out More:

Sunday, July 22, 2012

Simplifying Grails Flexigrid Integration

Would you like to incorporate the great Flexigrid component like the following picture into your Grails application?

Let's look at how it can be done easily in just 3 steps:
1. In the person/list.gsp, specified the following code block before the </head> tag to import flexigrid resources:
<r:require module="flexigrid"/>
2. Render the flexigrid in the person/list.gsp using <g:flexigrid> tag, for example:
<g:flexigrid for="com.vobject.addressbook.Person" properties="title, firstName, lastName, dateOfBirth, remark" />  
3. Enabled the Flexigrid support for the PersonController by adding the following configuration to the Config.groovy file:
grails.plugins.dynamicController.mixins = [
Done! You will see the person list render as Flexigrid component in the picture above after you run "grails run-app".  The <g:flexigrid> tag will render the first column as link and all columns with equal width by default.

Let's do some customization, I want to enabled link for the First Name column instead of Title column and custom width for each column like the following picture:

It is as simple as specify the linkProperty and columnWidth attribute, please see the following code:
<g:flexigrid for="com.vobject.addressbook.Person" properties="title, firstName, lastName, dateOfBirth, remark" linkProperty="firstName" columnWidth="30, 150, 100, 70, 300"/>

Behind The Scene

The codes above was implemented by a Grails plugin known as "flexigrid" by refer to the blog post "Using Flexigrid in Grails Web Applications " to further simplifying Grails Flexigrid integration. It was depends on dynamic-controller plugin. Many thanks to kindness of Ronillo Ang for the writing and Burt for the creation of dynamic controller plugin.

Thursday, July 12, 2012

The Grails Activiti Plugin 5.9 Released

I would like to announce the Grails Activiti Plugin 5.9 released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework. With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Release Spring Security Integration plugin 0.4.8 to support latest version of Spring Security Core plugin
  • Upgrade Activiti's jar files to 5.9. Start from this version, the plugin required Grails 2.0 or above.
  • Change to Grails dependency management from putting Activiti's jar files in lib directory.
  • Fixed navigation bar to fit Grails 2.x layout.
  • Fixed Issue 4: install-vacation-request-sampleapp script was broken in Grails 2.x
  • Move the code of install script to activiti-quickstart
  • Improve text display on console.

Find Out More:

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.