nifi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcgil...@apache.org
Subject svn commit: r1704031 [8/11] - in /nifi/site/trunk/docs/nifi-docs: ./ components/org.apache.nifi.dbcp.DBCPConnectionPool/ components/org.apache.nifi.processors.avro.ConvertAvroToJSON/ components/org.apache.nifi.processors.aws.s3.FetchS3Object/ component...
Date Sat, 19 Sep 2015 13:57:06 GMT
Modified: nifi/site/trunk/docs/nifi-docs/html/developer-guide.html
URL: http://svn.apache.org/viewvc/nifi/site/trunk/docs/nifi-docs/html/developer-guide.html?rev=1704031&r1=1704030&r2=1704031&view=diff
==============================================================================
--- nifi/site/trunk/docs/nifi-docs/html/developer-guide.html (original)
+++ nifi/site/trunk/docs/nifi-docs/html/developer-guide.html Sat Sep 19 13:57:03 2015
@@ -455,86 +455,86 @@ body.book #toc,body.book #preamble,body.
 <div id="toc" class="toc">
 <div id="toctitle">Table of Contents</div>
 <ul class="sectlevel1">
-<li><a href="#introduction">Introduction</a></li>
-<li><a href="#components">NiFi Components</a></li>
-<li><a href="#processor_api">Processor API</a>
+<li><a href="developer-guide.html#introduction">Introduction</a></li>
+<li><a href="developer-guide.html#components">NiFi Components</a></li>
+<li><a href="developer-guide.html#processor_api">Processor API</a>
 <ul class="sectlevel2">
-<li><a href="#supporting_api">Supporting API</a></li>
-<li><a href="#AbstractProcessor">AbstractProcessor API</a></li>
-<li><a href="#component-lifecycle">Component Lifecycle</a></li>
-<li><a href="#reporting-processor-activity">Reporting Processor Activity</a></li>
+<li><a href="developer-guide.html#supporting_api">Supporting API</a></li>
+<li><a href="developer-guide.html#AbstractProcessor">AbstractProcessor API</a></li>
+<li><a href="developer-guide.html#component-lifecycle">Component Lifecycle</a></li>
+<li><a href="developer-guide.html#reporting-processor-activity">Reporting Processor Activity</a></li>
 </ul>
 </li>
-<li><a href="#documenting-a-component">Documenting a Component</a>
+<li><a href="developer-guide.html#documenting-a-component">Documenting a Component</a>
 <ul class="sectlevel2">
-<li><a href="#documenting-properties">Documenting Properties</a></li>
-<li><a href="#documenting-relationships">Documenting Relationships</a></li>
-<li><a href="#documenting-capability-and-keywords">Documenting Capability and Keywords</a></li>
-<li><a href="#documenting-flowfile-attribute-interaction">Documenting FlowFile Attribute Interaction</a></li>
-<li><a href="#documenting-related-components">Documenting Related Components</a></li>
-<li><a href="#advanced-documentation">Advanced Documentation</a></li>
+<li><a href="developer-guide.html#documenting-properties">Documenting Properties</a></li>
+<li><a href="developer-guide.html#documenting-relationships">Documenting Relationships</a></li>
+<li><a href="developer-guide.html#documenting-capability-and-keywords">Documenting Capability and Keywords</a></li>
+<li><a href="developer-guide.html#documenting-flowfile-attribute-interaction">Documenting FlowFile Attribute Interaction</a></li>
+<li><a href="developer-guide.html#documenting-related-components">Documenting Related Components</a></li>
+<li><a href="developer-guide.html#advanced-documentation">Advanced Documentation</a></li>
 </ul>
 </li>
-<li><a href="#common-processor-patterns">Common Processor Patterns</a>
+<li><a href="developer-guide.html#common-processor-patterns">Common Processor Patterns</a>
 <ul class="sectlevel2">
-<li><a href="#ingress">Data Ingress</a></li>
-<li><a href="#data-egress">Data Egress</a></li>
-<li><a href="#route-based-on-content-one-to-one">Route Based on Content (One-to-One)</a></li>
-<li><a href="#route-based-on-content-one-to-many">Route Based on Content (One-to-Many)</a></li>
-<li><a href="#route-streams-based-on-content-one-to-many">Route Streams Based on Content (One-to-Many)</a></li>
-<li><a href="#route-based-on-attributes">Route Based on Attributes</a></li>
-<li><a href="#split-content-one-to-many">Split Content (One-to-Many)</a></li>
-<li><a href="#update-attributes-based-on-content">Update Attributes Based on Content</a></li>
-<li><a href="#enrich-modify-content">Enrich/Modify Content</a></li>
+<li><a href="developer-guide.html#ingress">Data Ingress</a></li>
+<li><a href="developer-guide.html#data-egress">Data Egress</a></li>
+<li><a href="developer-guide.html#route-based-on-content-one-to-one">Route Based on Content (One-to-One)</a></li>
+<li><a href="developer-guide.html#route-based-on-content-one-to-many">Route Based on Content (One-to-Many)</a></li>
+<li><a href="developer-guide.html#route-streams-based-on-content-one-to-many">Route Streams Based on Content (One-to-Many)</a></li>
+<li><a href="developer-guide.html#route-based-on-attributes">Route Based on Attributes</a></li>
+<li><a href="developer-guide.html#split-content-one-to-many">Split Content (One-to-Many)</a></li>
+<li><a href="developer-guide.html#update-attributes-based-on-content">Update Attributes Based on Content</a></li>
+<li><a href="developer-guide.html#enrich-modify-content">Enrich/Modify Content</a></li>
 </ul>
 </li>
-<li><a href="#error-handling">Error Handling</a>
+<li><a href="developer-guide.html#error-handling">Error Handling</a>
 <ul class="sectlevel2">
-<li><a href="#exceptions-within-the-processor">Exceptions within the Processor</a></li>
-<li><a href="#exceptions-within-a-callback-ioexception-runtimeexception">Exceptions within a callback: IOException, RuntimeException</a></li>
-<li><a href="#penalization-vs-yielding">Penalization vs. Yielding</a></li>
-<li><a href="#session-rollback">Session Rollback</a></li>
+<li><a href="developer-guide.html#exceptions-within-the-processor">Exceptions within the Processor</a></li>
+<li><a href="developer-guide.html#exceptions-within-a-callback-ioexception-runtimeexception">Exceptions within a callback: IOException, RuntimeException</a></li>
+<li><a href="developer-guide.html#penalization-vs-yielding">Penalization vs. Yielding</a></li>
+<li><a href="developer-guide.html#session-rollback">Session Rollback</a></li>
 </ul>
 </li>
-<li><a href="#general-design-considerations">General Design Considerations</a>
+<li><a href="developer-guide.html#general-design-considerations">General Design Considerations</a>
 <ul class="sectlevel2">
-<li><a href="#consider-the-user">Consider the User</a></li>
-<li><a href="#cohesion-and-reusability">Cohesion and Reusability</a></li>
-<li><a href="#naming-convensions">Naming Conventions</a></li>
-<li><a href="#processor-behavior-annotations">Processor Behavior Annotations</a></li>
-<li><a href="#data-buffering">Data Buffering</a></li>
+<li><a href="developer-guide.html#consider-the-user">Consider the User</a></li>
+<li><a href="developer-guide.html#cohesion-and-reusability">Cohesion and Reusability</a></li>
+<li><a href="developer-guide.html#naming-convensions">Naming Conventions</a></li>
+<li><a href="developer-guide.html#processor-behavior-annotations">Processor Behavior Annotations</a></li>
+<li><a href="developer-guide.html#data-buffering">Data Buffering</a></li>
 </ul>
 </li>
