シナリオ 私のプロジェクトには、Webサービスに対して行われたマルチスレッド呼び出しに対する要件がありました。これは、ThreadPoolTaskExecutor(Spring)を使用して実装されます。スレッドクラスは実行時に値を供給する必要があるため、以下のようにコードを実装していました-
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");
for (DocumentData documentData : documentDataList){
MinerThread minerThread = applicationContext.getBean("minerThread",MinerThread.class);
minerThread.setHeader(header);
minerThread.setDocumentData(documentData);
minerThread.setBatchSize(batchSize);
minerThreadExecutor.execute(minerThread);
}
問題 ローカルにTomcatサーバーがあり、この実装は期待どおりに機能します。ただし、Weblogic(クライアントマシンではWeblogicにアクセスできません)では、戦争が展開されるとFileNotFound例外がスローされます。
アプリケーションコンテキストオブジェクトはClassPathXmlApplicationContextAPIを介して作成されるため、場所がWeblogicクラスパスの下になかったためにエラーがスローされたと考えられました。Weblogicサーバーのクラスパスには何も設定されていません。ただし、クラスパスにWEB-INF / classesを含めた後でも、同じ例外がスローされます。
例外 2013/01/2909:19:12,853[エラー]RequestQueueListener-org.springframework.beans.factory.parsing.BeanDefinitionParsingException:構成の問題:相対的な場所からのBean定義のインポートに失敗しました[../shared-common-context.xml ]問題のあるリソース:クラスパスリソース[application-context.xml]; ネストされた例外はorg.springframework.beans.factory.BeanDefinitionStoreExceptionです:IOExceptionがクラスパスリソース[../shared-common-context.xml]からXMLドキュメントを解析しています。ネストされた例外はjava.io.FileNotFoundExceptionです:クラスパスリソース[../shared-common-context.xml]が存在しないため、開くことができません
BeanDefinitionParsingExceptionは、Weblogicクラスパスに追加された相対パスが原因で発生します。
Weblogicでは、ファイルは次の場所にあります-./wls10.3.4/ColorisPPT1/user_projects/domains/Coloris_PPT1_Domain/servers/Coloris_PPT1_AdminServer/tmp/.appmergegen_1336142780924_documentservice.war/WEB-INF/classes
構築された場合(Mavenが使用されている場合)のwarの場合、application-context.xmlはWEB-INF/classesフォルダーの下に配置されます。
誰かがこれを進める方法を提案してもらえますか?