You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bigtop.apache.org by rv...@apache.org on 2012/03/02 19:39:29 UTC

svn commit: r1296378 [2/3] - in /incubator/bigtop/branches/hadoop-0.23: ./ bigtop-packages/src/common/oozie/ bigtop-packages/src/deb/oozie/ bigtop-packages/src/rpm/oozie/SPECS/

Modified: incubator/bigtop/branches/hadoop-0.23/bigtop-packages/src/common/oozie/patch
URL: http://svn.apache.org/viewvc/incubator/bigtop/branches/hadoop-0.23/bigtop-packages/src/common/oozie/patch?rev=1296378&r1=1296377&r2=1296378&view=diff
==============================================================================
--- incubator/bigtop/branches/hadoop-0.23/bigtop-packages/src/common/oozie/patch (original)
+++ incubator/bigtop/branches/hadoop-0.23/bigtop-packages/src/common/oozie/patch Fri Mar  2 18:39:28 2012
@@ -1,8 +1,27 @@
-Index: core/pom.xml
-===================================================================
---- core/pom.xml	(revision 1200045)
-+++ core/pom.xml	(working copy)
-@@ -7,9 +7,9 @@
+diff --git .gitignore .gitignore
+index 1e2a1f6..84f6d75 100644
+--- .gitignore
++++ .gitignore
+@@ -16,12 +16,11 @@ target
+ 
+ # Oozie build
+ core/pig*
+-build
+-mem
++core/hive-*
+ core/build
+ core/mem
+ examples/oozietests
+ mkdistro-*.out
+ distro/downloads
+ SecurityAuth.audit
+-
++build
+diff --git client/pom.xml client/pom.xml
+index 9e2d26d..f5bc042 100644
+--- client/pom.xml
++++ client/pom.xml
+@@ -7,25 +7,28 @@
    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
@@ -14,167 +33,164 @@ Index: core/pom.xml
    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.
-@@ -85,19 +85,6 @@
-         </dependency>
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
++         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+     <modelVersion>4.0.0</modelVersion>
+     <parent>
+         <groupId>org.apache.oozie</groupId>
+         <artifactId>oozie-main</artifactId>
+         <version>3.1.3-incubating</version>
+     </parent>
++    <groupId>org.apache.oozie</groupId>
+     <artifactId>oozie-client</artifactId>
+-    <description>Oozie Client</description>
+-    <name>Oozie Client</name>
++    <version>3.1.3-incubating</version>
++    <description>Apache Oozie Client</description>
++    <name>Apache Oozie Client</name>
+     <packaging>jar</packaging>
  
-         <dependency>
--            <!-- groupId to be correct by GH-0226 -->
--            <groupId>com.yahoo.hadoop</groupId>
--            <artifactId>hadoop-core</artifactId>
--            <scope>provided</scope>
--        </dependency>
--        <dependency>
--            <!-- groupId to be correct by GH-0226 -->
--            <groupId>com.yahoo.hadoop</groupId>
--            <artifactId>hadoop-test</artifactId>
--            <scope>test</scope>
--        </dependency>
--
--        <dependency>
-             <groupId>com.yahoo.oozie</groupId>
-             <artifactId>oozie-sharelib</artifactId>
-             <scope>provided</scope>
-@@ -126,14 +113,14 @@
-             <artifactId>commons-el</artifactId>
-             <scope>compile</scope>
+     <dependencies>
+@@ -44,6 +47,18 @@
+             <artifactId>junit</artifactId>
+             <scope>test</scope>
          </dependency>
--        
 +
-         <dependency>
-             <groupId>org.jdom</groupId>
-             <artifactId>jdom</artifactId>
-             <scope>compile</scope>
-         </dependency>
--        
++        <dependency>
++            <groupId>org.apache.hadoop</groupId>
++            <artifactId>hadoop-auth</artifactId>
++            <scope>compile</scope>
++            <exclusions>
++                <exclusion>
++                    <groupId>org.slf4j</groupId>
++                    <artifactId>slf4j-api</artifactId>
++                </exclusion>
++            </exclusions>
++        </dependency>
+     </dependencies>
  
-+
-         <dependency>
-             <groupId>commons-dbcp</groupId>
-             <artifactId>commons-dbcp</artifactId>
-@@ -449,7 +436,7 @@
- 										<include>**/XTestCase$1.class</include>
- 										<include>**/XFsTestCase.class</include>
- 										<include>**/MiniOozieTestCase.class</include>
--										<include>**/XTestCase$Predicate.class</include>										
-+										<include>**/XTestCase$Predicate.class</include>
- 									</includes>
- 								</configuration>
- 							</execution>
-@@ -496,6 +483,110 @@
-             </dependencies>
-         </profile>
+     <build>
+@@ -67,47 +82,47 @@
+     </build>
  
+     <profiles>
+-	     <profile>
+-	         <id>generateDocs</id>
+-	         <activation>
+-	             <activeByDefault>false</activeByDefault>
+-	             <property>
+-	                 <name>generateDocs</name>
+-	             </property>
+-	         </activation>
+-	         <build>
+-	             <plugins>
+-	                 <plugin>
+-	                     <groupId>org.apache.maven.plugins</groupId>
+-	                     <artifactId>maven-javadoc-plugin</artifactId>
+-	                     <configuration>
+-	                         <linksource>true</linksource>
+-			                 <quiet>true</quiet>
+-			                 <verbose>false</verbose>
+-			                 <source>${maven.compile.source}</source>
+-			                 <charset>${maven.compile.encoding}</charset>
+-			                 <groups>
+-			                     <group>
+-			                         <title>Client API</title>
+-			                         <packages>
+-			                             org.apache.oozie.client
+-			                         </packages>
+-			                     </group>
+-			                 </groups>
+-	                     </configuration>
+-		                 <executions>
+-	                         <execution>
+-	                             <goals>
+-	                                 <goal>javadoc</goal>
+-	                             </goals>
+-	                             <phase>package</phase>
+-	                         </execution>
+-		                 </executions>
+-	                 </plugin>
+-	             </plugins>
+-	         </build>
+-	     </profile>
 +        <profile>
-+            <id>mr1</id>
-+            <activation>
-+                <activeByDefault>true</activeByDefault>
-+                <property>
-+                    <name>!mr2</name>
-+                </property>
-+            </activation>
-+            <dependencies>
-+                <dependency>
-+                    <!-- groupId to be correct by GH-0226 -->
-+                    <groupId>com.yahoo.hadoop</groupId>
-+                    <artifactId>hadoop-core</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+                <dependency>
-+                    <!-- groupId to be correct by GH-0226 -->
-+                    <groupId>com.yahoo.hadoop</groupId>
-+                    <artifactId>hadoop-test</artifactId>
-+                    <scope>test</scope>
-+                </dependency>
-+            </dependencies>
-+        </profile>
-+        <profile>
-+            <id>mr2</id>
++            <id>generateDocs</id>
 +            <activation>
 +                <activeByDefault>false</activeByDefault>
 +                <property>
-+                    <name>mr2</name>
++                    <name>generateDocs</name>
 +                </property>
 +            </activation>
-+            <dependencies>
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-common</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-common</artifactId>
-+                    <type>test-jar</type>
-+                    <scope>test</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-mapreduce-client-hs</artifactId>
-+                    <scope>test</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-hdfs</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-mapreduce-client-app</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-yarn-api</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-mapreduce-client-core</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-yarn-server-tests</artifactId>
-+                    <type>test-jar</type>
-+                    <scope>test</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
-+                    <type>test-jar</type>
-+                    <scope>test</scope>
-+                </dependency>
-+
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-hdfs</artifactId>
-+                    <type>test-jar</type>
-+                    <scope>test</scope>
-+                </dependency>
-+            </dependencies>
++            <build>
++                <plugins>
++                    <plugin>
++                        <groupId>org.apache.maven.plugins</groupId>
++                        <artifactId>maven-javadoc-plugin</artifactId>
++                        <configuration>
++                            <linksource>true</linksource>
++                            <quiet>true</quiet>
++                            <verbose>false</verbose>
++                            <source>${maven.compile.source}</source>
++                            <charset>${maven.compile.encoding}</charset>
++                            <groups>
++                                <group>
++                                    <title>Client API</title>
++                                    <packages>
++                                        org.apache.oozie.client
++                                    </packages>
++                                </group>
++                            </groups>
++                        </configuration>
++                        <executions>
++                            <execution>
++                                <goals>
++                                    <goal>javadoc</goal>
++                                </goals>
++                                <phase>package</phase>
++                            </execution>
++                        </executions>
++                    </plugin>
++                </plugins>
++            </build>
 +        </profile>
-+
      </profiles>
- 
+-    
++
  </project>
