Package org.jboss.seam.async

Source Code of org.jboss.seam.async.Asynchronous

package org.jboss.seam.async;

import java.io.Serializable;

import org.jboss.seam.bpm.BusinessProcess;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.contexts.Lifecycle;
import org.jboss.seam.core.Init;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;

/**
* Something that happens asynchronously, and with a full
* set of Seam contexts, including propagation of the
* business process and task instances.
*
* @author Gavin King
*
*/
public abstract class Asynchronous implements Serializable
{
   private static final LogProvider log = Logging.getLogProvider(Asynchronous.class);
   static final long serialVersionUID = -551286304424595765L;
  
   private Long processId;
   private Long taskId;
  
   protected Asynchronous()
   {
      if ( Init.instance().isJbpmInstalled() )
      {
         BusinessProcess businessProcess = BusinessProcess.instance();
         processId = businessProcess.getProcessId();
         taskId = BusinessProcess.instance().getTaskId();
      }       
   }
  
   public void execute(Object timer)
   {
      boolean createContexts = !Contexts.isEventContextActive() && !Contexts.isApplicationContextActive();
      if (createContexts) Lifecycle.beginCall();
      Contexts.getEventContext().set(AbstractDispatcher.EXECUTING_ASYNCHRONOUS_CALL, true);
      try
      {
         executeInContexts(timer);
      }
      finally
      {
         Contexts.getEventContext().remove(AbstractDispatcher.EXECUTING_ASYNCHRONOUS_CALL);
         if (createContexts) Lifecycle.endCall();
      }
     
   }

   private void executeInContexts(Object timer)
   {
      if (taskId!=null)
      {
         BusinessProcess.instance().resumeTask(taskId);
      }
      else if (processId!=null)
      {
         BusinessProcess.instance().resumeProcess(processId);
      }
     
      if (timer!=null)
      {
         Contexts.getEventContext().set("timer", timer);
      }
     
      if ( log.isDebugEnabled() )
      {
         log.debug("executing: " + this);
      }
   
      call();
   }
  
   protected abstract void call();
}
TOP

Related Classes of org.jboss.seam.async.Asynchronous

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.