Servlet中的HSQL DB:未释放锁定文件

问题描述 投票:5回答:3

我正在Servlet中运行HSQLDB。当我将应用程序重新部署到Web服务器时,.lck文件未正确释放,HSQL Server无法加载该文件。

Web服务器是NetBeans附带的Tomcat 7.0.22 ...

任何想法为什么会这样?

这里是初始化代码:

@Override public void init() throws ServletException {
        HsqlProperties p = new HsqlProperties();
        p.setProperty("server.database.0", dbPath);
        p.setProperty("server.dbname.0", Environment.PERSISTENCE_HSQL_DB_NAME);
        p.setProperty("server.port", Environment.PERSISTENCE_HSQL_PORT);
        server = new Server();
        server.setProperties(p);
        server.setSilent(false);
        server.setTrace(true);
        server.setLogWriter(new PrintWriter(System.out));
        server.setErrWriter(null);
        server.start();

        server.checkRunning(true);

        /* Exception handling */
    }

这是我的关闭/销毁方法:

@Override
public void destroy() {
    super.destroy();
    server.setNoSystemExit(true);
    server.stop();
    server.shutdown();
    controller.shutdown();
}

我正在使用JPA。如果数据库加载(首次启动),则应用程序运行正常。这是我的persistence.xml:

<persistence-unit name="embedded_hsql" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <!-- Entities -->
    <properties>
        <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
        <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost:9001/fst_db;hsqldb.lock_file=false"/>
        <property name="hibernate.connection.username" value="SA"/>
        <property name="hibernate.connection.password" value=""/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
        <property name="hibernate.show_sql" value="false"/>
        <property name="hibernate.connection.SetBigStringTryClob" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="current_session_context_class" value="thread" />
        <property name="cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
    </properties>
</persistence-unit>   

我出于测试目的添加了“ hsqldb.lock_file = false”,这根本没有任何效果。一般来说,我不想禁用文件锁定...

谢谢!

java java-ee jpa hsqldb
3个回答
1
投票

[如果您需要从同一Web应用程序中访问该数据库,比:

  1. "in-process"模式运行HSQLDB。
  2. 将数据库定义为Tomcat的resource,并使用JNDI访问它。
  3. 这将有助于完全摆脱hsqldb的启动/停止负担。


0
投票

您好用这种方式解决了这个问题:


0
投票

从HSQLDB 2.4.1开始,似乎关闭HSQL服务器的正确方法是通过org.hsqldb.server.Server类的shutdownCatalogs或shutdownWithCatalogs方法。

© www.soinside.com 2019 - 2024. All rights reserved.