问题描述
我是Java和Hibernate的新手(是Rails和C#开发人员)。无论如何,我有一个测试程序可以与Hibernate一起使用,但是我的实际Web应用程序(Struts 1)崩溃了:
SEVERE:Servlet.service ()for servlet default抛出异常
java.lang.NoSuchFieldError:INSTANCE
我正在使用:
Hibernate 3.6.1 with Annotations
Struts 1与Apache Tiles
C3P0连接池
这是实际上 WORKS 的程序。这是主要项目的一部分。只是一个简单的JAVA测试。
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());
$ b $ / code>
工作得很好。输出一些示例数据。
现在,当我尝试在Struts中执行相同的操作时,出现异常。这就是 NOT WORK :
public class ListUsers扩展了org.apache.struts.action。行动{
/ *前进名=成功路径=* /
私有静态最终字符串SUCCESS =成功;
/ **
*这是Struts框架调用的动作。
* @param映射用于选择此实例的ActionMapping。
* @param形式此请求的可选ActionForm bean。
* @param请求我们正在处理的HTTP请求。
* @param response我们正在处理的HTTP响应。
* @throws java.lang.Exception
* @return
* /
@Override
public ActionForward execute(ActionMapping映射,ActionForm表单,
HttpServletRequest请求,HttpServletResponse响应)
抛出异常{
List< String> listMsg = new ArrayList< String>();
listMsg.add(Message A);
listMsg.add(Message B);
listMsg.add(Message C);
listMsg.add(Message D);
request.setAttribute(listMsg,listMsg);
UserRepository userRepo = new UserRepository(); (见HibernateUtil)
String email = userRepo.first()。getEmail();
返回mapping.findForward(SUCCESS);
$ p这是我的HibernateUtil类:public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory(){
try {
//从hibernate.cfg.xml创建SessionFactory
Configuration config = new Configuration(); //这条线在STRUTS中崩溃
//添加带注释的类
config.addAnnotatedClass(User.class);
config.configure();
return config.buildSessionFactory();
} catch(Throwable ex){
//确保记录异常,因为它可能被吞噬
System.err.println(Initial SessionFactory creation failed。WTFQNIL :+ ex);
抛出新的ExceptionInInitializerError(ex);
public static SessionFactory getSessionFactory(){
return sessionFactory;
$ / code>Configuration config = new在 HibernateUtil 中的Configuration()行是在Struts中崩溃的行,但不是测试应用程序。
以下是完整的异常转储:
2011年2月24日上午9:51:58 org.apache.catalina.core.StandardWrapperValve调用
SEVERE:servlet默认的Servlet.service()抛出异常
java.lang.NoSuchFieldError:INSTANCE $ b $在org。 hibernate.type.BasicTypeRegistry。< init>(BasicTypeRegistry.java:94)
在org.hibernate.type.TypeResolver。< init>(TypeResolver.java:59)
在org.hibernate。 cfg.Configuration。< init>(Configuration.java:249)
at org.hibernate.cfg.Configuration。< init>(Configuration.java:300)
at com.kencogroup.kkms。 struts.utilities.HibernateUtil.buildSessionFactory(HibernateUtil.java:22)
at com.kencogroup.kkms.struts.utilities.HibernateUtil。< clinit>(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.pro在org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
在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)
在org.apache.c atalina.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)
在org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
在org.tuckey.web.filter s.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。 (org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve。 Ĵ ava: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)
在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)$ b $ at java.lang.Thread.run(Thread.java:662)
我做错了什么?
谢谢!
解决方案它看起来像在classpath中有几个Hibernate jars版本。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:
SEVERE: Servlet.service() for servlet default threw exception java.lang.NoSuchFieldError: INSTANCE
I am using:
Hibernate 3.6.1 with Annotations
Struts 1 with Apache Tiles
C3P0 connection pool
Here is the program that actually WORKS. It's a part of the main project. Just a simple JAVA test.
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() ); } }Works just fine. Outputs a little sample data.
Now, when I try to do the same thing in Struts, I get the exception. This is what does NOT WORK:
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<String> listMsg = new ArrayList<String>(); 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); } }This is my HibernateUtil class:
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; } }The Configuration config = new Configuration() line in the HibernateUtil is the line that crashes in Struts but not the test app.
Here is the complete exception dump:
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.<init>(BasicTypeRegistry.java:94) at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59) at org.hibernate.cfg.Configuration.<init>(Configuration.java:249) at org.hibernate.cfg.Configuration.<init>(Configuration.java:300) at com.kencogroup.kkms.struts.utilities.HibernateUtil.buildSessionFactory(HibernateUtil.java:22) at com.kencogroup.kkms.struts.utilities.HibernateUtil.<clinit>(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)What am I doing wrong?
Thanks!
解决方案It looks like you have several versions of Hibernate jars in the classpath.
这篇关于Hibernate NoSuchFieldError INSTANCE,但仅限于Struts 1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
08-19 23:23