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 2012/01/03 14:03:28 UTC

[38/50] [abbrv] git commit: Read MANIFEST main attributes, get teh S4 app name attribute and create a new instance.

Read MANIFEST main attributes, get teh S4 app name attribute and create a new instance.


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

Branch: refs/heads/piper
Commit: a6b382d28ce1309ab64878a8a5d27f636960feae
Parents: c01da3b
Author: Leo Neumeyer <le...@s4.io>
Authored: Sun Oct 23 18:39:35 2011 -0700
Committer: Leo Neumeyer <le...@s4.io>
Committed: Sun Oct 23 18:39:35 2011 -0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/s4/core/Server.java   |   45 +++++++++-----
 .../src/main/resources/apps/CounterExample.s4r     |  Bin 53070 -> 53071 bytes
 2 files changed, 29 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/a6b382d2/subprojects/s4-core/src/main/java/org/apache/s4/core/Server.java
----------------------------------------------------------------------
diff --git a/subprojects/s4-core/src/main/java/org/apache/s4/core/Server.java b/subprojects/s4-core/src/main/java/org/apache/s4/core/Server.java
index 414ec84..ac4b296 100644
--- a/subprojects/s4-core/src/main/java/org/apache/s4/core/Server.java
+++ b/subprojects/s4-core/src/main/java/org/apache/s4/core/Server.java
@@ -1,7 +1,9 @@
 package org.apache.s4.core;
 
 import java.net.URL;
-
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
 
 import org.apache.s4.base.util.JarLoader;
 import org.slf4j.Logger;
@@ -21,7 +23,7 @@ import com.google.inject.name.Named;
  * layer.
  */
 public class Server {
-    
+
     final private String moduleName;
     final private String logLevel;
 
@@ -59,30 +61,39 @@ public class Server {
 
         // HERE WE SHOULD LOOP TO CHECK IF WE NEED TO LOAD OR UNLOAD APPS.
 
-
-        // MAKE SURE YOU COPY THE RESOURCE TO THE CLASSPATH 
+        // MAKE SURE YOU COPY THE RESOURCE TO THE CLASSPATH
         // example: subprojects/s4-core/bin/apps/MY_RESOURCE (in Eclipse)
-        //String resource = "/apps/HelloApp.jar";
+        // String resource = "/apps/HelloApp.jar";
         String resource = "/apps/CounterExample.s4r";
         // Read the jar as a resource into a URL.
         URL url = this.getClass().getResource(resource);
-        if(url == null) {
+        if (url == null) {
             logger.error("Couldn't read resource.");
             System.exit(-1);
         }
         logger.trace("Read: {}", url.toString());
-        
-        // Convert the URL to a File and load the jar.
+
+        /* Convert the URL to a File and load the jar. */
         JarLoader cl = new JarLoader(url.getFile());
-        
-//        URL url = this.getClass().getResource("/apps/HelloApp.jar");
-//        logger.trace("URL: " + url.toString());
-        
-        // LOOK AT the custom classloader class MultiClassLoader, for now it
 
-        String appClassName = "org.apache.s4.example.counter.MyApp"; // THE APP CLASS WE NEED TO GET FROM THE MANIFEST.
-        App myApp=null;
+        /* Read MANIFEST main attributes. We need the name of the App class. */
+        String appClassName="";
+        try {
+            JarFile jar = new JarFile(url.getFile());
+            Manifest manifest = jar.getManifest();
+            Attributes attributes = manifest.getMainAttributes();
+            for (Object name : attributes.keySet()) {
+                logger.debug(name + ": " + attributes.getValue((Attributes.Name)name));
+            }
+            appClassName = attributes.getValue("S4-App-Class");
+        } catch (Exception e) {
+           logger.error(e.getMessage(), e);
+        }
         
+        logger.info("Loading application class: " + appClassName);
+        App myApp = null;
+
+        /* Create app. App must have a zero-arg constructor. */
         try {
             Object o = (cl.loadClass(appClassName)).newInstance();
             myApp = (App) o;
@@ -90,11 +101,13 @@ public class Server {
             System.out.println("Caught exception : " + e);
             e.printStackTrace();
         }
-        
+
+        /* Set up app and call life-cycle methods. */
         Sender sender = injector.getInstance(Sender.class);
         Receiver receiver = injector.getInstance(Receiver.class);
         myApp.setCommLayer(sender, receiver);
         myApp.init();
         myApp.start();
+        myApp.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/a6b382d2/subprojects/s4-core/src/main/resources/apps/CounterExample.s4r
----------------------------------------------------------------------
diff --git a/subprojects/s4-core/src/main/resources/apps/CounterExample.s4r b/subprojects/s4-core/src/main/resources/apps/CounterExample.s4r
index a7c311c..b1d0cac 100644
Binary files a/subprojects/s4-core/src/main/resources/apps/CounterExample.s4r and b/subprojects/s4-core/src/main/resources/apps/CounterExample.s4r differ