Hi Paul,

Thanks a lot for your suggestions.

I agree, the second approach is probably the way to go. Although, would it be 
more beneficial to save and return a single 'event' ID instead of multiple 
workflow instance IDs? I'm under the assumption that workflow behaves something 
akin to a job submission system. This assumption may be incorrect, but it might 
be beneficial to just get back a single unique ID for the launch of a workflow 
top-level event as opposed to getting back a list of IDs...

So perhaps within XmlRpcWorkflowManager.handleEvent, we could generate and save 
a unique ID for the single event? This ID could be queried by a client.

Thanks!
rishi

On Apr 25, 2011, at 1:25 PM, Ramirez, Paul M (388J) wrote:

> Hey All,
> 
> Thought this might be useful to the larger OODT community.
> 
> 
> 
> Hey Rishi,
> 
> I talked with Mike about this last week but never got back to him with a 
> concrete answer. However, after putting some more thought into it there are 2 
> approaches I can think of.
> 
> First Approach:
> 1) Put some type of user generated id in the metadata object that gets into 
> the workflow instance metadata
> 2) Page through the lists of workflow instances that the workflow manager has 
> and identify those with your tag. Remember an event can kick off more than 
> one workflow.
> 3) Any that have metadata that match your user generated id are your workflow 
> instances you're interested in.
> 
> Second Approach:
> 1) Add a new method to the client and server so that list of workflow 
> instance ids is returned
> 
> Looking at XmlRpcWorkflowManager.java
> 
> 
>    public boolean handleEvent(String eventName, Hashtable metadata)
>            throws RepositoryException, EngineException {
>        LOG.log(Level.INFO<http://Level.INFO/>, "WorkflowManager: Received 
> event: " + eventName);
> 
>        List workflows = null;
> 
>        try {
>            workflows = repo.getWorkflowsForEvent(eventName);
>        } catch (Exception e) {
>            e.printStackTrace();
>            throw new RepositoryException(
>                    "Exception getting workflows associated with event: "
>                            + eventName + ": Message: " + e.getMessage());
>        }
> 
>        if (workflows != null) {
>            for (Iterator i = workflows.iterator(); i.hasNext();) {
>                Workflow w = (Workflow) i.next();
>                LOG.log(Level.INFO<http://Level.INFO/>, "WorkflowManager: 
> Workflow " + w.getName()
>                        + " retrieved for event " + eventName);
> 
>                Metadata m = new Metadata();
>                m.addMetadata(metadata);
> 
>                try {
>                    engine.startWorkflow(w, m); // This returns a workflow 
> instance which has an id that could be saved and returned
>                } catch (Exception e) {
>                    e.printStackTrace();
>                    throw new EngineException(
>                            "Engine exception when starting workflow: "
>                                    + w.getName() + ": Message: "
>                                    + e.getMessage());
>                }
>            }
>            return true;
>        } else
>            return false;
>    }
> 
> This should probably be a new method on both the client and server and should 
> be supplied as a patch. The method would return either List<String> or 
> List<WorkflowInstance> probably the latter but maybe someone else will chime 
> in. Of course this would have to have the accompanying client method but it 
> shouldn't be that big of an update.
> 
> My instincts would say that second approach is probably the way to go.
> 
> 
> Thanks,
> 
> Paul
> 
> 
> 
> On Apr 25, 2011, at 11:39 AM, Verma, Rishi (317I) wrote:
> 
> 
>   return ((Boolean) client
>                    .execute("workflowmgr.handleEvent", argList))
>                    .booleanValue();
> 
> Is there a way to obtain and query for a workflow 'instance ID'?
> 
> Thanks!
> Rishi & Mike
> 
> 

Reply via email to