最近、Apache SOLR 4.1 war ファイルを Tomcat 6 サーバーにデプロイする際に問題が発生しました。サーバー ライブラリ ($CATALINA_HOME/lib) には、一部のレガシー検索アプリケーション用の古い lucene 実装ライブラリ (2.9+) があります。SOLR の .war ファイル WEB-INF/lib には、新しい 4.1 lucene 実装の jar ファイルがあります。Tomcat 6 のドキュメントを確認すると、SOLR ライブラリは最初にロードする必要があるようです。ただし、経験上、そうではありません。これを実行中のサーバーにデプロイすると、管理者ダッシュボードに 2.9.0 lucene 実装がロードされていることが示されます。
さらにひねりを加えると、Tomcat サーバーを停止して再起動すると、代わりに 4.1 に切り替わります。おそらく想像できると思いますが、これは私にスレーブ レプリケーションの悲しみをもたらしました。私の最初のインデックスは 2.9 lucene を介して構築されたと思われるため、ある時点でコンテナーを再起動し、その後ロードされた 4.1 を使用して更新し、2.9 lucene 実装スレーブに複製しようとしたため、すべて失敗しました。
ここでの提案は大歓迎です。SOLR war ファイルから 4.1 ライブラリを削除しようとしましたが、いくつかの依存関係がそれらを必要としているように見えるため、ロードに失敗しました (ただし、クラス ローダーは展開後に「共通ライブラリ」の lucene 実装を選択します!) すべてのレガシーを更新することは現実的ではありません。これらのサーバー上のソフトウェアを lucene 4 に変換する必要があります。クラスローダーがこのように実行される理由は何ですか?
編集:問題をさらに複雑にするために、4.1.0 lucene実装を示す新しく開始したTomcatにSOLRがあり、コアをリロードするか、Tomcatマネージャーを介してWebアプリケーションのリロードを行うと、2.9.0に戻ります! これは明らかに受け入れられません。