In the past few weeks I was required to create a prototype for the frontend of a project and because the focus is only on the frontend, I’ve chosen Jetty to create a simple mock server that would respond with simple JSON messages or stream some image files. I also use Jetty to serve the static files, like static images, CSS, JS that I am continuously modifying while developing the new frontend. Because I am developing on Windows, I have run quite soon into the file locking problem.
The solution is to simply set the useFileMappedBuffer
parameter false
. While this is easy if you use Maven to start Jetty or you use an XML file to configure it, I prefer to start it programmatically from Java. To solve this programmatically you need to simply add this initial parameter to your WebAppContext
:
webAppContext.getInitParams().put("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
For an example of how I start my Jetty server programmatically, here’s my source code:
package core;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.webapp.WebAppContext;
/**
* Created by Laszlo Gazsi on 4/19/2016.
*/
public class Jetty {
public static void main(String[] args) throws Exception {
Server server = new Server(88);
WebAppContext webAppContext = new WebAppContext();
webAppContext.getInitParams().put("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
webAppContext.setResourceBase("web");
webAppContext.addServlet(ResourceServlet.class, "/json");
webAppContext.addServlet(StreamServlet.class, "/stream");
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(webAppContext);
server.setHandler(webAppContext);
server.start();
server.join();
}
}