Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在Oracle AS 10g上部署后发生Servlet初始化错误_Spring_Tomcat_Servlets_Web Deployment_Oracle Application Server - Fatal编程技术网

Spring 在Oracle AS 10g上部署后发生Servlet初始化错误

Spring 在Oracle AS 10g上部署后发生Servlet初始化错误,spring,tomcat,servlets,web-deployment,oracle-application-server,Spring,Tomcat,Servlets,Web Deployment,Oracle Application Server,我有一个web应用程序,它可以在本地环境中完美运行[http://localhost:8080/myApp/]在ApacheTomcat 7.0.47中。我正在使用Spring框架 在我将web应用程序部署到Oracle application Server 10g(10.1.3.4.0版)之后,问题就出现了。应用程序已成功部署在AS上。但当我尝试请求我的应用程序时,服务器会响应: 500内部服务器错误 Servlet错误:发生异常。当前应用程序部署描述符不允许将其包含在此响应中。有关详细信息

我有一个web应用程序,它可以在本地环境中完美运行[http://localhost:8080/myApp/]在ApacheTomcat 7.0.47中。我正在使用Spring框架

在我将web应用程序部署到Oracle application Server 10g(10.1.3.4.0版)之后,问题就出现了。应用程序已成功部署在AS上。但当我尝试请求我的应用程序时,服务器会响应:


500内部服务器错误

Servlet错误:发生异常。当前应用程序部署描述符不允许将其包含在此响应中。有关详细信息,请查阅应用程序日志


让我提供我的诊断:

  • Web容器已成功部署myApp.ear
  • 部署后,Web容器将执行以下操作:
    • 加载Servlet类
    • 实例化加载的Servlet类
    • 执行实例的init()方法-->它在这里失败

  • 以下是我的应用程序日志片段:

    14/02/18 09:26:56.617 etrr: Initializing Spring FrameworkServlet 'spring'
    14/02/18 09:26:57.105 etrr: Error initializing servlet
    java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.registerResolvableDependency
        (Ljava/lang/Class;Ljava/lang/Object;)V
        at org.springframework.web.context.support.WebApplicationContextUtils.registerWebApplicationScopes(WebApplicationContextUtils
        .java:156)
        at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.postProcessBeanFactory(AbstractRefreshableWebApplicationContext
        .java:143)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:331)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:332)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:266)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:236)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:126)
        at javax.servlet.GenericServlet.init(GenericServlet.java:256)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpApplication.loadServlet(HttpApplication.java:2379
        )
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpApplication.findServlet(HttpApplication.java:4830
        )
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpApplication.findServlet(HttpApplication.java:4754
        )
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpApplication.getRequestDispatcher(HttpApplication
        .java:3412)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler
        .java:738)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler
        .java:453)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
        at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
        at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:234)
        at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:29)
        at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:879)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor
        .java:303)
        at java.lang.Thread.run(Thread.java:595)
    

    也许可以正确地提到,我的OC4J容器加载打包在web应用程序中的类,从而覆盖系统类或OC4J容器更高级别中的类。我在。/WEB-INF/orion WEB.xml文件中编写了以下两个属性。(有关更多详细信息,请参见drorb的回答)

    
    


    提前感谢您的帮助

    这看起来像是类加载问题。stacktrace表明您的应用程序类路径中有一个较旧版本的Spring。类加载器正在加载较旧版本的
    org.springframework.beans.factory.config.ConfigurableListableBeanFactory
    ,该版本没有带有请求签名的
    registerResolvableDependency
    方法。
    这个类是SpringBeans jar的一部分。在旧版本中,它是spring core的一部分。
    要跟踪OC4J类加载,可以使用
    class.load.trace
    系统属性。请在OTN社区中查看此内容以了解更多详细信息。

    我找到了问题的根源

    所有我的org.springframework.X-3.0.2.RELEASEjar都位于。/myWebApp/WEB-INF/lib下。但是里面还有另一个spring.jar。其清单文件显示SpringV2.0.7,因此不同的Spring版本之间存在冲突


    因为我不是这个应用程序的作者,所以我忽略了这个springjar库。我通过修改ANT脚本解决了这个错误,即在构建企业归档时排除了提到的JAR文件

    我知道还有很多事情我不明白,但当我构建EAR(企业档案)时,Ant负责将所有必要的org.springframework.-3.0.2.RELEASE.jar“打包”到应用程序中。还是我错了?我的意思是classloader不应该有从两个不同的spring版本加载类的选项。这实际上取决于Oracle为您的应用程序应用的类加载策略。类加载器具有层次结构,因此该类可能来自父类加载器之一。例如,可能有一个版本的Spring可用于在app server中运行的所有应用程序(查看此文档-)我会找到答案:)谢谢您的回答/建议。
    <web-app-class-loader search-local-classes-first="true" 
                          include-war-manifest-class-path="true" />