2011-06-21 11 views
0

私はSolrで遊んで始めました。私はTomcatでデプロイして実行しています。私は、スキーマとデータのインポートハンドラをセットアップして、それはファイルをインデックスします。今、私はこのdataImportHandlerを1時間程度で実行するようにスケジュールしたいと思います。DIHのスケジューリング

ファイルhereを詳述するwikiページがあります。

しかし、ファイルを作成し、それら

は、同様の質問がhere前に、スタックオーバーフローに頼まれている展開する方法どこの指示はありません。

答えは「クラスApplicationListener、HTTPPostSchedulerおよびSolrDataImportPropertiesを作成する」でした。私はどこでクラスを作成すべきか分かりません。しかし、私は推測し、最新の夜間ビルドをダウンロードし、org.apache.solr.handler.dataimport.schedulerパッケージにクラスを作成しました(wikiページからクラスをコピーするコピー)。 ant distコマンドをコンパイルして実行し、展開可能なjarファイルを作成しました。

wimの指示に従ってdataimport.propertiesを設定し、上記の答えに従ってweb.xmlファイルにリスナーを追加しました。しかし、私がTomcatを始めたとき、solrは配備されませんでした。

私は、ログファイルに、このエラーメッセージが表示されます。

INFO: Starting Servlet Engine: Apache Tomcat/7.0.14 
Jun 21, 2011 5:20:47 PM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor solr.xml from /home/sabman/programs/apache-tomcat-7.0.14/conf/Catalina/localhost 
Jun 21, 2011 5:20:47 PM org.apache.catalina.startup.HostConfig deployDescriptor 
WARNING: A docBase /home/sabman/programs/apache-tomcat-7.0.14/webapps/solr.war inside the host appBase has been specified, and will be ignored 
Jun 21, 2011 5:20:47 PM org.apache.catalina.startup.SetContextPropertiesRule begin 
WARNING: [SetContextPropertiesRule]{Context} Setting property 'debug' to '0' did not find a matching property. 
Jun 21, 2011 5:20:48 PM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error listenerStart 

私はそれが前にあったように、それは仕事のためのweb.xmlからリスナーコードを削除する必要がありました。

私は何が間違っている可能性がありますか?

+0

最も簡単な解決策。 cronエントリを使用して、毎時 'dataimporthandler'にリクエストを行います。 – mhitza

答えて

1

私はSolrのメーリングリストからこの回答を得ました:

をWikiページがまだSolrのにコミットされていないスケジューラ、(私がチェックした)の設計について説明します。私は先日パッチを見ましたが(https://issues.apache.org/jira/browse/SOLR-2305参照)、十分にテストされていませんでした。

あなたは基本的にこの時点でcronのようなものに執着していると思います。あなたのアプリケーションがjavaで書かれているなら、Quartzスケジューラを見てください。http://www.quartz-scheduler.org/

0

ApplicationListenerなどのソースをコピーしてビルドを実行した場合、ファイルが実際に配布物にコンパイルされているかどうかを確認したい場合があります。 warファイルを開き、あなたが言及したクラスの.classファイルを含むjarファイルがあるかどうかを調べるか、.warのclassesディレクトリを調べてファイルが存在するかどうかを調べます。そうでなければ、Webアプリケーションにロードされません(したがって、失敗したデプロイメント)。

自分でコンパイルしなければならない場合があります(クラスをコンパイルした独自のjarファイルを作成します)。jarファイルをwarファイルに手動で組み込みます(これは良いテストです)。

また、cronまたはタスクスケジューラからコマンドラインを呼び出すためのStackoverflowポストの2番目の答えを使用することもできます。

+0

はい、クラスファイルがjarファイルに含まれていることを確認しました。 私はアプリケーションパッケージのSolr部分をクライアントに渡すために、まだcronジョブを使用したくありません。したがって、cronジョブを実行するように依頼するのではなく、むしろsolrパッケージのスケジューラー部分を持つことになります。 – sabman

1

単純なWARの場合、定期的にHTTPリンクを呼び出すにはTimerHttpTaskを参照してください。たとえば、デルタインポートを開始するには、リンクをDIHリンクにすることができます。プロジェクトはLGPLです。 JNDIは、WARを再構築せずにジョブをスケジュールするために使用されます。以下の例では、固定遅延を使用して15秒の初期遅延とそれ以降の60秒を使用してURLを呼び出すように、TimerHttpTaskを直接指示しています。

桟橋JNDIの設定

<Call name="setProperty"> 
    <Arg>TIMEAPI-UTC-NOW</Arg> 
    <Arg>FD|15000|60000|http://www.timeapi.org/utc/now.json</Arg> 
</Call> 

TomcatのJNDIの設定

TIMEAPI-UTC-NOW="FD|15000|60000|http://www.timeapi.org/utc/now.json" 
関連する問題