spring सगढ वसंत-बूट स्टार्टर-डब्ल्यूएस प्रदर्शन जब जार के रूप में चलाते हैं



सीजी पंथी सोंग (1)

मैंने यह परीक्षण किया और ऐसा प्रतीत होता है कि आवेदन में निम्नलिखित दो कोड पथों में एक महत्वपूर्ण राशि खर्च की जाती है:

at org.springframework.boot.loader.LaunchedURLClassLoader$1.hasMoreElements(LaunchedURLClassLoader.java:110)
at sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:45)
at sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:54)
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:354)
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393)
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474)
at javax.xml.transform.FactoryFinder$1.run(FactoryFinder.java:327)
at java.security.AccessController.doPrivileged(Native Method)
at javax.xml.transform.FactoryFinder.findServiceProvider(FactoryFinder.java:323)
at javax.xml.transform.FactoryFinder.find(FactoryFinder.java:299)
at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:106)
at com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.<init>(EfficientStreamingTransformer.java:68)
at com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.newTransformer(EfficientStreamingTransformer.java:420)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:106)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:69)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:128)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:189)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:60)
at org.springframework.ws.transport.AbstractWebServiceConnection.receive(AbstractWebServiceConnection.java:92)
at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:87)
at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:61)
at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:293)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)

तथा

at org.springframework.boot.loader.LaunchedURLClassLoader$1.hasMoreElements(LaunchedURLClassLoader.java:110)
at sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:45)
at sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:54)
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:354)
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393)
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474)
at javax.xml.parsers.FactoryFinder$1.run(FactoryFinder.java:293)
at java.security.AccessController.doPrivileged(Native Method)
at javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:289)
at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:267)
at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:120)
at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.<init>(SAX2DOM.java:74)
at com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:199)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:436)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:342)
at com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.transform(EfficientStreamingTransformer.java:399)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:108)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:69)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:128)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:189)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:60)
at org.springframework.ws.transport.AbstractWebServiceConnection.receive(AbstractWebServiceConnection.java:92)
at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:87)
at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:61)
at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:293)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)

दिलचस्प लाइनें हैं

at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:106)

तथा

at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:120)

इसका मतलब यह है कि प्रत्येक अनुरोध के लिए, जेएआरए में एसएएजे कार्यान्वयन एक नया TransformerFactory और एक नया DocumentBuilderFactory अनुरोध करता है। ये कारखाने जेडीके 1.3 सेवा प्रदाता खोज तंत्र का उपयोग करते हुए स्थित हैं, जिसमें META-INF/services तहत कुछ संसाधनों की तलाश शामिल है। उस खोज का प्रदर्शन वर्ग लोडर की विशेषताओं के प्रति बहुत संवेदनशील होता है, जिसमें से ये संसाधन देखा जाता है। यही कारण है कि आप mvn spring-boot:run बीच में अंतर देखते हैं mvn spring-boot:run और निष्पादन योग्य जार का इस्तेमाल करते हुए विशेष रूप से, निष्पादन योग्य JAR में एम्बेडेड JAR शामिल हैं और इन एम्बेडेड JARs से संसाधनों की तलाश महंगी है। mvn spring-boot:run का मामला नहीं है, जो बताता है कि यह तेज़ क्यों है

चूंकि यह अंततः SAAJ कार्यान्वयन में एक समस्या है, एक समाधान इसके बजाय ऐपैच का उपयोग करने के लिए है। वसंत गाइड से नमूना एप्लिकेशन के साथ ऐसा करने के लिए, बस WebServiceConfig में निम्न कोड जोड़ें:

    @Bean
    public SoapMessageFactory messageFactory() {
        return new AxiomSoapMessageFactory();
    }

आपको निम्न निर्भरता को भी जोड़ना होगा:

    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-impl</artifactId>
        <version>1.2.15</version>
    </dependency>

हमने देखा है कि SOAP वेब-सेवाओं के रूप में चलते समय तेज़ी से चलने लगते हैं

spring-boot:run

जैसा कि हम तैनाती और चलाने के लिए करते हैं, जार को पैकेजिंग करने का विरोध करते हैं

java -jar mySpringApp.jar

गति 2-3x के क्रम में है इसलिए हम अपने जीवित पर्यावरण के लिए यह पसंद करेंगे।

यह मान्य करने के लिए कि यह हमारे ऐप में कुछ नहीं था मैंने स्प्रिंग गाइड से नमूना ऐप के साथ यह कोशिश की है

जीआईटी स्रोत https://github.com/spring-guides/gs-soap-service.git

जेएमेटर के साथ यह परीक्षण करना उसी तरह की गति को दिखाता है मैंने विंडोज 7 जावा 1.8.0_31 और उबुंटू 14.04 प्लेटफार्मों को 1.8.0_45-बी 14 के साथ परीक्षण किया है।

यह केवल साबुन सेवाओं के लिए मामला लगता है, सरल HTML प्रदर्शन में कोई महत्वपूर्ण अंतर नहीं दिखाता है। कोई जानकारी है कि इसका कारण क्या हो सकता है?





spring-ws