-<li><a href="#controller-services">Controller Services</a>
+<li><a href="developer-guide.html#controller-services">Controller Services</a>
 <ul class="sectlevel2">
-<li><a href="#developing-controller-service">Developing a ControllerService</a></li>
-<li><a href="#interacting-with-controller-service">Interacting with a ControllerService</a></li>
+<li><a href="developer-guide.html#developing-controller-service">Developing a ControllerService</a></li>
+<li><a href="developer-guide.html#interacting-with-controller-service">Interacting with a ControllerService</a></li>
 </ul>
 </li>
-<li><a href="#reporting-tasks">Reporting Tasks</a>
+<li><a href="developer-guide.html#reporting-tasks">Reporting Tasks</a>
 <ul class="sectlevel2">
-<li><a href="#developing-a-reporting-task">Developing a Reporting Task</a></li>
+<li><a href="developer-guide.html#developing-a-reporting-task">Developing a Reporting Task</a></li>
 </ul>
 </li>
-<li><a href="#testing">Testing</a>
+<li><a href="developer-guide.html#testing">Testing</a>
 <ul class="sectlevel2">
-<li><a href="#instantiate-testrunner">Instantiate TestRunner</a></li>
-<li><a href="#add-controllerservices">Add ControllerServices</a></li>
-<li><a href="#set-property-values">Set Property Values</a></li>
-<li><a href="#enqueue-flowfiles">Enqueue FlowFiles</a></li>
-<li><a href="#run-the-processor">Run the Processor</a></li>
-<li><a href="#validate-output">Validate Output</a></li>
-<li><a href="#mocking-external-resources">Mocking External Resources</a></li>
-<li><a href="#additional-testing-capabilities">Additional Testing Capabilities</a></li>
+<li><a href="developer-guide.html#instantiate-testrunner">Instantiate TestRunner</a></li>
+<li><a href="developer-guide.html#add-controllerservices">Add ControllerServices</a></li>
+<li><a href="developer-guide.html#set-property-values">Set Property Values</a></li>
+<li><a href="developer-guide.html#enqueue-flowfiles">Enqueue FlowFiles</a></li>
+<li><a href="developer-guide.html#run-the-processor">Run the Processor</a></li>
+<li><a href="developer-guide.html#validate-output">Validate Output</a></li>
+<li><a href="developer-guide.html#mocking-external-resources">Mocking External Resources</a></li>
+<li><a href="developer-guide.html#additional-testing-capabilities">Additional Testing Capabilities</a></li>
 </ul>
 </li>
-<li><a href="#nars">NiFi Archives (NARs)</a></li>
-<li><a href="#how-to-contribute-to-apache-nifi">How to contribute to Apache NiFi</a>
+<li><a href="developer-guide.html#nars">NiFi Archives (NARs)</a></li>
+<li><a href="developer-guide.html#how-to-contribute-to-apache-nifi">How to contribute to Apache NiFi</a>
 <ul class="sectlevel2">
-<li><a href="#technologies">Technologies</a></li>
-<li><a href="#where-to-start">Where to Start?</a></li>
-<li><a href="#supplying-a-contribution">Supplying a contribution</a></li>
-<li><a href="#contact-us">Contact Us</a></li>
+<li><a href="developer-guide.html#technologies">Technologies</a></li>
+<li><a href="developer-guide.html#where-to-start">Where to Start?</a></li>
+<li><a href="developer-guide.html#supplying-a-contribution">Supplying a contribution</a></li>
+<li><a href="developer-guide.html#contact-us">Contact Us</a></li>
 </ul>
 </li>
 </ul>
@@ -542,7 +542,7 @@ body.book #toc,body.book #preamble,body.
 </div>
 <div id="content">
 <div class="sect1">
-<h2 id="introduction"><a class="anchor" href="#introduction"></a>Introduction</h2>
+<h2 id="introduction"><a class="anchor" href="developer-guide.html#introduction"></a>Introduction</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The intent of this Developer Guide is to provide the reader with the information needed to understand how Apache NiFi
@@ -559,7 +559,7 @@ and the <a href="user-guide.html">NiFi U
 </div>
 </div>
 <div class="sect1">
-<h2 id="components"><a class="anchor" href="#components"></a>NiFi Components</h2>
+<h2 id="components"><a class="anchor" href="developer-guide.html#components"></a>NiFi Components</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>NiFi provides several extension points to provide developers the
@@ -574,7 +574,7 @@ high-level description of the most commo
 <ul>
 <li>
 <p>The Processor interface is the mechanism through which NiFi exposes access to
-<a href="#flowfile">FlowFile</a>s, their attributes, and their content. The Processor is the basic building
+<a href="developer-guide.html#flowfile">FlowFile</a>s, their attributes, and their content. The Processor is the basic building
 block used to comprise a NiFi dataflow. This interface is used to accomplish
 all of the following tasks:</p>
 <div class="ulist">
@@ -646,7 +646,7 @@ many different Processors to load the da
 <div class="ulist">
 <ul>
 <li>
-<p>The FlowFilePrioritizer interface provides a mechanism by which <a href="#flowfile">FlowFile</a>s
+<p>The FlowFilePrioritizer interface provides a mechanism by which <a href="developer-guide.html#flowfile">FlowFile</a>s
 in a queue can be prioritized, or sorted, so that the FlowFiles can be processed in an order
 that is most effective for a particular use case.</p>
 </li>
@@ -669,7 +669,7 @@ a given user should be granted.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="processor_api"><a class="anchor" href="#processor_api"></a>Processor API</h2>
+<h2 id="processor_api"><a class="anchor" href="developer-guide.html#processor_api"></a>Processor API</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The Processor is the most widely used Component available in NiFi.
@@ -710,13 +710,13 @@ must be thread-safe. If unfamiliar with
 recommended that you familiarize yourself with the principles of Java concurrency.</p>
 </div>
 <div class="sect2">
-<h3 id="supporting_api"><a class="anchor" href="#supporting_api"></a>Supporting API</h3>
+<h3 id="supporting_api"><a class="anchor" href="developer-guide.html#supporting_api"></a>Supporting API</h3>
 <div class="paragraph">
 <p>In order to understand the Processor API, we must first understand -
 at least at a high level - several supporting classes and interfaces, which are discussed below.</p>
 </div>
 <div class="sect3">
-<h4 id="flowfile"><a class="anchor" href="#flowfile"></a>FlowFile</h4>
+<h4 id="flowfile"><a class="anchor" href="developer-guide.html#flowfile"></a>FlowFile</h4>
 <div class="paragraph">
 <p>A FlowFile is a logical notion that correlates a piece of data with a
 set of Attributes about that data.
@@ -726,9 +726,42 @@ flow-specific values. While the contents
 can change, the FlowFile object is
 immutable. Modifications to a FlowFile are made possible by the ProcessSession.</p>
 </div>
