Re: tiniest SQL + tiniest app-server
On 08-01-2010 00:16, tnorgd wrote:
I have a command-line based java program that does a lot of stuff and
its single run take a couple of days. I would like to monitor its
progress in a way smarter than just reading output text file.
I would like to make it writing to a SQL database, then I could look
on charts through a web browser. I run tests on my laptop, so I would
need the smallest possible SQL database. Idealy a single jar file I
could launch in a terminal. Moreover I need a webserwer, preferably
also a single jar.
I am sure there is such stuff already waiting to be used...
There are plenty of embedded databases to pick from
Cloudscape/Derby/JavaDB, Hypersonic SQL/HSQLDB/H2,
BDB Java edition, McKoi etc..
HTTP server is a different animal though. In general I am
rather happy with Tomcat, but I think that Jetty may be
better for embedded purpose.
http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty
document how easy it is.
Attached below is my own small demo example. It does not
get much simpler than that.
Arne
==================================
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
public class WebServer extends AbstractHandler {
private Map<String, Integer> counter = new HashMap<String, Integer>();
public void handle(String target, Request req, HttpServletRequest
httpreq, HttpServletResponse httpresp) throws IOException,
ServletException {
int n;
String path = httpreq.getPathInfo();
if(counter.containsKey(path)) {
n = counter.get(path) + 1;
} else {
n = 1;
}
httpresp.setContentType("text/html");
httpresp.setStatus(HttpServletResponse.SC_OK);
PrintWriter pw = httpresp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<title>Hit counter</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<h1>Hit counter</h1>");
pw.println("<p>" + path + " has " + n + " hits</p>");
pw.println("</body>");
pw.println("</html>");
pw.flush();
counter.put(path, n);
req.setHandled(true);
}
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
server.setHandler(new WebServer());
server.start();
server.join();
}
}