title: Hibernate NoSuchFieldError INSTANCE but only with Struts 1?
body: <p>I'm new to Java and Hibernate (being a Rails and C# developer).  Anyway, I have a test program that works fine with Hibernate but my actual web app (Struts 1) crashes with:</p>
  
  <p><code>SEVERE: Servlet.service() for servlet default threw exception
  java.lang.NoSuchFieldError: INSTANCE</code></p>
  
  <p>I am using:</p>
  
  <p><code>Hibernate 3.6.1 with Annotations</code></p>
  
  <p><code>Struts 1 with Apache Tiles</code></p>
  
  <p><code>C3P0 connection pool</code></p>
  
  <p>Here is the program that actually <strong>WORKS</strong>.  It's a part of the main project.  Just a simple JAVA test.</p>
  
  <pre><code>public class TestUser {
  
    public static void main(String[] args) {
  
      SessionFactory factory = HibernateUtil.getSessionFactory();
      Session session = factory.getCurrentSession();
      session.beginTransaction();
  
      String queryString = "from User where UserName = 'Quake'";
      Query query = session.createQuery(queryString);
  
      User quake = (User)query.uniqueResult();
      session.getTransaction().commit();
  
      System.out.println( quake.getEmail() );
      System.out.println( "Active? " + quake.isActive() );
  
  
      UserRepository userRepo = new UserRepository();
  
      System.out.println( "User Quake: " + userRepo.findAll().get(0).getEmail() );
  
    }
  }
  </code></pre>
  
  <p>Works just fine.  Outputs a little sample data.</p>
  
  <p>Now, when I try to do the same thing in Struts, I get the exception.  This is what does <strong>NOT WORK</strong>:</p>
  
  <pre><code>public class ListUsers extends org.apache.struts.action.Action {
  
    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
  
  /**
   * This is the action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @throws java.lang.Exception
   * @return
   */
  @Override
  public ActionForward execute(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {
  
  
      List&lt;String&gt; listMsg = new ArrayList&lt;String&gt;();
  
      listMsg.add("Message A");
      listMsg.add("Message B");
      listMsg.add("Message C");
      listMsg.add("Message D");
  
      request.setAttribute("listMsg", listMsg);
  
  
  
      UserRepository userRepo = new UserRepository();  // CRASHES HERE (see HibernateUtil)
      String email = userRepo.first().getEmail();
  
  
      return mapping.findForward(SUCCESS);
    }
  }
  </code></pre>
  
  <p>This is my HibernateUtil class:</p>
  
  <pre><code>public class HibernateUtil {
  
    private static final SessionFactory sessionFactory = buildSessionFactory();
  
    private static SessionFactory buildSessionFactory() {
      try {
          // Create the SessionFactory from hibernate.cfg.xml
          Configuration config = new Configuration();  // THIS LINE CRASHES IN STRUTS
  
          // Add annotated classes
          config.addAnnotatedClass(User.class);
  
          config.configure();
          return config.buildSessionFactory();
  
      } catch (Throwable ex) {
          // Make sure you log the exception, as it might be swallowed
          System.err.println("Initial SessionFactory creation failed.  WTFQNIL: " + ex);
          throw new ExceptionInInitializerError(ex);
      }
    }
  
    public static SessionFactory getSessionFactory() {
      return sessionFactory;
    }
  }
  </code></pre>
  
  <p>The <code>Configuration config = new Configuration()</code> line in the <code>HibernateUtil</code> is the line that crashes in Struts but not the test app.  </p>
  
  <p>Here is the complete exception dump:</p>
  
  <pre><code>Feb 24, 2011 9:51:58 AM org.apache.catalina.core.StandardWrapperValve invoke
  SEVERE: Servlet.service() for servlet default threw exception
  java.lang.NoSuchFieldError: INSTANCE
  at org.hibernate.type.BasicTypeRegistry.&lt;init&gt;(BasicTypeRegistry.java:94)
  at org.hibernate.type.TypeResolver.&lt;init&gt;(TypeResolver.java:59)
  at org.hibernate.cfg.Configuration.&lt;init&gt;(Configuration.java:249)
  at org.hibernate.cfg.Configuration.&lt;init&gt;(Configuration.java:300)
  at com.kencogroup.kkms.struts.utilities.HibernateUtil.buildSessionFactory(HibernateUtil.java:22)
  at com.kencogroup.kkms.struts.utilities.HibernateUtil.&lt;clinit&gt;(HibernateUtil.java:17)
  at com.kencogroup.dao.repositories.UserRepository.first(UserRepository.java:33)
  at com.kencogroup.kkms.struts.actions.ListUsers.execute(ListUsers.java:52)
  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
  at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
  at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
  at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
  at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
  at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
  at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
  at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
  at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
  at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
  at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
  at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
  at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
  at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
  at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
  at java.lang.Thread.run(Thread.java:662)
  </code></pre>
  
  <p>What am I doing wrong?</p>
  
  <p><strong>Thanks!</strong></p>