You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@syncope.apache.org by Antony Pulicken <an...@gmail.com> on 2012/03/23 08:04:19 UTC

Task Listeners in Syncope workflow for

Hi,

In the earlier version of Syncope, we could add pre and post functions for
each 'action' in the Syncope OS Workflow XML for doing some additional
processing/transformation of the data before/after the actions are executed.

Does any one know how that can be done in Activiti ? I'm able to add
listeners for the 'userTask' that listens to the events like
create,complete, etc. But this doesn't seem to be working for
'serviceTask'. I will be posting this question in Activiti forums as well.
But please let me know in case any one has any suggestion.

Regards,
Antony.

Re: Task Listeners in Syncope workflow for

Posted by Fabio Martelli <fa...@gmail.com>.
Il giorno 28/mar/2012, alle ore 11.01, Antony Pulicken ha scritto:

> Thanks Fabio. 'CreateBefore' is working now after making the change you suggested. 
> 
> "I should know where you call setStringAttributeValues 
> method; at first sight it seems correct."
> 
> I'm calling setStringAttributeValues() from the 'doExecute(final DelegateExecution execution)' method in the 'UpdateBefore' service task that I created/configured in the workflow and the update is still not working. Please let me know in case you need more details.

You must work on UserMod bean.
Try to retrieve userMod variable by using the following statement

UserMod userMod = (UserMod) execution.getVariable(ActivitiUserWorkflowAdapter.USER_MOD);

Remove and add attribute on the retrieved userMod.

Regards,
F.

