[HbnContainer] CacheLoader exception

Hi,

i’m running an vaadin test application on tomcat 7 (xampp). Currently i’m trying to get hibernate (with HbnContainer) to run in combination with MySQL. I followed the “Get Started” on the github project of HbnContainer.

But i get the following exceptoin on execution:

java.lang.NoClassDefFoundError: com/google/common/cache/CacheLoader
    at com.example.vaadintest2.Vaadintest2UI.init(Vaadintest2UI.java:30)
    at com.vaadin.ui.UI.doInit(UI.java:614)
    at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:223)
    at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:73)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1382)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.example.vaadintest2.HibernateServletFilter.doFilter(HibernateServletFilter.java:37)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.google.common.cache.CacheLoader
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 27 more

Mrz 22, 2014 3:16:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.example.vaadintest2.Vaadintest2UI$Servlet]
 in context with path 
[/VaadinTest2] threw exception [javax.servlet.ServletException: com.vaadin.server.ServiceException: java.lang.NoClassDefFoundError: com/google/common/cache/CacheLoader]
 with root cause
java.lang.ClassNotFoundException: com.google.common.cache.CacheLoader
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at com.example.vaadintest2.Vaadintest2UI.init(Vaadintest2UI.java:30)
    at com.vaadin.ui.UI.doInit(UI.java:614)
    at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:223)
    at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:73)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1382)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.example.vaadintest2.HibernateServletFilter.doFilter(HibernateServletFilter.java:37)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Here’s the source code:
UI

package com.example.vaadintest2;

import javax.servlet.annotation.WebServlet;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.data.hbnutil.HbnContainer;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

@SuppressWarnings("serial")
@Theme("vaadintest2")
public class Vaadintest2UI extends UI {

    @WebServlet(value = "/*", asyncSupported = true)
    @VaadinServletConfiguration(productionMode = false, ui = Vaadintest2UI.class)
    public static class Servlet extends VaadinServlet {
    }

    @Override
    protected void init(VaadinRequest request) {
        final VerticalLayout layout = new VerticalLayout();
        layout.setMargin(true);
        setContent(layout);

        Table table = new Table();
        table.setContainerDataSource(new HbnContainer<User>(User.class,
                HibernateUtil.getSessionFactory()));
    }
}

HibernateUtil

package com.example.vaadintest2;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateUtil {
    private final static SessionFactory sessionFactory;

    static {
        try {
            Configuration configuration = new Configuration().configure();
            configuration.addAnnotatedClass(User.class);

            StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
            serviceRegistryBuilder.applySettings(configuration.getProperties());

            ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();

            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Throwable e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static Session getSession() {
        Session session = sessionFactory.getCurrentSession();

        if (session.getTransaction().isActive())
            session.getTransaction().commit();

        return session;
    }
}

hibernate.cfg.xml[code]

<?xml version="1.0" encoding="UTF-8"?> org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/vaadintest root thread true create org.hibernate.cache.EhCacheProvider
</session-factory>
[/code] HibernateServletFilter [code] package com.example.vaadintest2;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.hibernate.Session;
import org.hibernate.StaleObjectStateException;

public class HibernateServletFilter implements Filter {

@Override
public void destroy() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();

    if (session.getTransaction().isActive())
        session.getTransaction().commit();

    if (session.isOpen())
        session.close();
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();

    try {
        if (!session.getTransaction().isActive())
            session.beginTransaction();

        chain.doFilter(request, response);

        if (session.getTransaction().isActive())
            session.getTransaction().commit();
    } catch (StaleObjectStateException e) {
        if (session.getTransaction().isActive())
            session.getTransaction().rollback();

        throw e;
    } catch (Throwable e) {
        if (session.getTransaction().isActive())
            session.getTransaction().rollback();

        throw new ServletException(e);
    }
}

@Override
public void init(FilterConfig cfg) throws ServletException {

}

}
[/code]
User

package com.example.vaadintest2;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue
    private int id;

    @Basic
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

}

web.xml[code]

<?xml version="1.0" encoding="UTF-8"?>


VaadinTest

index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

<filter>
    <filter-name>HibernateServletFilter</filter-name>
    <filter-class>com.example.vaadintest2.HibernateServletFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HibernateServletFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
[/code] pom.xml [code] 4.0.0 VaadinTest2 VaadinTest2 0.0.1-SNAPSHOT war src src **/*.java maven-compiler-plugin 3.1 1.6 1.6 maven-war-plugin 2.3 WebContent false mysql mysql-connector-java 5.1.29 org.hibernate hibernate-entitymanager 4.3.4.Final [/code] And i added [code] [/code]and [code] [/code]to ivy.xml and ivysettings.xml

Refer to this
thread

add the Guava jar (not bundle)

Also, you will have to add slf4j.
look for the
dependencies
for HbnContainer

I had the same problem, it worked fine for me afterwards.

But the problem is, that the default ivy configuration points to the wrong Guava version?