Не хочет работать hibernate под Tomcat

186
30 октября 2018, 03:40

Когда выполнение кода метода doGet сервлета доходит до момента обращения к базе через hibernate в логе появляется нижеуказанная ошибка и останавливается дальнейшее выполнение кода:

 13-Aug-2018 05:12:16.977 SEVERE [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [mainServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause
 java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1138)
    at DAO.HibernateSource.MySQLHibernateDaoFactory.<clinit>(MySQLHibernateDaoFactory.java:9)
    at DAO.DaoFactory.getDaoFactory(DaoFactory.java:19)
    at DAO.DaoDriver.<clinit>(DaoDriver.java:4)
    at Servlets.MainServlet.doGet(MainServlet.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Почитав информацию в интернете пришел к выводу, что проблема в отсутствии библиотек на Tomcat. В проекте не было создано папок WEB-INF/classes и WEB-INF/lib, поэтому я создал их и положил hibernate.cfg.xml в папку classes, а jar файлы hibernate в папку lib. теперь выскакивает ошибка:

Error:Internal error: (java.io.FileNotFoundException) F:\GTD\WORK\Prigramming\Projects\TEST_TASKS\JavaRushTestTask\testtask\servletresearch\out\artifacts\servletresearch_war_exploded\WEB-INF\lib\hibernate-core-5.3.4.Final.jar (Отказано в доступе)
java.io.FileNotFoundException: F:\GTD\WORK\Prigramming\Projects\TEST_TASKS\JavaRushTestTask\testtask\servletresearch\out\artifacts\servletresearch_war_exploded\WEB-INF\lib\hibernate-core-5.3.4.Final.jar (Отказано в доступе)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at com.intellij.openapi.util.io.FileUtil.openOutputStream(FileUtil.java:531)
    at com.intellij.openapi.util.io.FileUtil.performCopy(FileUtil.java:491)
    at com.intellij.openapi.util.io.FileUtil.copyContent(FileUtil.java:485)
    at org.jetbrains.jps.incremental.artifacts.instructions.FilterCopyHandler.copyFile(FilterCopyHandler.java:40)
    at org.jetbrains.jps.incremental.artifacts.instructions.FileBasedArtifactRootDescriptor.copyFromRoot(FileBasedArtifactRootDescriptor.java:100)
    at org.jetbrains.jps.incremental.artifacts.IncArtifactBuilder.build(IncArtifactBuilder.java:160)
    at org.jetbrains.jps.incremental.artifacts.IncArtifactBuilder.build(IncArtifactBuilder.java:50)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildTarget(IncProjectBuilder.java:1021)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1002)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1063)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:954)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:787)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
    at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183)
    at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:138)
    at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:308)
    at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:137)
    at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:235)
    at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Please perform full project rebuild (Build | Rebuild Project)
    введите сюда код

Ощущение, что я как то неправильно залил библиотеки для tomcat.Только как это сделать правильно? Или может в чем то другом ошибка?

UPD. Я решил проверить, а вдруг путь до некоторых файлов слишком большой, и переместил папку с проектом на уровень выше (в файловой системе) и, вуаля - ошибка исчезла. Причина возникновения ошибки мне понятна теперь. НО, если бы у меня не было догадки о слишком длинном пути, то как я должен был бы догадаться? То есть, как мне диагностировать именно такую ошибку? Как понять, что среди кучи причин, способных вызвать данный exception, именно длинный путь до файла виноват, а не отсутствие прав на запись и чтение?

Answer 1

Драйвера (jar-файл) от MySQL добавлял в проект? Плюс, необходимо правильно задать в настройках диалект MySQL.

Попробуй создать web-app с помощью Maven или средствами IDE - они создадут все необходимые папки.

В качестве IDE рекомендую IntelliJ IDEA - очень помогает разработчику в рутинных операциях и дает много подсказок.

P.S. если есть возможность создать Spring Boot проект, то головной боли с Tomcat вообще минимум.

READ ALSO
Передача параметров в jsp

Передача параметров в jsp

Есть файл jsp поставляется в библиотеке, менять не могу, но мне нужно передать параметр в этот jspGри передаче тегом param переменная text появляется...

215
Преобразовать результат сложения Double

Преобразовать результат сложения Double

Подскажите пожалуйста, почему результат сложения получается "10E-7", а не "0

178
Из-за @JsonFormat теряется один день

Из-за @JsonFormat теряется один день

В своем проекте использую библиотеку Jackson для сериализации объектов в JSONПри использовании @JsonFormat устанавливается дата на один день раньше

214
Дополучение данных из соккета

Дополучение данных из соккета

В соккет отправляются данные, размер одного пакета который может передать Wi-Fi ограничен(данных может быть больше чем может передать WI-FI за раз)Например...

208