+<div class="paragraph">
+<p>The core attributes for FlowFiles are defined in the <code>org.apache.nifi.flowfile.attributes.CoreAttributes</code> enum.
+The most common attributes you&#8217;ll see are filename, path and uuid. The string in quotes is the value of the
+attribute within the <code>CoreAttributes</code> enum.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Filename ("filename"): The filename of the FlowFile. The filename should not contain any directory structure.</p>
+</li>
+<li>
+<p>UUID ("uuid"): A unique universally unique identifier (UUID) assigned to this FlowFile.</p>
+</li>
+<li>
+<p>Path ("path"): The FlowFile&#8217;s path indicates the relative directory to which a FlowFile belongs and does not contain the filename.</p>
+</li>
+<li>
+<p>Absolute Path ("absolute.path"): The FlowFile&#8217;s absolute path indicates the absolute directory to which a FlowFile belongs and does not contain the filename.</p>
+</li>
+<li>
+<p>Priority ("priority"): A numeric value indicating the FlowFile priority.</p>
+</li>
+<li>
+<p>MIME Type ("mime.type"): The MIME Type of this FlowFile.</p>
+</li>
+<li>
+<p>Discard Reason ("discard.reason"): Specifies the reason that a FlowFile is being discarded.</p>
+</li>
+<li>
+<p>Alternative Identifier ("alternate.identifier"): Indicates an identifier other than the FlowFile&#8217;s UUID that is known to refer to this FlowFile.</p>
+</li>
+</ul>
+</div>
 </div>
 <div class="sect3">
-<h4 id="process_session"><a class="anchor" href="#process_session"></a>ProcessSession</h4>
+<h4 id="process_session"><a class="anchor" href="developer-guide.html#process_session"></a>ProcessSession</h4>
 <div class="paragraph">
 <p>The ProcessSession, often referred to as simply a "session," provides
 a mechanism by which FlowFiles can be created, destroyed, examined, cloned, and transferred to other
@@ -740,7 +773,7 @@ ProcessSession can be either committed o
 </div>
 </div>
 <div class="sect3">
-<h4 id="process_context"><a class="anchor" href="#process_context"></a>ProcessContext</h4>
+<h4 id="process_context"><a class="anchor" href="developer-guide.html#process_context"></a>ProcessContext</h4>
 <div class="paragraph">
 <p>The ProcessContext provides a bridge between a Processor and the framework. It provides information
 about how the Processor is currently configured and allows the Processor to perform
@@ -749,7 +782,7 @@ Processors to run without consuming reso
 </div>
 </div>
 <div class="sect3">
-<h4 id="property_descriptor"><a class="anchor" href="#property_descriptor"></a>PropertyDescriptor</h4>
+<h4 id="property_descriptor"><a class="anchor" href="developer-guide.html#property_descriptor"></a>PropertyDescriptor</h4>
 <div class="paragraph">
 <p>PropertyDescriptor defines a property that is to be used by a
 Processor, ReportingTask, or ControllerService.
@@ -765,7 +798,7 @@ the <code>build</code> method.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="validator"><a class="anchor" href="#validator"></a>Validator</h4>
+<h4 id="validator"><a class="anchor" href="developer-guide.html#validator"></a>Validator</h4>
 <div class="paragraph">
 <p>A PropertyDescriptor may specify one or more Validators that can be
 used to ensure that the user-entered value
@@ -775,7 +808,7 @@ able to be run or used until the propert
 </div>
 </div>
 <div class="sect3">
-<h4 id="validation_context"><a class="anchor" href="#validation_context"></a>ValidationContext</h4>
+<h4 id="validation_context"><a class="anchor" href="developer-guide.html#validation_context"></a>ValidationContext</h4>
 <div class="paragraph">
 <p>When validating property values, a ValidationContext can be used to
 obtain ControllerServices,
@@ -784,7 +817,7 @@ using the Expression Language.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="property_value"><a class="anchor" href="#property_value"></a>PropertyValue</h4>
+<h4 id="property_value"><a class="anchor" href="developer-guide.html#property_value"></a>PropertyValue</h4>
 <div class="paragraph">
 <p>All property values returned to a Processor are returned in the form
 of a PropertyValue object. This
@@ -795,7 +828,7 @@ Expression Language.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="relationship"><a class="anchor" href="#relationship"></a>Relationship</h4>
+<h4 id="relationship"><a class="anchor" href="developer-guide.html#relationship"></a>Relationship</h4>
 <div class="paragraph">
 <p>Relationships define the routes to which a FlowFile may be transfered
 from a Processor. Relationships
@@ -806,7 +839,7 @@ to fill in the details of the Relationsh
 </div>
 </div>
 <div class="sect3">
-<h4 id="processor_initialization_context"><a class="anchor" href="#processor_initialization_context"></a>ProcessorInitializationContext</h4>
+<h4 id="processor_initialization_context"><a class="anchor" href="developer-guide.html#processor_initialization_context"></a>ProcessorInitializationContext</h4>
 <div class="paragraph">
 <p>After a Processor is created, its <code>initialize</code> method will be called
 with an <code>InitializationContext</code> object.
@@ -816,7 +849,7 @@ such as the unique identifier of the Pro
 </div>
 </div>
 <div class="sect3">
-<h4 id="ProcessorLog"><a class="anchor" href="#ProcessorLog"></a>ProcessorLog</h4>
+<h4 id="ProcessorLog"><a class="anchor" href="developer-guide.html#ProcessorLog"></a>ProcessorLog</h4>
 <div class="paragraph">
 <p>Processors are encouraged to perform their logging via the
 <code>ProcessorLog</code> interface, rather than obtaining
@@ -833,7 +866,7 @@ identifier in log messages.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="AbstractProcessor"><a class="anchor" href="#AbstractProcessor"></a>AbstractProcessor API</h3>
+<h3 id="AbstractProcessor"><a class="anchor" href="developer-guide.html#AbstractProcessor"></a>AbstractProcessor API</h3>
 <div class="paragraph">
 <p>Since the vast majority of Processors will be created by extending the
 AbstractProcessor, it is the
@@ -842,7 +875,7 @@ AbstractProcessor provides several metho
 will be of interest to Processor developers.</p>
 </div>
 <div class="sect3">
-<h4 id="processor-initialization"><a class="anchor" href="#processor-initialization"></a>Processor Initialization</h4>
+<h4 id="processor-initialization"><a class="anchor" href="developer-guide.html#processor-initialization"></a>Processor Initialization</h4>
 <div class="paragraph">
 <p>When a Processor is created, before any other methods are invoked, the
 <code>init</code> method of the
@@ -859,7 +892,7 @@ subclasses via the <code>getLogger</code
 </div>
 </div>
 <div class="sect3">
-<h4 id="exposing-processor-s-relationships"><a class="anchor" href="#exposing-processor-s-relationships"></a>Exposing Processor&#8217;s Relationships</h4>
+<h4 id="exposing-processor-s-relationships"><a class="anchor" href="developer-guide.html#exposing-processor-s-relationships"></a>Exposing Processor&#8217;s Relationships</h4>
 <div class="paragraph">
 <p>In order for a Processor to transfer a FlowFile to a new destination
 for follow-on processing, the
@@ -885,7 +918,7 @@ pattern lends itself to cleaner code and
 </div>
 </div>
 <div class="sect3">
-<h4 id="exposing-processor-properties"><a class="anchor" href="#exposing-processor-properties"></a>Exposing Processor Properties</h4>
+<h4 id="exposing-processor-properties"><a class="anchor" href="developer-guide.html#exposing-processor-properties"></a>Exposing Processor Properties</h4>
 <div class="paragraph">
 <p>Most Processors will require some amount of user configuration before
 they are able to be used. The properties
@@ -920,7 +953,7 @@ properties.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="validating-processor-properties"><a class="anchor" href="#validating-processor-properties"></a>Validating Processor Properties</h4>
+<h4 id="validating-processor-properties"><a class="anchor" href="developer-guide.html#validating-processor-properties"></a>Validating Processor Properties</h4>
 <div class="paragraph">
 <p>A Processor is not able to be started if its configuration is not
 valid. Validation of a Processor property can
