2010-09-07 15 views
10

Nie chcę używać go w trybie wbudowanym, ponieważ mogę zezwolić innym aplikacjom zewnętrznym również na dostęp do niego. I chcę uruchomić uruchamianie serwera w tym samym czasie, w którym Tomcat ładuje moją aplikację (lub tylko wtedy, gdy uruchomi się tomcat). Jest tak, że nie muszę pytać klientów, aby ręcznie uruchomić hsqldb za pomocą polecenia lub skryptu, zanim będą mogli umieścić moją wojnę w tomcat i uruchomić ją (aby zachować prostotę).Jak uruchomić i uruchomić hsqldb w trybie serwera z poziomu mojej aplikacji internetowej?

Mogę ewentualnie zadzwonić pod numer Server od głównego wysyłając polecenie z Javy, ale to da mi niekończący się wątek, nie jestem pewien jak sobie z tym poradzić. Czy istnieje łatwiejszy sposób przetestowania tego?

Odpowiedz

9

Zgodnie z Dokumentacją HSQLDB możliwe jest uruchomienie bazy danych z kodu Java Kod: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#listeners_appstart-sect. Można więc użyć serwletu do załadowania bazy danych podczas uruchamiania aplikacji internetowej. Kroki powinny być następujące:

  1. Tworzenie serwletu „InitDatabase” i umieścić kod do uruchomienia bazy danych na metody 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. W swojej web.xml dodać właściwość Załaduj przy uruchomieniu i ustaw na 1. To dla wywołania metody init() podczas uruchamiania aplikacji sieciowej.

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

Po to zrobić Web Application rozpocznie hsqldb w nowy wątek. Aby zamknąć bazę danych, gdy aplikacja zatrzyma się, można zastąpić metodę destroy() InitServlet. W metodzie zniszcz należy wykonać polecenie "ZAMKNIJ" jako normalne zapytanie SQL (poprzez JDBC).

1

Możesz użyć HSQLDB na dowolnym serwerze WWW/aplikacji w trybie wbudowanym i zezwolić zewnętrznym aplikacjom na dostęp do niego, uruchamiając org.hsqldb.server.Servlet na swoim serwerze WWW/aplikacji. Zewnętrzne aplikacje następnie połączą się z serwletem przy użyciu adresu URL jdbc: hsqldb: http: type.

Jeśli chcesz uruchomić org.hsqldb.server.Server (klasa wersji 2.0) lub org.hsqldb.Server, jako osobny proces jako Tomcat, możesz użyć klasy org.hsqldb.util.MainInvoker do wywołaj główną metodę dla wielu klas (np. Tomcat i serwer HSQLDB) z serwerem o nazwie first.

Powiązane problemy