0

我正在使用 EJB3.0 WAS8 和 Spring 3。我的 Web 组件位于 Web 服务器上,并且已将 EAR 部署在 App 服务器上。我的 Web 组件工作正常,直到它必须进行上下文查找。当我去 InitialContext 时,我得到以下异常:

type Exception report

message Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com.ibm.ws.exception.WsException

description The server encountered an internal error (Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com.ibm.ws.exception.WsException) that prevented it from fulfilling this request.

exception 

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com.ibm.ws.exception.WsException
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:812)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:709)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:613)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:536)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

java.lang.NoClassDefFoundError: com.ibm.ws.exception.WsException
    java.lang.ClassLoader.defineClassImpl(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:275)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2901)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    java.lang.ClassLoader.defineClassImpl(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:275)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2901)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    java.lang.J9VMInternals.verifyImpl(Native Method)
    java.lang.J9VMInternals.verify(J9VMInternals.java:72)
    java.lang.J9VMInternals.initialize(J9VMInternals.java:134)
    com.ibm.websphere.naming.WsnInitialContextFactory.<clinit>(WsnInitialContextFactory.java:68)
    java.lang.J9VMInternals.initializeImpl(Native Method)
    java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
    java.lang.Class.forNameImpl(Native Method)
    java.lang.Class.forName(Class.java:174)
    javax.naming.spi.NamingManager$3.run(NamingManager.java:873)
    javax.naming.spi.NamingManager$3.run(NamingManager.java:870)
    java.security.AccessController.doPrivileged(AccessController.java:228)
    javax.naming.spi.NamingManager.factoryForName(NamingManager.java:869)
    javax.naming.spi.NamingManager.factoryForName(NamingManager.java:820)
    javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:246)
    javax.naming.InitialContext.initializeDefaultInitCtx(InitialContext.java:318)
    javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:348)
    javax.naming.InitialContext.internalInit(InitialContext.java:286)
    javax.naming.InitialContext.<init>(InitialContext.java:211)
    com.paam.util.ServiceLocator.getInitialContext(ServiceLocator.java:43)
    com.paam.util.RemoteObjectCall.remoteObj(RemoteObjectCall.java:14)
    com.paam.delegates.PAAMDelegate.InsertPAAMDetails(PAAMDelegate.java:18)
    com.paam.controllers.NewPaamController.newpaamsubmit(NewPaamController.java:77)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    java.lang.reflect.Method.invoke(Method.java:611)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:626)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:150)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:354)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:342)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:763)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:709)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:613)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:536)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

java.lang.ClassNotFoundException: com.ibm.ws.exception.WsException
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    java.lang.ClassLoader.defineClassImpl(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:275)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2901)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    java.lang.ClassLoader.defineClassImpl(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:275)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2901)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    java.lang.J9VMInternals.verifyImpl(Native Method)
    java.lang.J9VMInternals.verify(J9VMInternals.java:72)
    java.lang.J9VMInternals.initialize(J9VMInternals.java:134)
    com.ibm.websphere.naming.WsnInitialContextFactory.<clinit>(WsnInitialContextFactory.java:68)
    java.lang.J9VMInternals.initializeImpl(Native Method)
    java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
    java.lang.Class.forNameImpl(Native Method)
    java.lang.Class.forName(Class.java:174)
    javax.naming.spi.NamingManager$3.run(NamingManager.java:873)
    javax.naming.spi.NamingManager$3.run(NamingManager.java:870)
    java.security.AccessController.doPrivileged(AccessController.java:228)
    javax.naming.spi.NamingManager.factoryForName(NamingManager.java:869)
    javax.naming.spi.NamingManager.factoryForName(NamingManager.java:820)
    javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:246)
    javax.naming.InitialContext.initializeDefaultInitCtx(InitialContext.java:318)
    javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:348)
    javax.naming.InitialContext.internalInit(InitialContext.java:286)
    javax.naming.InitialContext.<init>(InitialContext.java:211)
    com.paam.util.ServiceLocator.getInitialContext(ServiceLocator.java:43)
    com.paam.util.RemoteObjectCall.remoteObj(RemoteObjectCall.java:14)
    com.paam.delegates.PAAMDelegate.InsertPAAMDetails(PAAMDelegate.java:18)
    com.paam.controllers.NewPaamController.newpaamsubmit(NewPaamController.java:77)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    java.lang.reflect.Method.invoke(Method.java:611)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:626)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:150)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:354)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:342)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:763)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:709)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:613)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:536)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

PS:我在定义的日志中没有收到此异常。在我的 tomcat 日志目录中生成了一个 localhost 日志文件。并且错误被打印在那里。

如果有人知道问题是什么,请提出相同的解决方案。

4

4 回答 4

3

问题已经解决了。我一直将瘦客户端 jar 放在我的 WEB-INF/lib 文件夹中,而不是 tomcat/lib 中。但是在将其放入 tomcat/lib 文件夹后,我没有收到此错误。事实上,当放置在 WEB-INF/lib 中时,TOMCAT 甚至无法正常启动。谢谢大家的帮助。。

于 2012-10-25T11:00:08.593 回答
2

com.ibm.ws.exception.WsException 是一个 IBM WebSphere 类,不太可能在 Tomcat 的类路径中找到。

如果您在 WAS 上调用 EJB,则需要确保在您的类路径中具有所需的 WAS 客户端 Jar 才能成功。你这样做了吗?

查看此线程: https ://community.jboss.org/thread/198796?_sscc= t 看看是否有任何 htose 回复对您有帮助。

同样正如 Neil 所建议的那样,是否真的需要在您的环境中同时拥有 Tomcat 和 WAS?是否有可能在 WAS 上同时托管 Web 和 EJB3 组件,这可能会使您的部署更容易!

高温高压

于 2012-10-14T10:33:17.957 回答
0

您的初始上下文在哪里?

总是它应该在源文件夹下......

即在类路径中。

所以请检查它可能是问题的根本原因。

于 2012-10-17T05:48:29.523 回答
0

您不能在 Web 服务器上运行 Web 组件(JSP 和 Servlet)。如果您的意思是您有一个应用程序服务器(听起来像是在使用 Tomcat)运行您的 Web 应用程序,另一个(WAS 8.0?)运行 EJB 和 Spring 组件,那么您应该做的第一件事是考虑这是否是最好的建筑学。WebSphere Application Server 可以运行所有这些组件,并且您无需在 Java 代码位之间进行网络通信,从而节省一些性能开销,尤其是在您使用本地 EJB 接口的情况下。此外,编程将更简单(因为 JNDI 服务将与客户端代码位于同一服务器中),部署也将更简单(因为所有内容都可以打包在一个 EAR 中并在一个步骤中部署)。

如果您出于某些特殊原因保留所描述的细分体系结构,您可能需要查看信息中心以获取有关 EJB 客户端上需要哪些 jar 文件以启用与 EJB 服务器通信的详细信息。如果客户端和服务器不在同一台机器上,您还需要确保 JNDI 服务的 URL(以“iiop:”开头)正确识别服务的服务器机器和端口号。

于 2012-10-12T18:23:17.560 回答