/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.bpm;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.util.Work;
/**
* A Seam component that allows injection of the current
* jBPM ProcessInstance.
*
* @author Gavin King
*/
@Scope(ScopeType.STATELESS)
@Name("org.jboss.seam.bpm.processInstance")
@BypassInterceptors
@Install(precedence=BUILT_IN, dependencies="org.jboss.seam.bpm.jbpm")
public class ProcessInstance
{
@Unwrap
public org.jbpm.graph.exe.ProcessInstance getProcessInstance() throws Exception
{
if ( !Contexts.isConversationContextActive() ) return null;
return new Work<org.jbpm.graph.exe.ProcessInstance>()
{
@Override
protected org.jbpm.graph.exe.ProcessInstance work() throws Exception
{
Long processId = BusinessProcess.instance().getProcessId();
if (processId!=null)
{
//TODO: do we need to cache this??
//return ManagedJbpmContext.instance().getProcessInstanceForUpdate(processId);
//JBSEAM-4629:
return ManagedJbpmContext.instance().getProcessInstance(processId);
}
else
{
return null;
}
}
}.workInTransaction();
}
public static org.jbpm.graph.exe.ProcessInstance instance()
{
if ( !Contexts.isConversationContextActive() || !BusinessProcess.instance().hasCurrentProcess() ) return null; //so we don't start a txn
return (org.jbpm.graph.exe.ProcessInstance) Component.getInstance(ProcessInstance.class, ScopeType.STATELESS);
}
}