5

मैं एक साधारण ऐप बनाया जो स्प्रिंग डेटा 3.1.0 का उपयोग करता है। RELEASE और सर्वर पक्ष पर Eclipselink 2.4 - जो कि टॉमकैट 7.0.27 में होस्ट किया गया है। mywebapp/META-INF/context.xml में मैं वसंत classloader हैएमओटीए-आईएनएफ/context.xml में एमओटीए-आईएनएफ/संदर्भ.एक्सएमएल में परिभाषित टोमकैट इंस्ट्रूमेंट क्लासलोडर के साथ टोमकैट काम कैसे करें, वेब-आईएनएफ/lib/spring-instrument-tomcat.jar

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/> 

अगर मैं $TOMCAT_HOME/lib में spring-instrument-tomcat.jar डाल तो बिलाव mywebapp अच्छी तरह से चलता है, लेकिन अगर मैं $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib में spring-instrument-tomcat.jar डाल - बिलाव अपवाद के साथ मर जाता है

java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 

संदर्भ लोडर पैरामीटर useSystemClassLoaderAsParentfalse पर सेट या तो मदद नहीं करता है।

मैं टोमकैट में कोई भी (कस्टम) वैश्विक lib नहीं चाहता (और हमारे वास्तविक जीवन उत्पादन प्रणाली में वैश्विक होना आसान नहीं होगा) इस प्रकार मैं सभी आवश्यकतानुसार स्थानीयकरण करने की कोशिश कर रहा हूं सरल (अभी तक बड़ी) युद्ध फ़ाइल में सामान। इस तरह के encapsulation कैसे प्राप्त करने के बारे में कोई विचार?

उत्तर

5

ठीक है, अगर तुम नहीं करते अतिरिक्त जार बिलाव के lib फ़ोल्डर में चाहते हैं, एकमात्र विकल्प (अब भी वसंत/AspectJ LTW काम है करने के लिए) -javaagent जोड़ने के लिए बिल्ला के रन स्क्रिप्ट को संपादित करना है :. ..instrument.jar अपने JAVA_OPTS या CATALINA_OPTS पर, और context.xml फ़ाइल को हटा दें (आपको अब TomcatInstrumentableClassLoad er की आवश्यकता नहीं होगी)।

+0

मुझे आपके उत्तर को सही कारण के रूप में देखना है क्योंकि यह अब तक का सबसे अच्छा समाधान है। धन्यवाद! –

0

आपका context.xml सही नहीं हो सकता है। इस प्रयास करें:

<?xml version="1.0" encoding="UTF-8" ?> 
<Context> 
    <Loader 
    loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" 
    useSystemClassLoaderAsParent="false" /> 
</Context> 
+1

मैंने ** सिस्टम सिस्टम क्लासलोडरएस्पेरेंट ** के साथ आपके सुझाव की कोशिश की लेकिन टॉमकैट 7 पर मुझे 'चेतावनी मिली: [सेटप्रॉपर्टीज नियम] {संदर्भ/लोडर} संपत्ति का उपयोग करना' सिस्टम सिस्टम क्लासलोडरएस्पेरेंट 'को' झूठी 'में मिलान करने वाली संपत्ति नहीं मिली।' और, जैसा कि अपेक्षित, 'java.lang.ClassNotFoundException: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader' अगली त्रुटि थी। –

+0

मैं टॉमकैट 7 का भी उपयोग करता हूं, लेकिन मैंने सफलता प्राप्त की। वसंत-उपकरण-tomcat.jar को टॉमकैट/lib में डाल देना चाहिए। मुझे नहीं लगता कि आप सही जगह डालते हैं। और मैं कहता हूं, मैं विकसित करने के लिए इंटेलिज विचार का उपयोग करता हूं, मैंने डाल दिया tomcat7utf8 \ conf \ Catalina \ localhost \ yourwebappnameDirectory \ context में context.xml, और इसे पूरी तरह से पसंद है: ' <संदर्भ पथ = "" docBase = "अपने वेब एप्लिकेशन पथ"> <लोडर loaderClass = "org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" useSystemClassLoaderAsParent = "false" /> ' वेब बिल्ला \ webapp निर्देशिका में नहीं एप्लिकेशन । – flym

+0

ठीक है, अगर मैं आपको सही ढंग से समझता हूं, तो आप टॉमकैट/lib में टॉमकैट-instrumental.jar डालने का सुझाव देते हैं, लेकिन यह वही है जो मैं नहीं करना चाहता (लेकिन मेरे पास इस पल के लिए काम करने के अन्य तरीके नहीं हैं। प्रश्न यह है कि टॉमकैट/लिब को बिना छेड़छाड़ कैसे छोड़ें और अपने ऐप को अपने स्वयं के libs से संतुष्ट करें। –

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