@@ -946,7 +979,7 @@ validation of a Processor&#8217;s config
 </div>
 </div>
 <div class="sect3">
-<h4 id="responding-to-changes-in-configuration"><a class="anchor" href="#responding-to-changes-in-configuration"></a>Responding to Changes in Configuration</h4>
+<h4 id="responding-to-changes-in-configuration"><a class="anchor" href="developer-guide.html#responding-to-changes-in-configuration"></a>Responding to Changes in Configuration</h4>
 <div class="paragraph">
 <p>It is sometimes desirable to have a Processor eagerly react when its
 properties are changed. The <code>onPropertyModified</code>
@@ -969,7 +1002,7 @@ creates its own threads.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="performing-the-work"><a class="anchor" href="#performing-the-work"></a>Performing the Work</h4>
+<h4 id="performing-the-work"><a class="anchor" href="developer-guide.html#performing-the-work"></a>Performing the Work</h4>
 <div class="paragraph">
 <p>When a Processor has work to do, it is scheduled to do so by having
 its <code>onTrigger</code> method called by the framework.
@@ -985,7 +1018,7 @@ Relationships.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="when-processors-are-triggered"><a class="anchor" href="#when-processors-are-triggered"></a>When Processors are Triggered</h4>
+<h4 id="when-processors-are-triggered"><a class="anchor" href="developer-guide.html#when-processors-are-triggered"></a>When Processors are Triggered</h4>
 <div class="paragraph">
 <p>A Processor&#8217;s <code>onTrigger</code> method will be called only when it is
 scheduled to run and when work exists for the Processor.
@@ -1035,7 +1068,7 @@ be taken to ensure that the Processor is
 </div>
 </div>
 <div class="sect2">
-<h3 id="component-lifecycle"><a class="anchor" href="#component-lifecycle"></a>Component Lifecycle</h3>
+<h3 id="component-lifecycle"><a class="anchor" href="developer-guide.html#component-lifecycle"></a>Component Lifecycle</h3>
 <div class="paragraph">
 <p>The NiFi API provides lifecycle support through use of Java
 Annotations. The <code>org.apache.nifi.annotations.lifecycle</code> package
@@ -1048,7 +1081,7 @@ Component Lifecycle, we will define a Ni
 Processor, ControllerServices, or ReportingTask.</p>
 </div>
 <div class="sect3">
-<h4 id="onadded"><a class="anchor" href="#onadded"></a>@OnAdded</h4>
+<h4 id="onadded"><a class="anchor" href="developer-guide.html#onadded"></a>@OnAdded</h4>
 <div class="paragraph">
 <p>The <code>@OnAdded</code> annotation causes a method to be invoked as soon as a
 component is created. The
@@ -1065,7 +1098,37 @@ Methods with this Annotation must take z
 </div>
 </div>
 <div class="sect3">
-<h4 id="onremoved"><a class="anchor" href="#onremoved"></a>@OnRemoved</h4>
+<h4 id="onenabled"><a class="anchor" href="developer-guide.html#onenabled"></a>@OnEnabled</h4>
+<div class="paragraph">
+<p>The <code>@OnEnabled</code> annotation can be used to indicate a method should be called
+whenever the Controller Service is enabled. Any method that has this annotation will be
+called every time a user enables the service. Additionally, each time that NiFi
+is restarted, if NiFi is configured to "auto-resume state" and the service
+is enabled, the method will be invoked.</p>
+</div>
+<div class="paragraph">
+<p>If a method with this annotation throws a Throwable, a log message and
+bulletin will be issued for the component. In this event, the service will
+remain in an <em>ENABLING</em> state and will not be usable. All methods with this
+annotation will then be called again after a delay. The service will not be
+made available for use until all methods with this annotation have returned
+without throwing anything.</p>
+</div>
+<div class="paragraph">
+<p>Methods using this annotation must take either 0 arguments or a single argument
+of type <code>org.apache.nifi.controller.ConfigurationContext</code>.</p>
+</div>
+<div class="paragraph">
+<p>Note that this annotation will be ignored if applied to a ReportingTask or
+Processor. For a Controller Service, enabling and disabling are considered
+lifecycle events, as the action makes them usable or unusable by other
+components. However, for a Processor and a Reporting Task, these are not
+lifecycle events but rather a mechanism to allow a component to be excluded
+when starting or stopping a group of components.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="onremoved"><a class="anchor" href="developer-guide.html#onremoved"></a>@OnRemoved</h4>
 <div class="paragraph">
 <p>The <code>@OnRemoved</code> annotation causes a method to be invoked before a
 component is removed from the flow.
@@ -1076,7 +1139,7 @@ will still be removed.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="onscheduled"><a class="anchor" href="#onscheduled"></a>@OnScheduled</h4>
+<h4 id="onscheduled"><a class="anchor" href="developer-guide.html#onscheduled"></a>@OnScheduled</h4>
 <div class="paragraph">
 <p>This annotation indicates that a method should be called every time
 the component is scheduled to run. Because ControllerServices
@@ -1102,7 +1165,7 @@ is a ReportingTask.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="onunscheduled"><a class="anchor" href="#onunscheduled"></a>@OnUnscheduled</h4>
+<h4 id="onunscheduled"><a class="anchor" href="developer-guide.html#onunscheduled"></a>@OnUnscheduled</h4>
 <div class="paragraph">
 <p>Methods with this annotation will be called whenever a Processor or
 ReportingTask is no longer scheduled to run. At that time, many threads
@@ -1119,7 +1182,7 @@ component is a ReportingTask.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="onstopped"><a class="anchor" href="#onstopped"></a>@OnStopped</h4>
+<h4 id="onstopped"><a class="anchor" href="developer-guide.html#onstopped"></a>@OnStopped</h4>
 <div class="paragraph">
 <p>Methods with this annotation will be called when a Processor or
 ReportingTask is no longer scheduled to run
@@ -1127,12 +1190,15 @@ and all threads have returned from the <
 method throws an Exception,
 a log message will be generated, and the Exception will otherwise be
 ignored; other methods with
-this annotation will still be invoked. Methods with this annotation
-must take zero arguments.</p>
+this annotation will still be invoked.
+Methods with this annotation are permitted to take either 0 or 1 argument. If
+an argument is used, it must be of type ConfigurationContext if the
+component is a ReportingTask or of type ProcessContext if the
+component is a Processor.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="onshutdown"><a class="anchor" href="#onshutdown"></a>@OnShutdown</h4>
+<h4 id="onshutdown"><a class="anchor" href="developer-guide.html#onshutdown"></a>@OnShutdown</h4>
 <div class="paragraph">
 <p>Any method that is annotated with the <code>@OnShutdown</code> annotation will be
 called when NiFi is successfully
@@ -1153,7 +1219,7 @@ relied upon for critical business logic.
 </div>
 </div>
 <div class="sect2">
-<h3 id="reporting-processor-activity"><a class="anchor" href="#reporting-processor-activity"></a>Reporting Processor Activity</h3>
+<h3 id="reporting-processor-activity"><a class="anchor" href="developer-guide.html#reporting-processor-activity"></a>Reporting Processor Activity</h3>
 <div class="paragraph">
 <p>Processors are responsible for reporting their activity so that users
 are able to understand what happens
