You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by nu...@apache.org on 2007/08/03 19:51:50 UTC
svn commit: r562531 - in
/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline:
Feeder.java Pipeline.java PipelineLifecycleJob.java
Author: nuttycom
Date: Fri Aug 3 10:51:49 2007
New Revision: 562531
URL: http://svn.apache.org/viewvc?view=rev&rev=562531
Log:
Initial import of PipelineLifecycleJob; minor documentation fixes.
Added:
commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/PipelineLifecycleJob.java (with props)
Modified:
commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Feeder.java
commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java
Modified: commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Feeder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Feeder.java?view=diff&rev=562531&r1=562530&r2=562531
==============================================================================
--- commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Feeder.java (original)
+++ commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Feeder.java Fri Aug 3 10:51:49 2007
@@ -17,16 +17,13 @@
package org.apache.commons.pipeline;
-import java.util.EventObject;
/**
* This interface represents a data channel into which objects can be fed.
* Feeders act as intermediaries between stages in a pipeline and the drivers
- * for subsequent stages. Each {@link StageDriver} implementation will
+ * for subsequent stages. Each {@link StageDriver} implementation will
* ordinarily provide a custom Feeder implementation that integrates receiving
* objects with its internal stage processing workflow.
- *
- *
*/
public interface Feeder {
/**
Modified: commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java
URL: http://svn.apache.org/viewvc/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java?view=diff&rev=562531&r1=562530&r2=562531
==============================================================================
--- commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java (original)
+++ commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java Fri Aug 3 10:51:49 2007
@@ -25,8 +25,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.commons.pipeline.driver.SynchronousStageDriver;
import org.apache.commons.pipeline.validation.PipelineValidator;
import org.apache.commons.pipeline.validation.ValidationException;
import org.apache.commons.pipeline.validation.ValidationFailure;
@@ -49,10 +48,10 @@
public static final String MAIN_BRANCH = "main";
//The logger used for reporting by this pipeline
- private final Log log = LogFactory.getLog(Pipeline.class);
+ //private final Log log = LogFactory.getLog(Pipeline.class);
// List of stages in the pipeline, encapsulated in the drivers
- // that will be used to run them.
+ // that will be used to onStart them.
private final LinkedList<StageDriver> drivers;
private final Map<Stage, StageDriver> driverMap;
@@ -76,7 +75,10 @@
// Global environment variables
private Map<String,Object> env = Collections.synchronizedMap(new HashMap<String,Object>());
-
+
+ // List of jobs to be run at defined points in pipeline lifecycle
+ private Collection<PipelineLifecycleJob> lifecycleJobs = new ArrayList<PipelineLifecycleJob>();
+
/**
* Creates and initializes a new Pipeline.
*/
@@ -89,18 +91,14 @@
}
/**
- * Adds a {@link StageEventListener} to the pipline that will be notified by calls
- * to {@link Stage#raise(StageEvent)}.
- * @param listener The listener to be notified.
+ * {@inheritDoc}
*/
public void registerListener(StageEventListener listener) {
listeners.add(listener);
}
/**
- * Returns the collection of {@link StageEventListener}s registered with the
- * context.
- * @return The collection of registered listeners.
+ * {@inheritDoc}
*/
public Collection<StageEventListener> getRegisteredListeners() {
return this.listeners;
@@ -136,10 +134,7 @@
}
/**
- * This method is used by a stage driver to pass data from one stage to the next.
- * @return the feeder for the downstream stage, or null if no downstream
- * stage exists.
- * @param stage the stage for which the downstream feeder will be retrieved
+ * {@inheritDoc}
*/
public Feeder getDownstreamFeeder(Stage stage) {
if (stage == null) throw new IllegalArgumentException("Unable to look up downstream feeder for null stage.");
@@ -158,23 +153,18 @@
}
/**
- * Look up and return the source feeder for the specified pipeline branch.
- * @param branch the string identifier of the branch for which a feeder will be returned
- * @return the feeder for the specified branch
+ * {@inheritDoc}
*/
public Feeder getBranchFeeder(String branch) {
if (!getBranches().containsKey(branch)) {
throw new IllegalStateException("Unable to find branch in pipeline: '" + branch + "'");
}
-
+
return branches.get(branch).getSourceFeeder();
}
/**
- * Global environment accessor method.
- *
- * @return the global environment value corresponding to the specified
- * key, or null if no such key is found.
+ * {@inheritDoc}
*/
public Object getEnv(String key) {
return this.env.get(key);
@@ -322,6 +312,13 @@
}
/**
+ * Adds a job to be onStart on startup to the pipeline.
+ */
+ public void addLifecycleJob(PipelineLifecycleJob job) {
+ this.lifecycleJobs.add(job);
+ }
+
+ /**
* This method iterates over the stages in the pipeline, looking up a
* {@link StageDriver} for each stage and using that driver to start the stage.
* Startups may occur sequentially or in parallel, depending upon the stage driver
@@ -331,6 +328,7 @@
* @throws org.apache.commons.pipeline.StageException Thrown if there is an error during pipeline startup
*/
public void start() throws StageException {
+ for (PipelineLifecycleJob job : lifecycleJobs) job.onStart(this);
for (StageDriver driver: this.drivers) driver.start();
for (Pipeline branch : branches.values()) branch.start();
}
@@ -346,13 +344,9 @@
* @throws org.apache.commons.pipeline.StageException Thrown if there is an unhandled error during stage shutdown
*/
public void finish() throws StageException {
- for (StageDriver driver: this.drivers){
- driver.finish();
- }
-
- for (Pipeline pipeline : branches.values()) {
- pipeline.finish();
- }
+ for (StageDriver driver: this.drivers) driver.finish();
+ for (Pipeline pipeline : branches.values()) pipeline.finish();
+ for (PipelineLifecycleJob job : lifecycleJobs) job.onFinish(this);
}
/**
@@ -384,7 +378,7 @@
public void setValidator(PipelineValidator validator) {
this.validator = validator;
}
-
+
/**
* Returns the parent of this pipeline, if it is a branch
* @return parent Pipeline, or null if this is the main pipeline
Added: commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/PipelineLifecycleJob.java
URL: http://svn.apache.org/viewvc/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/PipelineLifecycleJob.java?view=auto&rev=562531
==============================================================================
--- commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/PipelineLifecycleJob.java (added)
+++ commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/PipelineLifecycleJob.java Fri Aug 3 10:51:49 2007
@@ -0,0 +1,38 @@
+/*
+ * 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.commons.pipeline;
+
+/**
+ * This interface specifies a job or set of tasks that are to be run at a
+ * well-specified points in the pipeline lifecycle. It is intended to be a
+ * means by which third-party plugins can be added to the pipeline framework.
+ */
+public interface PipelineLifecycleJob {
+
+ /**
+ * This is called by the pipeline engine once the pipeline is fully configured,
+ * just prior to stage driver start.
+ */
+ public void onStart(Pipeline pipeline);
+
+ /**
+ * This is called by the pipeline engine after all data processing has completed.
+ */
+ public void onFinish(Pipeline pipeline);
+
+}
Propchange: commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/PipelineLifecycleJob.java
------------------------------------------------------------------------------
svn:eol-style = native