Tomcat 和 Objectdb(通过 GWT/Rpc):java.lang.NoClassDefFoundError

Posted

技术标签:

【中文标题】Tomcat 和 Objectdb(通过 GWT/Rpc):java.lang.NoClassDefFoundError【英文标题】:Tomcat and Objectdb (Through GWT/Rpc): java.lang.NoClassDefFoundError 【发布时间】:2011-08-29 14:26:33 【问题描述】:

我有一个通过 Rpc 使用 Objectdb 的 GWT 2.3 Web 应用程序。在 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 时会出现问题?

【问题讨论】:

尝试发布完整的异常,你忽略了根本原因!该类的初始化程序是否正在访问带有配置的属性文件?该文件可用吗? 不,没有属性文件。我不知道如何获取完整的异常 - 这是我在服务器日志中可以找到的全部内容。 好吧,然后提供 full 堆栈跟踪,因为这样做的原因肯定写在它的末尾;D 我明白你的意思,但这 由 tomcat 记录的所有内容(完整副本/我没有遗漏任何内容)。在 Eclipse 调试模式下运行它会带来:com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server; see server log for details 问题中的堆栈跟踪是我可以在服务器日志中找到的所有内容。如果你能告诉我在哪里可以找到堆栈跟踪的其余部分,我会显示它...... 你能尝试在运行的tomcat上附加一个调试器吗?将调试器配置为在出现任何异常时停止。我假设 RCL 类可用,但它尝试加载或初始化它所依赖的另一个类,该类在类路径中不可用,也许查看 com.objectdb.o.RCL 将帮助您发现问题。 【参考方案1】:

原来这是一个权限问题。如果您收到此错误,请确保您的 tomcat 可以访问所有必要的文件。

【讨论】:

以上是关于Tomcat 和 Objectdb(通过 GWT/Rpc):java.lang.NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章

更多 GWT 和 Tomcat 6 安全问题(windows)

GWT Servlet 错误 com.google.gwt.user.client.rpc .StatusCodeException: Tomcat 服务器上的 404

在eclipse中将GWT应用程序部署到tomcat

Tomcat 中的 GWT 2.5 应用程序部署?

在eclipse中的tomcat上运行GWT

使用 Tomcat (Eclipse) 调试 GWT 应用程序