2011-06-21 6 views
0

Je viens de commencer à jouer avec Solr et je l'ai déployé et en cours d'exécution sur Tomcat. J'ai le schéma et le gestionnaire d'importation de données mis en place et il indexe les fichiers très bien. Maintenant, je veux programmer ce dataImportHandler pour qu'il s'exécute toutes les heures. Il existe une page wiki détaillant les fichiers here.DIH Scheduling dans Solr

Mais il n'y a pas des instructions sur l'endroit où créer les fichiers et comment les déployer

Une question similaire a été posée sur le débordement de pile avant here.

La réponse était "Créer des classes ApplicationListener, HTTPPostScheduler et SolrDataImportProperties". Je ne sais pas où je devrais créer les classes. Mais j'ai pris une estimation et j'ai téléchargé la dernière version nocturne et créé les classes dans le paquet org.apache.solr.handler.dataimport.scheduler (copier les classes de la page wiki). J'ai compilé et exécuté la commande ant dist pour créer les fichiers jar déployables.

J'ai configuré dataimport.properties selon les instructions du wiki, puis j'ai ajouté l'écouteur dans le fichier web.xml comme indiqué dans la réponse ci-dessus. Mais quand j'ai commencé Tomcat solr n'a pas été déployé.

Je vois ce message d'erreur dans le fichier journal:

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 

je devais supprimer le code d'écouteur de l'web.xml pour fonctionner comme avant.

Une idée de ce que je pourrais faire de mal?

+0

La solution la plus simple. Utilisez une entrée cron pour envoyer une requête à 'dataimporthandler' toutes les heures. – mhitza

Répondre

1

J'ai eu cette réponse de la liste de diffusion Solr:

La page Wiki décrit la conception d'un planificateur, qui n'a pas été engagé à Solr encore (j'ai vérifié). J'ai vu un patch l'autre jour (voir https://issues.apache.org/jira/browse/SOLR-2305) mais il n'avait pas l'air bien testé.

Je pense que vous êtes fondamentalement coincé avec quelque chose comme cron en ce moment. Si votre application est écrite en java, jetez un oeil à l'ordonnanceur Quartz - http://www.quartz-scheduler.org/

0

Si vous avez copié la source pour ApplicationListener, etc. et que vous avez exécuté une génération, vous souhaiterez peut-être vérifier que les fichiers sont en cours de compilation dans votre distribution. Vous pouvez le faire en ouvrant le fichier war et en cherchant à voir s'il y a un jar contenant des fichiers .class pour les classes que vous avez mentionnées ou en regardant dans le répertoire des classes dans le fichier .war pour voir si elles sont là. Si ce n'est pas le cas, ils ne seront pas chargés dans l'application Web (d'où le déploiement échoué).

Vous devrez peut-être les compiler vous-même (créez votre propre fichier jar contenant des classes compilées) et inclure manuellement le fichier jar dans le fichier war (ce serait un bon test, au moins).

Vous pouvez également utiliser la deuxième réponse de ce post Stackoverflow, qui devait appeler la ligne de commande depuis cron ou le planificateur de tâches.

+0

Oui, je me suis assuré que les fichiers de classe étaient dans le fichier jar. Je ne veux pas utiliser les tâches cron pour l'instant car je veux que Solr fasse partie d'un package d'application pour lui donner des clients. Donc plutôt que de leur demander d'exécuter des tâches cron, je préférerais que le planificateur fasse partie du paquetage solr. – sabman

1

Voir mon TimerHttpTask pour un simple WAR pour appeler périodiquement n'importe quel lien HTTP. Par exemple, le lien peut être un lien DIH pour démarrer une importation delta. Le projet est LGPL. JNDI est utilisé pour planifier le (s) travail (s) sans reconstruire le fichier WAR. Les exemples ci-dessous dirigent TimerHttpTask pour appeler une URL en utilisant Fixed Delay avec un délai initial de 15 secondes et toutes les 60 par la suite.

Jetty JNDI Configuration

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

Configuration Tomcat JNDI

TIMEAPI-UTC-NOW="FD|15000|60000|http://www.timeapi.org/utc/now.json" 
Questions connexes