@@ -1202,7 +1268,7 @@ perspective of the Processor.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="documenting-a-component"><a class="anchor" href="#documenting-a-component"></a>Documenting a Component</h2>
+<h2 id="documenting-a-component"><a class="anchor" href="developer-guide.html#documenting-a-component"></a>Documenting a Component</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>NiFi attempts to make the user experience as simple and convenient as
@@ -1214,7 +1280,7 @@ exposes a few different mechanisms for s
 the framework.</p>
 </div>
 <div class="sect2">
-<h3 id="documenting-properties"><a class="anchor" href="#documenting-properties"></a>Documenting Properties</h3>
+<h3 id="documenting-properties"><a class="anchor" href="developer-guide.html#documenting-properties"></a>Documenting Properties</h3>
 <div class="paragraph">
 <p>Individual properties can be documented by calling the <code>description</code>
 method of a PropertyDescriptor&#8217;s builder as such:</p>
@@ -1253,7 +1319,7 @@ public static final PropertyDescriptor L
 </div>
 </div>
 <div class="sect2">
-<h3 id="documenting-relationships"><a class="anchor" href="#documenting-relationships"></a>Documenting Relationships</h3>
+<h3 id="documenting-relationships"><a class="anchor" href="developer-guide.html#documenting-relationships"></a>Documenting Relationships</h3>
 <div class="paragraph">
 <p>Processor Relationships are documented in much the same way that
 properties are - by calling the <code>description</code> method of a
@@ -1269,7 +1335,7 @@ Relationship&#8217;s builder:</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="documenting-capability-and-keywords"><a class="anchor" href="#documenting-capability-and-keywords"></a>Documenting Capability and Keywords</h3>
+<h3 id="documenting-capability-and-keywords"><a class="anchor" href="developer-guide.html#documenting-capability-and-keywords"></a>Documenting Capability and Keywords</h3>
 <div class="paragraph">
 <p>The <code>org.apache.nifi.annotations.documentation</code> package provides Java
 annotations that can be used to document components. The
@@ -1302,7 +1368,7 @@ public static final ExampleProcessor ext
 </div>
 </div>
 <div class="sect2">
-<h3 id="documenting-flowfile-attribute-interaction"><a class="anchor" href="#documenting-flowfile-attribute-interaction"></a>Documenting FlowFile Attribute Interaction</h3>
+<h3 id="documenting-flowfile-attribute-interaction"><a class="anchor" href="developer-guide.html#documenting-flowfile-attribute-interaction"></a>Documenting FlowFile Attribute Interaction</h3>
 <div class="paragraph">
 <p>Many times a processor will expect certain FlowFile attributes be set on in-bound FlowFiles in order
 for the processor to function properly.  In other cases a processor may update or
@@ -1328,7 +1394,7 @@ public final class InvokeHTTP extends Ab
 </div>
 </div>
 <div class="sect2">
-<h3 id="documenting-related-components"><a class="anchor" href="#documenting-related-components"></a>Documenting Related Components</h3>
+<h3 id="documenting-related-components"><a class="anchor" href="developer-guide.html#documenting-related-components"></a>Documenting Related Components</h3>
 <div class="paragraph">
 <p>Often Processors and ControllerServices are related to one another.  Sometimes its a put/get relation as in <code>PutFile</code> and <code>GetFile</code>.
 Sometimes a Processor uses a ControllerService like <code>InvokeHTTP</code> and <code>StandardSSLContextService</code>.  Sometimes one ControllerService uses another
@@ -1344,7 +1410,7 @@ public class PutFile extends AbstractPro
 </div>
 </div>
 <div class="sect2">
-<h3 id="advanced-documentation"><a class="anchor" href="#advanced-documentation"></a>Advanced Documentation</h3>
+<h3 id="advanced-documentation"><a class="anchor" href="developer-guide.html#advanced-documentation"></a>Advanced Documentation</h3>
 <div class="paragraph">
 <p>When the documentation methods above are not sufficient, NiFi provides
 the ability to expose more advanced documentation to the user via the
@@ -1372,7 +1438,7 @@ documentation for Processors, Controller
 </div>
 </div>
 <div class="sect1">
-<h2 id="common-processor-patterns"><a class="anchor" href="#common-processor-patterns"></a>Common Processor Patterns</h2>
+<h2 id="common-processor-patterns"><a class="anchor" href="developer-guide.html#common-processor-patterns"></a>Common Processor Patterns</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>While there are many different Processors available to NiFi users, the
@@ -1385,7 +1451,7 @@ and recommendations discussed below are
 hardened rules.</p>
 </div>
 <div class="sect2">
-<h3 id="ingress"><a class="anchor" href="#ingress"></a>Data Ingress</h3>
+<h3 id="ingress"><a class="anchor" href="developer-guide.html#ingress"></a>Data Ingress</h3>
 <div class="paragraph">
 <p>A Processor that ingests data into NiFi has a single Relationship
 names <code>success</code>. This Processor generates
@@ -1473,7 +1539,7 @@ annotated with the <code>@OnStopped</cod
 </div>
 </div>
 <div class="sect2">
-<h3 id="data-egress"><a class="anchor" href="#data-egress"></a>Data Egress</h3>
+<h3 id="data-egress"><a class="anchor" href="developer-guide.html#data-egress"></a>Data Egress</h3>
 <div class="paragraph">
 <p>A Processor that publishes data to an external source has two
 Relationships: <code>success</code> and <code>failure</code>. The
@@ -1534,7 +1600,7 @@ error depends on a few considerations. I
 network condition, the FlowFile is generally
 routed to <code>failure</code>. The FlowFile is not penalized because there is
 not necessary a problem with the data. Unlike the
-case of the <a href="#ingress">Data Ingress</a> Processor, we typically do not call <code>yield</code> on
+case of the <a href="developer-guide.html#ingress">Data Ingress</a> Processor, we typically do not call <code>yield</code> on
 the ProcessContext. This is because in the case of
 ingest, the FlowFile does not exist until the Processor is able to
 perform its function. However, in the case of a Put Processor,
@@ -1570,7 +1636,7 @@ annotated with <code>@OnStopped</code> s
 </div>
 </div>
 <div class="sect2">
-<h3 id="route-based-on-content-one-to-one"><a class="anchor" href="#route-based-on-content-one-to-one"></a>Route Based on Content (One-to-One)</h3>
+<h3 id="route-based-on-content-one-to-one"><a class="anchor" href="developer-guide.html#route-based-on-content-one-to-one"></a>Route Based on Content (One-to-One)</h3>
 <div class="paragraph">
 <p>A Processor that routes data based on its content will take one of two
 forms: Route an incoming FlowFile to exactly
@@ -1611,7 +1677,7 @@ package.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="route-based-on-content-one-to-many"><a class="anchor" href="#route-based-on-content-one-to-many"></a>Route Based on Content (One-to-Many)</h3>
+<h3 id="route-based-on-content-one-to-many"><a class="anchor" href="developer-guide.html#route-based-on-content-one-to-many"></a>Route Based on Content (One-to-Many)</h3>
 <div class="paragraph">
 <p>If a Processor will route a single FlowFile to potentially many
 relationships, this Processor will be slightly different than
@@ -1696,7 +1762,7 @@ package.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="route-streams-based-on-content-one-to-many"><a class="anchor" href="#route-streams-based-on-content-one-to-many"></a>Route Streams Based on Content (One-to-Many)</h3>
+<h3 id="route-streams-based-on-content-one-to-many"><a class="anchor" href="developer-guide.html#route-streams-based-on-content-one-to-many"></a>Route Streams Based on Content (One-to-Many)</h3>
 <div class="paragraph">
 <p>The previous description of Route Based on Content (One-to-Many)
 provides an abstraction
