2011-01-12 12 views
9

को पुनरारंभ करें मैं क्लोजर में लिखित एक WAR फ़ाइल को डेबियन लेनी पर टॉमकैट 6 पर तैनात करने का प्रयास कर रहा हूं।एनपीई टॉमकैट में क्लोजर वायर स्थापित करने,

मुझे एक NullPointerException मिल रहा है जब मैं इसे वेबपैस डीआईआर में कॉपी करता हूं (दोनों पहले प्रकार के लिए और मौजूदा युद्ध को ओवरराइट करते समय)। आश्चर्यजनक रूप से, टॉमकैट को पुनरारंभ करना समस्या को हल करता है और सर्वलेट ठीक चलाता है। मैंने लीनिंगन-वार के साथ युद्ध को पैक किया (लीन-रिंग भी कोशिश की)। Jetty का उपयोग करते समय सर्वलेट ठीक काम करता है।

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

प्रासंगिक lein निर्भरता:

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

मुझे यकीन है कि बनाया न्यूनतम करने के लिए सरल

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) 

यहाँ स्रोत है,:

यहाँ बिलाव से प्रासंगिक लॉग प्रविष्टि है WAR और टोमकैट के lib dir में कोई डुप्लिकेट JARs नहीं हैं।

मुझे नुकसान हुआ है। किसी को पता है कि क्या गलत है या समस्या निवारण युक्तियाँ हैं? प्रत्येक तैनाती पर टॉमकैट को पुनरारंभ करने के लिए बट में दर्द होता है।

उत्तर

2

यह आपकी समस्या से कोई लेना-देना नहीं हो सकता है, लेकिन मैंने देखा है कि कभी-कभी टॉमकैट समय-समय पर एक WAR फ़ाइल (विशेष रूप से एक बड़ा) तैनात करता है जिसे पूरी तरह से वेबएप निर्देशिका में नहीं लिखा गया है। यह टोमकैट की गलती नहीं है; फ़ाइल को पूरा होने पर यह नहीं पता हो सकता है।

अब मैं हमेशा एक वॉर फ़ाइल को एक चल रहे टोमकैट में कॉपी करके, webapp.war.disabled पर कॉपी करके और फिर इसे नामित करता हूं: mv webapp.war.disabled webapp.war

+0

टिप के लिए धन्यवाद, लेकिन कोई भाग्य नहीं :( –

1

मैंने लगभग एक ही चीज़ की लेकिन टॉमकैट 5.5.34 का इस्तेमाल किया और यह काम किया।

[ring "1.0.0-RC1"] 

मैं project.clj को यह देव-निर्भरता कहा::

मैं project.clj को यह निर्भरता जोड़ा

:dev-dependencies [[lein-ring "0.4.6"]] 

मैं project.clj को अंगूठी विन्यास जोड़ा गया है और यह सुनिश्चित किया मेरे हैंडलर फ़ंक्शन का नाम 'हैंडलर' रखा गया था:

:ring {:handler simple.webapp.core/handler} 

मैं लीन रिंग उबेरवार चला गया तो मैंने resu का नाम बदल दिया लेटिंग युद्ध फ़ाइल ताकि युद्ध फ़ाइल को टोमकैट के वेबएप/निर्देशिका में कॉपी करने से पहले नाम में "-1.0.0-SNAPSHOT.standalone" शामिल न हो।

यह उल्लेख करना भूल गया कि मैं क्लोजर 1.3.0 का उपयोग कर रहा था।

संबंधित मुद्दे