jQuery, SOAP, Ajax and updated UI for workflow

April 3, 2009 Leave a comment

New UI, with jquery actions


To enable the toolbar in the tempo task list, edit the tempo-ui-fw.xml in the config folder and set the following:

<property name=”useToolbarIcons” value=”true”/>

This will tell the UI to load the optional icons as seen in the screenshot below:


  • Delete: delete the tasks from the task list, and also completely from the database. This has been asked when the process had failed and the task was not relevant anymore for the process
  • Claim/Revoke: this takes ownership of the task, and prevent the task from showing up into other users task list. Revoke does the opposite, give back the ownership, and other users can see and act on the task again. This will almost instantly change the icon related to the task, as shown below:


  • Reassign: You can reassign the task to other users or groups. This also dynamically loads users and roles from the RBAC service in tempo so  you can select from the drop down menus.


  • Skip: Put the task in a skipped state, so that it does not show in the task list anymore, but does not delete from the database either.
  • Export: a common place to export to PDF, iCAL, CSV your own tasks.


Jquery and SOAP

I”ve used the excellent SOAP Plugin for Jquery which had almost everything out of the box ready to use cross site scripting, without which anything ajax won’t work.
I just added a quick forward proxy implementation. What it does it just take the soap request from the client side of the UI, and forward them to any proper remote server, using awefuly simple java code. (Thanks http client)

Add your own actions

The following file in github has all the needed code you would want to add your own custom action. Go ahead and display that google map based on the geolocation of the logged user. The power is yours.

Jquery UI 1.7 has made its way in, so you can use its delicious dialogs and other freebies.

Session Timeout and server disconnect

You can now configure the session timeout, as well as the ajax timeouts, as shown in tempo-ui-fw,xml.

<property name=”sessionTimeout” value=”10″/>  // in minutes
<property name=”ajaxTimeout” value=”10000″/> // in milliseconds

In each case, this will show a dialog just like the one below:


This will also prevent any misplaced client-side action. Here the log in again forces you to log back in again. Of course you could very well, implement your own handlers and custom code, to perform the login through the Token Service, or any other requirements you might have.

The ajax time out, is directly related to the ajax activity, and is used to detect when a server has gone down, and the connection has been lost. This will prevent the client side scripting to send unnecessary requests and over loads the server.

In regular activity, we’ve sligthly added some feedback with a custom ajax loading indicator,designed with webscript lab.7

Browser compatibility: IE6,7, Firefox, Safari, Opera

With a little help from my friend, IETester, I’ve gone through quite some extensive testing of the different browser resulting in a, hopefully, better user experience.


I also finally understood how to make those horrible scrollbars disappear in an IE6 internal IFrame, which is by loading not a blank page, but an empty page. Empty is not blank.

and “if actions are stronger than words, why is the pen mightier than the sword?” … (answer here). Anyway, with IE6, I used everything I could find, Swords, pens and empty pages.

Good news in the end, even safari and opera liked it.


Categories: Uncategorized

Tempo Tasks List Performance, Load Testing and some Ruby scripting

March 12, 2009 Leave a comment

A customer reported some performance degradation with the task list under a bit of load, (~500 active tasks per user), so decided to have a quick look and boost off a bit the different components involved in sorting, displaying and all the jazz that the Tempo task list is doing.


So, a few quick ruby scripts later, we’re ready to unleash a nice crafted bomb on the Workflow.

First one, create_tasks.rb, allows you to load as many tasks as you want, most of the parameters are in the script, you can modify them at will. The default is to load a mere 5000 active tasks and I think this is going to be enough for the purpose of this post. Below is the time it took on a tomcat install, with persistence to derby, (worst case scenario).

./create_tasks.rb  60.02s user 18.83s system 60% cpu 2:09.49 total

That’s almost 100 tasks created per second.

Now I can log in with the default Tempo account in the task list, and look at all the loaded tasks:

picture-3We do have the 5000 items, and believe me or not, (for now), the page loaded pretty quickly.

There is a threaded ruby client, which sends requests to the server.

With 20 clients in parallel accessing each their *5000 tasks* task list, we got a sensible curve:


Horizontally is the time since the start of the test, so all in all, it took 200 seconds for 20 clients to retrieve 20 times their task list.

Last, the script to delete the tasks, to remove all those annoying activity tasks we’ve created, and the server is back to its original freshness.

