You are viewing a plain text version of this content. The canonical link for it is here.
Posted to s4-commits@incubator.apache.org by mm...@apache.org on 2013/06/01 11:33:09 UTC

[19/50] [abbrv] git commit: Merge branch 'S4-66' into dev

Merge branch 'S4-66' into dev

Conflicts:
	subprojects/s4-core/src/test/java/org/apache/s4/deploy/TestAutomaticDeployment.java
	subprojects/s4-core/src/test/java/org/apache/s4/deploy/prodcon/TestProducerConsumer.java
	subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
	subprojects/s4-tools/src/main/resources/templates/build.gradle
	test-apps/consumer-app/build.gradle
	test-apps/producer-app/build.gradle
	test-apps/simple-deployable-app-1/build.gradle
	test-apps/twitter-adapter/build.gradle
	test-apps/twitter-counter/build.gradle


Project: http://git-wip-us.apache.org/repos/asf/incubator-s4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-s4/commit/04243133
Tree: http://git-wip-us.apache.org/repos/asf/incubator-s4/tree/04243133
Diff: http://git-wip-us.apache.org/repos/asf/incubator-s4/diff/04243133

Branch: refs/heads/master
Commit: 042431338a51c4481e0cad706de0b66deafe26ca
Parents: eb20b95 858a8af
Author: Daniel Gómez Ferro <df...@apache.org>
Authored: Sat Mar 9 21:22:26 2013 +0100
Committer: Daniel Gómez Ferro <df...@apache.org>
Committed: Sat Mar 9 21:22:26 2013 +0100

