- pass the svn revision as format version (for more detailed verification)
- add an 'autoreload' setting that makes Gridworks autoreload its self if a class gets changed (this is useful to make development cycles faster when working on the java code with autocompiling IDE like Eclipse or IDEA) git-svn-id: http://google-refine.googlecode.com/svn/trunk@372 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
d1e72e7797
commit
521acda025
@ -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 @@
|
||||
<cp>lib/*.jar</cp>
|
||||
</classPath>
|
||||
<jre minVersion="1.6.0" jdkPreference="preferJre" initialHeapSize="256" maxHeapSize="1024">
|
||||
<opt>-Djava.library.path=lib/native/windows</opt>
|
||||
<opt>-Djava.library.path=lib/native/windows -Dgridworks.version=${revision}</opt>
|
||||
</jre>
|
||||
<versionInfo
|
||||
fileVersion="${num_version}.0.0"
|
||||
|
@ -41,6 +41,9 @@ where [options] include:
|
||||
-m <memory> 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";;
|
||||
|
@ -19,19 +19,39 @@ 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 {
|
||||
|
||||
// tell jetty to use SLF4J for logging instead of its own stuff
|
||||
@ -46,45 +66,36 @@ public class Gridworks extends Server {
|
||||
Logger jetty_logger = Logger.getLogger("org.mortbay.log");
|
||||
jetty_logger.setLevel(Level.WARN);
|
||||
|
||||
// get main configurations
|
||||
version = Configurations.get("gridworks.version","trunk");
|
||||
|
||||
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,8 +134,10 @@ public class Gridworks extends Server {
|
||||
|
||||
// Enable context autoreloading
|
||||
if (Configurations.getBoolean("gridworks.autoreloading",false)) {
|
||||
scanForUpdates(contextRoot, context);
|
||||
scanForUpdates(contextRoot, classRoot, context);
|
||||
}
|
||||
|
||||
this.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -139,14 +153,14 @@ public class Gridworks extends Server {
|
||||
}
|
||||
}
|
||||
|
||||
private void scanForUpdates(final File contextRoot, final WebAppContext context) {
|
||||
private void scanForUpdates(final File contextRoot, final File classRoot, final WebAppContext context) {
|
||||
List<File> scanList = new ArrayList<File>();
|
||||
|
||||
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);
|
||||
@ -171,7 +185,7 @@ public class Gridworks extends Server {
|
||||
scanner.start();
|
||||
}
|
||||
|
||||
static private void findFiles(final String extension, File baseDir, final Collection<File> found) {
|
||||
private void findFiles(final String extension, File baseDir, final Collection<File> found) {
|
||||
baseDir.listFiles(new FileFilter() {
|
||||
public boolean accept(File pathname) {
|
||||
if (pathname.isDirectory()) {
|
||||
@ -186,18 +200,29 @@ 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
|
||||
|
@ -62,7 +62,7 @@ public class GridworksServlet extends HttpServlet {
|
||||
static protected Map<String, Command> _commands = new HashMap<String, Command>();
|
||||
|
||||
// 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
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user