Now if some people are ready to use those scripts to test on different database, with remote clients, I would love to get the results.

Voila !

Categories: Uncategorized

Embedded LDAP in 2 minutes (… and a bit of RBAC)

February 25, 2009 Leave a comment

Embedded LDAP in 2 minutes

Running a standalone LDAP server is rather easy.
Getting that server to be embedded in your server may be slightly different.

ApacheDS has quite a few links to do it properly, but you need to do some gymnastics to compile the war file, set it up, start the server and finally get it working with different domains.

As part of the migration of Tempo to github, we also got the ApacheDS code in its own github fork.

So, all you need to do to get your embedded LDAP server, is to get your own war file, download tomcat and start the server.

You can setup additional LDAP partitions on the fly by editing the partitions.json file present in the expanded war file. No need to code. A partition looks like this:

“intalio”: {
“attributes”: {

So you can add/remove then before starting the server, the applications filters will handle the initialization.
On the same note, ldif files to be imported can just be dropped in the classes folder, and they will be imported when the server start.

Import LDIF

Import LDIF

Same again, drag and drop no need to code.

Hugues being still busy writing a wicked RBAC visual editor for Intalio|Designer to make it easy to manage the users and roles, we will rely on Apache Directory Studio (download, eclipse update).

Network Parameters

Network Parameters

Authentication Settings

Authentication Settings

User is uid=admin,ou=system Password is secret by default, and you’re all set to connect.

Expanding the default, we can see:

People and Roles

People and Roles

Copy and paste users, and roles, rename then on the fly, like here:

Create a new user

Create a new user

In Preferences, LDAP-> Entry Editor, remove the noisy LDAP attributes:

No noise

No noise

And use the entry editor, to edit the newly user:

Edit User

Edit User

Still a few glinches of LDAP prose, but we have written no code, we’re under 2 minutes and you should have an LDAP server setup.

… and a bit of RBAC

If you have Intalio|BPMS, (or the open source Tempo bundle) then LDAP authentication is either enabled by default or you can do that through the securityConfig.xml file:

<!– <bean id=”securityProvider”   class=”org.intalio.tempo.security.simple.SimpleSecurityProvider” init-method=”init”>
<property name=”configFile”>
</bean> –>

<bean id=”securityProvider” class=”org.intalio.tempo.security.ldap.LDAPSecurityProvider”>
<property name=”propertiesFile”>

Then, head to the local integrated RBAC Query Service, and try to see which users for which roles:

Soap me

Soap me

Voila !

Categories: Uncategorized

Apache Sling, Jackrabbit, JCR, Webdav and Tempo

January 24, 2009 1 comment

Sling could be one of the coolest java project in the content management area nowadays. It is completely based on Jackrabbit, and also includes Apache Felix for OSGi components registration.
It is very customizable, and has the great advantage of being ready to put in production, and or to be used as a base for further custom development.

I was playing around with it, and decided to make a quick contribution to tempo as part of the Intalio dogfood project.

So now it’s pretty easy to use, and we’ve put together a short video to give a preview of how you can put it to use yourself within seconds.

Sling with tempo (<- hint: click me)


Categories: Uncategorized

How to use the new task List for Tempo

October 21, 2008 Leave a comment

Moving toward the 6.0.0 release, we’ve slightly improved the tasks list, the web application where the user can see, search, and action on each and every of her tasks.

Today’s post will server as a reference on how to use it, and the different new features.

First we start by login through CAS,

If login is successful, we are immediately redirected to the tempo welcome page:

You will notice a bouncing arrow at the top left of the screen:The different tabs presents the different tasks type, as it was before.


  • Tasks presents your TODO list, and all the items you have to work on.
  • Notifications are similar to Growl, in the sense that it tells you thing, but you don’t have to take any actions
  • Processes, People Initiated People Activity,  PIPA, are processes that can be started by the user.
Let’s go through the processes tab first:
It’s a bit different than before. We now have a limit on the number of items to be displayed.


The toolbar at the bottom helps you navigate from one page to the other, and gives you a overall status of the items being displayed.
The number of pages being calculated from the number of items, and the number of items to be displayed. The number of items displayed one one single page can be changed using the drop down menu at the bottom left corner:
Clicking on any number automatically refreshes the page. Also, the select box can be easily configured, so we could add 50, 100 if the number of tasks increases.
Although in this last case, we have …


Clicking on the magnifying glass:

A new menu slide in and you can filter the tasks:


If you still have too many tasks, you can order the items ascending or descending by clicking on the column header.

The sorting column will be displayed in a slightly different color.


Now clicking on an item in the list, makes the form being presented almost full screen.

So clicking on the above, will hide the list, and present the form with the maximum usable space:

Clicking on an action item in the form will hide it, and show the list again.

Or you can simply press the list of items you would like to see again:

Voila !

We will be presenting at the Beijing OpenSourceCamp this weekend. Hope to see you there !

Categories: Uncategorized

Intalio User Conference in Japan

October 9, 2008 Leave a comment

This week, on monday and tuesday, Intalio organized the Intalio User conference in Tokyo.

There was about twice as much people in Japan, as there was for the Intalio Conference in  San Francisco, and a total of more than 250 users attended. It was presented with what I felt was a very good vibe,  Japanese users got in touch with developers, engineers, managers, marketing, and Ismael社長 .  

It was also a great opportunity for the Intalio crowd itself to meet with each other, and Intalio people came from Singapore, Sydney, San Francisco, Los Angeles… to present for the event.

The organization was achieved brilliantly by Sawada-san,  from start to finish, even before start, and after the finish, presenting each speaker, presenting the event, welcoming each and every single participant, making sure the point of each presentation was conveyed in Japanese, to the Japanese users as well. That was a very impressive amount of work, and we’re really grateful to be able to work with him.

Shao, could get the preview release of Liferay, Alfresco, Intalio, CAS, LDAP along with D3-driven RSS feeds feature that I’ve been working on. He presented this side by side with the Business Rules Engine (BRE) integration, and other D3 projects. Even though we presented just after lunch, there were quite a few questions, and the 20 minutes long live-demo went perfectly well, which made it all well worth putting efforts into !

After the presentation, Alex, Hugues, Shao and myself hold a Q&A session, where engineers from Toyo Business Engineering, ITFrontier, NTT Intramart and Fuji Xerox attended and asked questions on topics like:
* Demand Driven Development 
* processes suspend/resume, and related workflow artifacts
* Import/Export of designed processes from Intalio|Designer to a set of different format 
* SimpEL
* …
The Q&A session was met with enthusiasm, and users could ask whatever question they wanted, lasted for more than 1h30 minutes, and we got great feedback on what new features are important, and where we should focus on. I really enjoyed that, and hope there will be more of those actions in the future.

Santa Cruz’ Jonathan said we’re holding another Intalio conference in Spain early next year, so keep posted !

Categories: Uncategorized

Workflow: Absence Request process sample on windows

October 8, 2008 6 comments

Today, using the following .ldif file for ApacheDS, we will use a users/roles hierarchy looking like this:

The required MySQL/SQL files are now included in the zip file. After setting up the database, on windows, expand the preview bundle of tempo, and then you can start the server just by double clicking on start.bat, and soon after, LDAP, Alfresco, Liferay, Ode, CAS and Tempo will be initialized.

You will still be asked to login into CAS:

The tempo UI-FW porlet uses the proxy CAS method, which means the portlet gets a proxy ticket and a service ticket from the portlet request to access authenticated backend services. CAS proxy portlet authentication is explained on the CAS wiki.

Liferay needs you to agree to its license for each and every user. That means that for running the Absence Request, you will have to go through the “I Agree” button for each user the first time.

Once you’ve added the UI-FW application from the liferay “add application” menu, you would see:

Clicking on the example process opens the form in a pop up. This demo is using Orbeon’s XForms:

Users who would like to contribute to a simple JQuery form manager please stand up !  It is very easy to integrate with Tempo, and this would give the project a light alternative to Intalio Enterprise’s integration with General Interface

When you start the Absence Request process, (you need to be logged with the Sales role to be able to see it), and fill the form, a user with the Manager role will need to approve it. 

Once the absence request has received approval it will show up as a notification in the Tasks/Notification tab.

Note that with this preview release, you’re now single-signed on in UI-FW webapp as well. So you can switch between whichever version you like.

Once you’ve finished your session, you can log out of the system, and CAS ensures that your session is being closed for all the different services.

Voila !





Categories: Uncategorized