क्या कोई विधि या एपीआई है जिसका मैं उपयोग कर सकता हूं ताकि जब भी मैं एक नई WAR फ़ाइल तैनात करूँ, कोड का एक हिस्सा निष्पादित होना चाहिए या शायद जब टॉमकैट शुरू होता है, तो संबंधित सर्वलेट को लगातार कुछ कोड शुरू या चलाने चाहिए।क्या हम कुछ कोड चला सकते हैं जब हम पहली बार WAR फ़ाइल को तैनात करते हैं?
उत्तर
आप web.xml में "ContextListener" शामिल कर सकते हैं। इस कक्षा का एक उदाहरण तब बनाया जाएगा जब Webb एप्लिकेशन WAR को तैनात/प्रारंभ किया जा रहा है।
यह कोड एक थ्रेड शुरू कर सकता है जो ऐप को तैनात किए जाने तक जारी रहेगा।
केवल जवाब के बाद से एक पुराने सवाल को फिर से जीवित किसी भी उदाहरण नहीं दिखाती है।
आदेश जब भी एक वेब अनुप्रयोग युद्ध तैनात है/undeployed या बिलाव शुरू कर दिया है कोड की एक कस्टम टुकड़ा चलाने के लिए/बंद कर दिया, आप की जरूरत है:
- लागू
ServletContextListener
श्रोता और उसके तरीकोंcontextInitialized()
औरcontextDestroyed()
। - टॉमकैट को आपके कार्यान्वयन के बारे में बताएं। documentation के अनुसार, आप या तो तैनाती कक्षा को तैनाती वर्णनकर्ता में जोड़ सकते हैं, इसे
WebListener
के साथ एनोटेट करें, या इसेServletContext
पर परिभाषितaddListener()
विधियों में से एक के माध्यम से पंजीकृत करें।package com.example; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyServletContextListener implements ServletContextListener { /** The servlet context with which we are associated. */ private ServletContext context = null; @Override public void contextDestroyed(ServletContextEvent event) { log("Context destroyed"); this.context = null; } @Override public void contextInitialized(ServletContextEvent event) { this.context = event.getServletContext(); log("Context initialized"); } private void log(String message) { if (context != null) { context.log("MyServletContextListener: " + message); } else { System.out.println("MyServletContextListener: " + message); } } }
और
web.xml
के लिए निम्न (या वैकल्पिक रूप से,WebListener
एनोटेशन याaddListener()
विधि का उपयोग करें) जोड़ें::
यहाँ एक उदाहरण (this post के आधार पर) है
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...
<listener>
<listener-class>com.example.MyServletContextListener</listener-class>
</listener>
</web-app>
मैं एप्लिकेशन (* .war) परिनियोजन पर केवल कुछ कोड चलाने का एक तरीका खोजें: यह जावा सर्वलेट के साथ कम से कम जर्सी सर्वलेट के लिए काम करता है javax.ws.rs.core.Aplication का उपयोग कर।
फ़ाइल में आवेदन ApplicationConfig.java (नीचे देखें) में एक विधि सार्वजनिक getClasses है जिसे एप्लिकेशन परिनियोजन पर बुलाया जाता है। तो getClasses में कोड जोड़ने के परिणामस्वरूप इसे एप्लिकेशन परिनियोजन पर निष्पादित किया गया। मैंने देखा कि एकमात्र चेतावनी यह है कि अजीब बात यह है कि इस समारोह को दो बार बुलाया जाता है, पता नहीं क्यों, इसलिए मैंने एप्लिकेशन कॉन्फिग क्लास में एक वैश्विक चर जोड़ा है ताकि यह पता चल सके कि मेरा कोड पहले से चल रहा है या नहीं। अगर मैं उस प्रोग्राम लगातार तब चलाने के लिए मैं क्या करूँ आवश्यकता है, तो उसके बाद
package eu.oca;
import java.util.Set;
import javax.ws.rs.core.Application;
/**
*
* @author mattei
*/
@javax.ws.rs.ApplicationPath("jersey")
public class ApplicationConfig extends Application {
private boolean alreadyRun = false;
@Override
public Set<Class<?>> getClasses() {
System.out.println("Sidonie : ApplicationConfig : getClasses : alreadyRun = " + String.valueOf(alreadyRun));
alreadyRun = true;
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
/**
* Do not modify addRestResourceClasses() method.
* It is automatically populated with
* all resources defined in the project.
* If required, comment out calling this method in getClasses().
*/
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(eu.oca.ResultatGeneralAF.class);
resources.add(eu.oca.ResultatGeneralF.class);
resources.add(eu.oca.ResultatMesuresAF.class);
resources.add(eu.oca.ResultatMesuresF.class);
resources.add(eu.oca.SidonieAccueilD.class);
resources.add(eu.oca.SidonieWelcomeR.class);
}
}
- 1. जब हम पहली बार कक्षा का उपयोग करते हैं तो स्थिर कोड हमेशा निष्पादित होता है?
- 2. क्या हम आईफोन पर जावा एप्लिकेशंस चला सकते हैं?
- 3. क्या हम sandcastle तेज कर सकते हैं?
- 4. हम रिफैक्टर क्यों करते हैं?
- 5. हम ग्रहण में कस्टम आदेश कैसे चला सकते हैं?
- 6. क्या हम खुद को एक ईओएफ चरित्र लिख सकते हैं?
- 7. हम पृष्ठभूमि में एसक्यूएल क्वेरी कैसे चला सकते हैं
- 8. क्या हम एक क्यूआर-कोड का आकार बदल सकते हैं?
- 9. हम स्ट्रेटर पॉइंटर को स्ट्रिंग क्यों नहीं कॉपी कर सकते हैं जब हम सीधे स्ट्रिंग असाइन कर सकते हैं?
- 10. क्या हम एएसपी.NET में एकाधिक उपयोगकर्ताओं को प्रभावित करते हैं जब हम थ्रेड वर्तमान संस्कृति/CurentUICulture सेट करते हैं?
- 11. लॉग लॉग वास्तव में क्या करते हैं जब हम कुछ लॉग स्थानों को चालू या बंद करते हैं?
- 12. क्या हम ऑब्जेक्ट से प्राप्त करते हैं?
- 13. क्या हम DispatcherServlet संदर्भ कॉन्फ़िगरेशन फ़ाइल नाम बदल सकते हैं?
- 14. क्या हम संपूर्ण कॉन्फ़िगरेशन फ़ाइल एन्क्रिप्ट कर सकते हैं?
- 15. क्या हम * .dll.config को ऑटोकॉपी कर सकते हैं?
- 16. क्या हम एक फ़ाइल में हैशटेबल लिख सकते हैं?
- 17. क्या हम jQuery घोषित करते हैं या हम इसका उपयोग करते हैं?
- 18. हम सी ++ संकलक द्वारा कोड instantiated टेम्पलेट देख सकते हैं
- 19. जहां हम JSON का उपयोग करते हैं?
- 20. हम serialization का उपयोग क्यों करते हैं?
- 21. क्या हम सी # एप्लिकेशन में 300,000 धागे बना सकते हैं और इसे पीसी पर चला सकते हैं?
- 22. क्या हम इमाक्स को चर की परिभाषा ढूंढ सकते हैं?
- 23. जब हम ClearAllPools विधि का उपयोग कर सकते हैं?
- 24. क्या हम सीधे नोड्स को नोडलिस्ट से निकाल सकते हैं?
- 25. क्या हम एडाप्टर से startActivityForResult को कॉल कर सकते हैं?
- 26. क्या हम एक ही मॉड्यूल में टाइमिट के साथ प्रत्येक कार्य को चला सकते हैं
- 27. हम इसे क्या कहते हैं?
- 28. हम बड़े पूर्णांक को कैसे परिभाषित करते हैं?
- 29. क्या हम जावास्क्रिप्ट के साथ 302 रीडायरेक्ट कर सकते हैं?
- 30. हम एमवीवीएम का उपयोग कब करते हैं?
:
यहाँ मेरी समाधान है? – ayyappa
आप प्रक्रिया को लॉन्च करने के लिए System.exec कर सकते हैं। ऐप बेरोजगार या कंटेनर बंद होने पर भी यह प्रक्रिया चलती रहेगी। –
महोदय, मुझे एक सर्वलेट चलाने की ज़रूरत है जो इसकी तैनाती के बाद पृष्ठभूमि में लगातार चल सकती है .. मैं यह कैसे कर सकता हूं? कोई सुझाव? – ayyappa