diff --git a/build.xml b/build.xml
index e77be267f..951ef511a 100644
--- a/build.xml
+++ b/build.xml
@@ -103,7 +103,7 @@
workingdirectory="$APP_PACKAGE/Contents/Resources"
jvmversion="1.6+"
bundleid="com.metaweb.gridworks.Gridworks"
- vmoptions="${java.options}"
+ vmoptions="-Dgridworks.version=${revision} ${java.options}"
antialiasedgraphics="true"
antialiasedtext="true"
liveresize="true"
@@ -138,7 +138,7 @@
lib/*.jar
- -Djava.library.path=lib/native/windows
+ -Djava.library.path=lib/native/windows -Dgridworks.version=${revision}
max memory heap size to use
default: 1024M
+ -a autoreload if class files change
+ default: false
+
--debug enable JVM debugging (on port 8000)
--jmx enable JMX monitoring (for jconsole and jvisualvm)
@@ -271,6 +274,10 @@ run() {
OPTS="-Dgridworks.data_dir=$GRIDWORKS_DATA_DIR $OPTS"
fi
+ get_revision
+
+ OPTS="-Dgridworks.version=$REVISION $OPTS"
+
CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_LIB_DIR/*"
RUN_CMD="$JAVA -cp $CLASSPATH $OPTS com.metaweb.gridworks.Gridworks"
@@ -349,6 +356,7 @@ while [ $# -ne 0 ] ; do
-w) shift; GRIDWORKS_WEBAPP="$1"; shift; continue;;
-d) shift; GRIDWORKS_DATA_DIR="$1"; shift; continue;;
-m) shift; GRIDWORKS_MEMORY="$1"; shift; continue;;
+ -a) shift; add_option '-Dgridworks.autoreloading=true'; continue;;
--debug) shift; add_option '-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n'; continue;;
--jmx) shift; add_option '-Dcom.sun.management.jmxremote'; continue;;
-*) fail "Invalid option: $1";;
diff --git a/src/main/java/com/metaweb/gridworks/Gridworks.java b/src/main/java/com/metaweb/gridworks/Gridworks.java
index 549a0878f..e7c95f8c2 100644
--- a/src/main/java/com/metaweb/gridworks/Gridworks.java
+++ b/src/main/java/com/metaweb/gridworks/Gridworks.java
@@ -19,18 +19,38 @@ import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.webapp.WebAppContext;
-import org.mortbay.log.Log;
import org.mortbay.util.Scanner;
import com.metaweb.util.logging.IndentingLayout;
import com.metaweb.util.signal.SignalHandler;
import com.metaweb.util.threads.ThreadPoolExecutorAdapter;
-public class Gridworks extends Server {
- final static public String s_version = "1.0";
+public class Gridworks {
+
+ static private String version;
private static Logger root = Logger.getRootLogger();
private static Logger logger = Logger.getLogger("com.metaweb.gridworks");
+
+ public static void log(String message) {
+ logger.info(message);
+ }
+
+ public static void info(String message) {
+ logger.info(message);
+ }
+
+ public static void error(String message, Throwable t) {
+ logger.error(message, t);
+ }
+
+ public static void warn(String message) {
+ logger.warn(message);
+ }
+
+ public static String getVersion() {
+ return version;
+ }
public static void main(String[] args) throws Exception {
@@ -45,46 +65,37 @@ public class Gridworks extends Server {
Logger jetty_logger = Logger.getLogger("org.mortbay.log");
jetty_logger.setLevel(Level.WARN);
+
+ version = Configurations.get("gridworks.version","trunk");
- // get main configurations
+ Gridworks gridworks = new Gridworks();
+
+ gridworks.init(args);
+ }
+
+ public void init(String[] args) throws Exception {
+
int port = Configurations.getInteger("gridworks.port",3333);
String host = Configurations.get("gridworks.host","127.0.0.1");
- // create acre's server (which is a thin wrapper around Jetty)
- Gridworks server = new Gridworks(host,port);
+ GridworksServer server = new GridworksServer();
+ server.init(host,port);
+ GridworksClient client = new GridworksClient();
+ client.init(host,port);
+
// hook up the signal handlers
new ShutdownSignalHandler("TERM", server);
-
- // start the server
- server.start();
-
- // start the browser
- URI starting_url = new URI("http://" + host + ":" + port + "/");
- Desktop.getDesktop().browse(starting_url);
-
- // join this thread
- server.join();
}
+}
- public static void log(String message) {
- logger.info(message);
- }
+/* -------------- Gridworks Server ----------------- */
- public static void error(String message, Throwable t) {
- logger.error(message, t);
- }
-
- public static void warn(String message) {
- logger.warn(message);
- }
-
- /* -------------- Gridworks HTTP server ----------------- */
+class GridworksServer extends Server {
private ThreadPoolExecutor threadPool;
- public Gridworks(String host, int port) throws Exception {
-
+ public void init(String host, int port) throws Exception {
int maxThreads = Configurations.getInteger("gridworks.queue.size", 10);
int maxQueue = Configurations.getInteger("gridworks.queue.max_size", 50);
long keepAliveTime = Configurations.getInteger("gridworks.queue.idle_time", 60);
@@ -103,15 +114,16 @@ public class Gridworks extends Server {
this.addConnector(connector);
final File contextRoot = new File(Configurations.get("gridworks.webapp","webapp"));
+ final File classRoot = new File(Configurations.get("gridworks.classes","build/classes"));
final String contextPath = Configurations.get("gridworks.context_path","/");
File webXml = new File(contextRoot, "WEB-INF/web.xml");
if (!webXml.isFile()) {
- Log.warn("Warning: Failed to find web application. Could not find 'web.xml' at '" + webXml.getAbsolutePath() + "'");
+ Gridworks.warn("Warning: Failed to find web application. Could not find 'web.xml' at '" + webXml.getAbsolutePath() + "'");
System.exit(-1);
}
- Log.info("Initializing context: '" + contextPath + "' from '" + contextRoot.getAbsolutePath() + "'");
+ Gridworks.info("Initializing context: '" + contextPath + "' from '" + contextRoot.getAbsolutePath() + "'");
WebAppContext context = new WebAppContext(contextRoot.getAbsolutePath(), contextPath);
//context.setCopyWebDir(false);
//context.setDefaultsDescriptor(null);
@@ -122,10 +134,12 @@ public class Gridworks extends Server {
// Enable context autoreloading
if (Configurations.getBoolean("gridworks.autoreloading",false)) {
- scanForUpdates(contextRoot, context);
+ scanForUpdates(contextRoot, classRoot, context);
}
+
+ this.start();
}
-
+
@Override
protected void doStop() throws Exception {
try {
@@ -138,15 +152,15 @@ public class Gridworks extends Server {
// ignore
}
}
-
- private void scanForUpdates(final File contextRoot, final WebAppContext context) {
+
+ private void scanForUpdates(final File contextRoot, final File classRoot, final WebAppContext context) {
List scanList = new ArrayList();
scanList.add(new File(contextRoot, "WEB-INF/web.xml"));
findFiles(".class", new File(contextRoot, "WEB-INF"), scanList);
- findFiles(".js", new File(contextRoot, "WEB-INF"), scanList);
+ findFiles(".class", classRoot, scanList);
- Log.info("Starting autoreloading scanner...");
+ Gridworks.info("Starting autoreloading scanner... [class dir: " + classRoot.getAbsolutePath() + "]");
Scanner scanner = new Scanner();
scanner.setScanInterval(Configurations.getInteger("gridworks.scanner.period",1));
@@ -157,10 +171,10 @@ public class Gridworks extends Server {
@SuppressWarnings("unchecked")
public void filesChanged(List changedFiles) {
try {
- Log.info("Stopping context: " + contextRoot.getAbsolutePath());
+ Gridworks.info("Stopping context: " + contextRoot.getAbsolutePath());
context.stop();
- Log.info("Starting context: " + contextRoot.getAbsolutePath());
+ Gridworks.info("Starting context: " + contextRoot.getAbsolutePath());
context.start();
} catch (Exception ex) {
throw new RuntimeException(ex);
@@ -170,8 +184,8 @@ public class Gridworks extends Server {
scanner.start();
}
-
- static private void findFiles(final String extension, File baseDir, final Collection found) {
+
+ private void findFiles(final String extension, File baseDir, final Collection found) {
baseDir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
@@ -183,21 +197,32 @@ public class Gridworks extends Server {
}
});
}
-
-}
+}
+
+/* -------------- Gridworks Client ----------------- */
+
+class GridworksClient {
+
+ public void init(String host, int port) throws Exception {
+ URI starting_url = new URI("http://" + host + ":" + port + "/");
+ Desktop.getDesktop().browse(starting_url);
+
+ }
+}
+
class ShutdownSignalHandler extends SignalHandler {
- private Gridworks _server;
+ private Server _server;
- public ShutdownSignalHandler(String sigName, Gridworks server) {
+ public ShutdownSignalHandler(String sigName, Server server) {
super(sigName);
this._server = server;
}
public boolean handle(String signame) {
- System.err.println("Received Signal: " + signame);
+ //System.err.println("Received Signal: " + signame);
// Tell the server we want to try and shutdown gracefully
// this means that the server will stop accepting new connections
diff --git a/src/main/java/com/metaweb/gridworks/GridworksServlet.java b/src/main/java/com/metaweb/gridworks/GridworksServlet.java
index bc50648f3..d276a43f7 100644
--- a/src/main/java/com/metaweb/gridworks/GridworksServlet.java
+++ b/src/main/java/com/metaweb/gridworks/GridworksServlet.java
@@ -62,7 +62,7 @@ public class GridworksServlet extends HttpServlet {
static protected Map _commands = new HashMap();
// timer for periodically saving projects
- static protected Timer _timer = new Timer();
+ static protected Timer _timer;
static {
_commands.put("create-project-from-upload", new CreateProjectCommand());
@@ -128,6 +128,10 @@ public class GridworksServlet extends HttpServlet {
ProjectManager.initialize();
+ if (_timer == null) {
+ _timer = new Timer();
+ }
+
long period = 1000 * 60 * 5; // 5 minutes
_timer.scheduleAtFixedRate(new TimerTask() {
@Override
diff --git a/src/main/java/com/metaweb/gridworks/history/History.java b/src/main/java/com/metaweb/gridworks/history/History.java
index 402b5b5d9..5dfb5b4be 100644
--- a/src/main/java/com/metaweb/gridworks/history/History.java
+++ b/src/main/java/com/metaweb/gridworks/history/History.java
@@ -37,7 +37,7 @@ public class History implements Jsonizable {
}
static public void writeOneChange(Writer writer, Change change) throws Exception {
- writer.write(Gridworks.s_version); writer.write('\n');
+ writer.write(Gridworks.getVersion()); writer.write('\n');
writer.write(change.getClass().getName()); writer.write('\n');
Properties options = new Properties();
diff --git a/src/main/java/com/metaweb/gridworks/model/Project.java b/src/main/java/com/metaweb/gridworks/model/Project.java
index e7c33b4d7..93d03c280 100644
--- a/src/main/java/com/metaweb/gridworks/model/Project.java
+++ b/src/main/java/com/metaweb/gridworks/model/Project.java
@@ -111,7 +111,7 @@ public class Project {
}
protected void saveToWriter(Writer writer, Properties options) throws IOException {
- writer.write(Gridworks.s_version); writer.write('\n');
+ writer.write(Gridworks.getVersion()); writer.write('\n');
writer.write("columnModel=\n"); columnModel.save(writer, options);
writer.write("history=\n"); history.save(writer, options);