Tomcat и Objectdb (через GWT/Rpc): java.lang.NoClassDefFoundError

У меня есть веб-приложение GWT 2.3, использующее Objectdb через Rpc. Во встроенном режиме в eclipse (с Jetty) все работает нормально. Когда я пытаюсь развернуть приложение на сервере Tomcat6, я получаю следующую ошибку:

29.08.2011 16:07:40 org.apache.catalina.core.ApplicationContext log
SCHWERWIEGEND: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List coffee.rpc.RpcCallService.getUsers()' threw an unexpected exception: java.lang.NoClassDefFoundError: Could not initialize class com.objectdb.o.RCL
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    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.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.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.objectdb.o.RCL
    at com.objectdb.o.UNM$z.<init>(UNM.java:163)
    at com.objectdb.o.UNM.x(UNM.java:105)
    at com.objectdb.o.UNM.w(UNM.java:75)
    at com.objectdb.jpa.Provider.createEntityManagerFactory(Provider.java:56)
    at com.objectdb.jpa.Provider.createEntityManagerFactory(Provider.java:32)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at coffee.server.DbHandler.<init>(DbHandler.java:34)
    at coffee.server.DbHandler.getInstance(DbHandler.java:40)
    at coffee.server.RpcCallServiceImpl.getUsers(RpcCallServiceImpl.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
    ... 17 more

конечно, библиотека Objectd находится в пути сборки, а файл jar (включая com.objectdb.o.RCL.class) находится на своем месте (WEB-INF/lib). Любые идеи, почему у Tomcat проблемы с работой с objectdb?


person Simson    schedule 29.08.2011    source источник
comment
Попробуйте опубликовать полное исключение, вы опускаете основную причину! Получает ли инициализатор этого класса доступ к файлу свойств с конфигурациями? Этот файл доступен?   -  person Angel O'Sphere    schedule 29.08.2011
comment
Нет, файла свойств нет. Я не знаю, как получить полное исключение — это все, что я смог найти в логах сервера.   -  person Simson    schedule 29.08.2011
comment
Хорошо, тогда предоставьте полную трассировку стека, так как причина этого определенно написана в конце ;D   -  person Angel O'Sphere    schedule 29.08.2011
comment
Я понимаю, что вы имеете в виду, но это это все, что было зарегистрировано tomcat (полная копия/ничего не пропущено мной). Запуск его в режиме отладки Eclipse приносит: com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server; see server log for details Трассировка стека в вопросе - это все, что я смог найти в журнале сервера. Если вы можете сказать мне, где я могу найти остальную часть трассировки стека, я бы показал ее...   -  person Simson    schedule 29.08.2011
comment
Можете ли вы попробовать подключить отладчик к работающему коту. Настройте отладчик так, чтобы он останавливался при любом исключении. Я предполагаю, что класс RCL доступен, но он пытается загрузить или инициализировать другой класс, от которого он зависит, который недоступен в пути к классам, возможно, просмотр com.objectdb.o.RCL поможет вам определить проблему.   -  person Angel O'Sphere    schedule 30.08.2011
comment
Ну... после переустановки tomcat все снова работает, и я не могу воспроизвести ошибку. Спасибо за попытку помочь в любом случае!   -  person Simson    schedule 31.08.2011
comment
Хм, на самом деле это зависит от того, как я запускаю tomcat6. После запуска catalina.sh все в порядке. Если я использую сценарий init.d, появляется ошибка.   -  person Simson    schedule 31.08.2011


Ответы (1)


Оказалось, что это была проблема с разрешением. Если вы получили эту ошибку, убедитесь, что ваш кот имеет доступ ко всем необходимым файлам.

person Simson    schedule 10.09.2011