> 
> Regards,
> Antony.
> 
> 
> On Wed, Mar 28, 2012 at 12:58 PM, Fabio Martelli <fa...@gmail.com> wrote:
> 
> Il giorno 28/mar/2012, alle ore 07.50, Antony Pulicken ha scritto:
> 
>> Hi Fabio,
>> 
>> I have configured the ServiceTask(s) as we discussed and those are getting triggered appropriately. But what ever changes I'm making while create/update are not getting propagated to Syncope. Let me explain what I have done:
>> Configured service task before the Create/Update tasks
>> The tasks that I created are extending AbstractActivitiDelegate (Thought it will help in case I need to make use of UserDataBinder, ConfDAO etc)
>> Let me give an example of the processing that I need to do in In the doExecute method in my service task. I'm trying to extract the domain name from the email and assign it to another filed that I created in the schema by name 'domain'
>> In case of createBefore, I'm retrieving the email value from UserTO
>>           protected void doExecute(final DelegateExecution execution) throws Exception {
>>             UserTO userTO = (UserTO) execution.getVariable(ActivitiUserWorkflowAdapter.USER_TO);
>>             attrValue = userTO.getAttributeMap().get("email").getValues().get(0);
>>             //extract domain .......
>>              .......
>>                AttributeTO attributeTO = new AttributeTO();
>>             attributeTO.setValues(new ArrayList<String>(Arrays.asList(domain)));
>>             userTO.getAttributeMap().put("domain", attributeTO);
>>             execution.setVariable(
>>                     ActivitiUserWorkflowAdapter.USER_TO, userTO); 
>>          }
> 
> Hi Antony,
> you cannot add attributeTO to the map retrieved by getAttributeMap method.
> It's not your fault but getAttributeMap is a little bit misleading. Probably it should return an unmodifiable map.
> Please, add attributeTO by addAttribute method.
> 
>> Then the org.syncope.core.workflow.activiti.Create gets invoked and I can' find the above changes in there
>> In case of update, I tried the approach that we were using with the old version and that also doesn't seem to work. Please see the code snippet below:
>>     public void setStringAttributeValues(final SyncopeUser user, final String attributeName,
>>                                          final String[] attributeValues) {
>>         logger.info("Setting attribute {} for user {} with value {}.", new Object[]{attributeName, user,
>>                 attributeValues});
>>         UAttr uAttr = user.getAttribute(attributeName);
>>         if (uAttr == null) {
>>             USchema attributeSchema = this.schemaDAO.find(attributeName, USchema.class);
>> 
>>             uAttr = new UAttr();
>>             uAttr.setSchema(attributeSchema);
>>             uAttr.setOwner(user);
>>             user.addAttribute(uAttr);
>> 
>>         }
>>         if (attributeValues == null) {
>>             uAttr.setValues(new ArrayList<AbstractAttrValue>());
>>         } else {
>>             List<UAttrValue> valueList = new ArrayList<UAttrValue>();
>>             for (String s : attributeValues) {
>>                 UAttrValue uAttrValue = new UAttrValue();
>>                 uAttrValue.setStringValue(s);
>>                 valueList.add(uAttrValue);
>> 
>>             }
>>             uAttr.setValues(valueList);
>>         }
>> 
>>     }
> 
> I should know where you call setStringAttributeValues method; at first sight it seems correct.
> 
> Regards,
> F.
> 
>> 
>> Please let me know the correct approach for Create (CreateBefore) and Update (UpdateBefore).
>> 
>> Regards,
>> Antony.
>> On Fri, Mar 23, 2012 at 2:28 PM, Antony Pulicken <an...@gmail.com> wrote:
>> Thanks Fabio. Even I was thinking in the same direction. I will try that.
>> 
>> Regards,
>> Antony.
>> 
>> 
>> On Fri, Mar 23, 2012 at 1:36 PM, Fabio Martelli <fa...@gmail.com> wrote:
>> 
>> Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:
>> 
>> > Hi,
>> >
>> > In the earlier version of Syncope, we could add pre and post functions for each 'action' in the Syncope OS Workflow XML for doing some additional processing/transformation of the data before/after the actions are executed.
>> >
>> > Does any one know how that can be done in Activiti ? I'm able to add listeners for the 'userTask' that listens to the events like create,complete, etc. But this doesn't seem to be working for 'serviceTask'. I will be posting this question in Activiti forums as well.  But please let me know in case any one has any suggestion.
>> 
>> Hi Antony,
>> I can suggest you to use one or more ServiceTask.
>> 
>> For example:
>> 
>> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
>> <serviceTask id="beforeCreate" name="BeforeCreate" activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
>> <sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
>> <serviceTask id="create" name="Create" activiti:class="org.syncope.core.workflow.activiti.Create"/>
>> ......
>> <sequenceFlow id="flow7" sourceRef="... source ref..." targetRef="afterCreate"/>
>> <serviceTask id="afterCreate" name="AfterCreate" activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
>> <sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
>> <endEvent id="theEnd"/>
>> 
>> Regards,
>> F.
>> 
>> 
> 
> 


Re: Task Listeners in Syncope workflow for

Posted by Antony Pulicken <an...@gmail.com>.
Thanks Fabio. 'CreateBefore' is working now after making the change you
suggested.

"I should know where you call setStringAttributeValues
method; at first sight it seems correct."

I'm calling setStringAttributeValues() from the 'doExecute(final
DelegateExecution execution)' method in the 'UpdateBefore' service task
that I created/configured in the workflow and the update is still not
working. Please let me know in case you need more details.

Regards,
Antony.


On Wed, Mar 28, 2012 at 12:58 PM, Fabio Martelli
<fa...@gmail.com>wrote:

>
> Il giorno 28/mar/2012, alle ore 07.50, Antony Pulicken ha scritto:
>
> Hi Fabio,
>
> I have configured the ServiceTask(s) as we discussed and those are getting
> triggered appropriately. But what ever changes I'm making while
> create/update are not getting propagated to Syncope. Let me explain what I
> have done:
>
>    - Configured service task before the Create/Update tasks
>    - The tasks that I created are extending AbstractActivitiDelegate
>    (Thought it will help in case I need to make use of UserDataBinder, ConfDAO
>    etc)
>    - Let me give an example of the processing that I need to do in In the
>    doExecute method in my service task. I'm trying to extract the domain name
>    from the email and assign it to another filed that I created in the schema
>    by name 'domain'
>    - In case of createBefore, I'm retrieving the email value from UserTO
>
>           protected void doExecute(final DelegateExecution execution)
> throws Exception {
>             UserTO userTO = (UserTO)
> execution.getVariable(ActivitiUserWorkflowAdapter.USER_TO);
>             attrValue =
> userTO.getAttributeMap().get("email").getValues().get(0);
>             //extract domain .......
>              .......
>                AttributeTO attributeTO = new AttributeTO();
>             attributeTO.setValues(new
> ArrayList<String>(Arrays.asList(domain)));
>             userTO.getAttributeMap().put("domain", attributeTO);
>             execution.setVariable(
>                     ActivitiUserWorkflowAdapter.USER_TO, userTO);
>          }
>
>
> Hi Antony,
> you cannot add attributeTO to the map retrieved by getAttributeMap method.
> It's not your fault but getAttributeMap is a little bit misleading.
> Probably it should return an unmodifiable map.
> Please, add attributeTO by addAttribute method.
>
>
>    - Then the org.syncope.core.workflow.activiti.Create gets invoked and
>    I can' find the above changes in there
>    - In case of update, I tried the approach that we were using with the
>    old version and that also doesn't seem to work. Please see the code snippet
>    below:
>
>     public void setStringAttributeValues(final SyncopeUser user, final
> String attributeName,
>                                          final String[] attributeValues) {
>         logger.info("Setting attribute {} for user {} with value {}.",
> new Object[]{attributeName, user,
>                 attributeValues});
>         UAttr uAttr = user.getAttribute(attributeName);
>         if (uAttr == null) {
>             USchema attributeSchema = this.schemaDAO.find(attributeName,
> USchema.class);
>
>             uAttr = new UAttr();
>             uAttr.setSchema(attributeSchema);
>             uAttr.setOwner(user);
>             user.addAttribute(uAttr);
>
>         }
>         if (attributeValues == null) {
>             uAttr.setValues(new ArrayList<AbstractAttrValue>());
>         } else {
>             List<UAttrValue> valueList = new ArrayList<UAttrValue>();
>             for (String s : attributeValues) {
>                 UAttrValue uAttrValue = new UAttrValue();
>                 uAttrValue.setStringValue(s);
>                 valueList.add(uAttrValue);
>
>             }
>             uAttr.setValues(valueList);
>         }
>
>     }
>
>
> I should know where you call setStringAttributeValues method; at first
> sight it seems correct.
>
> Regards,
> F.
>
>
> Please let me know the correct approach for Create (CreateBefore) and
> Update (UpdateBefore).
>
> Regards,
> Antony.
> On Fri, Mar 23, 2012 at 2:28 PM, Antony Pulicken <
> antony.pulicken@gmail.com> wrote:
>
>> Thanks Fabio. Even I was thinking in the same direction. I will try that.
>>
>> Regards,
>> Antony.
>>
>>
>> On Fri, Mar 23, 2012 at 1:36 PM, Fabio Martelli <fabio.martelli@gmail.com
>> > wrote:
>>
>>>
>>> Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:
>>>
>>> > Hi,
>>> >
>>> > In the earlier version of Syncope, we could add pre and post functions
>>> for each 'action' in the Syncope OS Workflow XML for doing some additional
>>> processing/transformation of the data before/after the actions are executed.
>>> >
>>> > Does any one know how that can be done in Activiti ? I'm able to add
>>> listeners for the 'userTask' that listens to the events like
>>> create,complete, etc. But this doesn't seem to be working for
>>> 'serviceTask'. I will be posting this question in Activiti forums as well.
>>>  But please let me know in case any one has any suggestion.
>>>
>>> Hi Antony,
>>> I can suggest you to use one or more ServiceTask.
>>>
>>> For example:
>>>
>>> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
>>> <serviceTask id="beforeCreate" name="BeforeCreate"
>>> activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
>>> <sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
>>> <serviceTask id="create" name="Create"
>>> activiti:class="org.syncope.core.workflow.activiti.Create"/>
>>> ......
>>> <sequenceFlow id="flow7" sourceRef="... source ref..."
>>> targetRef="afterCreate"/>
>>> <serviceTask id="afterCreate" name="AfterCreate"
>>> activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
>>> <sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
>>> <endEvent id="theEnd"/>
>>>
>>> Regards,
>>> F.
>>
>>
>>
>
>

