Estoy intentando desplegar un archivo WAR escrito en Clojure a Tomcat 6 en Debian Lenny.NPE instalando un Clojure WAR en Tomcat, reinicie las correcciones
Obtengo una NullPointerException cuando la copio en el directorio webapps (tanto para el primer tipo como para sobrescribir una guerra existente). Curiosamente, reiniciar Tomcat soluciona el problema y el servlet funciona bien. Empaqueté WAR con leiningen-war (también intenté con lein-ring). El servlet funciona bien cuando se usa Jetty.
Aquí está la entrada correspondiente registro de 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)
Aquí está la fuente, simplificada al mínimo:
(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)
dependencias Lein pertinentes:
[org.clojure/clojure "1.2.0"]
[ring/ring-core "0.3.4"]
[ring/ring-servlet "0.3.4"]
Me aseguré no hay JAR duplicados en WAR y en el directorio de lib de Tomcat.
Estoy perdido. ¿Alguien sabe lo que está mal o tiene consejos para la resolución de problemas? Tener que reiniciar Tomcat en cada implementación es un dolor en el trasero.
Gracias por el consejo, pero no hubo suerte :( –