2012-06-19 33 views
6

संभव डुप्लिकेट को तैनात:
How to run an arbitrary startup function in a ring project?निष्पादित अंगूठी/compjure आवेदन स्टार्टअप पर एक समारोह के बाद

मैं clojure अंगूठी मिडलवेयर उपयोग कर रहा हूँ, compojure साथ, एक सरल एपीआई का निर्माण। मैं अक्सर एक युद्ध के रूप में ऐप तैनात करता हूं।

यह बहुत अच्छा काम करता है, लेकिन मैं ऐप शुरू होने पर प्रारंभिक कोड चलाने के तरीकों को देख रहा हूं। जब मैं "लीन रिंग सर्वर" चलाता हूं तो यह ठीक चलता है - हालांकि, जब युद्ध के रूप में तैनात किया जाता है तो ऐसा लगता है कि पहला अनुरोध सर्वर को हिट करता है (यानी आलसी)। क्या यह आलसी नहीं है (एओटी का उपयोग किए बिना) बनाने का कोई तरीका है - या क्या अंगूठी मिडलवेयर जीवन चक्र में हुक करने का एक बेहतर तरीका है?

+0

विहित

ऐसा करने के लिए, कार्य स्टार्टअप और/या शटडाउन के दौरान आप बुलाया करना चाहते हैं साथ एक फ़ाइल बनाने यहां जवाब दें: http://stackoverflow.com/questions/13978623/how-to-run-an-arbitrary-startup-function-in-a-ring-project –

उत्तर

2

मुझे लगता है कि आप देख रहे हैं: लीन-रिंग प्लगइन में init param। https://github.com/weavejester/lein-ring से नकल:

:init - A function to be called once before your handler starts. It should take no 
arguments. If you've compiled your Ring application into a war-file, this function will 
be called when your handler servlet is first initialized. 
+0

जो "लीन रिंग सर्वर" चलाते समय काम करता है और इसके लिए आसान है हालांकि, जब युद्ध के रूप में तैनात किया जाता है, तो उस समारोह को बिल्कुल नहीं कहा जाता है। –

+1

चाल यह थी कि: init फ़ंक्शन स्वयं को * प्रोजेक्ट में नहीं होना चाहिए .clj –

1

एक ServletContextListener कार्यान्वयन अपनी आवश्यकताओं की सेवा करेंगे। यदि आप :gen-class के साथ स्वयं को लागू करने की तरह महसूस नहीं करते हैं, तो आप ring-java-servlet प्रोजेक्ट पर सर्वलेट उपयोगिताओं का उपयोग कर सकते हैं।

(ns my.project.init 
    (:require [org.lpetit.ring.servlet.util :as util])) 

(defn on-startup [context] 
    (do-stuff (util/context-params context))) 

(defn on-shutdown [context] 
    (do-other-stuff (util/context-params context))) 

तो निम्नलिखित web.xml सेटिंग्स के माध्यम से अपने webapp में इस हुक:

<context-param> 
    <param-name>context-init</param-name> 
    <param-value>my.project.init/on-startup</param-value> 
</context-param> 
<context-param> 
    <param-name>context-destroy</param-name> 
    <param-value>my.project.init/on-shutdown</param-value> 
</context-param> 
<listener> 
    <listener-class>org.lpetit.ring.servlet.RingServletContextListener</listener-class> 
</listener>