----------------------------------------------------------------------
 subprojects/s4-benchmarks/s4-benchmarks.gradle     |    3 -
 .../s4/core/classloader/TestClassLoader.java       |    5 +-
 .../apache/s4/deploy/TestAutomaticDeployment.java  |    3 +-
 .../s4/deploy/prodcon/TestProducerConsumer.java    |    6 +-
 .../src/main/java/org/apache/s4/tools/Deploy.java  |   47 +-------
 .../src/main/java/org/apache/s4/tools/Package.java |    6 +-
 .../src/main/resources/templates/build.gradle      |   88 +++++----------
 test-apps/consumer-app/build.gradle                |   35 ++-----
 test-apps/producer-app/build.gradle                |   35 ++-----
 test-apps/simple-deployable-app-1/build.gradle     |   39 ++-----
 test-apps/twitter-adapter/build.gradle             |   60 ++---------
 test-apps/twitter-counter/build.gradle             |   34 ++-----
 12 files changed, 86 insertions(+), 275 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-benchmarks/s4-benchmarks.gradle
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-core/src/test/java/org/apache/s4/core/classloader/TestClassLoader.java
----------------------------------------------------------------------
diff --cc subprojects/s4-core/src/test/java/org/apache/s4/core/classloader/TestClassLoader.java
index 7775ac1,0000000..3e20343
mode 100644,000000..100644
--- a/subprojects/s4-core/src/test/java/org/apache/s4/core/classloader/TestClassLoader.java
+++ b/subprojects/s4-core/src/test/java/org/apache/s4/core/classloader/TestClassLoader.java
@@@ -1,157 -1,0 +1,158 @@@
 +/**
 + * 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.s4.core.classloader;
 +
 +import static org.junit.Assert.assertEquals;
 +import static org.junit.Assert.assertTrue;
 +
 +import java.io.File;
 +import java.io.IOException;
 +import java.util.List;
 +import java.util.concurrent.ArrayBlockingQueue;
 +import java.util.concurrent.BlockingQueue;
 +import java.util.concurrent.CountDownLatch;
 +import java.util.concurrent.TimeUnit;
 +
 +import junit.framework.Assert;
 +
 +import org.I0Itec.zkclient.IZkChildListener;
 +import org.I0Itec.zkclient.IZkDataListener;
 +import org.apache.commons.configuration.ConfigurationException;
 +import org.apache.s4.base.util.S4RLoader;
 +import org.apache.s4.comm.tools.TaskSetup;
 +import org.apache.s4.comm.topology.ZNRecord;
 +import org.apache.s4.comm.topology.ZNRecordSerializer;
 +import org.apache.s4.comm.topology.ZkClient;
 +import org.apache.s4.core.util.AppConfig;
 +import org.apache.s4.deploy.DeploymentUtils;
 +import org.apache.s4.fixtures.CommTestUtils;
 +import org.apache.s4.fixtures.CoreTestUtils;
 +import org.apache.zookeeper.KeeperException;
 +import org.apache.zookeeper.ZooKeeper;
 +import org.apache.zookeeper.server.NIOServerCnxn.Factory;
 +import org.junit.After;
 +import org.junit.Before;
 +import org.junit.BeforeClass;
 +import org.junit.Test;
 +
 +public class TestClassLoader {
 +
 +    private Factory zookeeperServerConnectionFactory;
 +    private Process forkedProducerNode;
 +    private ZkClient zkClient;
 +    private final static String PRODUCER_CLUSTER = "producerCluster";
 +    private static File producerS4rDir;
 +
 +    @BeforeClass
 +    public static void createS4RFiles() throws Exception {
 +        File gradlewFile = CoreTestUtils.findGradlewInRootDir();
 +
 +        producerS4rDir = new File(gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build/libs");
 +
 +        CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 +                + "/test-apps/producer-app/build.gradle"), "clean", new String[] { "-buildFile="
-                 + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle" });
++                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle"});
 +        Assert.assertFalse(producerS4rDir.exists());
 +
 +        CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 +                + "/test-apps/producer-app/build.gradle"), "s4r", new String[] { "-buildFile="
-                 + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle" });
++                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle",
++                "appClass=s4app.ProducerApp"});
 +
 +        Assert.assertTrue(new File(producerS4rDir, "producer-app-0.0.0-SNAPSHOT.s4r").exists());
 +    }
 +
 +    @Before
 +    public void prepare() throws Exception {
 +        CommTestUtils.cleanupTmpDirs();
 +        zookeeperServerConnectionFactory = CommTestUtils.startZookeeperServer();
 +        final ZooKeeper zk = CommTestUtils.createZkClient();
 +        try {
 +            zk.delete("/simpleAppCreated", -1);
 +        } catch (Exception ignored) {
 +        }
 +
 +        zk.close();
 +    }
 +
 +    @After
 +    public void cleanup() throws Exception {
 +        CommTestUtils.stopZookeeperServer(zookeeperServerConnectionFactory);
 +        CommTestUtils.killS4App(forkedProducerNode);
 +    }
 +
 +    @Test
 +    public void testInitialDeploymentFromFileSystem() throws Exception {
 +
 +        File producerS4R = new File(producerS4rDir, "producer-app-0.0.0-SNAPSHOT.s4r");
 +        String uriProducer = producerS4R.toURI().toString();
 +
 +        initializeS4Node();
 +
 +        final BlockingQueue<Object> queue = new ArrayBlockingQueue<Object>(1);
 +        zkClient.subscribeDataChanges("/s4/classLoader", new IZkDataListener() {
 +
 +            @Override
 +            public void handleDataDeleted(String dataPath) throws Exception {
 +            }
 +
 +            @Override
 +            public void handleDataChange(String dataPath, Object data) throws Exception {
 +                queue.put(data);
 +            }
 +        });
 +        DeploymentUtils.initAppConfig(new AppConfig.Builder().appURI(uriProducer).build(), PRODUCER_CLUSTER, true,
 +                "localhost:2181");
 +
 +        Object classLoaderRecord = queue.poll(20, TimeUnit.SECONDS);
 +        assertTrue("Stored record has unexpected type", classLoaderRecord instanceof ZNRecord);
 +        ZNRecord record = (ZNRecord) classLoaderRecord;
 +
 +        assertEquals("Unexpected classloader runs the app init()", S4RLoader.class.getName(), record.getId());
 +    }
 +
 +    private void initializeS4Node() throws ConfigurationException, IOException, InterruptedException, KeeperException {
 +        // 1. start s4 node. Check that no app is deployed.
 +        TaskSetup taskSetup = new TaskSetup("localhost:" + CommTestUtils.ZK_PORT);
 +        taskSetup.clean("s4");
 +        taskSetup.setup(PRODUCER_CLUSTER, 1, 1300);
 +
 +        zkClient = new ZkClient("localhost:" + CommTestUtils.ZK_PORT);
 +        zkClient.setZkSerializer(new ZNRecordSerializer());
 +        List<String> processes = zkClient.getChildren("/s4/clusters/" + PRODUCER_CLUSTER + "/process");
 +        Assert.assertTrue(processes.size() == 0);
 +        final CountDownLatch signalProcessesReady = new CountDownLatch(1);
 +
 +        zkClient.subscribeChildChanges("/s4/clusters/" + PRODUCER_CLUSTER + "/process", new IZkChildListener() {
 +
 +            @Override
 +            public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
 +                if (currentChilds.size() == 1) {
 +                    signalProcessesReady.countDown();
 +                }
 +
 +            }
 +        });
 +
 +        forkedProducerNode = CoreTestUtils.forkS4Node(new String[] { "-cluster=" + PRODUCER_CLUSTER }, zkClient, 20,
 +                PRODUCER_CLUSTER);
 +        Assert.assertTrue(signalProcessesReady.await(20, TimeUnit.SECONDS));
 +
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-core/src/test/java/org/apache/s4/deploy/TestAutomaticDeployment.java
----------------------------------------------------------------------
diff --cc subprojects/s4-core/src/test/java/org/apache/s4/deploy/TestAutomaticDeployment.java
index 60a256f,3c901d7..488f5f9
--- a/subprojects/s4-core/src/test/java/org/apache/s4/deploy/TestAutomaticDeployment.java
+++ b/subprojects/s4-core/src/test/java/org/apache/s4/deploy/TestAutomaticDeployment.java
@@@ -69,17 -69,11 +69,18 @@@ public class TestAutomaticDeployment ex
  
          File gradlewFile = CoreTestUtils.findGradlewInRootDir();
  
 +        s4rDir = new File(gradlewFile.getParentFile().getAbsolutePath()
 +                + "/test-apps/simple-deployable-app-1/build/libs");
          CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 -                + "/test-apps/simple-deployable-app-1/build.gradle"), "installS4R", new String[] {
 -                "appsDir=" + tmpAppsDir.getAbsolutePath(), "appClass=org.apache.s4.deploy.TestApp" });
 +                + "/test-apps/simple-deployable-app-1/build.gradle"), "clean", new String[] { "-buildFile="
 +                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/simple-deployable-app-1/build.gradle" });
 +        Assert.assertFalse(s4rDir.exists());
  
 +        CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 +                + "/test-apps/simple-deployable-app-1/build.gradle"), "s4r", new String[] { "-buildFile="
-                 + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/simple-deployable-app-1/build.gradle" });
++                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/simple-deployable-app-1/build.gradle", 
++                "appClass=org.apache.s4.deploy.TestApp" });
 +        Assert.assertTrue(new File(s4rDir, "simple-deployable-app-1-0.0.0-SNAPSHOT.s4r").exists());
      }
  
      @Test

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-core/src/test/java/org/apache/s4/deploy/prodcon/TestProducerConsumer.java
----------------------------------------------------------------------
diff --cc subprojects/s4-core/src/test/java/org/apache/s4/deploy/prodcon/TestProducerConsumer.java
index 9296611,31a08cc..dd4f9ec
--- a/subprojects/s4-core/src/test/java/org/apache/s4/deploy/prodcon/TestProducerConsumer.java
+++ b/subprojects/s4-core/src/test/java/org/apache/s4/deploy/prodcon/TestProducerConsumer.java
@@@ -62,32 -62,18 +62,34 @@@ public class TestProducerConsumer 
  
      @BeforeClass
      public static void createS4RFiles() throws Exception {
 -        tmpAppsDir = Files.createTempDir();
 -
 -        Assert.assertTrue(tmpAppsDir.exists());
          File gradlewFile = CoreTestUtils.findGradlewInRootDir();
  
 +        producerS4rDir = new File(gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build/libs");
 +        consumerS4rDir = new File(gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/consumer-app/build/libs");
 +
 +        CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 +                + "/test-apps/producer-app/build.gradle"), "clean", new String[] { "-buildFile="
 +                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle" });
 +        Assert.assertFalse(producerS4rDir.exists());
 +
          CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 -                + "/test-apps/producer-app/build.gradle"), "installS4R",
 -                new String[] { "appsDir=" + tmpAppsDir.getAbsolutePath(), "appClass=s4app.ProducerApp" });
 +                + "/test-apps/producer-app/build.gradle"), "s4r", new String[] { "-buildFile="
-                 + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle" });
++                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/producer-app/build.gradle",
++                "appClass=s4app.ProducerApp" });
 +
 +        Assert.assertTrue(new File(producerS4rDir, "producer-app-0.0.0-SNAPSHOT.s4r").exists());
 +
 +        CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 +                + "/test-apps/consumer-app/build.gradle"), "clean", new String[] { "-buildFile="
 +                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/consumer-app/build.gradle" });
 +        Assert.assertFalse(consumerS4rDir.exists());
  
          CoreTestUtils.callGradleTask(new File(gradlewFile.getParentFile().getAbsolutePath()
 -                + "/test-apps/consumer-app/build.gradle"), "installS4R",
 -                new String[] { "appsDir=" + tmpAppsDir.getAbsolutePath(), "appClass=s4app.ConsumerApp" });
 +                + "/test-apps/consumer-app/build.gradle"), "s4r", new String[] { "-buildFile="
-                 + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/consumer-app/build.gradle" });
++                + gradlewFile.getParentFile().getAbsolutePath() + "/test-apps/consumer-app/build.gradle",
++                "appClass=s4app.ConsumerApp" });
 +
 +        Assert.assertTrue(new File(consumerS4rDir, "consumer-app-0.0.0-SNAPSHOT.s4r").exists());
      }
  
      @Before

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
----------------------------------------------------------------------
diff --cc subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
index de145cf,1070e1c..2165eca
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
@@@ -63,11 -62,8 +61,6 @@@ public class Deploy extends S4ArgsBase 
              ZkClient zkClient = new ZkClient(deployArgs.zkConnectionString, deployArgs.timeout);
              zkClient.setZkSerializer(new ZNRecordSerializer());
  
-             if (!Strings.isNullOrEmpty(deployArgs.s4rPath) && !Strings.isNullOrEmpty(deployArgs.generatedS4R)) {
-                 logger.error("-s4r and -generatedS4R options are mutually exclusive");
-                 System.exit(1);
-             }
- 
 -            tmpAppsDir = Files.createTempDir();
 -
              URI s4rURI = null;
  
              if (deployArgs.s4rPath != null) {

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
----------------------------------------------------------------------
diff --cc subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
index 209b5e9,0c98abc..084b6e9
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
@@@ -40,11 -40,8 +40,9 @@@ public class Package extends S4ArgsBas
              // prepare gradle -P parameters, including passed gradle opts
              params.add("appClass=" + packageArgs.appClass);
              params.add("appName=" + packageArgs.appName.get(0));
 -            ExecGradle.exec(packageArgs.gradleBuildFile, "installS4R", params.toArray(new String[] {}));
 +            ExecGradle.exec(packageArgs.gradleBuildFile, "s4r", params.toArray(new String[] {}),
 +                    packageArgs.debug);
  
-             // Explicitly shutdown the JVM since Gradle leaves non-daemon threads running that delay the termination
-             System.exit(0);
          } catch (Exception e) {
              LoggerFactory.getLogger(Package.class).error("Cannot deploy app", e);
          }
@@@ -59,11 -58,8 +59,11 @@@
          @Parameter(names = { "-b", "-buildFile" }, description = "Path to gradle build file for the S4 application", required = true, converter = FileConverter.class, validateWith = FileExistsValidator.class)
          File gradleBuildFile;
  
-         @Parameter(names = { "-a", "-appClass" }, description = "Full class name of the application class (extending App or AdapterApp)", required = false)
+         @Parameter(names = { "-a", "-appClass" }, description = "Full class name of the application class (extending App or AdapterApp)", required = true)
          String appClass = "";
  
 +        @Parameter(names = "-debug", description = "Display debug information from the build system", arity = 0)
 +        boolean debug = false;
 +
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/subprojects/s4-tools/src/main/resources/templates/build.gradle
----------------------------------------------------------------------
diff --cc subprojects/s4-tools/src/main/resources/templates/build.gradle
index 1122fcc,9a853b4..6d83c9c
--- a/subprojects/s4-tools/src/main/resources/templates/build.gradle
+++ b/subprojects/s4-tools/src/main/resources/templates/build.gradle
@@@ -17,8 -17,12 +17,10 @@@
   */
  
  
 -project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+ project.ext["appClassName"] = hasProperty('appClass')? "$appClass": "UNDEFINED"
