Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
Vaadin and Hibernate
Hi Guys,
I'm currently experiencing an interesting problem.
My Situation:
- I am currently developing a web service (with using VAADIN, of course :) )
- My database behind is java derby
- I am using hibernate
- I'm currently deploying it on Tomcat v7.0
My Problem:
- When I change something in my code (doesn't matter what), the server should reload it without the need of being restarted
- The server reloads the application successfull, but if I try to click on something (so after the reloading) I get an error
Error Message:
Cause: org.hibernate.exception.GenericJDBCException: Could not open connection] with root cause
ERROR XSDB6: Another instance of Derby may have already booted the database C:\HTML-Ausgabe\database\DocumentDB.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
...
My Thoughts on this
It seems that somehow on the reloading process the connection/context to hibernate doesnt get destroyed/closed and so the error occures when the server tries to reconnect to the database
My Code
I have a class, called 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
}
}
My 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>
My (VAADIN) web.xml, in which I added a "listener" for the upper shown HibernateListener (check the bold text below):
<?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>
[b] <listener>
<listener-class>view.model.database.HibernateListener</listener-class>
</listener>[/b]
<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>
If anyone of you could help me somehow, I would be really happy. Currently I dont know what to change to stop this error happening. And, of course, I cant always restart the whole server later when my application is on the internet, if I change one line of code.
Thanks a lot for every answer and thought that you're sharing with me.
Can anyone help me here?
Or did someone experience something similiar while using a database?
I guess if you use a database you also don't restart your whole server from scratch if you changed one line of code :) ?
Thanks a lot for every post :)
Or did someone experience something similiar while using a database?
No.
I guess if you use a database you also don't restart your whole server from scratch if you changed one line of code ?
No : but then, my architecture is totally different!
Have you proved that
a) contextDestroyed is being called
b) The database connections are being closed
when the the servlet is destroyed?
I'd liberally sprinkle with debug statements to find out.
Cheers,
Charles.
Charles Anthony:
Have you proved that
a) contextDestroyed is being called
b) The database connections are being closed
when the the servlet is destroyed?I'd liberally sprinkle with debug statements to find out.
Cheers,
Charles.
Dear Charles,
thanks a lot for your post. I've checked if contextDestroyed is being called, and yes, it is being called. I've checked right after the .close() in the method if the sessionFactory is closed and it returned "true".
Immediately after my check I had this message in my console
Mrz 27, 2012 12:16:21 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
Schwerwiegend: The web application [/Bachelorprojekt] registered the JDBC driver [org.apache.derby.jdbc.AutoloadedDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Do you think that this part of my console output got to do something with my problem ?
Thanks again for every answer :)