This project has retired. For details please refer to its
Attic page.
001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.oozie;
019
020 import java.util.Collections;
021 import java.util.Iterator;
022 import java.util.List;
023 import java.util.Properties;
024
025 import org.apache.oozie.client.OozieClient;
026 import org.apache.oozie.client.OozieClientException;
027 import org.apache.oozie.client.WorkflowJob;
028 import org.apache.oozie.util.XConfiguration;
029
030 /**
031 * Client API to submit and manage Oozie workflow jobs against an Oozie intance. <p/> This class is thread safe. <p/>
032 * Syntax for filter for the {@link #getJobsInfo(String)} {@link #getJobsInfo(String, int, int)} methods:
033 * <code>[NAME=VALUE][;NAME=VALUE]*</code>. <p/> Valid filter names are: <p/> <ul/> <li>name: the workflow application
034 * name from the workflow definition.</li> <li>user: the user that submitted the job.</li> <li>group: the group for the
035 * job.</li> <li>status: the status of the job.</li> </ul> <p/> The query will do an AND among all the filter names. The
036 * query will do an OR among all the filter values for the same name. Multiple values must be specified as different
037 * name value pairs.
038 */
039 public class LocalOozieClient extends OozieClient {
040
041 private DagEngine dagEngine;
042
043 /**
044 * Create a workflow client for Oozie local use. <p/>
045 *
046 * @param dagEngine the dag engine instance to use.
047 */
048 public LocalOozieClient(DagEngine dagEngine) {
049 this.dagEngine = dagEngine;
050 }
051
052 /**
053 * Return the Oozie URL of the workflow client instance. <p/> This URL is the base URL fo the Oozie system, with not
054 * protocol versioning.
055 *
056 * @return the Oozie URL of the workflow client instance.
057 */
058 @Override
059 public String getOozieUrl() {
060 return "localoozie";
061 }
062
063 /**
064 * Return the Oozie URL used by the client and server for WS communications. <p/> This URL is the original URL plus
065 * the versioning element path.
066 *
067 * @return the Oozie URL used by the client and server for communication.
068 * @throws org.apache.oozie.client.OozieClientException thrown in the client and the server are not protocol
069 * compatible.
070 */
071 @Override
072 public String getProtocolUrl() throws OozieClientException {
073 return "localoozie";
074 }
075
076 /**
077 * Validate that the Oozie client and server instances are protocol compatible.
078 *
079 * @throws org.apache.oozie.client.OozieClientException thrown in the client and the server are not protocol
080 * compatible.
081 */
082 @Override
083 public synchronized void validateWSVersion() throws OozieClientException {
084 }
085
086 /**
087 * Create an empty configuration with just the {@link #USER_NAME} set to the JVM user name and the {@link
088 * #GROUP_NAME} set to 'other'.
089 *
090 * @return an empty configuration.
091 */
092 @Override
093 public Properties createConfiguration() {
094 Properties conf = new Properties();
095 if (dagEngine != null) {
096 conf.setProperty(USER_NAME, dagEngine.getUser());
097 }
098 conf.setProperty(GROUP_NAME, "users");
099 return conf;
100 }
101
102 /**
103 * Set a HTTP header to be used in the WS requests by the workflow instance.
104 *
105 * @param name header name.
106 * @param value header value.
107 */
108 @Override
109 public void setHeader(String name, String value) {
110 }
111
112 /**
113 * Get the value of a set HTTP header from the workflow instance.
114 *
115 * @param name header name.
116 * @return header value, <code>null</code> if not set.
117 */
118 @Override
119 public String getHeader(String name) {
120 return null;
121 }
122
123 /**
124 * Remove a HTTP header from the workflow client instance.
125 *
126 * @param name header name.
127 */
128 @Override
129 public void removeHeader(String name) {
130 }
131
132 /**
133 * Return an iterator with all the header names set in the workflow instance.
134 *
135 * @return header names.
136 */
137 @Override
138 @SuppressWarnings("unchecked")
139 public Iterator<String> getHeaderNames() {
140 return Collections.EMPTY_SET.iterator();
141 }
142
143
144 /**
145 * Submit a workflow job.
146 *
147 * @param conf job configuration.
148 * @return the job Id.
149 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be submitted.
150 */
151 @Override
152 public String submit(Properties conf) throws OozieClientException {
153 try {
154 return dagEngine.submitJob(new XConfiguration(conf), false);
155 }
156 catch (DagEngineException ex) {
157 throw new OozieClientException(ex.getErrorCode().toString(), ex);
158 }
159 }
160
161 /**
162 * Start a workflow job.
163 *
164 * @param jobId job Id.
165 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be started.
166 */
167 @Override
168 public void start(String jobId) throws OozieClientException {
169 try {
170 dagEngine.start(jobId);
171 }
172 catch (DagEngineException ex) {
173 throw new OozieClientException(ex.getErrorCode().toString(), ex);
174 }
175 }
176
177 /**
178 * Submit and start a workflow job.
179 *
180 * @param conf job configuration.
181 * @return the job Id.
182 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be submitted.
183 */
184 @Override
185 public String run(Properties conf) throws OozieClientException {
186 try {
187 return dagEngine.submitJob(new XConfiguration(conf), true);
188 }
189 catch (DagEngineException ex) {
190 throw new OozieClientException(ex.getErrorCode().toString(), ex);
191 }
192 }
193
194 /**
195 * Rerun a workflow job.
196 *
197 * @param jobId job Id to rerun.
198 * @param conf configuration information for the rerun.
199 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be started.
200 */
201 @Override
202 public void reRun(String jobId, Properties conf) throws OozieClientException {
203 try {
204 dagEngine.reRun(jobId, new XConfiguration(conf));
205 }
206 catch (DagEngineException ex) {
207 throw new OozieClientException(ex.getErrorCode().toString(), ex);
208 }
209 }
210
211 /**
212 * Suspend a workflow job.
213 *
214 * @param jobId job Id.
215 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be suspended.
216 */
217 @Override
218 public void suspend(String jobId) throws OozieClientException {
219 try {
220 dagEngine.suspend(jobId);
221 }
222 catch (DagEngineException ex) {
223 throw new OozieClientException(ex.getErrorCode().toString(), ex);
224 }
225 }
226
227 /**
228 * Resume a workflow job.
229 *
230 * @param jobId job Id.
231 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be resume.
232 */
233 @Override
234 public void resume(String jobId) throws OozieClientException {
235 try {
236 dagEngine.resume(jobId);
237 }
238 catch (DagEngineException ex) {
239 throw new OozieClientException(ex.getErrorCode().toString(), ex);
240 }
241 }
242
243 /**
244 * Kill a workflow job.
245 *
246 * @param jobId job Id.
247 * @throws org.apache.oozie.client.OozieClientException thrown if the job could not be killed.
248 */
249 @Override
250 public void kill(String jobId) throws OozieClientException {
251 try {
252 dagEngine.kill(jobId);
253 }
254 catch (DagEngineException ex) {
255 throw new OozieClientException(ex.getErrorCode().toString(), ex);
256 }
257 }
258
259 /**
260 * Get the info of a workflow job.
261 *
262 * @param jobId job Id.
263 * @return the job info.
264 * @throws org.apache.oozie.client.OozieClientException thrown if the job info could not be retrieved.
265 */
266 @Override
267 public WorkflowJob getJobInfo(String jobId) throws OozieClientException {
268 try {
269 return dagEngine.getJob(jobId);
270 }
271 catch (DagEngineException ex) {
272 throw new OozieClientException(ex.getErrorCode().toString(), ex);
273 }
274 }
275
276 /**
277 * Return the info of the workflow jobs that match the filter.
278 *
279 * @param filter job filter. Refer to the {@link LocalOozieClient} for the filter syntax.
280 * @param start jobs offset, base 1.
281 * @param len number of jobs to return.
282 * @return a list with the workflow jobs info, without node details.
283 * @throws org.apache.oozie.client.OozieClientException thrown if the jobs info could not be retrieved.
284 */
285 @Override
286 public List<WorkflowJob> getJobsInfo(String filter, int start, int len) throws OozieClientException {
287 try {
288 return (List) dagEngine.getJobs(filter, start, len).getWorkflows();
289 }
290 catch (DagEngineException ex) {
291 throw new OozieClientException(ex.getErrorCode().toString(), ex);
292 }
293 }
294
295 /**
296 * Return the info of the workflow jobs that match the filter. <p/> It returns the first 100 jobs that match the
297 * filter.
298 *
299 * @param filter job filter. Refer to the {@link LocalOozieClient} for the filter syntax.
300 * @return a list with the workflow jobs info, without node details.
301 * @throws org.apache.oozie.client.OozieClientException thrown if the jobs info could not be retrieved.
302 */
303 @Override
304 public List<WorkflowJob> getJobsInfo(String filter) throws OozieClientException {
305 return getJobsInfo(filter, 1, 100);
306 }
307
308 /**
309 * Return the workflow job Id for an external Id. <p/> The external Id must have provided at job creation time.
310 *
311 * @param externalId external Id given at job creation time.
312 * @return the workflow job Id for an external Id, <code>null</code> if none.
313 * @throws org.apache.oozie.client.OozieClientException thrown if the operation could not be done.
314 */
315 @Override
316 public String getJobId(String externalId) throws OozieClientException {
317 try {
318 return dagEngine.getJobIdForExternalId(externalId);
319 }
320 catch (DagEngineException ex) {
321 throw new OozieClientException(ex.getErrorCode().toString(), ex);
322 }
323 }
324
325 /**
326 * Returns if Oozie is in safe mode or not.
327 *
328 * @return true if safe mode is ON<br> false if safe mode is OFF
329 * @throws org.apache.oozie.client.OozieClientException throw if it could not obtain the safe mode status.
330 */
331 /*public SYSTEM_MODE isInSafeMode() throws OozieClientException {
332 //return Services.get().isSafeMode();
333 return Services.get().getSystemMode() ;
334 }*/
335
336 }