+ 
  project.ext["s4Version"] = '0.5.0-incubating'
  description = 'Apache S4 App'
 -//defaultTasks 'installS4R'
  project.ext["archivesBaseName"] = "$project.name"
  project.ext["distRootFolder"] = "$archivesBaseName-${-> version}"
  
@@@ -159,27 -130,33 +128,26 @@@ task cp << 
      new File("classpath.txt").write(sourceSets.main.output.classesDir.path + File.pathSeparator + <s4_install_dir> + '/lib/*' + File.pathSeparator + <s4_install_dir> + '/subprojects/s4-tools/build/install/s4-tools/lib/*')
  }
  
- /* Parse source file to get the app classname so we can use it in the manifest.
- * TODO: Use a real Java parser. (This is not skipping comments for example.)
- */
- def getAppClassname(file) {
-    def classname = "UNKNOWN"
-    def lines= file.readLines()
-    def packageName = ""
-    for(line in lines) {
- 
-        def pn = line =~ /.*package\s+([\w\.]+)\s*;.*/
-        if(pn) {
-            packageName = pn[0][1] + "."
-        }
-        def an = line =~ /.*public\s+class\s+(\w+)\s+extends.+App.*\{/
- 
-        if (an) {
-            classname = packageName + an[0][1]
-            println "Found app class name: " + classname
-            break
-        }
 -/* Install the S4 archive to the install directory. */
 -task installS4R (type: Copy) {
 -   dependsOn s4r
 -   from s4r.archivePath
 -   into s4AppInstallDir
 -}
 -
+ /*Check whether the defined appClass exists and extends App*/
+ void checkAppClass() {
  
+    def loader = this.getClass().getClassLoader()
+ 
+    def jardir = new File( project.libsDir.path,'lib' )
+    def jars = jardir.listFiles().findAll { it.name.endsWith('.jar') }
+    jars.each {
+       loader.addURL(it.toURI().toURL())
     }
-    classname
+ 
+    def appJar = project.libsDir.path+"/app/"+"$project.name"+".jar"
+    loader.addURL(new URL("file://"+appJar))
+ 
+    def userClass = Class.forName(appClassName, true, this.getClass().getClassLoader())
+    def appClass = Class.forName('org.apache.s4.core.App', true, this.getClass().getClassLoader())
+ 
+    if (!(appClass.isAssignableFrom(userClass))){
+       throw new InvalidUserDataException("App class " + appClassName + " does not extend org.apache.s4.core.App")
+    }
+ 
  }
+ 

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/test-apps/consumer-app/build.gradle
----------------------------------------------------------------------
diff --cc test-apps/consumer-app/build.gradle
index 663e095,eae3228..e78e83f
--- a/test-apps/consumer-app/build.gradle
+++ b/test-apps/consumer-app/build.gradle
@@@ -34,8 -34,15 +34,13 @@@
  *
  */
  
+ /* Set the destination where we want to install the apps. */
+ //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
+ 
 -project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+ project.ext["appClassName"] = hasProperty('appClass')? "$appClass": "UNDEFINED"
+ 
  project.ext["s4Version"] = '0.5.0-SNAPSHOT'
  description = 'Apache S4 App'
 -//defaultTasks 'installS4R'
  archivesBaseName = "$project.name"
  distRootFolder = "$archivesBaseName-${-> version}"
  

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/test-apps/producer-app/build.gradle
----------------------------------------------------------------------
diff --cc test-apps/producer-app/build.gradle
index 7524cd1,eae3228..75cd3fe
--- a/test-apps/producer-app/build.gradle
+++ b/test-apps/producer-app/build.gradle
@@@ -34,8 -34,15 +34,13 @@@
  *
  */
  
+ /* Set the destination where we want to install the apps. */
+ //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
+ 
 -project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+ project.ext["appClassName"] = hasProperty('appClass')? "$appClass": "UNDEFINED"
+ 
  project.ext["s4Version"] = '0.5.0-SNAPSHOT'
  description = 'Apache S4 App'
 -//defaultTasks 'installS4R'
  archivesBaseName = "$project.name"
  distRootFolder = "$archivesBaseName-${-> version}"
  

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/test-apps/simple-deployable-app-1/build.gradle
----------------------------------------------------------------------
diff --cc test-apps/simple-deployable-app-1/build.gradle
index 7524cd1,f1763e8..3a45073
--- a/test-apps/simple-deployable-app-1/build.gradle
+++ b/test-apps/simple-deployable-app-1/build.gradle
@@@ -34,8 -34,15 +34,13 @@@
  *
  */
  
+ /* Set the destination where we want to install the apps. */
+ //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
+ 
 -project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+ project.ext["appClassName"] = hasProperty('appClass')? "$appClass": "UNDEFINED"
+ 
  project.ext["s4Version"] = '0.5.0-SNAPSHOT'
  description = 'Apache S4 App'
 -//defaultTasks 'installS4R'
  archivesBaseName = "$project.name"
  distRootFolder = "$archivesBaseName-${-> version}"
  

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/test-apps/twitter-adapter/build.gradle
----------------------------------------------------------------------
diff --cc test-apps/twitter-adapter/build.gradle
index 1eeeb69,b8a11d0..80341bb
--- a/test-apps/twitter-adapter/build.gradle
+++ b/test-apps/twitter-adapter/build.gradle
@@@ -34,8 -34,15 +34,13 @@@
  *
  */
  
+ /* Set the destination where we want to install the apps. */
+ //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
+ 
 -project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+ project.ext["appClassName"] = hasProperty('appClass')? "$appClass": "UNDEFINED"
+ 
  project.ext["s4Version"] = '0.5.0-incubating'
  description = 'Apache S4 App'
 -//defaultTasks 'installS4R'
  project.ext["archivesBaseName"] = "$project.name"
  project.ext["distRootFolder"] = "$archivesBaseName-${-> version}"
  

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/04243133/test-apps/twitter-counter/build.gradle
----------------------------------------------------------------------
diff --cc test-apps/twitter-counter/build.gradle
index 89db544,6149a13..a09962d
--- a/test-apps/twitter-counter/build.gradle
+++ b/test-apps/twitter-counter/build.gradle
@@@ -34,8 -34,15 +34,13 @@@
  *
  */
  
+ /* Set the destination where we want to install the apps. */
+ //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
+ 
 -project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+ project.ext["appClassName"] = hasProperty('appClass')? "$appClass": "UNDEFINED"
+ 
  project.ext["s4Version"] = '0.5.0-incubating'
  description = 'Apache S4 App'
 -//defaultTasks 'installS4R'
  project.ext["archivesBaseName"] = "$project.name"
  project.ext["distRootFolder"] = "$archivesBaseName-${-> version}"