Sto tentando di distribuire un file WAR scritto in Clojure su Tomcat 6 su Debian Lenny.NPE che installa un WAR Clojure in Tomcat, riavvia le correzioni
Ricevo una NullPointerException quando la copio nella cartella webapps (sia per il primo tipo che per la sovrascrittura di una guerra esistente). Stranamente, il riavvio di Tomcat risolve il problema e il servlet funziona correttamente. Ho confezionato la WAR con leiningen-war (anche provato lein-ring). Il servlet funziona bene quando si usa Jetty.
Ecco la voce corrispondente di registro da Tomcat:
Jan 12, 2011 7:18:06 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet foobar
java.lang.NullPointerException
at clojure.lang.Var.invoke(Var.java:373)
at clojure.lang.AFn.applyToHelper(AFn.java:169)
at clojure.lang.Var.applyTo(Var.java:482)
at clojure.lang.Compiler.macroexpand1(Compiler.java:5286)
at clojure.lang.Compiler.macroexpand(Compiler.java:5341)
at clojure.lang.Compiler.eval(Compiler.java:5409)
at clojure.lang.Compiler.load(Compiler.java:5857)
at clojure.lang.RT.loadResourceScript(RT.java:340)
at clojure.lang.RT.loadResourceScript(RT.java:331)
at clojure.lang.RT.load(RT.java:409)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4511.invoke(core.clj:4905)
at clojure.core$load.doInvoke(core.clj:4904)
at clojure.lang.RestFn.invoke(RestFn.java:409)
at clojure.lang.Var.invoke(Var.java:365)
at foobar.servlet.<clinit>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Ecco la fonte, semplificato per il minimo indispensabile:
(ns foobar.servlet
(:use [ring.util.servlet :only [defservice]])
(:gen-class :extends javax.servlet.http.HttpServlet))
(defn handler
[req]
{:status 200
:headers {"Content-type" "text/html"}
:body "hi"})
(defservice handler)
rilevanti dipendenze Lein:
[org.clojure/clojure "1.2.0"]
[ring/ring-core "0.3.4"]
[ring/ring-servlet "0.3.4"]
ho fatto in modo non ci sono JAR duplicati nella directory di distribuzione di WAR e Tomcat.
Sono in perdita. Qualcuno sa cosa c'è di sbagliato o avere suggerimenti per la risoluzione dei problemi? Dover riavviare Tomcat su ogni schieramento è un rompicapo.
Grazie per il suggerimento, ma senza fortuna :( –