使用derby / jpa / tomcat,数据库始终已启动

时间:2013-11-27 21:29:09

标签: java tomcat jpa netbeans derby

我正在尝试将jpa与tomcat一起使用,使用Derby。但是我得到了这样的消息:引起:ERROR XSDB6:Derby的另一个实例可能已经启动了数据库

我的persistence.xml就是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="contribs" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby:~/contribs;create=true"/>
      <property name="javax.persistence.jdbc.password" value="sa"/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

我使用 ServletContextListener ,用 @WebListener()注释。

contextInitialized 上,我得到一个 EntityManagerFactory 和一个 EntityManager ,然后关闭所有 contextDestroyed

我看到log tomcat调用两次我的ServletContextListener(我不明白为什么),第二次收到错误信息。

我也使用Netbeans。

我该如何解决?感谢。

1 个答案:

答案 0 :(得分:0)

您是否正在将应用程序重新部署到Tomcat中? Tomcat似乎经常在单独的应用程序类加载器中保持运行的Web应用程序的多个副本,并且只有一个Web应用程序副本能够一次打开Derby。

一种可能性是从嵌入式版本的Derby切换到客户端 - 服务器版本。

另一种可能性是在问题发生时重启Tomcat。