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.batch.Application;
50 import com.rhi.architecture.batch.ApplicationException;
51 import com.rhi.architecture.batch.BatchApplication;
52 import com.rhi.architecture.logging.LogUtil;
53 import com.rhi.architecture.logging.Logger;
54 import com.rhi.architecture.config.ConfigurationException;
55 import com.rhi.architecture.resource.InitializationException;
56
57 import java.util.Properties;
58
59 /***
60 * Process Based Application. Designed to support running multiple
61 * processes w/in the same application. These processes may fo
62 *
63 * @author Pete McKinstry
64 * @copyright 2002, Robert Half Int'l., Inc. All rights reserved.
65 *
66 * @since 1.0
67 */
68 public class PBApplication extends BatchApplication {
69
70 // for normal logging activities, use the log category.
71 private Logger log = null;
72
73 /***
74 * the logger name to use when outputing performance statistics.
75 */
76 public static final String CYCLE_STATS = "CYCLE_STATS";
77
78 private ApplicationStrategy strategy;
79
80 /***
81 * default constructor
82 *
83 * @since 1.0
84 */
85 public PBApplication() {
86 super();
87 }
88
89 /***
90 * Defer execution to strategy.
91 *
92 * @exception ApplicationException
93 *
94 * @since 1.0
95 */
96 public void run() throws ApplicationException {
97 log.debug("run()");
98 try {
99 strategy.run();
100 }
101 catch (ProcessingException pe) {
102 log.error("ProcessingException thrown.", pe);
103 throw new ApplicationException(
104 pe.toString(),
105 pe,
106 pe.getExitCode());
107 }
108 }
109
110 /***
111 * Configure the InterfaceApplication w/ the appropriate
112 * framework implementation classes. (strategy,
113 * inputadapter, outputadapter). Be very selective about
114 * what goes in this method. It is called after some of the
115 * other batch architecture is initialized; specifically,
116 * the super classes, and audit agent. If you re-configure
117 * or add new elements here, those classes will not see
118 * them.
119 *
120 * @exception InitializationException
121 *
122 * @since 1.0.
123 */
124 protected void doInit() throws InitializationException {
125 try {
126 log = LogUtil.getLogger();
127 }
128 catch (ConfigurationException e) {
129 throw new InitializationException(e.toString(), e);
130 }
131
132 log.debug("doInit()");
133 try {
134 Properties props = getProperties();
135
136 // 1. set strategy.
137 // i'm providing a default strategy, but i recommend that you
138 // always provide your own.
139 String strategyClassName =
140 props.getProperty(
141 "ApplicationStrategy",
142 "com.rhi.architecture.parc.SingleCallApplicationStrategy");
143 Class strategyClass = Class.forName(strategyClassName);
144 strategy = (ApplicationStrategy) strategyClass.newInstance();
145 strategy.init(props);
146 }
147 catch (ClassNotFoundException cnfe) {
148 throw new InitializationException("ClassNotFoundException", cnfe);
149 }
150 catch (InstantiationException ie) {
151 throw new InitializationException("InstantiationException", ie);
152 }
153 catch (IllegalAccessException iae) {
154 throw new InitializationException("IllegalAccessException", iae);
155 }
156 }
157
158 /***
159 * Perform any cleanup required before the application exits.
160 *
161 * @since 1.0
162 */
163 protected void doCleanup() {
164 // no op
165 }
166
167 /***
168 * Main() - calls execute in framework classes.
169 *
170 * @param args[] command line arguments.
171 *
172 * @since 1.0
173 */
174 public static void main(String args[]) {
175 int status = Application.SUCCESS;
176 PBApplication appl = new PBApplication();
177 try {
178 appl.execute(args);
179 }
180 catch (ApplicationException e) {
181 status = e.getExitCode();
182 }
183 System.exit(status);
184 }
185
186 /***
187 * returns false because the Process instances will handle their
188 * own audit responsibilities w/o help from the application.
189 *
190 * @return boolean - false
191 * @since 2.0
192 */
193 protected boolean isAuditEnabled() {
194 return false;
195 }
196
197 }
This page was automatically generated by Maven