简体   繁体   English

Tomcat部署失败且旧版Webapp

[英]Tomcat fails deploying and old webapp

I get blocked trying to move an old webapp developed for Resin server (without creating a war container or having ejb-jar.xml) to a Tomcat 7 server. 尝试将为Resin服务器开发的旧webapp(未创建war容器或没有ejb-jar.xml)移动到Tomcat 7服务器时,我受阻。 What I´ve done is: create a Dynamic Web project in Eclipse, include the code and created ejb-jar with the declaration. 我要做的是:在Eclipse中创建一个动态Web项目,包括代码并使用声明创建ejb-jar。 Also created the web.xml file with the servlet. 还使用servlet创建了web.xml文件。 Once it compiled correctly, I exported it to a WAR file which I deploy in Tomcat. 正确编译后,我将其导出到部署在Tomcat中的WAR文件。

This is the error: 这是错误:

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/PortalSavia-Tomcat]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1256)
    at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:714)
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:219)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:212)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at  org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at  org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:611)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at  org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
 Caused by: java.lang.NoClassDefFoundError: javax/ejb/EJBObject
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
    at java.lang.Class.getDeclaredMethods(Class.java:1845)
    at org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:127)
    at org.apache.catalina.startup.WebAnnotationSet.loadMethodsAnnotation(WebAnnotationSet.java:281)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:143)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

I´ve checked ejb-jar.xml which is in META-INF as It must be. 我已经检查了META-INF中的ejb-jar.xml,因为它必须是。 Also web.xml seems to be fine and have the servlet. 而且web.xml似乎还不错,并且具有servlet。 Any idea where to look for an error? 知道在哪里寻找错误吗? Maybe libs? 也许库? Thanks a lot! 非常感谢!

Tomcat is not a full application server, it is just a servlet container. Tomcat不是完整的应用程序服务器,它只是一个servlet容器。 That being said, Tomcat does not have JAVA EE container. 话虽如此,Tomcat没有JAVA EE容器。

The javax/ejb/EJBObject can be found in the Java EE jars. 可以在Java EE jar中找到javax / ejb / EJBObject。 So either user a full application server like JBoss, or include the necessary JAR's in Tomcat. 因此,要么使用像JBoss这样的完整应用服务器,要么在Tomcat中包含必要的JAR。

Tomcat does not support EJBs. Tomcat不支持EJB。 It is just a servlet container. 它只是一个servlet容器。 You need to use a full Java EE application container, such a JBoss, Glassfish or WebSphere. 您需要使用完整的 Java EE应用程序容器,例如JBoss,Glassfish或WebSphere。

I would NOT recommend trying to add the EJB support jars to a vanilla Tomcat installation. 我不建议尝试将EJB支持jar添加到普通的Tomcat安装中。 It is / they are not designed to be used that way, and you are likely to run into lots of problems. 它不是设计用于这种方式的,您可能会遇到很多问题。

If you insist on using tomcat you can try to deploy your application to TomEE 如果您坚持使用tomcat,则可以尝试将应用程序部署到TomEE

TomEE - is basically tomcat with J2EE steroids. TomEE-基本上是带有J2EE类固醇的tomcat。 I'm sure that your app won't run out of the box (usually applications tie themselves to the application servers so tightly, that it's impossible to change the application server). 我确定您的应用程序不会开箱即用(通常应用程序与应用程序服务器之间的联系是如此紧密,以至于无法更改应用程序服务器)。

I suggest you take a look at a full-blown J2EE application server (JBoss, Glassfish etc). 我建议您看一下功能完善的J2EE应用服务器(JBoss,Glassfish等)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM