2012-03-05 8 views
6

हम हाल ही में सर्वलेट एपीआई 3.0 में माइग्रेट किए गए हैं। चूंकि हम एक ढांचा विकसित कर रहे हैं जिसे कभी-कभी web.xml में कुछ बदलावों की आवश्यकता होती है, इसलिए हमारे ढांचे पर आधारित परियोजनाओं को फ्रेमवर्क में बदलाव होने पर web.xml को अपडेट करने की आवश्यकता होती है।एक विशाल परियोजना वातावरण में वेब टुकड़े (सर्वलेट एपीआई 3.0) का उपयोग करें

सर्वलेट एपीआई 3.0 नए वेब फ्रैगमेंट्स प्रस्तुत करता है, जो इस व्यवहार को अधिक कमजोर और गतिशील बनाता है। मैं web-fragment.xml बनाता हूं और वहां हमारे सभी सामान को web.xml से ले जाता हूं। इसलिए परियोजनाओं को अब निम्नलिखित web.xml और उनकी अपनी अतिरिक्त घोषणाओं को परिभाषित करना है।

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    version="3.0" 
    metadata-complete="false" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
</web-app> 

हम अपने ढांचे META-INF/ में web-fragment.xml है जार में टुकड़ा खोज सक्षम करने के लिए metadata-complete="false" उपयोग करने के लिए (है।

जब से हम अन्य चौखटे और पुस्तकालयों (लगभग 80-90) और के लिए कई निर्भरता है metadata-complete="false" भी एनोटेशन के लिए खोज यह सभी पुस्तकालयों के माध्यम से खोज करने के लिए अस्वीकार्य 12 सेकंड का समय लगता है चलाता है।

तंत्र के रूप में यह है अच्छा काम करता है और मैं तथ्य यह है कि हम और अधिक decou हैं चाहते हमारे ढांचे से चढ़ाया, लेकिन स्टार्टअप समय घातक है! इसके अलावा हमें -Xms256m -Xmx512m से -Xms512m -Xmx1024m पर टोमकैट के लिए उपलब्ध स्मृति को java.lang.OutOfMemoryError: Java heap space (बिना टोमकैट के अक्षम रूप से लागू एनोटेशन प्रोसेसर के कारण शुरू किया गया है) के बारे में टोमकैट के लिए उपलब्ध स्मृति को बढ़ाना होगा (लगभग 50,000 वर्ग कैश किए गए हैं))।


मुझे पता है कि हम एक पुस्तकालय के भीतर एनोटेशन खोज निष्क्रिय कर सकते हैं, लेकिन जैसा कि हम ज्यादातर तीसरे पक्ष के जो metadata-complete="true" झंडा नहीं है का उपयोग करें, यह भी एक विकल्प नहीं है।

क्या हम एनोटेशन के लिए खोज को अक्षम करने के लिए कुछ भी कर सकते हैं? या क्या हम सर्वलेट कंटेनर को केवल web-fragment.xml के लिए घोषित पुस्तकालयों में खोज सकते हैं?

मैं वास्तव में नई वेब खंड सुविधा का उपयोग करना चाहूंगा, लेकिन स्टार्टअप समय और मेमोरी के साथ यह संभव नहीं है।

उत्तर

3

आप कुछ जेएआर फाइलों के लिए कॉन्फ़िगरेशन द्वारा एनोटेशन प्रोसेसिंग को अक्षम कर सकते हैं। मैंने इसे केवल जेएआर फाइलों के लिए इस्तेमाल किया, यह विस्फोटित WAR एस के लिए काम नहीं कर सकता है। <tomcat>/conf/catalina.properties, लाइन 76 (बिलाव 7.0.22) को देखो:

# List of JAR files that should not be scanned for configuration information 
# such as web fragments, TLD files etc. It must be a comma separated list of 
# JAR file names. 
# The JARs listed below include: 
# - Tomcat Bootstrap JARs 
# - Tomcat API JARs 
# - Catalina JARs 
# - Jasper JARs 
# - Tomcat JARs 
# - Common non-Tomcat JARs 
# - Sun JDK JARs 
# - Apple JDK JARs 
+0

यह वास्तव में एक समाधान है, धन्यवाद! दुर्भाग्य से यह एक सर्वलेट कंटेनर निर्भर समाधान होगा। हम प्रत्येक सर्वलेट कंटेनर पर चलने का लक्ष्य रखते हैं, इसलिए यह समाधान हमारे लिए एक अच्छा विकल्प नहीं है। – codevour

+0

@codevour इस दौरान आपने अपनी समस्या का समाधान कैसे किया है? – phant0m

0

बिलाव में कुछ सिस्टम गुण है कि 7.0.30 के बाद से जार स्कैनिंग को नियंत्रित करने के लिए सक्षम हैं। दस्तावेज़ पृष्ठ here देखें।

मूल रूप से इन लोगों को कर रहे हैं:

  • tomcat.util.scan.DefaultJarScanner.jarsToSkip
  • org.apache.catalina.startup.ContextConfig.jarsToSkip
  • org.apache.catalina.startup.TldConfig.jarsToSkip

सुनिश्चित नहीं हैं कि जल्द से जल्द समय आप उन्हें सेट कर सकते हैं हो सकता है ContextListener क्या है?

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