You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by mo...@apache.org on 2013/05/20 18:51:39 UTC

svn commit: r1484523 [1/5] - in /oozie/trunk: ./ client/src/main/java/org/apache/oozie/ client/src/main/java/org/apache/oozie/cli/ client/src/main/java/org/apache/oozie/client/ client/src/main/java/org/apache/oozie/client/event/ client/src/main/java/or...

Author: mona
Date: Mon May 20 16:51:37 2013
New Revision: 1484523

URL: http://svn.apache.org/r1484523
Log:
OOZIE-1244 SLA Support in Oozie (mona)

Added:
    oozie/trunk/client/src/main/java/org/apache/oozie/AppType.java
    oozie/trunk/client/src/main/resources/oozie-sla-0.2.xsd
    oozie/trunk/client/src/main/resources/oozie-workflow-0.5.xsd
    oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/sla/
    oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/sla/JsonSLARegistrationEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLACalculationInsertUpdateJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLACalculatorGetJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLARegistrationGetJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLASummaryGetJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLACalcStatus.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLACalculator.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLACalculatorBean.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLACalculatorMemory.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLAOperations.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLARegistrationBean.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLASummaryBean.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/listener/
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/listener/SLAEventListener.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/listener/SLAJobEventListener.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/SLAService.java
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLACalculationJPAExecutor.java
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAEventGeneration.java
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAJobEventListener.java
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLARegistrationGetJPAExecutor.java
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAService.java
    oozie/trunk/core/src/test/resources/coord-action-sla.xml
    oozie/trunk/core/src/test/resources/wf-action-sla.xml
    oozie/trunk/core/src/test/resources/wf-job-sla.xml
Modified:
    oozie/trunk/client/src/main/java/org/apache/oozie/cli/OozieCLI.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/JMSConnectionInfo.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/SLAEvent.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/Event.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/JobEvent.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/SLAEvent.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/JSONMessageDeserializer.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/MessageDeserializer.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/CoordinatorActionMessage.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/EventMessage.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/JobMessage.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/WorkflowJobMessage.java
    oozie/trunk/client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java
    oozie/trunk/client/src/main/resources/oozie-coordinator-0.4.xsd
    oozie/trunk/client/src/main/resources/oozie-workflow-0.4.5.xsd
    oozie/trunk/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java
    oozie/trunk/core/pom.xml
    oozie/trunk/core/src/main/conf/oozie-site.xml
    oozie/trunk/core/src/main/java/org/apache/oozie/CoordinatorActionBean.java
    oozie/trunk/core/src/main/java/org/apache/oozie/ErrorCode.java
    oozie/trunk/core/src/main/java/org/apache/oozie/SLAEventBean.java
    oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/JsonSLAEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/TransitionXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordActionCheckXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordActionInputCheckXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordActionMaterializeCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordActionStartXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordActionTimeOutXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordActionUpdateXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordKillXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordMaterializeTransitionXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordPushDependencyCheckXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordRerunXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordSubmitXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordSuspendXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/CoordinatorXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/coord/SLAEventsXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ActionEndXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/KillXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ResumeXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/SignalXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/SubmitXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/SuspendXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/WorkflowXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/BundleJobEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/CoordinatorActionEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/CoordinatorJobEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/EventQueue.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/MemoryEventQueue.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/WorkflowActionEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/WorkflowJobEvent.java
    oozie/trunk/core/src/main/java/org/apache/oozie/event/listener/JobEventListener.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/CoordJobGetActionsNotCompletedJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/SLAEventInsertJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/SLAEventsGetForFilterJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/SLAEventsGetForSeqIdJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/SLAEventsGetJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/jms/JMSJobEventListener.java
    oozie/trunk/core/src/main/java/org/apache/oozie/service/EventHandlerService.java
    oozie/trunk/core/src/main/java/org/apache/oozie/service/JMSTopicService.java
    oozie/trunk/core/src/main/java/org/apache/oozie/service/JPAService.java
    oozie/trunk/core/src/main/java/org/apache/oozie/service/SchedulerService.java
    oozie/trunk/core/src/main/java/org/apache/oozie/service/SchemaService.java
    oozie/trunk/core/src/main/java/org/apache/oozie/servlet/SLAServlet.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/event/listener/SLAEventListener.java
    oozie/trunk/core/src/main/java/org/apache/oozie/store/SLAStore.java
    oozie/trunk/core/src/main/java/org/apache/oozie/util/XmlUtils.java
    oozie/trunk/core/src/main/java/org/apache/oozie/util/db/SLADbOperations.java
    oozie/trunk/core/src/main/java/org/apache/oozie/util/db/SLADbXOperations.java
    oozie/trunk/core/src/main/resources/META-INF/persistence.xml
    oozie/trunk/core/src/main/resources/oozie-default.xml
    oozie/trunk/core/src/test/java/org/apache/oozie/TestSLAEventBean.java
    oozie/trunk/core/src/test/java/org/apache/oozie/command/coord/TestCoordActionMaterializeCommand.java
    oozie/trunk/core/src/test/java/org/apache/oozie/command/coord/TestCoordMaterializeTransitionXCommand.java
    oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventGeneration.java
    oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventQueue.java
    oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestSLAEventsGetJPAExecutor.java
    oozie/trunk/core/src/test/java/org/apache/oozie/jms/TestJMSJobEventListener.java
    oozie/trunk/core/src/test/java/org/apache/oozie/service/TestEventHandlerService.java
    oozie/trunk/core/src/test/java/org/apache/oozie/service/TestJMSTopicService.java
    oozie/trunk/core/src/test/java/org/apache/oozie/test/XDataTestCase.java
    oozie/trunk/core/src/test/java/org/apache/oozie/test/XTestCase.java
    oozie/trunk/examples/src/main/apps/sla/coordinator.xml
    oozie/trunk/examples/src/main/apps/sla/job.properties
    oozie/trunk/examples/src/main/apps/sla/workflow.xml
    oozie/trunk/release-log.txt
    oozie/trunk/tools/src/main/java/org/apache/oozie/tools/OozieDBCLI.java

Added: oozie/trunk/client/src/main/java/org/apache/oozie/AppType.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/AppType.java?rev=1484523&view=auto
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/AppType.java (added)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/AppType.java Mon May 20 16:51:37 2013
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.oozie;
+
+/**
+ * App-type means job-type to enable to ease filtering
+ */
+public enum AppType {
+    WORKFLOW_JOB, WORKFLOW_ACTION, COORDINATOR_JOB, COORDINATOR_ACTION, BUNDLE_JOB, BUNDLE_ACTION
+}

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/cli/OozieCLI.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/cli/OozieCLI.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/cli/OozieCLI.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/cli/OozieCLI.java Mon May 20 16:51:37 2013
@@ -1543,6 +1543,8 @@ public class OozieCLI {
                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                         "oozie-workflow-0.4.xsd")));
                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
+                        "oozie-workflow-0.5.xsd")));
+                sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                         "oozie-coordinator-0.1.xsd")));
                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                         "oozie-coordinator-0.2.xsd")));
@@ -1557,6 +1559,8 @@ public class OozieCLI {
                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                         "oozie-sla-0.1.xsd")));
                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
