Title: [677] trunk/rails-integration/src/main/java/org/jruby/webapp: configurable support for caching, by Li Xiao
- Revision
- 677
- Author
- tirsen
- Date
- 2007-07-23 21:32:33 -0400 (Mon, 23 Jul 2007)
Log Message
configurable support for caching, by Li Xiao
Modified Paths
Diff
Modified: trunk/rails-integration/src/main/java/org/jruby/webapp/FileServlet.java (676 => 677)
--- trunk/rails-integration/src/main/java/org/jruby/webapp/FileServlet.java 2007-07-21 05:28:47 UTC (rev 676)
+++ trunk/rails-integration/src/main/java/org/jruby/webapp/FileServlet.java 2007-07-24 01:32:33 UTC (rev 677)
@@ -10,6 +10,9 @@
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
+import java.util.Calendar;
+import java.util.Date;
+import java.text.SimpleDateFormat;
/**
* This servlet returns a static file.
@@ -20,10 +23,17 @@
public static final String FALLBACK_SERVLET_PROPERTY = "files.default";
+ public final static String CACHE_CONTROL_HEADER = "Cache-Control";
+ public final static String EXPIRES_HEADER = "Expires";
+ public final static String DATE_HEADER = "Date";
+
private static final String[] DEFAULT_WELCOME_FILES = {"index.jsp", "index.html", "index.htm"};
private int bufferSize = 1024;
+ private boolean setCacheHeaders;
+ private int maxAge;
+
private String rootPath;
private String directory;
@@ -49,6 +59,11 @@
directory = "public";
}
+ setCacheHeaders = getServletConfig().getInitParameter("maxAge") != null;
+ if (setCacheHeaders) {
+ maxAge = Integer.parseInt(getServletConfig().getInitParameter("maxAge"));
+ }
+
// check for default fallback servlet
String defaultServletName = getServletConfig().getInitParameter("defaultServlet");
if (defaultServletName == null) {
@@ -132,7 +147,17 @@
throw new NotModifiedException();
}
+ // set cache headers
+ if (setCacheHeaders) {
+ response.setHeader(CACHE_CONTROL_HEADER, "max-age=" + maxAge);
+ response.setHeader(DATE_HEADER, formatDateForHeader(Calendar.getInstance().getTime()));
+ Calendar now = Calendar.getInstance();
+ now.add(Calendar.SECOND, maxAge);
+ response.setHeader(EXPIRES_HEADER, formatDateForHeader(now.getTime()));
+ }
+
// setup IO streams
+ System.out.println("sending file: " + file);
ByteBuffer buffer = ByteBuffer.allocate(bufferSize);
in = new FileInputStream(file).getChannel();
@@ -185,6 +210,11 @@
return typeMap.getContentType(fileName);
}
+ private String formatDateForHeader(Date date) {
+ String safari3OnlyAccessThisStyleDataFormat = "EEE, d MMM yyyy HH:mm:ss z";
+ return new SimpleDateFormat(safari3OnlyAccessThisStyleDataFormat).format(date);
+ }
+
/**
* An exception when the source object has not been modified. While this
* condition is not a failure, it is a break from the normal flow of
Modified: trunk/rails-integration/src/main/java/org/jruby/webapp/RailsTaskServlet.java (676 => 677)
--- trunk/rails-integration/src/main/java/org/jruby/webapp/RailsTaskServlet.java 2007-07-21 05:28:47 UTC (rev 676)
+++ trunk/rails-integration/src/main/java/org/jruby/webapp/RailsTaskServlet.java 2007-07-24 01:32:33 UTC (rev 677)
@@ -35,17 +35,20 @@
Ruby runtime = (Ruby) getRuntimePool().borrowObject();
servletConfig.getServletContext().log("Starting " + script);
try {
- // can this be used instead?
- // runtime.getLoadService().load(script);
runtime.evalScript("load(File.join(RAILS_ROOT, '" + script + "'))");
} catch (Exception e) {
getRuntimePool().invalidateObject(runtime);
- try {
+ runtime = null;
+ try {
Thread.sleep(10 * 1000); // wait for 10s
} catch (InterruptedException ignore) {
}
servletConfig.getServletContext().log("Script died, restarting: " + script, e);
- }
+ } finally {
+ if (runtime != null) {
+ getRuntimePool().returnObject(runtime);
+ }
+ }
}
} catch (Exception e) {
servletConfig.getServletContext().log("Could not start " + script, e);
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel