View Javadoc
1 /* ====================================================================
2 * License:
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. The end-user documentation included with the redistribution,
17 * if any, must include the following acknowledgment:
18 * "This product includes software developed by
19 * Robert Half International (http://www.rhi.com/)."
20 * Alternately, this acknowledgment may appear in the software itself,
21 * if and wherever such third-party acknowledgments normally appear.
22 *
23 * 4. The names "Parc", "RHI", and "Robert Half International" must
24 * not be used to endorse or promote products derived from this
25 * software without prior written permission. For written
26 * permission, please contact pete.mckinstry@rhi.com.
27 *
28 * 5. Products derived from this software may not be called "PARC",
29 * nor may "PARC" appear in their name, without prior written
30 * permission of Robert Half International.
31 *
32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 * SUCH DAMAGE.
44 * ====================================================================
45 *
46 */
47 package com.rhi.architecture.parc;
48
49 import com.rhi.architecture.resource.InitializationException;
50
51 import java.util.Properties;
52
53 /***
54 * Filter Interface. Component w/in the GOF Composite pattern w/
55 * the added functionality of a 'Runnable' to support multi-threaded
56 * filter processing.
57 *
58 * @author Pete McKinstry
59 * @copyright 2002, Robert Half Int'l., Inc. All rights reserved.
60 *
61 * @since 1.0
62 */
63 public interface Filter extends Runnable {
64
65 /***
66 * Initialize any local resources
67 *
68 * @param p
69 * @throws InitializationException
70 *
71 * @since 1.0
72 */
73 public void init(Properties p) throws InitializationException;
74
75 /***
76 * do filter processing.
77 * @throws ProcessingException
78 *
79 * @since 1.0
80 */
81 public void process() throws ProcessingException;
82
83 /***
84 * Set the inbound delivery mechanism.
85 *
86 * @param c
87 *
88 * @since 1.0
89 */
90 public void setInbound(Supplier c);
91
92 /***
93 * Set the outbound delivery mechanism.
94 *
95 * @param c
96 *
97 * @since 1.0
98 */
99 public void setOutbound(Consumer c);
100
101 /***
102 * Set the holding bin used for errored records..
103 *
104 * @param err
105 *
106 * @since 1.0
107 */
108 public void setErrorChannel(Consumer err);
109
110 /***
111 * Set the handler used for reporting fatal errors during
112 * Filter processing. Since each Filter is run w/in a
113 * thread, the call stack is not an appropriate mechanism
114 * for reporting critical processing errors. Therefore, a
115 * Handler object is provided for the Filter to use for
116 * logging unrecoverable processing errors.
117 * Note: This handler must assume that any error is fatal.
118 * Non-fatal errors should be handled by adding errors to
119 * the record(s) being processed.
120 *
121 * @param h - the exception handler to use when reporting exceptions
122 *
123 * @since 1.0
124 */
125 public void setExceptionHandler(ExceptionHandler h);
126
127 /***
128 * Tag this filter to shutdown. Implementation may vary.
129 * For example, a filter may be marked for death, but not
130 * actually shutdown until it detects a certain number of
131 * empty cycles.
132 *
133 * @since 1.1
134 */
135 public void markForDeath();
136
137 /***
138 * reset the filter to ensure that it's ready to
139 * process records again. This method may have to
140 * be called after calling markForDeath() to reset
141 * the state of the Filter.
142 *
143 * @since 1.1
144 */
145 public void reset();
146
147 /***
148 * For tracking purposes. The framework requires a name of
149 * each concrete filter so that it can track which threads
150 * belong where. The name is used as a key into a HashMap,
151 * so it should be unique. Note: The result from a call to
152 * this.getClass().getName() is fine.
153 * @return String
154 */
155 public String getName();
156
157 /***
158 * Return the suggested number of threads to launch for this
159 * Filter. Obviously this requires that the application uses
160 * a Pipeline that implements multi-threading.
161 *
162 * @return int the number of threads to launch for this Filter.
163 *
164 * @since 1.1
165 */
166 public int numThreads();
167
168 }
This page was automatically generated by Maven