Re: Task Listeners in Syncope workflow for

Posted by Fabio Martelli <fa...@gmail.com>.
Il giorno 28/mar/2012, alle ore 07.50, Antony Pulicken ha scritto:

> Hi Fabio,
> 
> I have configured the ServiceTask(s) as we discussed and those are getting triggered appropriately. But what ever changes I'm making while create/update are not getting propagated to Syncope. Let me explain what I have done:
> Configured service task before the Create/Update tasks
> The tasks that I created are extending AbstractActivitiDelegate (Thought it will help in case I need to make use of UserDataBinder, ConfDAO etc)
> Let me give an example of the processing that I need to do in In the doExecute method in my service task. I'm trying to extract the domain name from the email and assign it to another filed that I created in the schema by name 'domain'
> In case of createBefore, I'm retrieving the email value from UserTO
>           protected void doExecute(final DelegateExecution execution) throws Exception {
>             UserTO userTO = (UserTO) execution.getVariable(ActivitiUserWorkflowAdapter.USER_TO);
>             attrValue = userTO.getAttributeMap().get("email").getValues().get(0);
>             //extract domain .......
>              .......
>                AttributeTO attributeTO = new AttributeTO();
>             attributeTO.setValues(new ArrayList<String>(Arrays.asList(domain)));
>             userTO.getAttributeMap().put("domain", attributeTO);
>             execution.setVariable(
>                     ActivitiUserWorkflowAdapter.USER_TO, userTO); 
>          }

Hi Antony,
you cannot add attributeTO to the map retrieved by getAttributeMap method.
It's not your fault but getAttributeMap is a little bit misleading. Probably it should return an unmodifiable map.
Please, add attributeTO by addAttribute method.

> Then the org.syncope.core.workflow.activiti.Create gets invoked and I can' find the above changes in there
> In case of update, I tried the approach that we were using with the old version and that also doesn't seem to work. Please see the code snippet below:
>     public void setStringAttributeValues(final SyncopeUser user, final String attributeName,
>                                          final String[] attributeValues) {
>         logger.info("Setting attribute {} for user {} with value {}.", new Object[]{attributeName, user,
>                 attributeValues});
>         UAttr uAttr = user.getAttribute(attributeName);
>         if (uAttr == null) {
>             USchema attributeSchema = this.schemaDAO.find(attributeName, USchema.class);
> 
>             uAttr = new UAttr();
>             uAttr.setSchema(attributeSchema);
>             uAttr.setOwner(user);
>             user.addAttribute(uAttr);
> 
>         }
>         if (attributeValues == null) {
>             uAttr.setValues(new ArrayList<AbstractAttrValue>());
>         } else {
>             List<UAttrValue> valueList = new ArrayList<UAttrValue>();
>             for (String s : attributeValues) {
>                 UAttrValue uAttrValue = new UAttrValue();
>                 uAttrValue.setStringValue(s);
>                 valueList.add(uAttrValue);
> 
>             }
>             uAttr.setValues(valueList);
>         }
> 
>     }

I should know where you call setStringAttributeValues method; at first sight it seems correct.

Regards,
F.

