5

के लिए स्प्रिंग/जेट्टी (या टोमकैट)/मेवेन का उपयोग करके एकीकरण टेस्ट को कॉन्फ़िगर करना मैं HTTP अनुरोधों (थोड़े ब्लैकबॉक्स परीक्षण) के साथ हमारी आरईएसटी सेवा का परीक्षण करना चाहता हूं। हालांकि, कुछ घंटों के बाद googling और विभिन्न विन्यासों की कोशिश कर रहा है, मैं अभी भी जेटी सही ढंग से शुरू करने में सक्षम नहीं हूँ। यहाँ मेरे वर्तमान विन्यास (मैं कई विभिन्न संस्करणों की कोशिश की) है:आरईएसटी परीक्षण

pom.xml

 ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.8</version> 
      <configuration> 
       <junitArtifactName>junit:junit</junitArtifactName> 
       <excludes> 
        <exclude>**/*_Roo_*</exclude> 
        <exclude>**/*Util*</exclude> 
        <exclude>**/*IT*</exclude> 
       </excludes> 
       <forkMode>once</forkMode> 
       <argLine>-javaagent:'${settings.localRepository}/org/springframework/spring-instrument/${org.springframework-version}/spring-instrument-${org.springframework-version}.jar' -javaagent:'${settings.localRepository}/org/aspectj/aspectjweaver/${org.aspectj-version}/aspectjweaver-${org.aspectj-version}.jar'</argLine> 
       <useSystemClassLoader>true</useSystemClassLoader> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.8</version> 
      <configuration> 
       <forkMode>once</forkMode> 
       <argLine>-javaagent:'${settings.localRepository}/org/springframework/spring-instrument/${org.springframework-version}/spring-instrument-${org.springframework-version}.jar' -javaagent:'${settings.localRepository}/org/aspectj/aspectjweaver/${org.aspectj-version}/aspectjweaver-${org.aspectj-version}.jar'</argLine> 
       <useSystemClassLoader>false</useSystemClassLoader> 
      </configuration> 
      <executions> 
       <execution> 
        <id>integration-test</id> 
        <goals> 
         <goal>integration-test</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>verify</id> 
        <goals> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>maven-jetty-plugin</artifactId> 
      <version>6.1.10</version> 
      <configuration> 
       <scanintervalseconds>10</scanintervalseconds> 
       <stopkey>foo</stopkey> 
       <stopport>9999</stopport> 
       <contextpath>/${project.artifactId}</contextpath> 
       <connectors> 
        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
         <port>9090</port> 
        </connector> 
       </connectors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>start-jetty</id> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <scanintervalseconds>0</scanintervalseconds> 
         <daemon>true</daemon> 
        </configuration> 
       </execution> 
       <execution> 
        <id>stop-jetty</id> 
        <phase>post-integration-test</phase> 
        <goals> 
         <goal>stop</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     ... 

orm.xml

<!-- <context:load-time-weaver/> --> 
<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> 
<context:spring-configured/> 
<context:annotation-config /> 
<context:component-scan base-package="com.example.jump.domain"> 
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> 
</context:component-scan> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 

अभी, मैं अपवाद हो रही है:

  • java.lang.IllegalStateException: क्लासलोडर [org.mortbay.jetty.webapp.WebAppClassLoader] 'addTransformer (क्लास' प्रदान नहीं करता है FileTransformer) 'विधि। एक कस्टम LoadTimeWeaver निर्दिष्ट करें या साथ वसंत के एजेंट अपने जावा आभासी मशीन शुरू: -javaagent: org.springframework.instrument.jar

मैं अपवाद को समझते हैं, लेकिन मैं इसे ठीक करने के लिए सक्षम नहीं था। मैंने कुछ अन्य दृष्टिकोणों की भी कोशिश की, जैसे MAVEN_OPTS के माध्यम से जावाएन्ट देना या जेटी को वीएम तर्क सेट करने का प्रयास करना। समस्या यह है कि Google विभिन्न संस्करणों के लिए 'समाधान' का एक गुच्छा वापस देता है और कोई भी काम नहीं कर रहा था।

मैं वर्तमान में बहुत निराश हूं कि आरईएसटी सेवा परीक्षण करने जैसे एक सामान्य परिदृश्य, वसंत में हासिल करना बहुत मुश्किल है। इसलिए यदि आप सही कॉन्फ़िगरेशन खोजने के लिए पर्याप्त चालाक हैं, तो कृपया इसे मेरे साथ साझा करें कि यहां तक ​​कि एक बंदर भी इसे कॉन्फ़िगर कर सकता है और मैं वादा करता हूं कि अगर हम कभी बीयर से मुलाकात करेंगे तो मुझ पर हैं।

यहाँ संस्करणों मैं उपयोग कर रहे हैं:

<properties> 
    <java-version>1.6</java-version> 
    <org.springframework-version>3.0.5.RELEASE</org.springframework-version> 
    <org.aspectj-version>1.6.9</org.aspectj-version> 
    <org.slf4j-version>1.5.10</org.slf4j-version> 
    <redis.version>1.0.0.BUILD-SNAPSHOT</redis.version> 
    <org.jboss.hibernate.version>3.6.0.Final</org.jboss.hibernate.version> 
    <net.sf.ehcache.version>2.3.1</net.sf.ehcache.version> 
</properties> 

Maven 2.21

मैं खुशी से अधिक जानकारी प्रदान करता है, तो जरूरत है। जैसे मैंने कहा कि हर मदद की सराहना की।

+0

क्या आपको एकीकरण परीक्षण के लिए लोड समय बुनाई की आवश्यकता है? – sourcedelica

+0

इसके चारों ओर गुगल करना लगता है जैसे MAVEN_OPTS जाने का रास्ता है और आपको यह सुनिश्चित करने की ज़रूरत है कि जार के रास्ते में कोई स्थान न हो। – sourcedelica

+0

जैसा मैंने लिखा था, मैंने बहुत कुछ किया था और मुझे MAVEN_OPTS भी मिला, फिर भी, कोई समाधान काम नहीं किया, पथ में कोई स्थान नहीं था। – hjuskewycz

उत्तर

0

मुझे जेटी के साथ भी समस्याएं हैं।

यदि आप टॉमकैट का उपयोग कर मेरे जैसे विकास के लिए समस्या के बिना हैं, तो मैं सलाह दूंगा कि आप स्वचालित परीक्षणों के लिए टॉमकैट से चिपके रहें।
विभिन्न ट्यूटोरियल्स पर जेटी का उपयोग करने का उदाहरण बहुत अच्छा काम करता है क्योंकि उनका नमूना ऐप। सरल है (हैलो वर्ल्ड जेएसपी ...)।

असली दुनिया के अनुप्रयोग के लिए जेटी की कॉन्फ़िगरेशन अधिक जटिल है और इसका उपयोग करने के लाभ इसके साथ चले गए हैं।

जेटी को टॉमकैट के साथ किसी अन्य की तुलना में अन्य कॉन्फ़िगरेशन की आवश्यकता होती है।
तो यह एक दर्द है .. इसे बनाए रखने के लिए और मुझे उनके खराब दस्तावेज के साथ कोई मूल्य नहीं मिला।

मैं अभी कार्गो के साथ एक स्थानीय टोमकैट का उपयोग कर रहा हूं: इसे लॉन्च करना शुरू करें, टॉमकैट को रोकें। आपको जेटी सामान सीखने की आवश्यकता नहीं है बस अपनी वास्तविक टोमकैट कॉन्फ़िगरेशन का पुन: उपयोग करें।
एकमात्र शर्त है कि आपके मशीन पर पहले से ही टोमकैट स्थापित हो और पर्यावरण के चरम पर इशारा किया जाए।

आप इसे छोड़ सकते हैं और इसे कार्गो कॉन्फ़िगरेशन के साथ पहली बार स्वचालित रूप से डाउनलोड कर सकते हैं।

3

यह वास्तव में रीस्ट सेवाओं से संबंधित नहीं है, और यह केवल आकस्मिक रूप से वसंत से संबंधित है। आपकी समस्या AspectJ के आस-पास केंद्रित है और JVM में लोड-टाइम बुनाई को सक्षम करती है। आप कहते हैं कि आप अपवाद को समझते हैं, लेकिन मुझे यकीन नहीं है कि आप करते हैं। क्या आपने वसंत संदर्भ में Load-time weaving with AspectJ पर अनुभाग पढ़ा है? environment-specific configuration पर विशेष ध्यान दें। समस्या यह है कि जेटी के क्लासलोडर कार्यान्वयन वर्ग परिवर्तन का समर्थन नहीं करता है, और मुझे ऐसा करने के किसी भी विकल्प से अवगत नहीं है, इसलिए एजेंट का उपयोग करने का एकमात्र विकल्प शेष है। आदर्श रूप से, यह मेवेन जेट्टी प्लगइन पर कॉन्फ़िगरेशन विकल्प होगा, लेकिन मेरे ज्ञान के लिए, अभी भी जेटी सर्वर के लिए एक नया जेवीएम बनाने की क्षमता नहीं है, जो दुर्भाग्यपूर्ण है। इसलिए, चूंकि जेटी उसी जेवीएम में मैवेन के रूप में चल रही है, इसलिए आपको वहां एजेंट निर्दिष्ट करना होगा। आप कहते हैं कि आप पहले ही ऐसा कर चुके हैं, लेकिन आपको कुछ याद आना चाहिए। मैंने executable example on github पोस्ट किया है। आप स्रोत कोड या क्लोन पर एक नज़र डालें और साथ उदाहरण चला सकते हैं:

git clone git://github.com/zzantozz/testbed.git tmp 
export MAVEN_OPTS=-javaagent:org.springframework.instrument-3.0.5.RELEASE.jar 
cd tmp/spring-aspectj-load-time-weaving-in-jetty 
mvn jetty:run 

फिर http://localhost:8080/spring-aspectj-load-time-weaving-in-jetty/ जाएँ यह काम देखने के लिए। संयोग से, यह वास्तव में आरएसटी सेवाओं से संबंधित नहीं है, और यह केवल आकस्मिक रूप से वसंत से संबंधित है।

4

जेट्टी-मेवेन-प्लगइन अब रन-फोर्कड लक्ष्य का समर्थन करता है, जहां आप JVM तर्कों को पार कर सकते हैं। कार्गो या MAVEN_OPTS के साथ टोमकैट से बहुत आसान है।

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