2013-04-13 12 views
10

सेवा को कैसे शुरू करें, मुझे पता है कि कोई new MyService().run(args) का उपयोग करता है। इसे कैसे रोकें?ड्रॉपवार्डर: सेवा प्रोग्रामेटिक रूप से

मुझे अपने परीक्षणों में setUp() और tearDown() के लिए प्रोग्रामेटिक रूप से प्रारंभ और बंद करने की आवश्यकता है।

उत्तर

1

आप org.eclipse.jetty.server.Server की स्टॉप() विधि का उपयोग करने का प्रयास कर सकते हैं, जिसे आंतरिक रूप से ड्रॉपविज़ार्ड द्वारा उपयोग किया जाता है।

+0

क्या आप मुझे कुछ नमूना कोड पर इंगित कर सकते हैं? मुझे समझ में नहीं आता कि इसके बारे में कैसे जाना है। – Neo

12

परीक्षण समाप्त होने के बाद आप सेवा को नए थ्रेड में शुरू कर सकते हैं, सेवा स्वचालित रूप से बंद हो जाएगी।

हालांकि ड्रॉपविज़ार्ड 0.6.2 में शुरू होने से ड्रॉपविज़ार्ड-परीक्षण मॉड्यूल में junit rule इस उपयोग के मामले में बिल्कुल ठीक है (see here)। इस महान सुझाव के लिए

Class MyTest { 

    @ClassRule 
    public static TestRule testRule = new DropwizardServiceRule<MyConfiguration>(MyService.class, 
        Resources.getResource("service.yml").getPath())); 

    @Test 
    public void someTest(){ 
    .... 
+0

उन्होंने इस कक्षा को क्यों नहीं दस्तावेज किया है? (उदारवादी) आप इसके बारे में कैसे पता लगाया, @LiorH? (अशिष्ट नहीं) – DavidS

+0

हाँ, यह अजीब बात है कि यह दस्तावेज नहीं है, उम्मीद है कि इसे हटाया नहीं जा रहा है। काम पर किसी ने मुझे इस वर्ग की ओर इशारा किया, यह नहीं पता कि उसे यह कैसे मिला। – LiorH

+0

हाय @LiorH - आपको यहां देखकर अच्छा लगा! बहुत उपयोगी;) – Galz

3

धन्यवाद @LiorH: इस नियम के

प्रयोग कुछ इस तरह दिखेगा।

ड्रॉपविज़ार्ड-0.6.2 में DropwizardServiceRule का उपयोग करके एक पूर्ण परीक्षण कक्षा है।

पहले परीक्षण के लिए एक सेवा कॉन्फ़िगरेशन बनाएं: testing-server.yml और इसे टेस्ट के क्लास पथ (उदा। src\test\resources) में रखें।

class TheServiceTest { 

    @ClassRule 
    public static DropwizardServiceRule RULE = new DropwizardServiceRule<MyConfiguration>(TheService.class, 
      Resources.getResource("testing-server.yml").getPath()); 

    @Test 
    public void 
    dropwizard_gets_configured_correctly() throws Exception { 
     Client client = new Client(); 

     ClientResponse response = client.resource(
       String.format("http://localhost:%d/request", RULE.getLocalPort())) 
         .get(ClientResponse.class); 

     assertThat(response.getStatus(), is(200)); 
    } 
} 
:

http: 
    port: 7000 
    adminPort: 7001 

एक साधारण परीक्षण वर्ग कि अगर कोई स्थान "/ अनुरोध" पर एक संसाधन है की जाँच करता है इस तरह दिखता है: इस तरह आप परीक्षण सेवा का उपयोग करने के लिए विभिन्न बंदरगाहों सेट कर सकते हैं

यदि आपने नहीं पता कि कौन सा कार्यान्वयन चुनना है तो मैंने आयात भी जोड़ा है।

import com.google.common.io.Resources; 
import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.yammer.dropwizard.testing.junit.DropwizardServiceRule; 
import org.junit.ClassRule; 
import org.junit.Test; 
import org.junit.rules.TestRule; 

import static org.hamcrest.core.Is.is; 
import static org.junit.Assert.assertThat; 

परीक्षण के अंत में, सर्वर इच्छा बंद शान से, आप इसके बारे में चिंता करने की जरूरत नहीं है इसलिए।

0

या फिर आप अपने मुख्य/निर्माता में इस सुविधा का उपयोग जावा ...:

// In case jvm shutdown 
    Runtime.getRuntime().addShutdownHook(new Thread() { 
     @Override 
     public void run() 
     { 
      // what should be closed if forced shudown 
      // .... 

      LOG.info(String.format("--- End of ShutDownHook (%s) ---", APPLICATION_NAME)); 
     } 
    }); 
6

चारों ओर रखें environment चर और आपके आवेदन के लिए निम्न विधि जोड़ें:

public void stop() throws Exception { 
    environment.getApplicationContext().getServer().stop(); 
} 

आप कर सकते हैं अब सर्वर को रोकने के लिए myService.stop() पर कॉल करें।

+0

मुझे डीडब्ल्यू एप्लिकेशन को रोकने के लिए यह बहुत उपयोगी पाया गया है यदि यह विंडोज सेवा के रूप में चल रहा है (उदाहरण के लिए अपाचे कॉमन्स डेमन का उपयोग कर)। –

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