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 :slight_smile: )
  • 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:


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 :slight_smile: ?

Thanks a lot for every post :slight_smile:

No.

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.

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

Do you think that this part of my console output got to do something with my problem ?

Thanks again for every answer :slight_smile: