/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.nifi.controller; import java.util.concurrent.TimeUnit; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.ProcessSession; import org.apache.nifi.processor.ProcessSessionFactory; import org.apache.nifi.processor.exception.ProcessException; public interface Triggerable { public static final long MINIMUM_SCHEDULING_NANOS = 1L; /** * <p> * The method called when this processor is triggered to operate by the * controller. This method may be called concurrently from different * threads. When this method is called depends on how this processor is * configured within a controller to be triggered (timing or event * based).</p> * * <p> * The processor may commit, roll back, or allow the framework to * automatically manage the session. If the sessions are to be managed by * the framework (recommended) then what it will do depends on several * factors. If the method call returns due to an exception then the session * will be rolled back. If the method returns normally then the session will * be committed or the framework may use the session again for another * processor down stream</p> * * @param context in which the component is triggered * @param sessionFactory used to generate {@link ProcessSession}s to use for * operating on flow files within the repository * * @throws ProcessException if processing did not complete normally though * indicates the problem is an understood potential outcome of processing. * The controller/caller will handle these exceptions gracefully such as * logging, etc.. If another type of exception is allowed to propagate the * controller may no longer trigger this processor to operate as this would * indicate a probable coding defect. */ void onTrigger(ProcessContext context, ProcessSessionFactory sessionFactory) throws ProcessException; /** * Determines the number of concurrent tasks that may be running for this * <code>Triggerable</code>. * * @param taskCount a number of concurrent tasks this processor may have * running * @throws IllegalArgumentException if the given value is less than 1 */ void setMaxConcurrentTasks(int taskCount); /** * @return the number of tasks that may execute concurrently for this * <code>Triggerable</code>. */ int getMaxConcurrentTasks(); /** * Indicates the {@link ScheduledState} of this <code>Triggerable</code>. A * value of stopped does NOT indicate that the <code>Triggerable</code> has * no active threads, only that it is not currently scheduled to be given * any more threads. To determine whether or not the * <code>Triggerable</code> has any active threads, see * {@link ProcessScheduler#getActiveThreadCount(nifi.connectable.Connectable)}. * * @return the schedule state */ ScheduledState getScheduledState(); /** * Indicates whether or not this <code>Triggerable</code> is "running". It * is considered "running" if it is scheduled to run OR if it is no longer * scheduled to be given threads but the remaining threads from the last * invocation of {@link #onTrigger(ProcessContext, ProcessSessionFactory)} * have not yet returned * * @return true if running;false otherwise */ boolean isRunning(); /** * @param timeUnit for the scheduling period of the component * @return the amount of time between each scheduling period */ long getSchedulingPeriod(TimeUnit timeUnit); /** * @return a string representation of the time between each scheduling * period */ String getSchedulingPeriod(); /** * Updates how often this Triggerable should be triggered to run * * @param schedulingPeriod to set */ void setScheduldingPeriod(String schedulingPeriod); }