@@ -1848,7 +1914,7 @@ Capturing Group).</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="route-based-on-attributes"><a class="anchor" href="#route-based-on-attributes"></a>Route Based on Attributes</h3>
+<h3 id="route-based-on-attributes"><a class="anchor" href="developer-guide.html#route-based-on-attributes"></a>Route Based on Attributes</h3>
 <div class="paragraph">
 <p>This Processor is almost identical to the Route Data Based on Content
 Processors described above. It takes two different forms: One-to-One
@@ -1862,7 +1928,7 @@ in this case.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="split-content-one-to-many"><a class="anchor" href="#split-content-one-to-many"></a>Split Content (One-to-Many)</h3>
+<h3 id="split-content-one-to-many"><a class="anchor" href="developer-guide.html#split-content-one-to-many"></a>Split Content (One-to-Many)</h3>
 <div class="paragraph">
 <p>This Processor generally requires no user configuration, with the
 exception of the size of each Split to create. The <code>onTrigger</code> method
@@ -2017,7 +2083,7 @@ logged; and the method returns.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="update-attributes-based-on-content"><a class="anchor" href="#update-attributes-based-on-content"></a>Update Attributes Based on Content</h3>
+<h3 id="update-attributes-based-on-content"><a class="anchor" href="developer-guide.html#update-attributes-based-on-content"></a>Update Attributes Based on Content</h3>
 <div class="paragraph">
 <p>This Processor is very similar to the Route Based on Content
 Processors discussed above. Rather than
@@ -2054,7 +2120,7 @@ when appropriate.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="enrich-modify-content"><a class="anchor" href="#enrich-modify-content"></a>Enrich/Modify Content</h3>
+<h3 id="enrich-modify-content"><a class="anchor" href="developer-guide.html#enrich-modify-content"></a>Enrich/Modify Content</h3>
 <div class="paragraph">
 <p>The Enrich/Modify Content pattern is very common and very generic.
 This pattern is responsible for any
@@ -2085,7 +2151,7 @@ and routes the FlowFile to failure.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="error-handling"><a class="anchor" href="#error-handling"></a>Error Handling</h2>
+<h2 id="error-handling"><a class="anchor" href="developer-guide.html#error-handling"></a>Error Handling</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>When writing a Processor, there are several different unexpected cases that can occur.
@@ -2095,7 +2161,7 @@ what error handling is expected of Proce
 handle unexpected errors during the course of their work.</p>
 </div>
 <div class="sect2">
-<h3 id="exceptions-within-the-processor"><a class="anchor" href="#exceptions-within-the-processor"></a>Exceptions within the Processor</h3>
+<h3 id="exceptions-within-the-processor"><a class="anchor" href="developer-guide.html#exceptions-within-the-processor"></a>Exceptions within the Processor</h3>
 <div class="paragraph">
 <p>During the execution of the <code>onTrigger</code> method of a Processor, many things can potentially go
 awry. Common failure conditions include:</p>
@@ -2140,7 +2206,7 @@ in the <code>nifi.properties</code> file
 </div>
 </div>
 <div class="sect2">
-<h3 id="exceptions-within-a-callback-ioexception-runtimeexception"><a class="anchor" href="#exceptions-within-a-callback-ioexception-runtimeexception"></a>Exceptions within a callback: IOException, RuntimeException</h3>
+<h3 id="exceptions-within-a-callback-ioexception-runtimeexception"><a class="anchor" href="developer-guide.html#exceptions-within-a-callback-ioexception-runtimeexception"></a>Exceptions within a callback: IOException, RuntimeException</h3>
 <div class="paragraph">
 <p>More often than not, when an Exception occurs in a Processor, it occurs from within a callback (I.e.,
 <code>InputStreamCallback</code>, <code>OutputStreamCallback</code>, or <code>StreamCallback</code>). That is, during the processing of a
@@ -2170,7 +2236,7 @@ condition appropriately. Catching the ge
 </div>
 </div>
 <div class="sect2">
-<h3 id="penalization-vs-yielding"><a class="anchor" href="#penalization-vs-yielding"></a>Penalization vs. Yielding</h3>
+<h3 id="penalization-vs-yielding"><a class="anchor" href="developer-guide.html#penalization-vs-yielding"></a>Penalization vs. Yielding</h3>
 <div class="paragraph">
 <p>When an issue occurs during processing, the framework exposes two methods to allow Processor developers to avoid performing
 unnecessary work: "penalization" and "yielding." These two concepts can become confusing for developers new to the NiFi API.
@@ -2195,7 +2261,7 @@ there&#8217;s nothing that it can do - i
 </div>
 </div>
 <div class="sect2">
-<h3 id="session-rollback"><a class="anchor" href="#session-rollback"></a>Session Rollback</h3>
+<h3 id="session-rollback"><a class="anchor" href="developer-guide.html#session-rollback"></a>Session Rollback</h3>
 <div class="paragraph">
 <p>Thus far, when we have discussed the <code>ProcessSession</code>, we have typically referred to it simply as a mechanism for accessing
 FlowFiles. However, it provides another very important capability, which is transactionality. All methods that are called
@@ -2233,14 +2299,14 @@ These "batched" commits are not rolled b
 </div>
 </div>
 <div class="sect1">
-<h2 id="general-design-considerations"><a class="anchor" href="#general-design-considerations"></a>General Design Considerations</h2>
+<h2 id="general-design-considerations"><a class="anchor" href="developer-guide.html#general-design-considerations"></a>General Design Considerations</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>When designing a Processor, there are a few important design considering to keep in mind. This section of the Developer Guide
 brings to the forefront some of the ideas that a developer should be thinking about when creating a Processor.</p>
 </div>
 <div class="sect2">
-<h3 id="consider-the-user"><a class="anchor" href="#consider-the-user"></a>Consider the User</h3>
+<h3 id="consider-the-user"><a class="anchor" href="developer-guide.html#consider-the-user"></a>Consider the User</h3>
 <div class="paragraph">
 <p>One of the most important concepts to keep in mind when developing a Processor (or any other component) is the user
 experience that you are creating. It&#8217;s important to remember that as the developer of such a component, you may have
@@ -2249,7 +2315,7 @@ less familiar with the process are able
 </div>
 <div class="paragraph">
 <p>When thinking about the user experience, it is also important to note that consistency is very important. It is best
-to stick with the standard <a href="#naming-convensions">Naming Conventions</a>. This is true for Processor names, Property names and value, Relationship
+to stick with the standard <a href="developer-guide.html#naming-convensions">Naming Conventions</a>. This is true for Processor names, Property names and value, Relationship
 names, and any other aspect that the user will experience.</p>
 </div>
 <div class="paragraph">
@@ -2259,7 +2325,7 @@ tell users to just leave the default val
 </div>
 </div>
 <div class="sect2">
-<h3 id="cohesion-and-reusability"><a class="anchor" href="#cohesion-and-reusability"></a>Cohesion and Reusability</h3>
+<h3 id="cohesion-and-reusability"><a class="anchor" href="developer-guide.html#cohesion-and-reusability"></a>Cohesion and Reusability</h3>
 <div class="paragraph">
 <p>For the sake of making a single, cohesive unit, developers are sometimes tempted to combine several functions into a single Processor.
 This is very true for the case when a Processor expects input data to be in format X so that the Processor can convert the data into
