2011-01-12 18 views
9

Clojure'de yazılmış bir WAR dosyasını Debian Lenny'deki Tomcat 6'ya dağıtmaya çalışıyorum.NPE, Tomcat uygulamasında bir Clojure WAR yükleme, yeniden başlatma düzeltmeleri

Webapps dizinine kopyaladığımda NullPointerException alıyorum (hem ilk tür hem de varolan bir savaşın üzerine yazarken). Garip bir şekilde, Tomcat'in yeniden başlatılması sorunu çözüyor ve sunucu uygulaması iyi çalışıyor. SAVAŞI leingen-war ile paketledim (aynı zamanda lein-ring'i de denedim). Servlet Jetty kullanırken iyi çalışıyor. İşte

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) 

kaynağıdır, çıplak minimuma basitleştirilmiş:

(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) 

İlgili Lein bağımlılıkları: Ben emin oldum

[org.clojure/clojure "1.2.0"] 
[ring/ring-core "0.3.4"] 
[ring/ring-servlet "0.3.4"] 

İşte Tomcat alakalı günlük girişi var WAR ve Tomcat'in lib dizininde yinelenen JAR yok.

Kaybettim. Herkes neyin yanlış olduğunu veya sorun giderme ipuçlarını biliyor mu? Tomcat'i her konuşlandırmaya tekrar başlatmak zorunda kalmak, popodaki bir acıdır.

cevap

2

Sorununuzla ilgili bir şey olmayabilir veya olmayabilir, ancak Tomcat'in zaman zaman tamamen webapps dizinine yazılmayan bir WAR dosyasını (özellikle büyük olan) dağıttığını fark ettim. Bu Tomcat'in hatası değil; Dosyanın ne zaman tamamlandığını bilemez.

Şimdi her zaman bir WAR dosyasını çalışan bir Tomcat'a kopyalayarak webapp.war.disabled'a kopyalayıp yeniden adlandırıyorum: mv webapp.war.disabled webapp.war.

+0

Bahşiş için teşekkürler, ancak hayır şans :( –

1

Hemen hemen aynı şeyi yaptım ama tomcat 5.5.34'ü kullandım ve işe yaradı.

[ring "1.0.0-RC1"] 

I project.clj bu dev-bağımlılık eklendi:

I project.clj bu bağımlılık ilave bir project.clj halka konfigürasyonu ilave edildi ve emin
:dev-dependencies [[lein-ring "0.4.6"]] 

benim işleyicisi işlevi 'işleyicisi' seçildi: Ben Lein halka uberwar ran
:ring {:handler simple.webapp.core/handler} 

sonra resu değiştirildi Savaş dosyasını, savaş dosyasının tomcat'ın webapps/dizinine kopyalanmadan önce "-1.0.0-SNAPSHOT.standalone" içermemesi.

clojure 1.3.0 kullanıyordum.

İlgili konular