+                        "oozie-sla-0.2.xsd")));
+                sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                         "hive-action-0.2.xsd")));
                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                         "hive-action-0.3.xsd")));
@@ -1581,7 +1585,7 @@ public class OozieCLI {
                 System.out.println("Valid workflow-app");
             }
             catch (Exception ex) {
-                throw new OozieCLIException("Invalid workflow-app, " + ex.toString(), ex);
+                throw new OozieCLIException("Invalid app definition, " + ex.toString(), ex);
             }
         }
         else {

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/JMSConnectionInfo.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/JMSConnectionInfo.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/JMSConnectionInfo.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/JMSConnectionInfo.java Mon May 20 16:51:37 2013
@@ -19,7 +19,7 @@ package org.apache.oozie.client;
 
 import java.util.Properties;
 
-import org.apache.oozie.client.event.Event;
+import org.apache.oozie.AppType;
 
 /**
  * JMS connection related information
@@ -38,7 +38,7 @@ public interface JMSConnectionInfo {
      * @param appType the appType for a job
      * @return JMS topic pattern
      */
-    String getTopicPattern(Event.AppType appType);
+    String getTopicPattern(AppType appType);
 
     /**
      * Retrieve the JNDI properties for establishing connection to JMS server

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/SLAEvent.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/SLAEvent.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/SLAEvent.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/SLAEvent.java Mon May 20 16:51:37 2013
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,11 +19,11 @@ package org.apache.oozie.client;
 
 import java.util.Date;
 
+@Deprecated
 /**
  * Bean that represents a SLA event
- * @deprecated This interface has been deprecated by the interface
- * SLAEvent in oozie.client.event package which works with the
- * new SLA Calculator system OOZIE-1244
+ * @deprecated This interface has been deprecated by the abstract class
+ * org.apache.oozie.client.event.SLAEvent designed for the new SLA Calculator system OOZIE-1244
  */
 public interface SLAEvent {
 

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/Event.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/Event.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/Event.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/Event.java Mon May 20 16:51:37 2013
@@ -18,49 +18,38 @@
 package org.apache.oozie.client.event;
 
 /**
- * This interface defines an Event that can be generated via
- * Job status changes or SLA related events
+ * This interface defines an Event that can be generated via Job status changes
+ * or SLA related events
  */
-public interface Event {
+public abstract class Event {
+
+    protected MessageType msgType;
 
     /**
      * Events will be messages, broadly of type - Job related or SLA related
-     *
      */
     public static enum MessageType {
-        JOB,
-        SLA
+        JOB, SLA
     }
 
-    /**
-     * Events carry the associated app-type or job-type to enable toggling on/off
-     * events generated only for specific app-types or filtering on receiving side
-     */
-    public static enum AppType {
-        WORKFLOW_JOB,
-        WORKFLOW_ACTION,
-        COORDINATOR_JOB,
-        COORDINATOR_ACTION,
-        BUNDLE_JOB,
-        BUNDLE_ACTION
+    public Event(MessageType msgType) {
+        this.msgType = msgType;
     }
 
-    /**
-     * Get the AppType of the event
-     * @return AppType
-     */
-    public AppType getAppType();
+    public Event() {
+    }
 
     /**
      * Get the MessageType of the event
+     *
      * @return MessageType
      */
-    public MessageType getMsgType();
+    public MessageType getMsgType() {
+        return msgType;
+    }
 
-    /**
-     * Get the app-name of the job generating this event
-     * @return String app-name
-     */
-    public String getAppName();
+    public void setMsgType(MessageType type) {
+        msgType = type;
+    }
 
 }

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/JobEvent.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/JobEvent.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/JobEvent.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/JobEvent.java Mon May 20 16:51:37 2013
@@ -20,61 +20,41 @@ package org.apache.oozie.client.event;
 import java.io.Serializable;
 import java.util.Date;
 
-import org.apache.oozie.client.event.Event;
+import org.apache.oozie.AppType;
 
 /**
  * An abstract implementation of the Event interface, related to
  * notification events after job status changes
  */
-public abstract class JobEvent implements Event, Serializable {
+public abstract class JobEvent extends Event implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     /**
      * Coarse-grained status of the job event
-     *
      */
     public static enum EventStatus {
         WAITING, STARTED, SUCCESS, SUSPEND, FAILURE
     }
 
-    private AppType appType;
-    private MessageType msgType;
     private String id;
     private String parentId;
-    private EventStatus eventStatus;
-    private String appName;
     private String user;
+    private AppType appType;
+    private String appName;
+    private EventStatus eventStatus;
     private Date startTime;
     private Date endTime;
 
-    public JobEvent(AppType appType, String id, String parentId, String user, String appName) {
-        this.appType = appType;
-        this.msgType = MessageType.JOB;
+    public JobEvent(String id, String parentId, String user, AppType appType, String appName) {
+        super(MessageType.JOB);
         this.id = id;
         this.parentId = parentId;
         this.user = user;
+        this.appType = appType;
         this.appName = appName;
     }
 
-    @Override
-    public AppType getAppType() {
-        return appType;
-    }
-
-    public void setAppType(AppType type) {
-        appType = type;
-    }
-
-    @Override
-    public MessageType getMsgType() {
-        return msgType;
-    }
-
-    public void setMsgType(MessageType type) {
-        msgType = type;
-    }
-
     public String getId() {
         return id;
     }
@@ -91,15 +71,24 @@ public abstract class JobEvent implement
         parentId = id;
     }
 
-    public EventStatus getEventStatus() {
-        return eventStatus;
+    /**
+     * Get the AppType of the event
+     *
+     * @return AppType
+     */
+    public AppType getAppType() {
+        return appType;
     }
 
-    public void setEventStatus(EventStatus eStatus) {
-        eventStatus = eStatus;
+    public void setAppType(AppType type) {
+        appType = type;
     }
 
-    @Override
+    /**
+     * Get the app-name of the job generating this event
+     *
+     * @return String app-name
+     */
     public String getAppName() {
         return appName;
     }
@@ -108,6 +97,11 @@ public abstract class JobEvent implement
         appName = name;
     }
 
+    /**
+     * Get user name
+     *
+     * @return user
+     */
     public String getUser() {
         return user;
     }
@@ -116,6 +110,20 @@ public abstract class JobEvent implement
         user = euser;
     }
 
+    /**
+     * Get the coarse status
+     *
+     * @return EventStatus
+     */
+    public EventStatus getEventStatus() {
+        return eventStatus;
+    }
+
+    public void setEventStatus(EventStatus eStatus) {
+        eventStatus = eStatus;
+    }
+
+
     public Date getStartTime() {
         return startTime;
     }
@@ -134,8 +142,8 @@ public abstract class JobEvent implement
 
     @Override
     public String toString() {
-        return "ID: " + getId() + ", AppType: " + getAppType() + ", Appname: " + getAppName() + ", Status: "
-                + getEventStatus();
+        return "ID: " + getId() + ", MsgType:" + getMsgType() + ", AppType: " + getAppType() + ", Appname: "
+                + getAppName() + ", Status: " + getEventStatus();
     }
 
 }

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/SLAEvent.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/SLAEvent.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/SLAEvent.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/SLAEvent.java Mon May 20 16:51:37 2013
@@ -18,167 +18,172 @@
 package org.apache.oozie.client.event;
 
 import java.util.Date;
-
-import org.apache.oozie.client.event.Event;
-import org.apache.oozie.client.event.JobEvent.EventStatus;
+import org.apache.oozie.AppType;
 
 /**
  * A sub-class of the Event interface, related to
  * notification events after SLA mets/misses
  */
-public interface SLAEvent extends Event {
+public abstract class SLAEvent extends Event {
 
-    public static enum EventType {
-        START_MET,
-        START_MISS,
-        END_MET,
-        END_MISS,
-        DURATION_MET,
-        DURATION_MISS
+    public static enum EventStatus {
+        START_MET, START_MISS, END_MET, END_MISS, DURATION_MET, DURATION_MISS
     }
 
-    /**
-     * Get the SLA event-type
-     * @return SLAEvent.EventType
-     */
-    public EventType getEventType();
+    public static enum SLAStatus {
+        NOT_STARTED, IN_PROCESS, MET, MISS
+    }
 
     /**
-     * Get the job id
-     * @return String id
+     * Get the SLA status
+     *
+     * @return SLAEvent.SLAStatus
      */
-    public String getId();
+    public abstract SLAStatus getSLAStatus();
 
     /**
-     * Get the parent job id
-     * @return String id
+     * Get the SLA event status
+     *
+     * @return SLAEvent.EventStatus
      */
-    public String getParentId();
+    public abstract EventStatus getEventStatus();
 
-    /**
-     * Get the actual job status
-     * @return EventStatus status
-     */
-    public EventStatus getJobStatus();
+    @Override
+    public MessageType getMsgType() {
+        return msgType;
+    }
 
     /**
      * Get the job-id
+     *
      * @return String job-id
      */
-    public String getJobId();
+    public abstract String getJobId();
 
     /**
-     * Get the sla event sequence-id
-     * @return String sequence-id
+     * Get the id of the parent job
+     *
+     * @return String parent-id
      */
-    public String getSequenceId();
+    public abstract String getParentId();
 
     /**
-     * Get the expected start-time for this job
-     * @return Date expected start-time
+     * Get the AppType of the event
+     *
+     * @return AppType
      */
-    public Date getExpectedStart();
+    public abstract AppType getAppType();
 
     /**
-     * Get the actual start-time for this job
-     * @return Date actual start-time
+     * Get the app-name of the job generating this event
+     *
+     * @return String app-name
      */
-    public Date getActualStart();
+    public abstract String getAppName();
 
     /**
-     * Get the expected end-time for this job
-     * @return Date expected end-time
+     * Get the job's nominal time
+     *
+     * @return Date nominal time
      */
-    public Date getExpectedEnd();
+    public abstract Date getNominalTime();
 
     /**
-     * Get the actual end-time for this job
-     * @return Date actual end-time
+     * Get the expected start-time for this job
+     *
+     * @return Date expected start-time
      */
-    public Date getActualEnd();
+    public abstract Date getExpectedStart(); // nominal time + should-start
 
     /**
-     * Get the expected duration for this job
-     * @return Date expected duration
+     * Get the expected end-time for this job
+     *
+     * @return Date expected end-time
      */
-    public long getExpectedDuration();
+    public abstract Date getExpectedEnd(); // nominal time + should-end
 
     /**
-     * Get the actual duration for this job
-     * @return Date actual duration
+     * Get the expected duration for this job
+     *
+     * @return Date expected duration
      */
-    public long getActualDuration();
+    public abstract long getExpectedDuration();
 
     /**
      * Get the sla notification-message
+     *
      * @return String notification-message
      */
-    public String getNotificationMsg();
-
-    /**
-     * Get the SLA alert-contact
-     * @return String alert-contact
-     */
-    public String getAlertContact();
+    public abstract String getNotificationMsg();
 
     /**
-     * Get the SLA dev-contact
-     * @return String dev-contact
+     * Get the SLA alert-events
+     *
+     * @return String alert-events
      */
-    public String getDevContact();
+    public abstract String getAlertEvents();
 
     /**
-     * Get the SLA qa-contact
-     * @return String qa-contact
+     * Get the SLA alert-contact
+     *
+     * @return String alert-contact
      */
-    public String getQaContact();
+    public abstract String getAlertContact();
 
     /**
-     * Get the SLA alert-contact
-     * @return String alert-contact
+     * Get the dependent upstream apps
+     *
+     * @return String upstream-apps
      */
-    public String getSeContact();
+    public abstract String getUpstreamApps();
 
     /**
-     * Get the SLA alert-frequency
-     * @return String alert-frequency
+     * Get job related data or configuration
+     *
+     * @return String job-data
      */
-    public String getAlertFrequency();
+    public abstract String getJobData();
 
     /**
-     * Get the SLA alert-percentage
-     * @return String alert-percentage
+     * Get the user for this job sla
+     *
+     * @return String user
      */
-    public String getAlertPercentage();
+    public abstract String getUser();
 
     /**
-     * Get the dependent upstream apps
-     * @return String upstream-apps
+     * Get the miscellaneous key-value configs
+     *
+     * @return String slaConfig
      */
-    public String getUpstreamApps();
+    public abstract String getSlaConfig();
 
     /**
-     * Get job related data or configuration
-     * @return String job-data
+     * Get the actual start time of job for SLA
+     *
+     * @return Date actual-start
      */
-    public String getJobData();
+    public abstract Date getActualStart();
 
     /**
-     * Get last modified time of this sla event
-     * @return Date last-modified-time
+     * Get the actual end time of job for SLA
+     *
+     * @return Date actual-end
      */
-    public Date getLastModified();
+    public abstract Date getActualEnd();
 
     /**
-     * Get the user for this job sla
-     * @return String user
+     * Get the actual duration of job for SLA
+     *
+     * @return long duration
      */
-    public String getUser();
+    public abstract long getActualDuration();
 
     /**
-     * Get the nominal time for this job under sla
-     * @return Date nominalTime
+     * Get the job status
+     *
+     * @return String job-status
      */
-    public Date getNominalTime();
+    public abstract String getJobStatus();
 
 }

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/JSONMessageDeserializer.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/JSONMessageDeserializer.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/JSONMessageDeserializer.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/JSONMessageDeserializer.java Mon May 20 16:51:37 2013
@@ -19,14 +19,10 @@ package org.apache.oozie.client.event.jm
 
 import javax.jms.JMSException;
 import javax.jms.Message;
-import javax.jms.TextMessage;
-
-import org.apache.oozie.client.event.Event;
-import org.apache.oozie.client.event.Event.AppType;
+import org.apache.oozie.AppType;
 import org.apache.oozie.client.event.JobEvent.EventStatus;
 import org.apache.oozie.client.event.Event.MessageType;
 import org.apache.oozie.client.event.message.CoordinatorActionMessage;
-import org.apache.oozie.client.event.message.EventMessage;
 import org.apache.oozie.client.event.message.WorkflowJobMessage;
 import org.codehaus.jackson.map.DeserializationConfig;
 import org.codehaus.jackson.map.ObjectMapper;

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/MessageDeserializer.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/MessageDeserializer.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/MessageDeserializer.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/jms/MessageDeserializer.java Mon May 20 16:51:37 2013
@@ -20,7 +20,7 @@ package org.apache.oozie.client.event.jm
 import org.apache.oozie.client.event.message.CoordinatorActionMessage;
 import org.apache.oozie.client.event.message.EventMessage;
 import org.apache.oozie.client.event.message.WorkflowJobMessage;
-import org.apache.oozie.client.event.Event;
+import org.apache.oozie.AppType;
 import javax.jms.Message;
 import javax.jms.TextMessage;
 import javax.jms.JMSException;
@@ -47,7 +47,7 @@ public abstract class MessageDeserialize
                     + "AppType and/or MessageBody is null/empty." + "Apptype is " + appTypeString + " MessageBody is "
                     + messageBody);
         }
-        switch (Event.AppType.valueOf(appTypeString)) {
+        switch (AppType.valueOf(appTypeString)) {
             case WORKFLOW_JOB:
                 WorkflowJobMessage wfJobMsg = getDeserializedObject(messageBody, WorkflowJobMessage.class);
                 return setProperties(wfJobMsg, textMessage);

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/CoordinatorActionMessage.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/CoordinatorActionMessage.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/CoordinatorActionMessage.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/CoordinatorActionMessage.java Mon May 20 16:51:37 2013
@@ -19,9 +19,9 @@ package org.apache.oozie.client.event.me
 
 import java.util.Date;
 
+import org.apache.oozie.AppType;
 import org.apache.oozie.client.CoordinatorAction;
 import org.apache.oozie.client.event.JobEvent.EventStatus;
-import org.apache.oozie.client.event.Event.AppType;
 import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/EventMessage.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/EventMessage.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/EventMessage.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/EventMessage.java Mon May 20 16:51:37 2013
@@ -19,7 +19,7 @@ package org.apache.oozie.client.event.me
 
 import org.apache.oozie.client.event.Event;
 import org.apache.oozie.client.event.Event.MessageType;
-import org.apache.oozie.client.event.Event.AppType;
+import org.apache.oozie.AppType;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
 /**
@@ -28,7 +28,7 @@ import org.codehaus.jackson.annotate.Jso
  */
 public abstract class EventMessage {
 
-    private Event.AppType appType;
+    private AppType appType;
     private Event.MessageType messageType;
 
     /**

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/JobMessage.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/JobMessage.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/JobMessage.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/JobMessage.java Mon May 20 16:51:37 2013
@@ -21,7 +21,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.oozie.client.event.Event.AppType;
+import org.apache.oozie.AppType;
 import org.apache.oozie.client.event.Event.MessageType;
 import org.apache.oozie.client.event.JobEvent;
 import org.apache.oozie.client.event.jms.JMSHeaderConstants;

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/WorkflowJobMessage.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/WorkflowJobMessage.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/WorkflowJobMessage.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/event/message/WorkflowJobMessage.java Mon May 20 16:51:37 2013
@@ -19,8 +19,8 @@ package org.apache.oozie.client.event.me
 
 import java.util.Date;
 
+import org.apache.oozie.AppType;
 import org.apache.oozie.client.WorkflowJob;
-import org.apache.oozie.client.event.Event;
 import org.apache.oozie.client.event.JobEvent.EventStatus;
 import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
@@ -62,7 +62,7 @@ public class WorkflowJobMessage extends 
     public WorkflowJobMessage(EventStatus eventStatus, String workflowJobId,
             String coordinatorActionId, Date startTime, Date endTime, WorkflowJob.Status status, String user,
             String appName, String errorCode, String errorMessage) {
-        super(eventStatus, Event.AppType.WORKFLOW_JOB, workflowJobId, coordinatorActionId, startTime,
+        super(eventStatus, AppType.WORKFLOW_JOB, workflowJobId, coordinatorActionId, startTime,
                 endTime, user, appName);
         this.status = status;
         this.errorCode = errorCode;

Modified: oozie/trunk/client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java (original)
+++ oozie/trunk/client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java Mon May 20 16:51:37 2013
@@ -25,7 +25,7 @@ import org.apache.oozie.client.JMSConnec
 import org.apache.oozie.client.JMSConnectionInfoWrapper;
 import org.apache.oozie.client.WorkflowAction;
 import org.apache.oozie.client.WorkflowJob;
-import org.apache.oozie.client.event.Event.AppType;
+import org.apache.oozie.AppType;
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 import org.json.simple.JSONValue;

Modified: oozie/trunk/client/src/main/resources/oozie-coordinator-0.4.xsd
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/resources/oozie-coordinator-0.4.xsd?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/resources/oozie-coordinator-0.4.xsd (original)
+++ oozie/trunk/client/src/main/resources/oozie-coordinator-0.4.xsd Mon May 20 16:51:37 2013
@@ -120,7 +120,7 @@
     <xs:complexType name="ACTION">
         <xs:sequence minOccurs="1" maxOccurs="1">
             <xs:element name="workflow" type="coordinator:WORKFLOW" minOccurs="1" maxOccurs="1"/>
-            <xs:any namespace="uri:oozie:sla:0.1" minOccurs="0" maxOccurs="1"/>
+            <xs:any namespace="uri:oozie:sla:0.1 uri:oozie:sla:0.2" minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
     </xs:complexType>
     <xs:complexType name="WORKFLOW">

Added: oozie/trunk/client/src/main/resources/oozie-sla-0.2.xsd
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/resources/oozie-sla-0.2.xsd?rev=1484523&view=auto
==============================================================================
--- oozie/trunk/client/src/main/resources/oozie-sla-0.2.xsd (added)
+++ oozie/trunk/client/src/main/resources/oozie-sla-0.2.xsd Mon May 20 16:51:37 2013
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           xmlns:sla="uri:oozie:sla:0.2" elementFormDefault="qualified"
+           targetNamespace="uri:oozie:sla:0.2">
+
+    <xs:element name="info" type="sla:SLA-INFO"/>
+
+    <xs:complexType name="SLA-INFO">
+        <xs:sequence>
+            <xs:element name="nominal-time" type="xs:string" minOccurs="1"
+                        maxOccurs="1"/>
+            <xs:element name="should-start" type="xs:string" minOccurs="0"
+                        maxOccurs="1"/>
+            <xs:element name="should-end" type="xs:string" minOccurs="1"
+                        maxOccurs="1"/>
+            <xs:element name="max-duration" type="xs:string" minOccurs="0"
+                        maxOccurs="1"/>
+
+            <xs:element name="alert-events" type="xs:string" minOccurs="0"
+                        maxOccurs="1"/>
+            <xs:element name="alert-contact" type="xs:string" minOccurs="0"
+                        maxOccurs="1"/>
+            <xs:element name="notification-msg" type="xs:string" minOccurs="0"
+                        maxOccurs="1"/>
+            <xs:element name="upstream-apps" type="xs:string" minOccurs="0"
+                        maxOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+</xs:schema>

Modified: oozie/trunk/client/src/main/resources/oozie-workflow-0.4.5.xsd
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/resources/oozie-workflow-0.4.5.xsd?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/main/resources/oozie-workflow-0.4.5.xsd (original)
+++ oozie/trunk/client/src/main/resources/oozie-workflow-0.4.5.xsd Mon May 20 16:51:37 2013
@@ -1,339 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:workflow="uri:oozie:workflow:0.4.5"
-           elementFormDefault="qualified" targetNamespace="uri:oozie:workflow:0.4.5">
-
-    <xs:element name="workflow-app" type="workflow:WORKFLOW-APP"/>
-
-    <xs:simpleType name="IDENTIFIER">
-        <xs:restriction base="xs:string">
-            <xs:pattern value="([a-zA-Z_]([\-_a-zA-Z0-9])*){1,39}"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:complexType name="WORKFLOW-APP">
-        <xs:sequence>
-            <xs:element name="parameters" type="workflow:PARAMETERS" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="global" type="workflow:GLOBAL" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="credentials" type="workflow:CREDENTIALS" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="start" type="workflow:START" minOccurs="1" maxOccurs="1"/>
-            <xs:choice minOccurs="0" maxOccurs="unbounded">
-                <xs:element name="decision" type="workflow:DECISION" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="fork" type="workflow:FORK" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="join" type="workflow:JOIN" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="kill" type="workflow:KILL" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="action" type="workflow:ACTION" minOccurs="1" maxOccurs="1"/>
-            </xs:choice>
-            <xs:element name="end" type="workflow:END" minOccurs="1" maxOccurs="1"/>
-            <xs:any namespace="uri:oozie:sla:0.1" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-        <xs:attribute name="name" type="xs:string" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="PARAMETERS">
-        <xs:sequence>
-            <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
-                        <xs:element name="value" minOccurs="0" maxOccurs="1" type="xs:string"/>
-                        <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="GLOBAL">
-        <xs:sequence>
-            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="START">
-        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="END">
-        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="DECISION">
-        <xs:sequence>
-            <xs:element name="switch" type="workflow:SWITCH" minOccurs="1" maxOccurs="1"/>
-        </xs:sequence>
-        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:element name="switch" type="workflow:SWITCH"/>
-
-    <xs:complexType name="SWITCH">
-        <xs:sequence>
-            <xs:sequence>
-                <xs:element name="case" type="workflow:CASE" minOccurs="1" maxOccurs="unbounded"/>
-                <xs:element name="default" type="workflow:DEFAULT" minOccurs="1" maxOccurs="1"/>
-            </xs:sequence>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="CASE">
-        <xs:simpleContent>
-            <xs:extension base="xs:string">
-                <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="DEFAULT">
-        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="FORK_TRANSITION">
-        <xs:attribute name="start" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="FORK">
-        <xs:sequence>
-            <xs:element name="path" type="workflow:FORK_TRANSITION" minOccurs="2" maxOccurs="unbounded"/>
-        </xs:sequence>
-        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="JOIN">
-        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
-        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:element name="kill" type="workflow:KILL"/>
-
-    <xs:complexType name="KILL">
-        <xs:sequence>
-            <xs:element name="message" type="xs:string" minOccurs="1" maxOccurs="1"/>
-        </xs:sequence>
-        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="ACTION_TRANSITION">
-        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
-    </xs:complexType>
-
-    <xs:element name="map-reduce" type="workflow:MAP-REDUCE"/>
-    <xs:element name="pig" type="workflow:PIG"/>
-    <xs:element name="sub-workflow" type="workflow:SUB-WORKFLOW"/>
-    <xs:element name="fs" type="workflow:FS"/>
-    <xs:element name="java" type="workflow:JAVA"/>
-
-    <xs:complexType name="ACTION">
-        <xs:sequence>
-            <xs:choice minOccurs="1" maxOccurs="1">
-                <xs:element name="map-reduce" type="workflow:MAP-REDUCE" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="pig" type="workflow:PIG" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="sub-workflow" type="workflow:SUB-WORKFLOW" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="fs" type="workflow:FS" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="java" type="workflow:JAVA" minOccurs="1" maxOccurs="1"/>
-                <xs:any namespace="##other" minOccurs="1" maxOccurs="1"/>
-            </xs:choice>
-            <xs:element name="ok" type="workflow:ACTION_TRANSITION" minOccurs="1" maxOccurs="1"/>
-            <xs:element name="error" type="workflow:ACTION_TRANSITION" minOccurs="1" maxOccurs="1"/>
-            <xs:any namespace="uri:oozie:sla:0.1" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
-        <xs:attribute name="cred" type="xs:string"/>
-        <xs:attribute name="retry-max" type="xs:string"/>
-        <xs:attribute name="retry-interval" type="xs:string"/>
-    </xs:complexType>
-
-    <xs:complexType name="MAP-REDUCE">
-        <xs:sequence>
-            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="prepare" type="workflow:PREPARE" minOccurs="0" maxOccurs="1"/>
-            <xs:choice minOccurs="0" maxOccurs="1">
-                <xs:element name="streaming" type="workflow:STREAMING" minOccurs="0" maxOccurs="1"/>
-                <xs:element name="pipes" type="workflow:PIPES" minOccurs="0" maxOccurs="1"/>
-            </xs:choice>
-            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="archive" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="PIG">
-        <xs:sequence>
-            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="prepare" type="workflow:PREPARE" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="script" type="xs:string" minOccurs="1" maxOccurs="1"/>
-            <xs:element name="param" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="argument" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="archive" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="SUB-WORKFLOW">
-        <xs:sequence>
-            <xs:element name="app-path" type="xs:string" minOccurs="1" maxOccurs="1"/>
-            <xs:element name="propagate-configuration" type="workflow:FLAG" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="FS">
-        <xs:sequence>
-            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
-            <xs:choice minOccurs="0" maxOccurs="unbounded">
-                <xs:element name="delete" type="workflow:DELETE"/>
-                <xs:element name="mkdir" type="workflow:MKDIR"/>
-                <xs:element name="move" type="workflow:MOVE"/>
-                <xs:element name="chmod" type="workflow:CHMOD"/>
-                <xs:element name="touchz" type="workflow:TOUCHZ"/>
-                <xs:element name="chgrp" type="workflow:CHGRP"/>
-            </xs:choice>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="JAVA">
-        <xs:sequence>
-            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="prepare" type="workflow:PREPARE" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="main-class" type="xs:string" minOccurs="1" maxOccurs="1"/>
-            <xs:choice minOccurs="0" maxOccurs="1">
-                <xs:element name="java-opts" type="xs:string" minOccurs="1" maxOccurs="1"/>
-                <xs:element name="java-opt" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
-            </xs:choice>
-            <xs:element name="arg" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="archive" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="capture-output" type="workflow:FLAG" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="FLAG"/>
-
-    <xs:complexType name="CONFIGURATION">
-        <xs:sequence>
-            <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
-                        <xs:element name="value" minOccurs="1" maxOccurs="1" type="xs:string"/>
-                        <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="STREAMING">
-        <xs:sequence>
-            <xs:element name="mapper" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="reducer" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="record-reader" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="record-reader-mapping" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="env" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="PIPES">
-        <xs:sequence>
-            <xs:element name="map" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="reduce" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="inputformat" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="partitioner" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="writer" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="program" type="xs:string" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="PREPARE">
-        <xs:sequence>
-            <xs:element name="delete" type="workflow:DELETE" minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="mkdir" type="workflow:MKDIR" minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DELETE">
-        <xs:attribute name="path" type="xs:string" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="MKDIR">
-        <xs:attribute name="path" type="xs:string" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="MOVE">
-        <xs:attribute name="source" type="xs:string" use="required"/>
-        <xs:attribute name="target" type="xs:string" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="CHMOD">
-        <xs:sequence>
-            <xs:element name="recursive" type="workflow:FLAG" minOccurs="0" maxOccurs="1"></xs:element>
-        </xs:sequence>
-        <xs:attribute name="path" type="xs:string" use="required"/>
-        <xs:attribute name="permissions" type="xs:string" use="required"/>
-        <xs:attribute name="dir-files" type="xs:string"/>
-    </xs:complexType>
-
-    <xs:complexType name="TOUCHZ">
-        <xs:attribute name="path" type="xs:string" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="CHGRP">
-        <xs:sequence>
-            <xs:element name="recursive" type="workflow:FLAG" minOccurs="0" maxOccurs="1"></xs:element>
-        </xs:sequence>
-        <xs:attribute name="path" type="xs:string" use="required"/>
-        <xs:attribute name="group" type="xs:string" use="required"/>
-        <xs:attribute name="dir-files" type="xs:string"/>
-    </xs:complexType>
-
-    <xs:complexType name="CREDENTIALS">
-        <xs:sequence minOccurs="0" maxOccurs="unbounded">
-            <xs:element name="credential" type="workflow:CREDENTIAL"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="CREDENTIAL">
-        <xs:sequence  minOccurs="0" maxOccurs="unbounded" >
-                 <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
-                    <xs:complexType>
-                       <xs:sequence>
-                            <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
-                            <xs:element name="value" minOccurs="1" maxOccurs="1" type="xs:string"/>
-                            <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
-                       </xs:sequence>
-                    </xs:complexType>
-                 </xs:element>
-        </xs:sequence>
-        <xs:attribute name="name" type="xs:string" use="required"/>
-        <xs:attribute name="type" type="xs:string" use="required"/>
-    </xs:complexType>
-</xs:schema>

Added: oozie/trunk/client/src/main/resources/oozie-workflow-0.5.xsd
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/main/resources/oozie-workflow-0.5.xsd?rev=1484523&view=auto
==============================================================================
--- oozie/trunk/client/src/main/resources/oozie-workflow-0.5.xsd (added)
+++ oozie/trunk/client/src/main/resources/oozie-workflow-0.5.xsd Mon May 20 16:51:37 2013
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:workflow="uri:oozie:workflow:0.5"
+           elementFormDefault="qualified" targetNamespace="uri:oozie:workflow:0.5">
+
+    <xs:element name="workflow-app" type="workflow:WORKFLOW-APP"/>
+
+    <xs:simpleType name="IDENTIFIER">
+        <xs:restriction base="xs:string">
+            <xs:pattern value="([a-zA-Z_]([\-_a-zA-Z0-9])*){1,39}"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="WORKFLOW-APP">
+        <xs:sequence>
+            <xs:element name="parameters" type="workflow:PARAMETERS" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="global" type="workflow:GLOBAL" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="credentials" type="workflow:CREDENTIALS" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="start" type="workflow:START" minOccurs="1" maxOccurs="1"/>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element name="decision" type="workflow:DECISION" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="fork" type="workflow:FORK" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="join" type="workflow:JOIN" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="kill" type="workflow:KILL" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="action" type="workflow:ACTION" minOccurs="1" maxOccurs="1"/>
+            </xs:choice>
+            <xs:element name="end" type="workflow:END" minOccurs="1" maxOccurs="1"/>
+            <xs:any namespace="uri:oozie:sla:0.1 uri:oozie:sla:0.2" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:string" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="PARAMETERS">
+        <xs:sequence>
+            <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
+                        <xs:element name="value" minOccurs="0" maxOccurs="1" type="xs:string"/>
+                        <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="GLOBAL">
+        <xs:sequence>
+            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="START">
+        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="END">
+        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="DECISION">
+        <xs:sequence>
+            <xs:element name="switch" type="workflow:SWITCH" minOccurs="1" maxOccurs="1"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:element name="switch" type="workflow:SWITCH"/>
+
+    <xs:complexType name="SWITCH">
+        <xs:sequence>
+            <xs:sequence>
+                <xs:element name="case" type="workflow:CASE" minOccurs="1" maxOccurs="unbounded"/>
+                <xs:element name="default" type="workflow:DEFAULT" minOccurs="1" maxOccurs="1"/>
+            </xs:sequence>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="CASE">
+        <xs:simpleContent>
+            <xs:extension base="xs:string">
+                <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
+            </xs:extension>
+        </xs:simpleContent>
+    </xs:complexType>
+
+    <xs:complexType name="DEFAULT">
+        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="FORK_TRANSITION">
+        <xs:attribute name="start" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="FORK">
+        <xs:sequence>
+            <xs:element name="path" type="workflow:FORK_TRANSITION" minOccurs="2" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="JOIN">
+        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
+        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:element name="kill" type="workflow:KILL"/>
+
+    <xs:complexType name="KILL">
+        <xs:sequence>
+            <xs:element name="message" type="xs:string" minOccurs="1" maxOccurs="1"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="ACTION_TRANSITION">
+        <xs:attribute name="to" type="workflow:IDENTIFIER" use="required"/>
+    </xs:complexType>
+
+    <xs:element name="map-reduce" type="workflow:MAP-REDUCE"/>
+    <xs:element name="pig" type="workflow:PIG"/>
+    <xs:element name="sub-workflow" type="workflow:SUB-WORKFLOW"/>
+    <xs:element name="fs" type="workflow:FS"/>
+    <xs:element name="java" type="workflow:JAVA"/>
+
+    <xs:complexType name="ACTION">
+        <xs:sequence>
+            <xs:choice minOccurs="1" maxOccurs="1">
+                <xs:element name="map-reduce" type="workflow:MAP-REDUCE" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="pig" type="workflow:PIG" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="sub-workflow" type="workflow:SUB-WORKFLOW" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="fs" type="workflow:FS" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="java" type="workflow:JAVA" minOccurs="1" maxOccurs="1"/>
+                <xs:any namespace="##other" minOccurs="1" maxOccurs="1"/>
+            </xs:choice>
+            <xs:element name="ok" type="workflow:ACTION_TRANSITION" minOccurs="1" maxOccurs="1"/>
+            <xs:element name="error" type="workflow:ACTION_TRANSITION" minOccurs="1" maxOccurs="1"/>
+            <xs:any namespace="uri:oozie:sla:0.1 uri:oozie:sla:0.2" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="workflow:IDENTIFIER" use="required"/>
+        <xs:attribute name="cred" type="xs:string"/>
+        <xs:attribute name="retry-max" type="xs:string"/>
+        <xs:attribute name="retry-interval" type="xs:string"/>
+    </xs:complexType>
+
+    <xs:complexType name="MAP-REDUCE">
+        <xs:sequence>
+            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="prepare" type="workflow:PREPARE" minOccurs="0" maxOccurs="1"/>
+            <xs:choice minOccurs="0" maxOccurs="1">
+                <xs:element name="streaming" type="workflow:STREAMING" minOccurs="0" maxOccurs="1"/>
+                <xs:element name="pipes" type="workflow:PIPES" minOccurs="0" maxOccurs="1"/>
+            </xs:choice>
+            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="archive" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="PIG">
+        <xs:sequence>
+            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="prepare" type="workflow:PREPARE" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="script" type="xs:string" minOccurs="1" maxOccurs="1"/>
+            <xs:element name="param" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="argument" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="archive" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="SUB-WORKFLOW">
+        <xs:sequence>
+            <xs:element name="app-path" type="xs:string" minOccurs="1" maxOccurs="1"/>
+            <xs:element name="propagate-configuration" type="workflow:FLAG" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="FS">
+        <xs:sequence>
+            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element name="delete" type="workflow:DELETE"/>
+                <xs:element name="mkdir" type="workflow:MKDIR"/>
+                <xs:element name="move" type="workflow:MOVE"/>
+                <xs:element name="chmod" type="workflow:CHMOD"/>
+                <xs:element name="touchz" type="workflow:TOUCHZ"/>
+                <xs:element name="chgrp" type="workflow:CHGRP"/>
+            </xs:choice>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="JAVA">
+        <xs:sequence>
+            <xs:element name="job-tracker" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="name-node" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="prepare" type="workflow:PREPARE" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="configuration" type="workflow:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="main-class" type="xs:string" minOccurs="1" maxOccurs="1"/>
+            <xs:choice minOccurs="0" maxOccurs="1">
+                <xs:element name="java-opts" type="xs:string" minOccurs="1" maxOccurs="1"/>
+                <xs:element name="java-opt" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
+            </xs:choice>
+            <xs:element name="arg" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="archive" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="capture-output" type="workflow:FLAG" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="FLAG"/>
+
+    <xs:complexType name="CONFIGURATION">
+        <xs:sequence>
+            <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
+                        <xs:element name="value" minOccurs="1" maxOccurs="1" type="xs:string"/>
+                        <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="STREAMING">
+        <xs:sequence>
+            <xs:element name="mapper" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="reducer" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="record-reader" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="record-reader-mapping" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="env" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="PIPES">
+        <xs:sequence>
+            <xs:element name="map" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="reduce" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="inputformat" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="partitioner" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="writer" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="program" type="xs:string" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="PREPARE">
+        <xs:sequence>
+            <xs:element name="delete" type="workflow:DELETE" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="mkdir" type="workflow:MKDIR" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="DELETE">
+        <xs:attribute name="path" type="xs:string" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="MKDIR">
+        <xs:attribute name="path" type="xs:string" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="MOVE">
+        <xs:attribute name="source" type="xs:string" use="required"/>
+        <xs:attribute name="target" type="xs:string" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="CHMOD">
+        <xs:sequence>
+            <xs:element name="recursive" type="workflow:FLAG" minOccurs="0" maxOccurs="1"></xs:element>
+        </xs:sequence>
+        <xs:attribute name="path" type="xs:string" use="required"/>
+        <xs:attribute name="permissions" type="xs:string" use="required"/>
+        <xs:attribute name="dir-files" type="xs:string"/>
+    </xs:complexType>
+
+    <xs:complexType name="TOUCHZ">
+        <xs:attribute name="path" type="xs:string" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="CHGRP">
+        <xs:sequence>
+            <xs:element name="recursive" type="workflow:FLAG" minOccurs="0" maxOccurs="1"></xs:element>
+        </xs:sequence>
+        <xs:attribute name="path" type="xs:string" use="required"/>
+        <xs:attribute name="group" type="xs:string" use="required"/>
+        <xs:attribute name="dir-files" type="xs:string"/>
+    </xs:complexType>
+
+    <xs:complexType name="CREDENTIALS">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="credential" type="workflow:CREDENTIAL"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="CREDENTIAL">
+        <xs:sequence  minOccurs="0" maxOccurs="unbounded" >
+                 <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
+                    <xs:complexType>
+                       <xs:sequence>
+                            <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
+                            <xs:element name="value" minOccurs="1" maxOccurs="1" type="xs:string"/>
+                            <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
+                       </xs:sequence>
+                    </xs:complexType>
+                 </xs:element>
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:string" use="required"/>
+        <xs:attribute name="type" type="xs:string" use="required"/>
+    </xs:complexType>
+</xs:schema>

Modified: oozie/trunk/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java
URL: http://svn.apache.org/viewvc/oozie/trunk/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java (original)
+++ oozie/trunk/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java Mon May 20 16:51:37 2013
@@ -22,6 +22,7 @@ import java.util.Properties;
 
 import junit.framework.TestCase;
 
+import org.apache.oozie.AppType;
 import org.apache.oozie.client.BulkResponse;
 import org.apache.oozie.client.BundleJob;
 import org.apache.oozie.client.CoordinatorAction;
@@ -29,7 +30,6 @@ import org.apache.oozie.client.Coordinat
 import org.apache.oozie.client.JMSConnectionInfo;
 import org.apache.oozie.client.WorkflowAction;
 import org.apache.oozie.client.WorkflowJob;
-import org.apache.oozie.client.event.Event;
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 import org.json.simple.JSONValue;
@@ -324,9 +324,9 @@ public class TestJsonToBean extends Test
         JSONObject json = new JSONObject();
         json.put(JsonTags.JMS_TOPIC_PREFIX, "topicPrefix");
         Properties topicProps = new Properties();
-        topicProps.put(Event.AppType.WORKFLOW_JOB, "wfTopic");
-        topicProps.put(Event.AppType.WORKFLOW_ACTION, "wfTopic");
-        topicProps.put(Event.AppType.COORDINATOR_ACTION, "coordTopic");
+        topicProps.put(AppType.WORKFLOW_JOB, "wfTopic");
+        topicProps.put(AppType.WORKFLOW_ACTION, "wfTopic");
+        topicProps.put(AppType.COORDINATOR_ACTION, "coordTopic");
         json.put(JsonTags.JMS_TOPIC_PATTERN, JSONValue.toJSONString(topicProps));
         Properties props = new Properties();
         props.put("k1", "v1");
@@ -339,9 +339,9 @@ public class TestJsonToBean extends Test
         JSONObject json = createJMSInfoJSONObject();
         JMSConnectionInfo jmsDetails = JsonToBean.createJMSConnectionInfo(json);
         assertEquals("topicPrefix", jmsDetails.getTopicPrefix());
-        assertEquals("wfTopic", jmsDetails.getTopicPattern(Event.AppType.WORKFLOW_JOB));
-        assertEquals("wfTopic", jmsDetails.getTopicPattern(Event.AppType.WORKFLOW_ACTION));
-        assertEquals("coordTopic", jmsDetails.getTopicPattern(Event.AppType.COORDINATOR_ACTION));
+        assertEquals("wfTopic", jmsDetails.getTopicPattern(AppType.WORKFLOW_JOB));
+        assertEquals("wfTopic", jmsDetails.getTopicPattern(AppType.WORKFLOW_ACTION));
+        assertEquals("coordTopic", jmsDetails.getTopicPattern(AppType.COORDINATOR_ACTION));
         Properties jmsProps = jmsDetails.getJNDIProperties();
         assertNotNull(jmsDetails.getJNDIProperties());
         assertEquals("v1", jmsProps.get("k1"));

Modified: oozie/trunk/core/pom.xml
URL: http://svn.apache.org/viewvc/oozie/trunk/core/pom.xml?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/core/pom.xml (original)
+++ oozie/trunk/core/pom.xml Mon May 20 16:51:37 2013
@@ -375,6 +375,7 @@
                                     <include name="**/JsonCoordinatorJob.class"/>
                                     <include name="**/JsonCoordinatorAction.class"/>
                                     <include name="**/JsonSLAEvent.class"/>
+                                    <include name="**/JsonSLARegistrationEvent.class"/>
                                     <include name="**/JsonBundleJob.class"/>
 
                                     <include name="**/WorkflowJobBean.class"/>
@@ -382,6 +383,9 @@
                                     <include name="**/CoordinatorJobBean.class"/>
                                     <include name="**/CoordinatorActionBean.class"/>
                                     <include name="**/SLAEventBean.class"/>
+                                    <include name="**/SLARegistrationBean.class"/>
+                                    <include name="**/SLACalculatorBean.class"/>
+                                    <include name="**/SLASummaryBean.class"/>
                                     <include name="**/BundleJobBean.class"/>
                                     <include name="**/BundleActionBean.class"/>
                                 </fileset>

Modified: oozie/trunk/core/src/main/conf/oozie-site.xml
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/conf/oozie-site.xml?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/core/src/main/conf/oozie-site.xml (original)
+++ oozie/trunk/core/src/main/conf/oozie-site.xml Mon May 20 16:51:37 2013
@@ -36,7 +36,12 @@
 
     <property>
         <name>oozie.service.SchemaService.wf.ext.schemas</name>
-        <value>shell-action-0.1.xsd,shell-action-0.2.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,hive-action-0.3.xsd,hive-action-0.4.xsd,hive-action-0.5.xsd,sqoop-action-0.2.xsd,sqoop-action-0.3.xsd,ssh-action-0.1.xsd,ssh-action-0.2.xsd,distcp-action-0.1.xsd</value>
+        <value>
+            shell-action-0.1.xsd,shell-action-0.2.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,
+            hive-action-0.3.xsd,hive-action-0.4.xsd,hive-action-0.5.xsd,sqoop-action-0.2.xsd,
+            sqoop-action-0.3.xsd,ssh-action-0.1.xsd,ssh-action-0.2.xsd,distcp-action-0.1.xsd,
+            oozie-sla-0.1.xsd,oozie-sla-0.2.xsd
+        </value>
     </property>
 
     <property>

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/CoordinatorActionBean.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/CoordinatorActionBean.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/CoordinatorActionBean.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/CoordinatorActionBean.java Mon May 20 16:51:37 2013
@@ -107,7 +107,7 @@ import org.apache.openjpa.persistence.jd
         // Query to maintain backward compatibility for coord job info command
         @NamedQuery(name = "GET_ALL_COLS_FOR_ACTIONS_FOR_COORD_JOB_ORDER_BY_NOMINAL_TIME", query = "select OBJECT(a) from CoordinatorActionBean a where a.jobId = :jobId order by a.nominalTimestamp"),
         // Query to retrieve action id, action status, pending status and external Id of not completed Coordinator actions
-        @NamedQuery(name = "GET_COORD_ACTIONS_NOT_COMPLETED", query = "select a.id, a.status, a.pending, a.externalId, a.pushMissingDependencies from CoordinatorActionBean a where a.jobId = :jobId AND a.status <> 'FAILED' AND a.status <> 'TIMEDOUT' AND a.status <> 'SUCCEEDED' AND a.status <> 'KILLED'"),
+        @NamedQuery(name = "GET_COORD_ACTIONS_NOT_COMPLETED", query = "select a.id, a.status, a.pending, a.externalId, a.pushMissingDependencies, a.nominalTimestamp, a.createdTimestamp from CoordinatorActionBean a where a.jobId = :jobId AND a.status <> 'FAILED' AND a.status <> 'TIMEDOUT' AND a.status <> 'SUCCEEDED' AND a.status <> 'KILLED'"),
 
         // Query to retrieve action id, action status, pending status and external Id of running Coordinator actions
         @NamedQuery(name = "GET_COORD_ACTIONS_RUNNING", query = "select a.id, a.status, a.pending, a.externalId from CoordinatorActionBean a where a.jobId = :jobId and a.status = 'RUNNING'"),

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/ErrorCode.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/ErrorCode.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/ErrorCode.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/ErrorCode.java Mon May 20 16:51:37 2013
@@ -186,7 +186,7 @@ public enum ErrorCode {
     E1004(XLog.STD, "Expression language evaluation error, {0}"),
     E1005(XLog.STD, "Could not read the coordinator job configuration read from DB, {0}"),
     E1006(XLog.STD, "Invalid coordinator application [{0}], {1}"),
-    E1007(XLog.STD, "Unable to add record to SLA table. [{0}], {1}"),
+    E1007(XLog.STD, "Unable to add record for SLA. [{0}], {1}"),
     E1008(XLog.STD, "Not implemented. [{0}]"),
     E1009(XLog.STD, "Unable to parse XML response. [{0}]"),
     E1010(XLog.STD, "Invalid data in coordinator xml. [{0}]"),
@@ -205,8 +205,7 @@ public enum ErrorCode {
 
     E1100(XLog.STD, "Command precondition does not hold before execution, [{0}]"),
 
-    E1101(XLog.STD, "SLA Nominal time is required."),
-    E1102(XLog.STD, "SLA should-start can't be empty."),
+    E1101(XLog.STD, "SLA <{0}> cannot be empty."),
 
     E1201(XLog.STD, "State [{0}] is invalid for job [{1}]."),
 

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/SLAEventBean.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/SLAEventBean.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/SLAEventBean.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/SLAEventBean.java Mon May 20 16:51:37 2013
@@ -35,6 +35,7 @@ import org.apache.oozie.util.DateUtils;
 import org.apache.oozie.util.XLog;
 import org.jdom.Element;
 
+@Deprecated
 @Entity
 @NamedQueries({
         @NamedQuery(name = "GET_SLA_EVENT_NEWER_SEQ_LIMITED", query = "select OBJECT(w) from SLAEventBean w where w.event_id > :id order by w.event_id"),

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/JsonSLAEvent.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/JsonSLAEvent.java?rev=1484523&r1=1484522&r2=1484523&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/JsonSLAEvent.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/client/rest/JsonSLAEvent.java Mon May 20 16:51:37 2013
@@ -35,6 +35,7 @@ import javax.persistence.Transient;
 import org.apache.oozie.client.SLAEvent;
 import org.json.simple.JSONObject;
 
+@Deprecated
 @Entity
 @Table(name = "SLA_EVENTS")
 @DiscriminatorColumn(name = "bean_type", discriminatorType = DiscriminatorType.STRING)