How can I start and keep running hsqldb in server mode from within my web application?

According to the HSQLDB Documentation is possible start the database from Java Code: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#listeners_appstart-sect. So you can use a servlet for load the database when the web application is starting. The steps should be the following:

  1. Create a Servlet "InitDatabase" and put the code for start the database on the method init()

    @Override
    public void init() throws ServletException {
        super.init();
        try {
            System.out.println("Starting Database");
            HsqlProperties p = new HsqlProperties();
            p.setProperty("server.database.0", "file:/opt/db/crm");
            p.setProperty("server.dbname.0", "mydb");
            p.setProperty("server.port", "9001");
            Server server = new Server();
            server.setProperties(p);
            server.setLogWriter(null); // can use custom writer
            server.setErrWriter(null); // can use custom writer
            server.start();
        } catch (AclFormatException afex) {
            throw new ServletException(afex);
        } catch (IOException ioex) {
            throw new ServletException(ioex);
        }
    }
    
  2. In your web.xml add the property load on start up and set it to 1. This for call to method init() when the Web Application is starting.

    <servlet>
        <servlet-name>InitDatabase</servlet-name>
        <servlet-class>bo.hsqltest.InitDatabase</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet> 
    

After do this the Web Application will start HSQLDB in a new Thread. For shutdown the database when the application stops you can override the method destroy() of InitServlet. In the method destroy you must execute the command "SHUTDOWN" as normal sql query (through JDBC).


You can use HSQLDB on any web/app server in embedded mode and allow external apps to access it by running the org.hsqldb.server.Servlet on your web/app server. The external apps will then connect to the servlet using the jdbc:hsqldb:http: type url's.

If you want to run org.hsqldb.server.Server (the version 2.0 class), or org.hsqldb.Server, as a separate process as Tomcat, you can use the class org.hsqldb.util.MainInvoker to call the main method for multiple classes (e.g. Tomcat and HSQLDB Server) with Server called first.

Tags:

Java

Hsqldb