-Index: core/src/main/java/org/apache/oozie/service/KerberosHadoopAccessorService.java
-===================================================================
---- core/src/main/java/org/apache/oozie/service/KerberosHadoopAccessorService.java	(revision 1200045)
-+++ core/src/main/java/org/apache/oozie/service/KerberosHadoopAccessorService.java	(working copy)
+ 
+diff --git client/src/main/bin/oozie client/src/main/bin/oozie
+index 9393f9f..21802a6 100644
+--- client/src/main/bin/oozie
++++ client/src/main/bin/oozie
+@@ -7,9 +7,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.
+@@ -46,7 +46,6 @@ else
+     JAVA_BIN=${JAVA_HOME}/bin/java
+ fi
+ 
+-JAVA_PROPERTIES=""
+ while [[ ${1} =~ ^\-D ]]; do
+   JAVA_PROPERTIES="${JAVA_PROPERTIES} ${1}"
+   shift
+diff --git client/src/main/java/org/apache/oozie/cli/OozieCLI.java client/src/main/java/org/apache/oozie/cli/OozieCLI.java
+index bd35fdc..77fcdc1 100644
+--- client/src/main/java/org/apache/oozie/cli/OozieCLI.java
++++ client/src/main/java/org/apache/oozie/cli/OozieCLI.java
 @@ -6,9 +6,9 @@
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
@@ -187,177 +203,17527 @@ Index: core/src/main/java/org/apache/ooz
   * 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.
-@@ -31,10 +31,6 @@
- import org.apache.oozie.util.XConfiguration;
- import org.apache.oozie.util.ParamChecker;
- import org.apache.oozie.ErrorCode;
--import org.apache.oozie.service.HadoopAccessorService;
--import org.apache.oozie.service.HadoopAccessorException;
--import org.apache.oozie.service.Service;
--import org.apache.oozie.service.ServiceException;
+@@ -31,6 +31,7 @@ import java.util.Locale;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.TimeZone;
++import java.util.concurrent.Callable;
  
