Package org.jbpm.pvm.internal.wire.descriptor

Source Code of org.jbpm.pvm.internal.wire.descriptor.JobExecutorDescriptor$JobExecutorStopper

/**
* Copyright (C) 2007  Bull S. A. S.
* Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation
* version 2.1 of the License.
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA  02110-1301, USA.
**/
package org.jbpm.pvm.internal.wire.descriptor;

import org.jbpm.api.JbpmException;
import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.jobexecutor.JobExecutor;
import org.jbpm.pvm.internal.util.Listener;
import org.jbpm.pvm.internal.wire.WireContext;

/**
* @author Pascal Verdage
*
* Descriptor for the JobExecutor.
* If it is automatically started, a listener is created to stop it when
* the environementFactory is closed
* @see org.jbpm.pvm.internal.env.EnvironmentFactory
* @see org.jbpm.pvm.internal.wire.binding.JobExecutorBinding
*/
public class JobExecutorDescriptor extends ObjectDescriptor {
  private static final long serialVersionUID = 1L;
  private static final Log log = Log.getLog(JobExecutorDescriptor.class.getName());

 
  private boolean autoStart = false;

  public JobExecutorDescriptor() {
    super(JobExecutor.class.getName());
  }

  public Object construct(WireContext wireContext) {
    JobExecutor jobExecutor = (JobExecutor) super.construct(wireContext);
    if (autoStart) {
      wireContext.addListener(new JobExecutorStopper(jobExecutor));
    }
    return jobExecutor;
  }

  public void setAutoStart(boolean autoStart) {
    this.autoStart = autoStart;
  }
 
  public static class JobExecutorStopper implements Listener {
    JobExecutor jobExecutor;
    public JobExecutorStopper(JobExecutor jobExecutor) {
      this.jobExecutor = jobExecutor;
    }
    public void event(Object source, String eventName, Object info) {
      if (WireContext.EVENT_CLOSE.equals(eventName)) {
        log.trace("stopping jobExecutor");
        // wait to prevent from calling stop before the run method (activation)
        // has been called (after a system context switching)
        //TODO: do not wait
        try {
          Thread.sleep(200);
        } catch (InterruptedException e) {
          e.printStackTrace();
          throw new JbpmException("exception while stopping JobExecutor");
        }
        jobExecutor.stop(true);
      }
    }
  }
}
TOP

Related Classes of org.jbpm.pvm.internal.wire.descriptor.JobExecutorDescriptor$JobExecutorStopper

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.