@@ -2296,7 +2362,7 @@ Processor to send data to the remote res
 </div>
 </div>
 <div class="sect2">
-<h3 id="naming-convensions"><a class="anchor" href="#naming-convensions"></a>Naming Conventions</h3>
+<h3 id="naming-convensions"><a class="anchor" href="developer-guide.html#naming-convensions"></a>Naming Conventions</h3>
 <div class="paragraph">
 <p>In order to deliver a consistent look and feel to users, it is advisable that Processors keep with standard naming conventions. The following
 is a list of standard conventions that are used:</p>
@@ -2320,7 +2386,7 @@ sources over a known Protocol (such as G
 </div>
 </div>
 <div class="sect2">
-<h3 id="processor-behavior-annotations"><a class="anchor" href="#processor-behavior-annotations"></a>Processor Behavior Annotations</h3>
+<h3 id="processor-behavior-annotations"><a class="anchor" href="developer-guide.html#processor-behavior-annotations"></a>Processor Behavior Annotations</h3>
 <div class="paragraph">
 <p>When creating a Processor, the developer is able to provide hints to the framework about how to utilize the Processor most
 effectively. This is done by applying annotations to the Processor&#8217;s class. The annotations that can be applied to a
@@ -2383,7 +2449,7 @@ periodically to time out a network conne
 </div>
 </div>
 <div class="sect2">
-<h3 id="data-buffering"><a class="anchor" href="#data-buffering"></a>Data Buffering</h3>
+<h3 id="data-buffering"><a class="anchor" href="developer-guide.html#data-buffering"></a>Data Buffering</h3>
 <div class="paragraph">
 <p>An important point to keep in mind is that NiFi provides a generic data processing capability. Data can be in any format. Processors
 are generally scheduled with several threads. A common mistake that developers new to NiFi make is to buffer all the contents of a
@@ -2403,7 +2469,7 @@ amount of data, as appropriate.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="controller-services"><a class="anchor" href="#controller-services"></a>Controller Services</h2>
+<h2 id="controller-services"><a class="anchor" href="developer-guide.html#controller-services"></a>Controller Services</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The <code>ControllerService</code> interface allows developers to share
@@ -2417,7 +2483,7 @@ integrated into the flow directly. Rathe
 they are used Processors, Reporting Tasks, and other Controller Services.</p>
 </div>
 <div class="sect2">
-<h3 id="developing-controller-service"><a class="anchor" href="#developing-controller-service"></a>Developing a ControllerService</h3>
+<h3 id="developing-controller-service"><a class="anchor" href="developer-guide.html#developing-controller-service"></a>Developing a ControllerService</h3>
 <div class="paragraph">
 <p>Just like with the Processor interface, the ControllerService
 interface exposes methods for configuration,
@@ -2450,11 +2516,11 @@ in order to make this work, the Processo
 implementation must share the same definition
 of the Controller Service interface. Therefore, both of these NARs
 must depend on the NAR that houses the
-Controller Service&#8217;s interface. See <a href="#nars">NiFi Archives (NARs)</a> for more information.</p>
+Controller Service&#8217;s interface. See <a href="developer-guide.html#nars">NiFi Archives (NARs)</a> for more information.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="interacting-with-controller-service"><a class="anchor" href="#interacting-with-controller-service"></a>Interacting with a ControllerService</h3>
+<h3 id="interacting-with-controller-service"><a class="anchor" href="developer-guide.html#interacting-with-controller-service"></a>Interacting with a ControllerService</h3>
 <div class="paragraph">
 <p>ControllerServices may be obtained by a Processor, another
 ControllerService, or a ReportingTask
@@ -2512,7 +2578,7 @@ detail.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="reporting-tasks"><a class="anchor" href="#reporting-tasks"></a>Reporting Tasks</h2>
+<h2 id="reporting-tasks"><a class="anchor" href="developer-guide.html#reporting-tasks"></a>Reporting Tasks</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>So far, we have mentioned little about how to convey to the outside
@@ -2531,7 +2597,7 @@ interface. ReportingTasks are given acce
 determine how the system is performing.</p>
 </div>
 <div class="sect2">
-<h3 id="developing-a-reporting-task"><a class="anchor" href="#developing-a-reporting-task"></a>Developing a Reporting Task</h3>
+<h3 id="developing-a-reporting-task"><a class="anchor" href="developer-guide.html#developing-a-reporting-task"></a>Developing a Reporting Task</h3>
 <div class="paragraph">
 <p>Just like with the Processor and ControllerService interfaces, the
 ReportingTask interface exposes methods for
@@ -2557,7 +2623,7 @@ configured. However, this method of obta
 not the preferred method. Rather, the
 preferred method for obtaining a Controller Service is to reference
 the Controller Service in a PropertyDescriptor,
-as is discussed in the <a href="#interacting-with-controller-service">Interacting with a ControllerService</a> section.</p>
+as is discussed in the <a href="developer-guide.html#interacting-with-controller-service">Interacting with a ControllerService</a> section.</p>
 </div>
 <div class="paragraph">
 <p>The <code>EventAccess</code> object that is exposed via the ReportingContext
@@ -2589,7 +2655,7 @@ needed for any number of operational con
 </div>
 </div>
 <div class="sect1">
-<h2 id="testing"><a class="anchor" href="#testing"></a>Testing</h2>
+<h2 id="testing"><a class="anchor" href="developer-guide.html#testing"></a>Testing</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Testing the components that will be used within a larger framework can often be very cumbersome
@@ -2612,7 +2678,7 @@ as well as invoking the necessary lifecy
 same way in the unit tests as it does in production.</p>
 </div>
 <div class="sect2">
-<h3 id="instantiate-testrunner"><a class="anchor" href="#instantiate-testrunner"></a>Instantiate TestRunner</h3>
+<h3 id="instantiate-testrunner"><a class="anchor" href="developer-guide.html#instantiate-testrunner"></a>Instantiate TestRunner</h3>
 <div class="paragraph">
 <p>Most unit tests for a Processor or a Controller Service start by creating an instance of the <code>TestRunner</code>
 class. In order to add the necessary classes to your Processor,
@@ -2634,7 +2700,7 @@ either be the class of the Processor to
 </div>
 </div>
 <div class="sect2">
-<h3 id="add-controllerservices"><a class="anchor" href="#add-controllerservices"></a>Add ControllerServices</h3>
+<h3 id="add-controllerservices"><a class="anchor" href="developer-guide.html#add-controllerservices"></a>Add ControllerServices</h3>
 <div class="paragraph">
 <p>After creating a new Test Runner, we can add any Controller Services to the Test Runner that our Processor
 will need in order to perform its job. We do this by calling the <code>addControllerService</code> method and supply
@@ -2659,7 +2725,7 @@ will throw an IllegalStateException. Oth
 </div>
 </div>
 <div class="sect2">
-<h3 id="set-property-values"><a class="anchor" href="#set-property-values"></a>Set Property Values</h3>
+<h3 id="set-property-values"><a class="anchor" href="developer-guide.html#set-property-values"></a>Set Property Values</h3>
 <div class="paragraph">
 <p>After configuring any necessary Controller Services, we need to configure our Processor. We can do this by
 calling the same methods as we do for Controller Services, without specifying any Controller Service. I.e.,
@@ -2672,7 +2738,7 @@ Processor is valid or not, according to
 </div>
 </div>
 <div class="sect2">
-<h3 id="enqueue-flowfiles"><a class="anchor" href="#enqueue-flowfiles"></a>Enqueue FlowFiles</h3>
+<h3 id="enqueue-flowfiles"><a class="anchor" href="developer-guide.html#enqueue-flowfiles"></a>Enqueue FlowFiles</h3>
 <div class="paragraph">
 <p>Before triggering a Processor to run, it is usually necessary to enqueue FlowFiles for the Processor to process.
 This can be achieved by using the <code>enqueue</code> methods of the <code>TestRunner</code> class. The <code>enqueue</code> method has several
@@ -2685,7 +2751,7 @@ to obtain the output of a Processor and
 </div>
 </div>
 <div class="sect2">
-<h3 id="run-the-processor"><a class="anchor" href="#run-the-processor"></a>Run the Processor</h3>
+<h3 id="run-the-processor"><a class="anchor" href="developer-guide.html#run-the-processor"></a>Run the Processor</h3>
 <div class="paragraph">
 <p>After configuring the Controller Services and enqueuing the necessary FlowFiles, the Processor can be triggered
 to run by calling the <code>run</code> method of <code>TestRunner</code>. If this method is called without any arguments, it will
@@ -2714,7 +2780,7 @@ the number of times that the Processor s
 </div>
 </div>
 <div class="sect2">
-<h3 id="validate-output"><a class="anchor" href="#validate-output"></a>Validate Output</h3>
+<h3 id="validate-output"><a class="anchor" href="developer-guide.html#validate-output"></a>Validate Output</h3>
 <div class="paragraph">
 <p>After a Processor has finished running, a unit test will generally want to validate that the FlowFiles went where
 they were expected to go. This can be achieved using the <code>TestRunners</code> <code>assertAllFlowFilesTransferred</code> and
@@ -2738,7 +2804,7 @@ as expected.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="mocking-external-resources"><a class="anchor" href="#mocking-external-resources"></a>Mocking External Resources</h3>
+<h3 id="mocking-external-resources"><a class="anchor" href="developer-guide.html#mocking-external-resources"></a>Mocking External Resources</h3>
 <div class="paragraph">
 <p>One of the biggest problems when testing a NiFi processor that connects to a remote resource is that we don&#8217;t want to
 actually connect to some remote resource from a unit test. We can stand up a simple server ourselves in the unit test
@@ -2781,7 +2847,7 @@ to the client.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="additional-testing-capabilities"><a class="anchor" href="#additional-testing-capabilities"></a>Additional Testing Capabilities</h3>
+<h3 id="additional-testing-capabilities"><a class="anchor" href="developer-guide.html#additional-testing-capabilities"></a>Additional Testing Capabilities</h3>
 <div class="paragraph">
 <p>In addition to the above-mentioned capabilities provided by the
 testing framework, the TestRunner provides several
@@ -2801,7 +2867,7 @@ be set via the <code>setThreadCount(int)
 </div>
 </div>
 <div class="sect1">
-<h2 id="nars"><a class="anchor" href="#nars"></a>NiFi Archives (NARs)</h2>
+<h2 id="nars"><a class="anchor" href="developer-guide.html#nars"></a>NiFi Archives (NARs)</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>When software from many different organizations is all hosted within
@@ -2837,7 +2903,7 @@ This is included by adding the following
         &lt;plugin&gt;
             &lt;groupId&gt;org.apache.nifi&lt;/groupId&gt;
             &lt;artifactId&gt;nifi-nar-maven-plugin&lt;/artifactId&gt;
-            &lt;version&gt;1.0.0-incubating&lt;/version&gt;
+            &lt;version&gt;1.1.0&lt;/version&gt;
             &lt;extensions&gt;true&lt;/extensions&gt;
         &lt;/plugin&gt;
     &lt;/plugins&gt;
@@ -2863,7 +2929,7 @@ we refer to NAR B as the <em>Parent</em>
 <div class="paragraph">
 <p>This linkage of Parent ClassLoaders is the mechanism that NiFi uses in
 order to enable Controller Services to be shared
-across all NARs. As mentioned in the <a href="#developing-controller-service">Developing a ControllerService</a>
+across all NARs. As mentioned in the <a href="developer-guide.html#developing-controller-service">Developing a ControllerService</a>
 section, A Controller Service must be separated
 into an interface that extends <code>ControllerService</code> and an
 implementation that implements that interface. Controller Services
@@ -2967,7 +3033,7 @@ API artifacts into the same NAR is often
 </div>
 </div>
 <div class="sect1">
-<h2 id="how-to-contribute-to-apache-nifi"><a class="anchor" href="#how-to-contribute-to-apache-nifi"></a>How to contribute to Apache NiFi</h2>
+<h2 id="how-to-contribute-to-apache-nifi"><a class="anchor" href="developer-guide.html#how-to-contribute-to-apache-nifi"></a>How to contribute to Apache NiFi</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>We are always excited to have contributions from the community - especially from new contributors!
@@ -2975,7 +3041,7 @@ We are interested in accepting contribut
 can be applied as icons or styling to the application.</p>
 </div>
 <div class="sect2">
-<h3 id="technologies"><a class="anchor" href="#technologies"></a>Technologies</h3>
+<h3 id="technologies"><a class="anchor" href="developer-guide.html#technologies"></a>Technologies</h3>
 <div class="paragraph">
 <p>The back end of Apache NiFi is written in Java. The web tier makes use of JAX-RS and JavaScript is extensively
 used to provide a user interface. We depend on several third-party JavaScript libraries, including D3 and JQuery,
@@ -2986,7 +3052,7 @@ among others. We make use of Apache Mave
 </div>
 </div>
 <div class="sect2">
-<h3 id="where-to-start"><a class="anchor" href="#where-to-start"></a>Where to Start?</h3>
+<h3 id="where-to-start"><a class="anchor" href="developer-guide.html#where-to-start"></a>Where to Start?</h3>
 <div class="paragraph">
 <p><a href="http://issues.apache.org/jira/browse/NIFI">NiFi&#8217;s JIRA page</a> can be used to find tickets that are tagged as "beginner",
 or you can dig into any of the tickets for creating Processors. Processors should be self-contained and not rely on other
@@ -2999,7 +3065,7 @@ Tools available to facilitate documentat
 </div>
 </div>
 <div class="sect2">
-<h3 id="supplying-a-contribution"><a class="anchor" href="#supplying-a-contribution"></a>Supplying a contribution</h3>
+<h3 id="supplying-a-contribution"><a class="anchor" href="developer-guide.html#supplying-a-contribution"></a>Supplying a contribution</h3>
 <div class="paragraph">
 <p>Contributions can be provided either by creating a patch:</p>
 </div>
@@ -3011,7 +3077,7 @@ Tools available to facilitate documentat
 </div>
 </div>
 <div class="sect2">
-<h3 id="contact-us"><a class="anchor" href="#contact-us"></a>Contact Us</h3>
+<h3 id="contact-us"><a class="anchor" href="developer-guide.html#contact-us"></a>Contact Us</h3>
 <div class="paragraph">
 <p>The developer mailing list (<a href="mailto:dev@nifi.apache.org">dev@nifi.apache.org</a>) is monitored pretty closely, and we tend to respond pretty
 quickly. If you have a question, don&#8217;t hesitate to shoot us an e-mail - we&#8217;re here to help! Unfortunately, though, e-mails
@@ -3024,7 +3090,7 @@ worry about bothering us. Just ping the
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2015-07-23 13:20:05 PDT
+Last updated 2015-09-19 09:32:06 -04:00
 </div>
 </div>
 </body>



Mime
View raw message