- import java.io.IOException;
- import java.net.URI;
-@@ -129,6 +125,7 @@
-             UserGroupInformation ugi = getUGI(user);
-             JobClient jobClient = ugi.doAs(new PrivilegedExceptionAction<JobClient>() {
-                 public JobClient run() throws Exception {
-+                    conf.set("mapreduce.framework.name", "yarn");
-                     return new JobClient(conf);
+ import javax.xml.XMLConstants;
+ import javax.xml.parsers.DocumentBuilder;
+@@ -48,6 +49,7 @@ import org.apache.commons.cli.OptionGroup;
+ import org.apache.commons.cli.Options;
+ import org.apache.commons.cli.ParseException;
+ import org.apache.oozie.BuildInfo;
++import org.apache.oozie.client.AuthOozieClient;
+ import org.apache.oozie.client.BundleJob;
+ import org.apache.oozie.client.CoordinatorAction;
+ import org.apache.oozie.client.CoordinatorJob;
+@@ -102,6 +104,8 @@ public class OozieCLI {
+     public static final String DEFINITION_OPTION = "definition";
+     public static final String CONFIG_CONTENT_OPTION = "configcontent";
+ 
++    public static final String DO_AS_OPTION = "doas";
++
+     public static final String LEN_OPTION = "len";
+     public static final String FILTER_OPTION = "filter";
+     public static final String JOBTYPE_OPTION = "jobtype";
+@@ -145,6 +149,9 @@ public class OozieCLI {
+      * @param args options and arguments for the Oozie CLI.
+      */
+     public static void main(String[] args) {
++        if (!System.getProperties().contains(AuthOozieClient.USE_AUTH_TOKEN_CACHE_SYS_PROP)) {
++            System.setProperty(AuthOozieClient.USE_AUTH_TOKEN_CACHE_SYS_PROP, "true");
++        }
+         System.exit(new OozieCLI().run(args));
+     }
+ 
+@@ -171,8 +178,10 @@ public class OozieCLI {
+         Option status = new Option(STATUS_OPTION, false, "show the current system status");
+         Option version = new Option(VERSION_OPTION, false, "show Oozie server build version");
+         Option queuedump = new Option(QUEUE_DUMP_OPTION, false, "show Oozie server queue elements");
++        Option doAs = new Option(DO_AS_OPTION, true, "doAs user, impersonates as the specified user");
+         Options adminOptions = new Options();
+         adminOptions.addOption(oozie);
++        adminOptions.addOption(doAs);
+         OptionGroup group = new OptionGroup();
+         group.addOption(system_mode);
+         group.addOption(status);
+@@ -218,6 +227,8 @@ public class OozieCLI {
+         Option property = OptionBuilder.withArgName("property=value").hasArgs(2).withValueSeparator().withDescription(
+                 "set/override value for given property").create("D");
+ 
++        Option doAs = new Option(DO_AS_OPTION, true, "doAs user, impersonates as the specified user");
++
+         OptionGroup actions = new OptionGroup();
+         actions.addOption(submit);
+         actions.addOption(start);
+@@ -235,6 +246,7 @@ public class OozieCLI {
+         actions.setRequired(true);
+         Options jobOptions = new Options();
+         jobOptions.addOption(oozie);
++        jobOptions.addOption(doAs);
+         jobOptions.addOption(config);
+         jobOptions.addOption(property);
+         jobOptions.addOption(changeValue);
+@@ -257,13 +269,16 @@ public class OozieCLI {
+         Option jobtype = new Option(JOBTYPE_OPTION, true,
+                 "job type ('Supported in Oozie-2.0 or later versions ONLY - 'coordinator' or 'bundle' or 'wf'(default))");
+         Option len = new Option(LEN_OPTION, true, "number of jobs (default '100')");
+-        Option filter = new Option(FILTER_OPTION, true, "user=<U>;name=<N>;group=<G>;status=<S>;...");
++        Option filter = new Option(FILTER_OPTION, true, "user=<U>;name=<N>;group=<G>;status=<S>;frequency=<F>;unit=<M> " +
++                        "(Valid unit values are 'months', 'days', 'hours' or 'minutes'.)");
+         Option localtime = new Option(LOCAL_TIME_OPTION, false, "use local time (default GMT)");
+         Option verbose = new Option(VERBOSE_OPTION, false, "verbose mode");
++        Option doAs = new Option(DO_AS_OPTION, true, "doAs user, impersonates as the specified user");
+         start.setType(Integer.class);
+         len.setType(Integer.class);
+         Options jobsOptions = new Options();
+         jobsOptions.addOption(oozie);
++        jobsOptions.addOption(doAs);
+         jobsOptions.addOption(localtime);
+         jobsOptions.addOption(start);
+         jobsOptions.addOption(len);
+@@ -293,8 +308,10 @@ public class OozieCLI {
+         Option pigFile = new Option(PIGFILE_OPTION, true, "Pig script");
+         Option property = OptionBuilder.withArgName("property=value").hasArgs(2).withValueSeparator().withDescription(
+                 "set/override value for given property").create("D");
++        Option doAs = new Option(DO_AS_OPTION, true, "doAs user, impersonates as the specified user");
+         Options pigOptions = new Options();
+         pigOptions.addOption(oozie);
++        pigOptions.addOption(doAs);
+         pigOptions.addOption(config);
+         pigOptions.addOption(property);
+         pigOptions.addOption(pigFile);
+@@ -317,7 +334,7 @@ public class OozieCLI {
+         }
+         used = true;
+ 
+-        CLIParser parser = new CLIParser(OOZIE_OPTION, getCLIHelp());
++        final CLIParser parser = new CLIParser(OOZIE_OPTION, getCLIHelp());
+         parser.addCommand(HELP_CMD, "", "display usage", new Options(), false);
+         parser.addCommand(VERSION_CMD, "", "show client version", new Options(), false);
+         parser.addCommand(JOB_CMD, "", "job operations", createJobOptions(), false);
+@@ -329,30 +346,21 @@ public class OozieCLI {
+                 createPigOptions(), true);
+ 
+         try {
+-            CLIParser.Command command = parser.parse(args);
+-            if (command.getName().equals(HELP_CMD)) {
+-                parser.showHelp();
+-            }
+-            else if (command.getName().equals(JOB_CMD)) {
+-                jobCommand(command.getCommandLine());
+-            }
+-            else if (command.getName().equals(JOBS_CMD)) {
+-                jobsCommand(command.getCommandLine());
+-            }
+-            else if (command.getName().equals(ADMIN_CMD)) {
+-                adminCommand(command.getCommandLine());
+-            }
+-            else if (command.getName().equals(VERSION_CMD)) {
+-                versionCommand();
+-            }
+-            else if (command.getName().equals(VALIDATE_CMD)) {
+-                validateCommand(command.getCommandLine());
+-            }
+-            else if (command.getName().equals(SLA_CMD)) {
+-                slaCommand(command.getCommandLine());
++            final CLIParser.Command command = parser.parse(args);
++
++            String doAsUser = command.getCommandLine().getOptionValue(DO_AS_OPTION);
++
++            if (doAsUser != null) {
++                OozieClient.doAs(doAsUser, new Callable<Void>() {
++                    @Override
++                    public Void call() throws Exception {
++                        processCommand(parser, command);
++                        return null;
++                    }
++                });
+             }
+-            else if (command.getName().equals(PIG_CMD)) {
+-                pigCommand(command.getCommandLine());
++            else {
++                processCommand(parser, command);
+             }
+ 
+             return 0;
+@@ -374,6 +382,32 @@ public class OozieCLI {
+         }
+     }
+ 
++    private void processCommand(CLIParser parser, CLIParser.Command command) throws Exception {
++        if (command.getName().equals(HELP_CMD)) {
++            parser.showHelp();
++        }
++        else if (command.getName().equals(JOB_CMD)) {
++            jobCommand(command.getCommandLine());
++        }
++        else if (command.getName().equals(JOBS_CMD)) {
++            jobsCommand(command.getCommandLine());
++        }
++        else if (command.getName().equals(ADMIN_CMD)) {
++            adminCommand(command.getCommandLine());
++        }
++        else if (command.getName().equals(VERSION_CMD)) {
++            versionCommand();
++        }
++        else if (command.getName().equals(VALIDATE_CMD)) {
++            validateCommand(command.getCommandLine());
++        }
++        else if (command.getName().equals(SLA_CMD)) {
++            slaCommand(command.getCommandLine());
++        }
++        else if (command.getName().equals(PIG_CMD)) {
++            pigCommand(command.getCommandLine());
++        }
++    }
+     protected String getOozieUrl(CommandLine commandLine) {
+         String url = commandLine.getOptionValue(OOZIE_OPTION);
+         if (url == null) {
+@@ -449,9 +483,8 @@ public class OozieCLI {
+         }
+     }
+ 
+-    private Properties getConfiguration(CommandLine commandLine) throws IOException {
+-        Properties conf = new Properties();
+-        conf.setProperty("user.name", System.getProperty("user.name"));
++    private Properties getConfiguration(OozieClient wc, CommandLine commandLine) throws IOException {
++        Properties conf = wc.createConfiguration();
+         String configFile = commandLine.getOptionValue(CONFIG_OPTION);
+         if (configFile == null) {
+             throw new IOException("configuration file not specified");
+@@ -493,7 +526,7 @@ public class OozieCLI {
+         return changeValue;
+     }
+ 
+-    private void addHeader(OozieClient wc) {
++    protected void addHeader(OozieClient wc) {
+         for (Map.Entry entry : System.getProperties().entrySet()) {
+             String key = (String) entry.getKey();
+             if (key.startsWith(WS_HEADER_PREFIX)) {
+@@ -513,10 +546,7 @@ public class OozieCLI {
+      * @throws OozieCLIException thrown if the OozieClient could not be configured.
+      */
+     protected OozieClient createOozieClient(CommandLine commandLine) throws OozieCLIException {
+-        OozieClient wc = new OozieClient(getOozieUrl(commandLine));
+-        addHeader(wc);
+-        setDebugMode(wc);
+-        return wc;
++        return createXOozieClient(commandLine);
+     }
+ 
+     /**
+@@ -529,7 +559,7 @@ public class OozieCLI {
+      * @throws OozieCLIException thrown if the XOozieClient could not be configured.
+      */
+     protected XOozieClient createXOozieClient(CommandLine commandLine) throws OozieCLIException {
+-        XOozieClient wc = new XOozieClient(getOozieUrl(commandLine));
++        XOozieClient wc = new AuthOozieClient(getOozieUrl(commandLine));
+         addHeader(wc);
+         setDebugMode(wc);
+         return wc;
+@@ -562,13 +592,13 @@ public class OozieCLI {
+ 
+         try {
+             if (options.contains(SUBMIT_OPTION)) {
+-                System.out.println(JOB_ID_PREFIX + wc.submit(getConfiguration(commandLine)));
++                System.out.println(JOB_ID_PREFIX + wc.submit(getConfiguration(wc, commandLine)));
+             }
+             else if (options.contains(START_OPTION)) {
+                 wc.start(commandLine.getOptionValue(START_OPTION));
+             }
+             else if (options.contains(DRYRUN_OPTION)) {
+-                String[] dryrunStr = wc.dryrun(getConfiguration(commandLine)).split("action for new instance");
++                String[] dryrunStr = wc.dryrun(getConfiguration(wc, commandLine)).split("action for new instance");
+                 int arraysize = dryrunStr.length;
+                 System.out.println("***coordJob after parsing: ***");
+                 System.out.println(dryrunStr[0]);
+@@ -596,11 +626,11 @@ public class OozieCLI {
+                 wc.change(commandLine.getOptionValue(CHANGE_OPTION), getChangeValue(commandLine));
+             }
+             else if (options.contains(RUN_OPTION)) {
+-                System.out.println(JOB_ID_PREFIX + wc.run(getConfiguration(commandLine)));
++                System.out.println(JOB_ID_PREFIX + wc.run(getConfiguration(wc, commandLine)));
+             }
+             else if (options.contains(RERUN_OPTION)) {
+                 if (commandLine.getOptionValue(RERUN_OPTION).contains("-W")) {
+-                    wc.reRun(commandLine.getOptionValue(RERUN_OPTION), getConfiguration(commandLine));
++                    wc.reRun(commandLine.getOptionValue(RERUN_OPTION), getConfiguration(wc, commandLine));
                  }
-             });
-Index: examples/pom.xml
-===================================================================
---- examples/pom.xml	(revision 1200045)
-+++ examples/pom.xml	(working copy)
-@@ -7,9 +7,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
--  
+                 else if (commandLine.getOptionValue(RERUN_OPTION).contains("-B")) {
+                     String bundleJobId = commandLine.getOptionValue(RERUN_OPTION);
+@@ -685,8 +715,8 @@ public class OozieCLI {
+                             .contains(LOCAL_TIME_OPTION));
+                 }
+                 else if (commandLine.getOptionValue(INFO_OPTION).contains("-W@")) {
+-                    printWorkflowAction(wc.getWorkflowActionInfo(commandLine.getOptionValue(INFO_OPTION)), options
+-                            .contains(LOCAL_TIME_OPTION));
++                    printWorkflowAction(wc.getWorkflowActionInfo(commandLine.getOptionValue(INFO_OPTION)),
++                            options.contains(LOCAL_TIME_OPTION), options.contains(VERBOSE_OPTION));
+                 }
+                 else {
+                     String s = commandLine.getOptionValue(OFFSET_OPTION);
+@@ -865,23 +895,28 @@ public class OozieCLI {
+         }
+     }
+ 
+-    private void printWorkflowAction(WorkflowAction action, boolean contains) {
++    private void printWorkflowAction(WorkflowAction action, boolean contains, boolean verbose) {
+         System.out.println("ID : " + maskIfNull(action.getId()));
+ 
+         System.out.println(RULER);
+ 
+-        System.out.println("Console URL     : " + maskIfNull(action.getConsoleUrl()));
+-        System.out.println("Error Code      : " + maskIfNull(action.getErrorCode()));
+-        System.out.println("Error Message   : " + maskIfNull(action.getErrorMessage()));
+-        System.out.println("External ID     : " + maskIfNull(action.getExternalId()));
+-        System.out.println("External Status : " + maskIfNull(action.getExternalStatus()));
+-        System.out.println("Name            : " + maskIfNull(action.getName()));
+-        System.out.println("Retries         : " + action.getRetries());
+-        System.out.println("Tracker URI     : " + maskIfNull(action.getTrackerUri()));
+-        System.out.println("Type            : " + maskIfNull(action.getType()));
+-        System.out.println("Started         : " + maskDate(action.getStartTime(), contains));
+-        System.out.println("Status          : " + action.getStatus());
+-        System.out.println("Ended           : " + maskDate(action.getEndTime(), contains));
++        System.out.println("Console URL       : " + maskIfNull(action.getConsoleUrl()));
++        System.out.println("Error Code        : " + maskIfNull(action.getErrorCode()));
++        System.out.println("Error Message     : " + maskIfNull(action.getErrorMessage()));
++        System.out.println("External ID       : " + maskIfNull(action.getExternalId()));
++        System.out.println("External Status   : " + maskIfNull(action.getExternalStatus()));
++        System.out.println("Name              : " + maskIfNull(action.getName()));
++        System.out.println("Retries           : " + action.getRetries());
++        System.out.println("Tracker URI       : " + maskIfNull(action.getTrackerUri()));
++        System.out.println("Type              : " + maskIfNull(action.getType()));
++        System.out.println("Started           : " + maskDate(action.getStartTime(), contains));
++        System.out.println("Status            : " + action.getStatus());
++        System.out.println("Ended             : " + maskDate(action.getEndTime(), contains));
 +
-        http://www.apache.org/licenses/LICENSE-2.0
--  
++        if (verbose) {
++            System.out.println("External Stats    : " + action.getStats());
++            System.out.println("External ChildIDs : " + action.getExternalChildIDs());
++        }
+ 
+         System.out.println(RULER);
+     }
+@@ -1220,6 +1255,8 @@ public class OozieCLI {
+                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
+                         "oozie-workflow-0.1.xsd")));
+                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
++                        "shell-action-0.1.xsd")));
++                sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
+                         "email-action-0.1.xsd")));
+                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
+                         "distcp-action-0.1.xsd")));
+@@ -1239,6 +1276,12 @@ public class OozieCLI {
+                         "oozie-bundle-0.1.xsd")));
+                 sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
+                         "oozie-sla-0.1.xsd")));
++                sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
++                        "hive-action-0.2.xsd")));
++                sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
++                        "sqoop-action-0.2.xsd")));
++                sources.add(new StreamSource(Thread.currentThread().getContextClassLoader().getResourceAsStream(
++                        "ssh-action-0.1.xsd")));
+                 SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                 Schema schema = factory.newSchema(sources.toArray(new StreamSource[sources.size()]));
+                 Validator validator = schema.newValidator();
+@@ -1277,11 +1320,11 @@ public class OozieCLI {
+             throw new OozieCLIException("Need to specify -config <configfile>");
+         }
+ 
+-        Properties conf = getConfiguration(commandLine);
+-        String script = commandLine.getOptionValue(PIGFILE_OPTION);
+ 
+         try {
+             XOozieClient wc = createXOozieClient(commandLine);
++            Properties conf = getConfiguration(wc, commandLine);
++            String script = commandLine.getOptionValue(PIGFILE_OPTION);
+             System.out.println(JOB_ID_PREFIX + wc.submitPig(conf, script, pigArgs.toArray(new String[pigArgs.size()])));
+         }
+         catch (OozieClientException ex) {
+diff --git client/src/main/java/org/apache/oozie/client/AuthOozieClient.java client/src/main/java/org/apache/oozie/client/AuthOozieClient.java
+new file mode 100644
+index 0000000..0853c88
+--- /dev/null
++++ client/src/main/java/org/apache/oozie/client/AuthOozieClient.java
+@@ -0,0 +1,208 @@
++/**
++ * 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.client;
 +
-   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.
-@@ -68,20 +68,6 @@
++import org.apache.hadoop.security.authentication.client.AuthenticatedURL;
++import org.apache.hadoop.security.authentication.client.AuthenticationException;
++import org.apache.hadoop.security.authentication.client.Authenticator;
++import org.apache.hadoop.security.authentication.client.KerberosAuthenticator;
++
++import java.io.BufferedReader;
++import java.io.File;
++import java.io.FileReader;
++import java.io.FileWriter;
++import java.io.IOException;
++import java.io.Writer;
++import java.net.HttpURLConnection;
++import java.net.URL;
++
++/**
++ * This subclass of {@link XOozieClient} supports Kerberos HTTP SPNEGO and simple authentication.
++ */
++public class AuthOozieClient extends XOozieClient {
++
++    /**
++     * Java system property to specify a custom Authenticator implementation.
++     */
++    public static final String AUTHENTICATOR_CLASS_SYS_PROP = "authenticator.class";
++
++    /**
++     * Java system property that, if set the authentication token will be cached in the user home directory in a hidden
++     * file <code>.oozie-auth-token</code> with user read/write permissions only.
++     */
++    public static final String USE_AUTH_TOKEN_CACHE_SYS_PROP = "oozie.auth.token.cache";
++
++    /**
++     * File constant that defines the location of the authentication token cache file.
++     * <p/>
++     * It resolves to <code>${user.home}/.oozie-auth-token</code>.
++     */
++    public static final File AUTH_TOKEN_CACHE_FILE = new File(System.getProperty("user.home"), ".oozie-auth-token");
++
++    /**
++     * Create an instance of the AuthOozieClient.
++     *
++     * @param oozieUrl the Oozie URL
++     */
++    public AuthOozieClient(String oozieUrl) {
++        super(oozieUrl);
++    }
++
++    /**
++     * Create an authenticated connection to the Oozie server.
++     * <p/>
++     * It uses Hadoop-auth client authentication which by default supports
++     * Kerberos HTTP SPNEGO, Pseudo/Simple and anonymous.
++     * <p/>
++     * if the Java system property {@link #USE_AUTH_TOKEN_CACHE_SYS_PROP} is set to true Hadoop-auth
++     * authentication token will be cached/used in/from the '.oozie-auth-token' file in the user
++     * home directory.
++     *
++     * @param url the URL to open a HTTP connection to.
++     * @param method the HTTP method for the HTTP connection.
++     * @return an authenticated connection to the Oozie server.
++     * @throws IOException if an IO error occurred.
++     * @throws OozieClientException if an oozie client error occurred.
++     */
++    @Override
++    protected HttpURLConnection createConnection(URL url, String method) throws IOException, OozieClientException {
++        boolean useAuthFile = System.getProperty(USE_AUTH_TOKEN_CACHE_SYS_PROP, "false").equalsIgnoreCase("true");
++        AuthenticatedURL.Token readToken = new AuthenticatedURL.Token();
++        AuthenticatedURL.Token currentToken = new AuthenticatedURL.Token();
++
++        if (useAuthFile) {
++            readToken = readAuthToken();
++            if (readToken != null) {
++                currentToken = new AuthenticatedURL.Token(readToken.toString());
++            }
++        }
++
++        if (currentToken.isSet()) {
++            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
++            conn.setRequestMethod("OPTIONS");
++            AuthenticatedURL.injectToken(conn, currentToken);
++            if (conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) {
++                AUTH_TOKEN_CACHE_FILE.delete();
++                currentToken = new AuthenticatedURL.Token();
++            }
++        }
++
++        if (!currentToken.isSet()) {
++            Authenticator authenticator = getAuthenticator();
++            try {
++                new AuthenticatedURL(authenticator).openConnection(url, currentToken);
++            }
++            catch (AuthenticationException ex) {
++                AUTH_TOKEN_CACHE_FILE.delete();
++                throw new OozieClientException(OozieClientException.AUTHENTICATION,
++                                               "Could not authenticate, " + ex.getMessage(), ex);
++            }
++        }
++        if (useAuthFile && !currentToken.equals(readToken)) {
++            writeAuthToken(currentToken);
++        }
++        HttpURLConnection conn = super.createConnection(url, method);
++
++        AuthenticatedURL.injectToken(conn, currentToken);
++        return conn;
++    }
++
++
++    /**
++     * Read a authentication token cached in the user home directory.
++     * <p/>
++     *
++     * @return the authentication token cached in the user home directory, NULL if none.
++     */
++    protected AuthenticatedURL.Token readAuthToken() {
++        AuthenticatedURL.Token authToken = null;
++        if (AUTH_TOKEN_CACHE_FILE.exists()) {
++            try {
++                BufferedReader reader = new BufferedReader(new FileReader(AUTH_TOKEN_CACHE_FILE));
++                String line = reader.readLine();
++                reader.close();
++                if (line != null) {
++                    authToken = new AuthenticatedURL.Token(line);
++                }
++            }
++            catch (IOException ex) {
++                //NOP
++            }
++        }
++        return authToken;
++    }
++
++    /**
++     * Write the current authenthication token to the user home directory.
++     * <p/>
++     * The file is written with user only read/write permissions.
++     * <p/>
++     * If the file cannot be updated or the user only ready/write permissions cannot be set the file is deleted.
++     *
++     * @param authToken the authentication token to cache.
++     */
++    protected void writeAuthToken(AuthenticatedURL.Token authToken) {
++        try {
++            Writer writer = new FileWriter(AUTH_TOKEN_CACHE_FILE);
++            writer.write(authToken.toString());
++            writer.close();
++            // sets read-write permissions to owner only
++            AUTH_TOKEN_CACHE_FILE.setReadable(false, false);
++            AUTH_TOKEN_CACHE_FILE.setReadable(true, true);
++            AUTH_TOKEN_CACHE_FILE.setWritable(true, true);
++        }
++        catch (Exception ex) {
++            // if case of any error we just delete the cache, if user-only
++            // write permissions are not properly set a security exception
++            // is thrown and the file will be deleted.
++            AUTH_TOKEN_CACHE_FILE.delete();
++        }
++    }
++
++    /**
++     * Return the Hadoop-auth Authenticator to use.
++     * <p/>
++     * It looks for value of the {@link #AUTHENTICATOR_CLASS_SYS_PROP} Java system property, if not set it uses
++     * Hadoop-auth <code>KerberosAuthenticator</code> which supports both Kerberos HTTP SPNEGO and Pseudo/simple
++     * authentication.
++     *
++     * @return the Authenticator to use, <code>NULL</code> if none.
++     *
++     * @throws OozieClientException thrown if the authenticator could not be instatiated.
++     */
++    protected Authenticator getAuthenticator() throws OozieClientException {
++        String className = System.getProperty(AUTHENTICATOR_CLASS_SYS_PROP, KerberosAuthenticator.class.getName());
++        if (className != null) {
++            try {
++                ClassLoader cl = Thread.currentThread().getContextClassLoader();
++                Class klass = (cl != null) ? cl.loadClass(className) : getClass().getClassLoader().loadClass(className);
++                return (Authenticator) klass.newInstance();
++            }
++            catch (Exception ex) {
++                throw new OozieClientException(OozieClientException.AUTHENTICATION,
++                                               "Could not instantiate Authenticator [" + className + "], " +
++                                               ex.getMessage(), ex);
++            }
++        }
++        else {
++            throw new OozieClientException(OozieClientException.AUTHENTICATION,
++                                           "Authenticator class not found [" + className + "]");
++        }
++    }
++
++}
+diff --git client/src/main/java/org/apache/oozie/client/OozieClient.java client/src/main/java/org/apache/oozie/client/OozieClient.java
+index dd3b962..1272f75 100644
+--- client/src/main/java/org/apache/oozie/client/OozieClient.java
++++ client/src/main/java/org/apache/oozie/client/OozieClient.java
+@@ -32,6 +32,7 @@ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Iterator;
++import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Properties;
+@@ -120,6 +121,8 @@ public class OozieClient {
+     public static final String FILTER_FREQUENCY = "frequency";
+ 
+     public static final String FILTER_ID = "id";
++    
++    public static final String FILTER_UNIT = "unit";
+ 
+     public static final String CHANGE_VALUE_ENDTIME = "endtime";
+ 
+@@ -145,6 +148,32 @@ public class OozieClient {
+     private boolean validatedVersion = false;
+     private final Map<String, String> headers = new HashMap<String, String>();
+ 
++    private static ThreadLocal<String> USER_NAME_TL = new ThreadLocal<String>();
++
++    /**
++     * Allows to impersonate other users in the Oozie server. The current user
++     * must be configured as a proxyuser in Oozie.
++     * <p/>
++     * IMPORTANT: impersonation happens only with Oozie client requests done within
++     * doAs() calls.
++     *
++     * @param userName user to impersonate.
++     * @param callable callable with {@link OozieClient} calls impersonating the specified user.
++     * @return any response returned by the {@link Callable#call()} method.
++     * @throws Exception thrown by the {@link Callable#call()} method.
++     */
++    public static <T> T doAs(String userName, Callable<T> callable) throws Exception {
++        notEmpty(userName, "userName");
++        notNull(callable, "callable");
++        try {
++            USER_NAME_TL.set(userName);
++            return callable.call();
++        }
++        finally {
++            USER_NAME_TL.remove();
++        }
++    }
++
+     protected OozieClient() {
+     }
+ 
+@@ -253,7 +282,11 @@ public class OozieClient {
+      */
+     public Properties createConfiguration() {
+         Properties conf = new Properties();
+-        conf.setProperty(USER_NAME, System.getProperty("user.name"));
++        String userName = USER_NAME_TL.get();
++        if (userName == null) {
++            userName = System.getProperty("user.name");
++        }
++        conf.setProperty(USER_NAME, userName);
+         return conf;
+     }
+ 
+@@ -411,10 +444,14 @@ public class OozieClient {
+     }
+ 
+     static Map<String, String> prepareParams(String... params) {
+-        Map<String, String> map = new HashMap<String, String>();
++        Map<String, String> map = new LinkedHashMap<String, String>();
+         for (int i = 0; i < params.length; i = i + 2) {
+             map.put(params[i], params[i + 1]);
+         }
++        String doAsUserName = USER_NAME_TL.get();
++        if (doAsUserName != null) {
++            map.put(RestConstants.DO_AS_PARAM, doAsUserName);
++        }
+         return map;
+     }
+ 
+diff --git client/src/main/java/org/apache/oozie/client/WorkflowAction.java client/src/main/java/org/apache/oozie/client/WorkflowAction.java
+index 4fab81f..ed84063 100644
+--- client/src/main/java/org/apache/oozie/client/WorkflowAction.java
++++ client/src/main/java/org/apache/oozie/client/WorkflowAction.java
+@@ -141,6 +141,20 @@ public interface WorkflowAction {
+     String getData();
+ 
+     /**
++     * Return the action statistics.
++     *
++     * @return the action statistics.
++     */
++    String getStats();
++
++    /**
++     * Return the external child IDs of the action.
++     *
++     * @return the external child IDs of the action.
++     */
++    String getExternalChildIDs();
++
++    /**
+      * Return the external ID of the action.
+      *
+      * @return the external ID of the action.
+diff --git client/src/main/java/org/apache/oozie/client/rest/JsonTags.java client/src/main/java/org/apache/oozie/client/rest/JsonTags.java
+index 249d1f1..b8ae77f 100644
+--- client/src/main/java/org/apache/oozie/client/rest/JsonTags.java
++++ client/src/main/java/org/apache/oozie/client/rest/JsonTags.java
+@@ -65,6 +65,8 @@ public interface JsonTags {
+     public static final String WORKFLOW_ACTION_STATUS = "status";
+     public static final String WORKFLOW_ACTION_TRANSITION = "transition";
+     public static final String WORKFLOW_ACTION_DATA = "data";
++    public static final String WORKFLOW_ACTION_STATS = "stats";
++    public static final String WORKFLOW_ACTION_EXTERNAL_CHILD_IDS = "externalChildIDs";
+     public static final String WORKFLOW_ACTION_EXTERNAL_ID = "externalId";
+     public static final String WORKFLOW_ACTION_EXTERNAL_STATUS = "externalStatus";
+     public static final String WORKFLOW_ACTION_TRACKER_URI = "trackerUri";
+diff --git client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java
+index 5c688a7..1454a72 100644
+--- client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java
++++ client/src/main/java/org/apache/oozie/client/rest/JsonToBean.java
+@@ -75,6 +75,8 @@ public class JsonToBean {
+         WF_ACTION.put("getEndTime", new Property(JsonTags.WORKFLOW_ACTION_END_TIME, Date.class));
+         WF_ACTION.put("getTransition", new Property(JsonTags.WORKFLOW_ACTION_TRANSITION, String.class));
+         WF_ACTION.put("getData", new Property(JsonTags.WORKFLOW_ACTION_DATA, String.class));
++        WF_ACTION.put("getStats", new Property(JsonTags.WORKFLOW_ACTION_STATS, String.class));
++        WF_ACTION.put("getExternalChildIDs", new Property(JsonTags.WORKFLOW_ACTION_EXTERNAL_CHILD_IDS, String.class));
+         WF_ACTION.put("getExternalId", new Property(JsonTags.WORKFLOW_ACTION_EXTERNAL_ID, String.class));
+         WF_ACTION.put("getExternalStatus", new Property(JsonTags.WORKFLOW_ACTION_EXTERNAL_STATUS, String.class));
+         WF_ACTION.put("getTrackerUri", new Property(JsonTags.WORKFLOW_ACTION_TRACKER_URI, String.class));
+diff --git client/src/main/java/org/apache/oozie/client/rest/RestConstants.java client/src/main/java/org/apache/oozie/client/rest/RestConstants.java
+index c899258..305eb6f 100644
+--- client/src/main/java/org/apache/oozie/client/rest/RestConstants.java
++++ client/src/main/java/org/apache/oozie/client/rest/RestConstants.java
+@@ -134,4 +134,6 @@ public interface RestConstants {
+     public static final String MAX_EVENTS = "max-events";
+ 
+     public static final String SLA = "sla";
++
++    public static final String DO_AS_PARAM = "doAs";
+ }
+diff --git client/src/main/resources/hive-action-0.2.xsd client/src/main/resources/hive-action-0.2.xsd
+new file mode 100644
+index 0000000..884bd5f
+--- /dev/null
++++ client/src/main/resources/hive-action-0.2.xsd
+@@ -0,0 +1,68 @@
++<?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:hive="uri:oozie:hive-action:0.2" elementFormDefault="qualified"
++           targetNamespace="uri:oozie:hive-action:0.2">
++
++    <xs:element name="hive" type="hive:ACTION"/>
++
++    <xs:complexType name="ACTION">
++        <xs:sequence>
++            <xs:element name="job-tracker" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="name-node" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="prepare" type="hive:PREPARE" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="configuration" type="hive: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="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="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="PREPARE">
++        <xs:sequence>
++            <xs:element name="delete" type="hive:DELETE" minOccurs="0" maxOccurs="unbounded"/>
++            <xs:element name="mkdir" type="hive: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:schema>
+diff --git client/src/main/resources/shell-action-0.1.xsd client/src/main/resources/shell-action-0.1.xsd
+new file mode 100644
+index 0000000..4794c0d
+--- /dev/null
++++ client/src/main/resources/shell-action-0.1.xsd
+@@ -0,0 +1,73 @@
++<?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:shell="uri:oozie:shell-action:0.1" elementFormDefault="qualified"
++           targetNamespace="uri:oozie:shell-action:0.1">
++
++    <xs:element name="shell" type="shell:ACTION"/>
++
++    <xs:complexType name="ACTION">
++      <xs:sequence>
++            <xs:element name="job-tracker" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="name-node" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="prepare" type="shell:PREPARE" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="configuration" type="shell:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="exec" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="argument" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
++            <xs:element name="env-var" 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="shell: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="PREPARE">
++        <xs:sequence>
++            <xs:element name="delete" type="shell:DELETE" minOccurs="0" maxOccurs="unbounded"/>
++            <xs:element name="mkdir" type="shell: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:schema>
+diff --git client/src/main/resources/sqoop-action-0.2.xsd client/src/main/resources/sqoop-action-0.2.xsd
+new file mode 100644
+index 0000000..8e2ebd3
+--- /dev/null
++++ client/src/main/resources/sqoop-action-0.2.xsd
+@@ -0,0 +1,70 @@
++<?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:sqoop="uri:oozie:sqoop-action:0.2" elementFormDefault="qualified"
++           targetNamespace="uri:oozie:sqoop-action:0.2">
++
++    <xs:element name="sqoop" type="sqoop:ACTION"/>
++
++    <xs:complexType name="ACTION">
++        <xs:sequence>
++            <xs:element name="job-tracker" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="name-node" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="prepare" type="sqoop:PREPARE" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="1"/>
++            <xs:element name="configuration" type="sqoop:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
++            <xs:choice>
++                <xs:element name="command" type="xs:string" minOccurs="1" maxOccurs="1"/>
++                <xs:element name="arg" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
++            </xs:choice>
++            <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="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="PREPARE">
++        <xs:sequence>
++            <xs:element name="delete" type="sqoop:DELETE" minOccurs="0" maxOccurs="unbounded"/>
++            <xs:element name="mkdir" type="sqoop: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:schema>
+diff --git client/src/main/resources/ssh-action-0.1.xsd client/src/main/resources/ssh-action-0.1.xsd
+new file mode 100644
+index 0000000..e8a6f9e
+--- /dev/null
++++ client/src/main/resources/ssh-action-0.1.xsd
+@@ -0,0 +1,36 @@
++<?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:ssh="uri:oozie:ssh-action:0.1" elementFormDefault="qualified"
++           targetNamespace="uri:oozie:ssh-action:0.1">
++
++    <xs:element name="ssh" type="ssh:ACTION"/>
++
++    <xs:complexType name="ACTION">
++        <xs:sequence>
++            <xs:element name="host" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="command" type="xs:string" minOccurs="1" maxOccurs="1"/>
++            <xs:element name="args" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
++            <xs:element name="capture-output" type="ssh:FLAG" minOccurs="0" maxOccurs="1"/>
++        </xs:sequence>
++    </xs:complexType>
++
++    <xs:complexType name="FLAG"/>
++
++</xs:schema>
+diff --git core/pom.xml core/pom.xml
+index 106893d..a56227d 100644
+--- core/pom.xml
++++ core/pom.xml
+@@ -16,22 +16,37 @@
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
++         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+     <modelVersion>4.0.0</modelVersion>
+     <parent>
+         <groupId>org.apache.oozie</groupId>
+         <artifactId>oozie-main</artifactId>
+         <version>3.1.3-incubating</version>
+     </parent>
++    <groupId>org.apache.oozie</groupId>
+     <artifactId>oozie-core</artifactId>
+-    <description>Oozie Core</description>
+-    <name>Oozie Core</name>
++    <version>3.1.3-incubating</version>
++    <description>Apache Oozie Core</description>
++    <name>Apache Oozie Core</name>
+     <packaging>jar</packaging>
+ 
+     <dependencies>
+ 
+         <dependency>
+             <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-hadoop-test</artifactId>
++            <scope>test</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-hadoop</artifactId>
++            <scope>provided</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
+             <artifactId>oozie-client</artifactId>
+             <scope>compile</scope>
+         </dependency>
+@@ -57,7 +72,18 @@
+         <dependency>
+             <groupId>javax.persistence</groupId>
+             <artifactId>persistence-api</artifactId>
+-            <scope>compile</scope>
++            <scope>provided</scope>
++            <exclusions>
++                <exclusion>
++                    <groupId>commons-lang</groupId>
++                    <artifactId>commons-lang</artifactId>
++                </exclusion>
++            </exclusions>
++        </dependency>
++
++        <dependency>
++            <groupId>commons-lang</groupId>
++            <artifactId>commons-lang</artifactId>
+         </dependency>
+ 
+         <dependency>
+@@ -73,34 +99,6 @@
          </dependency>
  
          <dependency>
--            <!-- groupId to be correct by GH-0226 -->
--            <groupId>com.yahoo.hadoop</groupId>
+-            <groupId>org.apache.hadoop</groupId>
 -            <artifactId>hadoop-core</artifactId>
 -            <scope>provided</scope>
 -        </dependency>
--
 -        <dependency>
--            <!-- groupId to be correct by GH-0226 -->
--            <groupId>com.yahoo.hadoop</groupId>
+-            <groupId>org.apache.hadoop</groupId>
 -            <artifactId>hadoop-test</artifactId>
 -            <scope>test</scope>
 -        </dependency>
+-        <dependency>
+-            <groupId>com.sun.jersey</groupId>
+-            <artifactId>jersey-server</artifactId>
+-            <scope>test</scope>
+-        </dependency>
 -
 -        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <scope>test</scope>
-@@ -141,6 +127,110 @@
-                </plugins>
-              </build>
-         </profile>
-+        <profile>
-+            <id>mr1</id>
-+            <activation>
+-            <groupId>org.apache.oozie</groupId>
+-            <artifactId>oozie-sharelib</artifactId>
+-            <scope>provided</scope>
+-        </dependency>
+-
+-        <dependency>
+-           <groupId>org.slf4j</groupId>
+-           <artifactId>slf4j-log4j12</artifactId>
+-           <scope>test</scope>
+-        </dependency>
+-
+-        <dependency>
+             <groupId>com.googlecode.json-simple</groupId>
+             <artifactId>json-simple</artifactId>
+             <scope>compile</scope>
+@@ -143,24 +141,6 @@
+             <scope>compile</scope>
+         </dependency>
+ 
+-		<dependency>
+-			<groupId>org.python</groupId>
+-			<artifactId>jython</artifactId>
+-			<scope>test</scope>
+-		</dependency>
+-
+-		<dependency>
+-			<groupId>org.antlr</groupId>
+-			<artifactId>antlr-runtime</artifactId>
+-			<scope>test</scope>
+-		</dependency>
+-
+-		<dependency>
+-			<groupId>com.google.guava</groupId>
+-			<artifactId>guava</artifactId>
+-			<scope>test</scope>
+-		</dependency>
+-
+         <!--
+         Oozie web-app module must exclude it.
+          -->
+@@ -190,6 +170,11 @@
+         <dependency>
+             <groupId>javax.mail</groupId>
+             <artifactId>mail</artifactId>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.hadoop</groupId>
++            <artifactId>hadoop-auth</artifactId>
+             <scope>compile</scope>
+         </dependency>
+ 
+@@ -205,6 +190,54 @@
+             <scope>compile</scope>
+         </dependency>
+ 
++        <dependency>
++            <groupId>org.slf4j</groupId>
++            <artifactId>slf4j-api</artifactId>
++            <scope>compile</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.slf4j</groupId>
++            <artifactId>slf4j-log4j12</artifactId>
++            <scope>compile</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-sharelib-pig</artifactId>
++            <scope>provided</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-sharelib-streaming</artifactId>
++            <scope>provided</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-sharelib-hive</artifactId>
++            <scope>provided</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-sharelib-sqoop</artifactId>
++            <scope>provided</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.apache.oozie</groupId>
++            <artifactId>oozie-sharelib-oozie</artifactId>
++            <scope>provided</scope>
++        </dependency>
++
++        <dependency>
++            <groupId>org.mockito</groupId>
++            <artifactId>mockito-all</artifactId>
++            <scope>test</scope>
++        </dependency>
++
+     </dependencies>
+ 
+     <build>
+@@ -234,6 +267,23 @@
+                 </configuration>
+             </plugin>
+             <plugin>
++              <artifactId>maven-dependency-plugin</artifactId>
++              <executions>
++                <execution>
++                  <id>create-mrapp-generated-classpath</id>
++                  <phase>generate-test-resources</phase>
++                  <goals>
++                    <goal>build-classpath</goal>
++                  </goals>
++                  <configuration>
++                    <!-- needed to run the unit test for DS to generate the required classpath
++                         that is required in the env of the launch container in the mini mr/yarn cluster -->
++                    <outputFile>${project.build.directory}/test-classes/mrapp-generated-classpath</outputFile>
++                  </configuration>
++                </execution>
++              </executions>
++            </plugin>
++            <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-antrun-plugin</artifactId>
+                 <executions>
+@@ -242,32 +292,32 @@
+                         <configuration>
+                             <target>
+                                 <path id="cp">
+-                                    <path refid="maven.test.classpath" />
+-                                    <path refid="maven.compile.classpath" />
+-                                    <path refid="maven.dependency.classpath" />
++                                    <path refid="maven.test.classpath"/>
++                                    <path refid="maven.compile.classpath"/>
++                                    <path refid="maven.dependency.classpath"/>
+                                 </path>
+                                 <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
+-                                    <classpath refid="cp" />
++                                    <classpath refid="cp"/>
+                                 </taskdef>
+                                 <fileset id="enhance.path.ref" dir="../core/target/classes">
+-                                    <include name="**/JsonWorkflowJob.class" />
+-                                    <include name="**/JsonWorkflowAction.class" />
+-                                    <include name="**/JsonCoordinatorJob.class" />
+-                                    <include name="**/JsonCoordinatorAction.class" />
+-                                    <include name="**/JsonSLAEvent.class" />
++                                    <include name="**/JsonWorkflowJob.class"/>
++                                    <include name="**/JsonWorkflowAction.class"/>
++                                    <include name="**/JsonCoordinatorJob.class"/>
++                                    <include name="**/JsonCoordinatorAction.class"/>
++                                    <include name="**/JsonSLAEvent.class"/>
+                                     <include name="**/JsonBundleJob.class"/>
+ 
+-                                    <include name="**/WorkflowJobBean.class" />
+-                                    <include name="**/WorkflowActionBean.class" />
+-                                    <include name="**/CoordinatorJobBean.class" />
+-                                    <include name="**/CoordinatorActionBean.class" />
+-                                    <include name="**/SLAEventBean.class" />
++                                    <include name="**/WorkflowJobBean.class"/>
++                                    <include name="**/WorkflowActionBean.class"/>
++                                    <include name="**/CoordinatorJobBean.class"/>
++                                    <include name="**/CoordinatorActionBean.class"/>
++                                    <include name="**/SLAEventBean.class"/>
+                                     <include name="**/BundleJobBean.class"/>
+                                     <include name="**/BundleActionBean.class"/>
+                                 </fileset>
+                                 <openjpac>
+-                                    <classpath refid="cp" />
+-                                    <fileset refid="enhance.path.ref" />
++                                    <classpath refid="cp"/>
++                                    <fileset refid="enhance.path.ref"/>
+                                 </openjpac>
+                             </target>
+                         </configuration>
+@@ -278,17 +328,17 @@
+                 </executions>
+             </plugin>
+             <plugin>
+-                 <groupId>org.apache.rat</groupId>
+-                 <artifactId>apache-rat-plugin</artifactId>
+-                 <configuration>
+-                       <excludes>
+-                       <exclude>src/test/resources/PigMain.txt</exclude>
+-                       <exclude>src/test/resources/test-ioutils.txt</exclude>
+-                       <exclude>.gitignore</exclude>
+-                       <exclude>./SecurityAuth.audit</exclude>
+-                       </excludes>
+-                  </configuration>
+-	     </plugin>
++                <groupId>org.apache.rat</groupId>
++                <artifactId>apache-rat-plugin</artifactId>
++                <configuration>
++                    <excludes>
++                        <exclude>src/test/resources/PigMain.txt</exclude>
++                        <exclude>src/test/resources/test-ioutils.txt</exclude>
++                        <exclude>.gitignore</exclude>
++                        <exclude>./SecurityAuth.audit</exclude>
++                    </excludes>
++                </configuration>
++            </plugin>
+         </plugins>
+     </build>
+ 
+@@ -307,26 +357,26 @@
+                         <groupId>org.apache.maven.plugins</groupId>
+                         <artifactId>maven-javadoc-plugin</artifactId>
+                         <configuration>
+-		                    <linksource>true</linksource>
+-		                    <quiet>true</quiet>
+-		                    <verbose>false</verbose>
+-		                    <source>${maven.compile.source}</source>
+-		                    <charset>${maven.compile.encoding}</charset>
+-		                    <groups>
+-		                        <group>
+-		                            <title>Action Executor API</title>
+-		                            <packages>
+-		                                org.apache.oozie.action
+-		                            </packages>
+-		                        </group>
+-		                        <group>
+-		                            <title>Local Oozie (for application development/testing)</title>
+-		                            <packages>
+-		                                org.apache.oozie.local
+-		                            </packages>
+-		                        </group>
+-		                    </groups>
+-		                </configuration>
++                            <linksource>true</linksource>
++                            <quiet>true</quiet>
++                            <verbose>false</verbose>
++                            <source>${maven.compile.source}</source>
++                            <charset>${maven.compile.encoding}</charset>
++                            <groups>
++                                <group>
++                                    <title>Action Executor API</title>
++                                    <packages>
++                                        org.apache.oozie.action
++                                    </packages>
++                                </group>
++                                <group>
++                                    <title>Local Oozie (for application development/testing)</title>
++                                    <packages>
++                                        org.apache.oozie.local
++                                    </packages>
++                                </group>
++                            </groups>
++                        </configuration>
+                         <executions>
+                             <execution>
+                                 <goals>
+@@ -341,22 +391,25 @@
+         </profile>
+ 
+         <profile>
+-            <id>hadoop20</id>
++            <id>oozieci</id>
+             <activation>
+                 <activeByDefault>false</activeByDefault>
+                 <property>
+-                    <name>hadoop20</name>
+-                    <value>true</value>
++                    <name>oozieci</name>
+                 </property>
+             </activation>
+             <build>
+                 <plugins>
+                     <plugin>
+                         <groupId>org.apache.maven.plugins</groupId>
+-                        <artifactId>maven-compiler-plugin</artifactId>
++                        <artifactId>maven-surefire-plugin</artifactId>
+                         <configuration>
+                             <excludes>
+-                                <exclude>**/Kerberos*.java</exclude>
++                                <exclude>**/TestRerun.java</exclude>
++                                <exclude>**/TestCallableQueueService.java</exclude>
++                                <exclude>**/TestPigActionExecutor.java</exclude>
++                                <exclude>**/TestCallableQueueService.java</exclude>
++                                <exclude>**/TestSshActionExecutor.java</exclude>
+                             </excludes>
+                         </configuration>
+                     </plugin>
+@@ -364,91 +417,64 @@
+             </build>
+         </profile>
+ 
+-		<profile>
+-			<id>oozieci</id>
+-			<activation>
+-				<activeByDefault>false</activeByDefault>
+-				<property>
+-					<name>oozieci</name>
+-				</property>
+-			</activation>
+-			<build>
+-				<plugins>
+-					<plugin>
+-						<groupId>org.apache.maven.plugins</groupId>
+-						<artifactId>maven-surefire-plugin</artifactId>
+-						<configuration>
+-						    <excludes>
+-						        <exclude>**/TestRerun.java</exclude>
+-						        <exclude>**/TestCallableQueueService.java</exclude>
+-						        <exclude>**/TestPigActionExecutor.java</exclude>
+-						        <exclude>**/TestCallableQueueService.java</exclude>
+-						        <exclude>**/TestSshActionExecutor.java</exclude>
+-						    </excludes>
+-						</configuration>
+-					</plugin>
+-				</plugins>
+-			</build>
+-		</profile>
+-
+-		<profile>
+-			<id>test-jar-all</id>
+-			<activation>
+-				<activeByDefault>true</activeByDefault>
+-				<property>
+-					<name>testJarAll</name>
+-				</property>
+-			</activation>
+-			<build>
+-				<plugins>
+-					<plugin>
+-						<groupId>org.apache.maven.plugins</groupId>
+-						<artifactId>maven-jar-plugin</artifactId>
+-						<executions>
+-							<execution>
+-								<goals>
+-									<goal>test-jar</goal>
+-								</goals>
+-							</execution>
+-						</executions>
+-					</plugin>
+-				</plugins>
+-			</build>
+-		</profile>
+-
+-		<profile>
+-			<id>test-jar-simple</id>
+-			<activation>
+-				<activeByDefault>false</activeByDefault>
+-				<property>
+-					<name>testJarSimple</name>
+-				</property>
+-			</activation>
+-			<build>
+-				<plugins>
+-					<plugin>
+-						<groupId>org.apache.maven.plugins</groupId>
+-						<artifactId>maven-jar-plugin</artifactId>
+-						<executions>
+-							<execution>
+-								<goals>
+-									<goal>test-jar</goal>
+-								</goals>
+-								<configuration>
+-									<includes>
+-										<include>**/XTestCase.class</include>
+-										<include>**/XTestCase$1.class</include>
+-										<include>**/XFsTestCase.class</include>
+-										<include>**/MiniOozieTestCase.class</include>
+-										<include>**/XTestCase$Predicate.class</include>										
+-									</includes>
+-								</configuration>
+-							</execution>
+-						</executions>
+-					</plugin>
+-				</plugins>
+-			</build>
+-		</profile>
++        <profile>
++            <id>test-jar-all</id>
++            <activation>
 +                <activeByDefault>true</activeByDefault>
 +                <property>
-+                    <name>!mr2</name>
++                    <name>testJarAll</name>
 +                </property>
 +            </activation>
-+            <dependencies>
-+                <dependency>
-+                    <!-- groupId to be correct by GH-0226 -->
-+                    <groupId>com.yahoo.hadoop</groupId>
-+                    <artifactId>hadoop-core</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
++            <build>
++                <plugins>
++                    <plugin>
++                        <groupId>org.apache.maven.plugins</groupId>
++                        <artifactId>maven-jar-plugin</artifactId>
++                        <executions>
++                            <execution>
++                                <goals>
++                                    <goal>test-jar</goal>
++                                </goals>
++                            </execution>
++                        </executions>
++                    </plugin>
++                </plugins>
++            </build>
++        </profile>
 +
++        <profile>
++            <id>test-jar-simple</id>
++            <activation>
++                <activeByDefault>false</activeByDefault>
++                <property>
++                    <name>testJarSimple</name>
++                </property>
++            </activation>
++            <build>
++                <plugins>
++                    <plugin>
++                        <groupId>org.apache.maven.plugins</groupId>
++                        <artifactId>maven-jar-plugin</artifactId>
++                        <executions>
++                            <execution>
++                                <goals>
++                                    <goal>test-jar</goal>
++                                </goals>
++                                <configuration>
++                                    <includes>
++                                        <include>**/XTestCase.class</include>
++                                        <include>**/XTestCase$1.class</include>
++                                        <include>**/XFsTestCase.class</include>
++                                        <include>**/MiniOozieTestCase.class</include>
++                                        <include>**/XTestCase$Predicate.class</include>
++                                    </includes>
++                                </configuration>
++                            </execution>
++                        </executions>
++                    </plugin>
++                </plugins>
++            </build>
++        </profile>
+ 
+         <!-- Include MySQL JDBC driver -->
+         <profile>
+@@ -456,7 +482,8 @@
+             <activation>
+                 <activeByDefault>false</activeByDefault>
+                 <property>
+-                    <name>mysql</name>
++                    <name>oozie.test.db</name>
++                    <value>mysql</value>
+                 </property>
+             </activation>
+             <dependencies>
+@@ -476,7 +503,8 @@
+             <activation>
+                 <activeByDefault>false</activeByDefault>
+                 <property>
+-                    <name>oracle</name>
++                    <name>oozie.test.db</name>
++                    <value>oracle</value>
+                 </property>
+             </activation>
+             <dependencies>
+@@ -487,6 +515,54 @@
+             </dependencies>
+         </profile>
+ 
++        <!-- Forcing antlr-runtime 3.0.1 for Hive action testcases -->
++        <!-- This is required because Pig 0.9.0 requires 3.4  and  -->
++        <!-- Hive 0.9.0-SNAPSHOT requires 3.0.1                    -->
++        <profile>
++            <id>testHive</id>
++            <activation>
++                <activeByDefault>false</activeByDefault>
++                <property>
++                    <name>testHive</name>
++                </property>
++            </activation>
++            <dependencies>
 +                <dependency>
-+                    <!-- groupId to be correct by GH-0226 -->
-+                    <groupId>com.yahoo.hadoop</groupId>
-+                    <artifactId>hadoop-test</artifactId>
++                    <groupId>org.antlr</groupId>
++                    <artifactId>antlr-runtime</artifactId>
++                    <version>3.0.1</version>
 +                    <scope>test</scope>
 +                </dependency>
 +            </dependencies>
 +        </profile>
++
++        <!-- Forcing Hadoop 0.20.2-cdh3u2 version because Sqoop    -->
++        <!-- uses Hadoop API that is avail 0.21 onwards and the    -->
++        <!-- Hadoop CDH version is the only stable version that    -->
++        <!-- currently has such API (SQOOP-384) and published      -->
++        <!-- in public Maven repos. This is a temporary fix        -->
 +        <profile>
-+            <id>mr2</id>
++            <id>testSqoop</id>
 +            <activation>
 +                <activeByDefault>false</activeByDefault>
 +                <property>
-+                    <name>mr2</name>
++                    <name>testSqoop</name>
 +                </property>
 +            </activation>
-+            <dependencies>
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-common</artifactId>
-+                    <scope>provided</scope>
-+                </dependency>
++            <properties>
++                <hadoop.version>0.20.2-cdh3u2</hadoop.version>
++            </properties>
++            <repositories>
++                <repository>
++                    <id>cdh.releases.repo</id>
++                    <url>https://repository.cloudera.com/content/groups/cdh-releases-rcs</url>
++                    <name>CDH Releases Repository</name>
++                    <snapshots>
++                        <enabled>false</enabled>
++                    </snapshots>
++                </repository>
++            </repositories>
++        </profile>
+     </profiles>
+ 
+ </project>
+diff --git core/src/main/conf/oozie-log4j.properties core/src/main/conf/oozie-log4j.properties
+index 3db1419..a14ae89 100644
+--- core/src/main/conf/oozie-log4j.properties
++++ core/src/main/conf/oozie-log4j.properties
+@@ -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.
+@@ -71,3 +71,4 @@ log4j.logger.org.apache.oozie=DEBUG, oozie
+ log4j.logger.org.apache.hadoop=WARN, oozie
+ log4j.logger.org.mortbay=WARN, oozie
+ log4j.logger.org.hsqldb=WARN, oozie
++log4j.logger.org.apache.hadoop.security.authentication.server=DEBUG, oozie
+diff --git core/src/main/conf/oozie-site.xml core/src/main/conf/oozie-site.xml
+index e17ba7b..fd58686 100644
+--- core/src/main/conf/oozie-site.xml
++++ core/src/main/conf/oozie-site.xml
+@@ -18,24 +18,29 @@
+ -->
+ <configuration>
+ 
+-<!--
+-    Refer to the oozie-default.xml file for the complete list of
+-    Oozie configuration properties and their default values.
+--->
++    <!--
++        Refer to the oozie-default.xml file for the complete list of
++        Oozie configuration properties and their default values.
++    -->
 +
-+                <dependency>
-+                    <groupId>org.apache.hadoop</groupId>
-+                    <artifactId>hadoop-common</artifactId>
-+                    <type>test-jar</type>
-+                    <scope>test</scope>
-+                </dependency>
++    <!-- Uncomment the following  properties to enable Email & Hive actions
+ 
+-<!-- Uncomment to enable additional actions (email).
+     <property>
+         <name>oozie.service.ActionService.executor.ext.classes</name>
+         <value>
+-        org.apache.oozie.action.email.EmailActionExecutor
++            org.apache.oozie.action.email.EmailActionExecutor,
++            org.apache.oozie.action.hadoop.HiveActionExecutor,
++            org.apache.oozie.action.hadoop.ShellActionExecutor,
++            org.apache.oozie.action.hadoop.SqoopActionExecutor
+         </value>
+     </property>
+ 
+     <property>
+         <name>oozie.service.SchemaService.wf.ext.schemas</name>
+-        <value>email-action-0.1.xsd</value>

[... 19333 lines stripped ...]