2010-02-03 10 views
10

मेरे पास एक मेवेन प्रोजेक्ट है जो प्री-इंटीग्रेशन-टेस्ट (जुनीट टेस्ट) के लिए टॉमकैट कंटेनर शुरू करता है। मेरे अधिकांश परीक्षणों की आवश्यकता है कि परीक्षण के तहत वेब-एप्लिकेशन पुनरारंभ हो। इसलिए प्रत्येक jUnit परीक्षण निष्पादित होने से पहले मैं टॉमकैट कंटेनर को पुनरारंभ करना चाहता हूं।जावा के साथ टॉमकैट कंटेनर कैसे शुरू करें और रोकें?

के रूप में अब मैं माल maven2-प्लगइन का उपयोग बिल्ला कंटेनर कॉन्फ़िगर करने के लिए।

इसलिए, यह शुरू करने और एक जावा बयान के साथ कंटेनर को रोकने के लिए संभव है?

+1

क्या आप वाकई कंटेनर को पुनरारंभ करने की आवश्यकता है और न केवल वेबपैड को पुनः लोड करें? –

उत्तर

14

तो, है जावा स्टेटमेंट के साथ कंटेनर को शुरू करना और रोकना संभव है?

आपका उपयोग केस बेहद अजीब लग रहा है (परीक्षणों के बीच कंटेनर को पुनरारंभ करना है) लेकिन चलो इस पर चर्चा नहीं करते हैं। अपने प्रश्न का उत्तर देने के लिए, हाँ यह संभव है और यह Cargo के जावा एपीआई का उपयोग करके किया जा सकता है।

एक बिलाव कंटेनर शुरू करने और अपने युद्ध की तैनाती के लिए, आपको setUp() विधि में कुछ इस तरह कर सकते हैं:

// (1) Optional step to install the container from a URL pointing to its distribution 
Installer installer = new ZipURLInstaller(new URL("http://www.apache.org/dist/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip")); 
installer.install(); 

// (2) Create the Cargo Container instance wrapping our physical container 
LocalConfiguration configuration = (LocalConfiguration) new DefaultConfigurationFactory() 
     .createConfiguration("tomcat6x"), ContainerType.INSTALLED, ConfigurationType.STANDALONE); 
container = (InstalledLocalContainer) new DefaultContainerFactory() 
     .createContainer("tomcat6x", ContainerType.INSTALLED, configuration); 
container.setHome(installer.getHome()); 

// (3) Statically deploy some WAR (optional) 
WAR deployable = new WAR("./webapp-testing-webapp/target/webapp-testing-webapp-1.0.war"); 
deployable.setContext("ROOT"); 
configuration.addDeployable(deployable); 

// (4) Start the container 
container.start(); 

और tearDown() विधि में इसे रोकने के।

// (6) Stop the container 
container.stop(); 
+0

धन्यवाद, इसके लिए कार्गो के बारे में नहीं सोचा था। –

+0

@ विनीगर प्लगइन के माध्यम से कार्गो का उपयोग करना अधिक सामान्य है (कम से कम मुझे ऐसा लगता है) लेकिन वास्तव में कार्गो * वास्तव में एक जावा एपीआई है। और यह आसान हो सकता है (अधिक से अधिक कंटेनर एक एम्बेडेड एपीआई प्रदान करते हैं लेकिन कार्गो एपीआई "एकीकृत" है)। –

+0

हां, मैं सहमत हूं। धन्यवाद। –

1

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

अपने प्रश्न का उत्तर देने के लिए, आप सिस्टम कॉल का उपयोग कर प्रासंगिक .sh या .bat फ़ाइलों को निष्पादित कर सकते हैं। नीचे की तरह कुछ,

Runtime r = Runtime.getRuntime(); 
Process p = r.exec("start.sh"); 
p.waitFor(); 
5

bootstrap.jar और अपने classpath को बिल्ला \ बिन और निम्नलिखित स्निपेट में मदद मिल सकती से कॉमन्स-प्रवेश-api-1.1.1,

Bootstrap bootstrap=new Bootstrap(); 
bootstrap.setCatalinaHome("D:/apache-tomcat-5.5.28"); 

bootstrap.start(); 

Thread.sleep(60000); 

bootstrap.stop(); 
2

मैं उपयोग कर रहा हूँ विधि का पालन:

private static final String TOMCAT = "D:/test_tomcat"; 
@BeforeClass 
public static void runTomcat() { 
    bootstrap = new Bootstrap(); 
    bootstrap.setCatalinaHome(TOMCAT); 
    try { 
     bootstrap.start();   
    } catch (Exception e) { 
     e.printStackTrace(); 
     fail("Не удалось запустить Tomcat"); 
    } 
} 

@AfterClass 
public static void stopTomcat() { 
    try { 
     bootstrap.stop(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

लेकिन है विधि एक एक समस्या है - मैं 'webapps' निर्देशिका में युद्ध फाइल कॉपी हर बार परिवर्तन स्रोत कोड है की जरूरत है। मुझे लगता है कि वेब-इंफ में क्लासपाथ से मेरी कक्षा की प्रतिलिपि बनाएँ और वेब-इंफ/lib में क्लासपाथ से 'jar' कॉपी करें।

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