【发布时间】:2012-04-10 07:20:37
【问题描述】:
我目前遇到了一个有趣的问题。
我的情况:
- 我目前正在开发一个 Web 服务(我正在使用 VAADIN 在 Eclipse 中使用 JAVA 进行编程)
- 我的数据库是java derby
- 我正在为我的数据库使用休眠
- 我目前正在 Tomcat v7.0 上部署它
我的问题:
- 当我更改代码中的某些内容时(不管怎样),服务器应该重新加载它而无需重新启动 - 我想这是整体预期的行为
- 服务器重新加载应用程序成功,但如果我尝试点击某些东西(所以在重新加载之后),例如登录按钮,我得到一个错误
错误信息:
原因:org.hibernate.exception.GenericJDBCException:无法打开 connection] 与根本原因 ERROR XSDB6: Derby 的另一个实例可能 已经启动了数据库 C:\HTML-Ausgabe\database\DocumentDB。 在 org.apache.derby.iapi.error.StandardException.newException(未知 来源)...
我对此的看法
似乎在重新加载过程中,休眠的连接/上下文不会被破坏/关闭,因此当服务器尝试重新连接到数据库时会发生错误
我的代码
我有一个类,叫 Hibernate Listener:
public class HibernateListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
HibernateUtil.getSessionFactory(); // Just call the static initializer of that class
}
public void contextDestroyed(ServletContextEvent event) {
HibernateUtil.getSessionFactory().close(); // Free all resources
}
}
我的hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.apache.derby.jdbc.EmbeddedDriver</property>
<property name="hibernate.connection.url">jdbc:derby:C:\HTML-Ausgabe\database\DocumentDB;create=true</property>
<property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.show_sql">true</property>
<mapping class="view.model.database.User"/>
<mapping class="view.model.database.Document"/>
<mapping class="view.model.database.Version"/>
<mapping class="view.model.database.VersionData"/>
</session-factory>
</hibernate-configuration>
我的 (VAADIN) web.xml,我在其中为上面显示的 HibernateListener 添加了一个“监听器”(检查监听器处的文本):
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Bachelorprojekt</display-name>
<context-param>
<description>Vaadin production mode</description>
<param-name>productionMode</param-name>
<param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>Bachelorprojekt Application</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
<init-param>
<description>Vaadin application class to start</description>
<param-name>application</param-name>
<param-value>view.view.WebsiteFrame</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Bachelorprojekt Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>view.model.database.HibernateListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
我做了研究,也在hibernate论坛上发帖(仍然没有一个答案:(),现在在这个网站上没有找到匹配的主题。所以我希望我没有做错什么。
如果你们中的任何人能以某种方式帮助我,我会非常高兴。目前我不知道要改变什么来阻止这个错误的发生。当然,如果我更改了一行代码,当我的应用程序在互联网上时,我不能总是重新启动整个服务器。
非常感谢您与我分享的每一个答案和想法。
【问题讨论】:
标签: java database hibernate reload vaadin