> 
> Please let me know the correct approach for Create (CreateBefore) and Update (UpdateBefore).
> 
> Regards,
> Antony.
> On Fri, Mar 23, 2012 at 2:28 PM, Antony Pulicken <an...@gmail.com> wrote:
> Thanks Fabio. Even I was thinking in the same direction. I will try that.
> 
> Regards,
> Antony.
> 
> 
> On Fri, Mar 23, 2012 at 1:36 PM, Fabio Martelli <fa...@gmail.com> wrote:
> 
> Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:
> 
> > Hi,
> >
> > In the earlier version of Syncope, we could add pre and post functions for each 'action' in the Syncope OS Workflow XML for doing some additional processing/transformation of the data before/after the actions are executed.
> >
> > Does any one know how that can be done in Activiti ? I'm able to add listeners for the 'userTask' that listens to the events like create,complete, etc. But this doesn't seem to be working for 'serviceTask'. I will be posting this question in Activiti forums as well.  But please let me know in case any one has any suggestion.
> 
> Hi Antony,
> I can suggest you to use one or more ServiceTask.
> 
> For example:
> 
> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
> <serviceTask id="beforeCreate" name="BeforeCreate" activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
> <sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
> <serviceTask id="create" name="Create" activiti:class="org.syncope.core.workflow.activiti.Create"/>
> ......
> <sequenceFlow id="flow7" sourceRef="... source ref..." targetRef="afterCreate"/>
> <serviceTask id="afterCreate" name="AfterCreate" activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
> <sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
> <endEvent id="theEnd"/>
> 
> Regards,
> F.
> 
> 


Re: Task Listeners in Syncope workflow for

Posted by Antony Pulicken <an...@gmail.com>.
Hi Fabio,

I have configured the ServiceTask(s) as we discussed and those are getting
triggered appropriately. But what ever changes I'm making while
create/update are not getting propagated to Syncope. Let me explain what I
have done:

   - Configured service task before the Create/Update tasks
   - The tasks that I created are extending AbstractActivitiDelegate
   (Thought it will help in case I need to make use of UserDataBinder, ConfDAO
   etc)
   - Let me give an example of the processing that I need to do in In the
   doExecute method in my service task. I'm trying to extract the domain name
   from the email and assign it to another filed that I created in the schema
   by name 'domain'
   - In case of createBefore, I'm retrieving the email value from UserTO

          protected void doExecute(final DelegateExecution execution)
throws Exception {
            UserTO userTO = (UserTO)
execution.getVariable(ActivitiUserWorkflowAdapter.USER_TO);
            attrValue =
userTO.getAttributeMap().get("email").getValues().get(0);
            //extract domain .......
             .......
               AttributeTO attributeTO = new AttributeTO();
            attributeTO.setValues(new
ArrayList<String>(Arrays.asList(domain)));
            userTO.getAttributeMap().put("domain", attributeTO);
            execution.setVariable(
                    ActivitiUserWorkflowAdapter.USER_TO, userTO);
         }

   - Then the org.syncope.core.workflow.activiti.Create gets invoked and I
   can' find the above changes in there
   - In case of update, I tried the approach that we were using with the
   old version and that also doesn't seem to work. Please see the code snippet
   below:

    public void setStringAttributeValues(final SyncopeUser user, final
String attributeName,
                                         final String[] attributeValues) {
        logger.info("Setting attribute {} for user {} with value {}.", new
Object[]{attributeName, user,
                attributeValues});
        UAttr uAttr = user.getAttribute(attributeName);
        if (uAttr == null) {
            USchema attributeSchema = this.schemaDAO.find(attributeName,
USchema.class);

            uAttr = new UAttr();
            uAttr.setSchema(attributeSchema);
            uAttr.setOwner(user);
            user.addAttribute(uAttr);

        }
        if (attributeValues == null) {
            uAttr.setValues(new ArrayList<AbstractAttrValue>());
        } else {
            List<UAttrValue> valueList = new ArrayList<UAttrValue>();
            for (String s : attributeValues) {
                UAttrValue uAttrValue = new UAttrValue();
                uAttrValue.setStringValue(s);
                valueList.add(uAttrValue);

            }
            uAttr.setValues(valueList);
        }

    }

Please let me know the correct approach for Create (CreateBefore) and
Update (UpdateBefore).

Regards,
Antony.
On Fri, Mar 23, 2012 at 2:28 PM, Antony Pulicken
<an...@gmail.com>wrote:

