Apache Tomcat 7.0.47内のローカル環境 [http://localhost:8080/myApp/] で完全に実行される Web アプリケーションがあります。Spring Frameworkを使用しています。
この問題は、Web アプリケーションをOracle Application Server 10g、バージョン 10.1.3.4.0にデプロイした後に発生します。アプリケーションが AS に正常にデプロイされました。しかし、アプリケーションをリクエストしようとすると、サーバーは次のように応答します。
500内部サーバーエラー
サーブレット エラー: 例外が発生しました。現在のアプリケーション デプロイメント記述子では、この応答にそれを含めることは許可されていません。詳細については、アプリケーション ログを参照してください。
私の診断を提供させてください:
- Web コンテナーは myApp.ear を正常にデプロイします
- デプロイメント後、Web コンテナーは以下を実行します。
- LOADSサーブレット クラス
- ロードされたサーブレット クラスをインスタンス化します
- インスタンスの init() メソッドを実行します ----> IT はここで失敗します
これが私のアプリケーション ログのスニペットです。
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ファイルに次の 2 つのプロパティを記述しました。(詳細については、@drorbの回答を参照してください)
<web-app-class-loader search-local-classes-first="true"
include-war-manifest-class-path="true" />
よろしくお願いいたします。