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