> Thanks Fabio. Even I was thinking in the same direction. I will try that.
>
> Regards,
> Antony.
>
>
> On Fri, Mar 23, 2012 at 1:36 PM, Fabio Martelli <fa...@gmail.com>wrote:
>
>>
>> Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:
>>
>> > Hi,
>> >
>> > In the earlier version of Syncope, we could add pre and post functions
>> for each 'action' in the Syncope OS Workflow XML for doing some additional
>> processing/transformation of the data before/after the actions are executed.
>> >
>> > Does any one know how that can be done in Activiti ? I'm able to add
>> listeners for the 'userTask' that listens to the events like
>> create,complete, etc. But this doesn't seem to be working for
>> 'serviceTask'. I will be posting this question in Activiti forums as well.
>>  But please let me know in case any one has any suggestion.
>>
>> Hi Antony,
>> I can suggest you to use one or more ServiceTask.
>>
>> For example:
>>
>> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
>> <serviceTask id="beforeCreate" name="BeforeCreate"
>> activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
>> <sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
>> <serviceTask id="create" name="Create"
>> activiti:class="org.syncope.core.workflow.activiti.Create"/>
>> ......
>> <sequenceFlow id="flow7" sourceRef="... source ref..."
>> targetRef="afterCreate"/>
>> <serviceTask id="afterCreate" name="AfterCreate"
>> activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
>> <sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
>> <endEvent id="theEnd"/>
>>
>> Regards,
>> F.
>
>
>

Re: Task Listeners in Syncope workflow for

Posted by Antony Pulicken <an...@gmail.com>.
Thanks Fabio. Even I was thinking in the same direction. I will try that.

Regards,
Antony.

On Fri, Mar 23, 2012 at 1:36 PM, Fabio Martelli <fa...@gmail.com>wrote:

>
> Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:
>
> > Hi,
> >
> > In the earlier version of Syncope, we could add pre and post functions
> for each 'action' in the Syncope OS Workflow XML for doing some additional
> processing/transformation of the data before/after the actions are executed.
> >
> > Does any one know how that can be done in Activiti ? I'm able to add
> listeners for the 'userTask' that listens to the events like
> create,complete, etc. But this doesn't seem to be working for
> 'serviceTask'. I will be posting this question in Activiti forums as well.
>  But please let me know in case any one has any suggestion.
>
> Hi Antony,
> I can suggest you to use one or more ServiceTask.
>
> For example:
>
> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
> <serviceTask id="beforeCreate" name="BeforeCreate"
> activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
> <sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
> <serviceTask id="create" name="Create"
> activiti:class="org.syncope.core.workflow.activiti.Create"/>
> ......
> <sequenceFlow id="flow7" sourceRef="... source ref..."
> targetRef="afterCreate"/>
> <serviceTask id="afterCreate" name="AfterCreate"
> activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
> <sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
> <endEvent id="theEnd"/>
>
> Regards,
> F.

Re: Task Listeners in Syncope workflow for

Posted by Fabio Martelli <fa...@gmail.com>.
Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:

> Hi,
> 
> In the earlier version of Syncope, we could add pre and post functions for each 'action' in the Syncope OS Workflow XML for doing some additional processing/transformation of the data before/after the actions are executed.
> 
> Does any one know how that can be done in Activiti ? I'm able to add listeners for the 'userTask' that listens to the events like create,complete, etc. But this doesn't seem to be working for 'serviceTask'. I will be posting this question in Activiti forums as well.  But please let me know in case any one has any suggestion.

Hi Antony,
I can suggest you to use one or more ServiceTask.

For example:

<sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
<serviceTask id="beforeCreate" name="BeforeCreate" activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
<sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
<serviceTask id="create" name="Create" activiti:class="org.syncope.core.workflow.activiti.Create"/>
......
<sequenceFlow id="flow7" sourceRef="... source ref..." targetRef="afterCreate"/>
<serviceTask id="afterCreate" name="AfterCreate" activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
<sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
<endEvent id="theEnd"/>

Regards,
F.