001 /**
002 * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
003 * Licensed under the Apache License, Version 2.0 (the "License");
004 * you may not use this file except in compliance with the License.
005 * You may obtain a copy of the License at
006 *
007 * http://www.apache.org/licenses/LICENSE-2.0
008 *
009 * Unless required by applicable law or agreed to in writing, software
010 * distributed under the License is distributed on an "AS IS" BASIS,
011 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 * See the License for the specific language governing permissions and
013 * limitations under the License. See accompanying LICENSE file.
014 */
015 package org.apache.oozie.action;
016
017 import org.apache.oozie.util.ParamChecker;
018 import org.apache.oozie.util.XLog;
019
020 /**
021 * ActionExecutor exception. <p/> The exception provides information regarding the transient/no-transient/fatal nature
022 * of the exception.
023 */
024 public class ActionExecutorException extends Exception {
025
026 /**
027 * Enum that defines the type of error an {@link ActionExecutor} has produced.
028 */
029 public static enum ErrorType {
030
031 /**
032 * The action will be automatically retried by Oozie.
033 */
034 TRANSIENT,
035
036 /**
037 * The job in set in SUSPEND mode and it will wait for an admin to resume the job.
038 */
039
040 NON_TRANSIENT,
041
042 /**
043 * The action completes with an error transition.
044 */
045 ERROR,
046
047 /**
048 * The action fails. No transition is taken.
049 */
050 FAILED
051 }
052
053 private ErrorType errorType;
054 private String errorCode;
055
056 /**
057 * Create an action executor exception.
058 *
059 * @param errorType the error type.
060 * @param errorCode the error code.
061 * @param message the error message.
062 */
063 public ActionExecutorException(ErrorType errorType, String errorCode, String message) {
064 super(message);
065 this.errorType = ParamChecker.notNull(errorType, "errorType");
066 this.errorCode = ParamChecker.notEmpty(errorCode, "errorCode");
067 }
068
069 /**
070 * Create an action executor exception.
071 *
072 * <p/> If the last parameter is an Exception it is used as the exception cause.
073 *
074 * @param errorType the error type.
075 * @param errorCode the error code.
076 * @param messageTemplate the error message.
077 * @param params parameters used to create the exception message together with the messageTemplate. If the last
078 * parameter is an Exception it is used as the exception cause.
079 */
080 public ActionExecutorException(ErrorType errorType, String errorCode, String messageTemplate, Object... params) {
081 super(errorCode + ": " + XLog.format(messageTemplate, params), XLog.getCause(params));
082 this.errorType = ParamChecker.notNull(errorType, "errorType");
083 this.errorCode = ParamChecker.notEmpty(errorCode, "errorCode");
084 }
085
086 /**
087 * Return the error type of the exception.
088 *
089 * @return the error type of the exception.
090 */
091 public ErrorType getErrorType() {
092 return errorType;
093 }
094
095 /**
096 * Return the error code of the exception.
097 *
098 * @return the error code of the exception.
099 */
100 public String getErrorCode() {
101 return errorCode;
102 }
103 }