NoClassDefFoundError - PullRequest
       4

NoClassDefFoundError

1 голос
/ 12 марта 2011

Я работаю с Hibernate и во время использования Hibernate Connection я получаю сообщение об ошибке, как показано ниже

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.cfg.Configuration
at com.ensarm.niidle.server.SchemaManager.getDatabaseSession(SchemaManager.java:60)
at com.ensarm.niidle.server.helper.UserServiceHelper.createNiidleUser(UserServiceHelper.java:27)
at com.ensarm.niidle.server.UserSignUpServlet.doPost(UserSignUpServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

Пожалуйста, помогите мне в ее решении, я добавил все необходимые файлы Jiber Hibernate с библиотекой libпапка моего веб-приложения.

что мне теперь делать?

Ответы [ 4 ]

6 голосов
/ 12 марта 2011

Я подозреваю, что вам не хватает jar log4j или commons-logging.jar.

Сообщение Could not initialize class org.hibernate.cfg.Configuration означает, что JVM уже пыталась и не смогла инициализировать класс org.hibernate.cfg.Configuration.Исходный код класса содержит следующую строку:

private static Log log = LogFactory.getLog( Configuration.class );

Поскольку это поле помечено static, значение поля устанавливается при инициализации класса.Это поле является единственным статическим членом этого класса, поэтому, если JVM не удалось инициализировать этот класс, возможно, возникла проблема с этим полем.

4 голосов
/ 12 марта 2011

java.lang.NoClassDefFoundError является хитрым исключением. Это не обязательно означает, что класс не там. Вместо этого он указывает, что возникла некоторая проблема при первой инициализации класса.

Это особенно хлопотно, когда самый первый доступ к этому классу сталкивается с этой проблемой (и здесь сообщается о корневой проблеме), но последующий доступ к классу только выплевывает страшный java.lang.NoClassDefFoundError без какой-либо ссылки на исходную проблему .

В этом случае ваша конфигурация может содержать ошибки или может отсутствовать вообще?

2 голосов
/ 12 марта 2011

Что сказал Арджан.Имеющаяся ошибка не говорит о том, что она не может найти cfg.Configuration.Это просто говорит о том, что где-то при инициализации cfg.Configuration определение класса не найдено.Были ли другие исключения в вашем журнале?

Мне кажется, что в каталоге WEB-INF / lib вашего приложения отсутствуют классы cfg. Конфигурация отсутствует.

Посмотрите на эту ветку вВесенние форумы, похоже, они говорят о проблеме, с которой вы столкнулись:

http://forum.springsource.org/showthread.php?t=65296

В частности, смотрите этот пост, сделанный одним из старших членов, где он упоминает о четырех дополнительных банках, которые отсутствовали(обратите внимание, это было в 2008 году, и я понятия не имею, какие версии hibernate и spring вы используете):

http://forum.springsource.org/showpost.php?s=f3b5de4e9df29e65d4c9acaafc1676c8&p=219678&postcount=10

Надеюсь, это поможет.

0 голосов
/ 02 мая 2011

У меня было очень похожее сообщение об исключении, использующее Hibernate 3.5.4 ('java.lang.NoClassDefFoundError: Не удалось инициализировать класс org.hibernate.cfg.AnnotationConfiguration'), и оно было связано с ведением журнала, как указал Люк Вудворд,Поэтому я бы предположил, что вам не хватает реализации slf4j с соответствующими ей зависимостями.

Ссылка, которую предоставил luis.espinal (http://forum.springsource.org/showpost.php?s=f3b5de4e9df29e65d4c9acaafc1676c8&p=219678&postcount=10), указывает на возможные JAR-файлы, которые вы могли пропустить.Среди них - slf4j-log4j12-1.5.0.jar.

Кроме того, pom.xml в учебном пособии «Первое приложение Hibernate» в онлайн-документации по гибернации содержит явную ссылку на реализацию slf4j:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/tutorial.html#tutorial-firstapp-setup

Я использовал задачи Ant Maven, и моя проблема была решена путем добавления зависимости к slf4j-log4j12.

...