Próbuję wdrożyć plik WAR napisany w Clojure do Tomcat 6 na Debianie Lenny.NPE instaluje Clojure WAR w Tomcat, restartuje poprawki
Otrzymuję wyjątek NullPointerException po skopiowaniu go do katalogu webapps (zarówno dla pierwszego typu, jak i przy nadpisywaniu istniejącej wojny). O dziwo, ponowne uruchomienie Tomcat rozwiązuje problem, a serwlet działa dobrze. Pakowałem wojnę z leiningen-war (również wypróbowałem lein-ring). Serwlet działa poprawnie podczas korzystania z Jetty.
Oto odpowiedni wpis w rejestrze od 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)
Oto źródło, uproszczone do minimum:
(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)
Istotne Zależności Lein:
[org.clojure/clojure "1.2.0"]
[ring/ring-core "0.3.4"]
[ring/ring-servlet "0.3.4"]
Upewniłem nie ma duplikatów plików JAR w katalogu WAR i katalogu lib Tomcat.
Brakuje mi. Czy ktoś wie, co jest nie tak lub ma wskazówki dotyczące rozwiązywania problemów? Konieczność ponownego uruchomienia Tomcata przy każdym wdrożeniu to ból w tyłku.
Dzięki za napiwek, ale bez powodzenia :( –