2011-06-21 17 views
8

क्या जेटी में एक डब्ल्यूएआर फ़ाइल में एकाधिक संदर्भ पैथ मैप करना संभव है? उदाहरण के लिएमैं जेटी में एक ही युद्ध फ़ाइल में एकाधिक संदर्भों को कैसे मैप कर सकता हूं?

${jetty.home}/webapp/bookstore.war 

और फिर मैं इस युद्ध को इंगित करने वाले दो अलग-अलग संदर्भों को देखना चाहता हूं। कुछ कॉन्फ़िगरेशन अंतर होने का कारण यह निर्भर करता है कि कौन सा यूआरएल पहुंचा है।

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/magazines</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/bookstore.war</Set> 
</Configure> 

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/books</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/bookstore.war</Set> 
</Configure> 
+0

मान लिया जाये कि आप लागू कर सकते हैं एकाधिक संदर्भों में एक एकल युद्ध फ़ाइल, आप विभिन्न कॉन्फ़िगरेशन कैसे लोड कर रहे हैं? पथ के आधार पर? क्या होगा यदि उपयोगकर्ता http: // myhost/magazines /../ books/... जैसे यूआरएल में प्रवेश करता है? – mrk

+1

ऐसा लगता है कि आप जेटी को यातायात के लिए टॉमकैट कनेक्टर का उपयोग करके अपाचे फ्रंट एंड के माध्यम से मतभेदों को संभालने का प्रयास करना बेहतर हो सकते हैं। – Griff

उत्तर

0

आप बस युद्ध फ़ाइल की प्रतिलिपि बना सकते हैं और इसका नाम बदल सकते हैं।

3

यहां बताया गया है कि मैंने यह कैसे किया, और मुझे प्रत्येक साइट के लिए अलग-अलग SSL certs भी सेट किए गए (दिखाया नहीं गया)। मैं जो कुछ जानता हूं उसे समझने का दावा नहीं करता लेकिन यह कई प्रतिष्ठानों में मेरे लिए काम कर रहा है। आपको प्रत्येक उदाहरण के लिए "jetty.xml" और "contexts.xml" फ़ाइल की आवश्यकता है।

मान लें घाट/opt/जेट्टी ...

लॉन्च स्थापित किया गया है सर्वर jetty.xml के दो संस्करणों (यह, एकल स्क्रिप्ट में किया जा सकता दिखाया गया है, या दो अलग-अलग में संदर्भित के दो उदाहरणों लांच स्क्रिप्ट)

start.sh ...

cd /opt/Jetty 
java -jar start.jar etc/jetty.xml etc/jetty2.xml 

आप एकाधिक आईपी के आप प्रत्येक घाट के कनेक्टर अनुभाग में विभिन्न आईपी के या होस्टनाम निर्दिष्ट करने के लिए context.xml फ़ाइलों का उपयोग कर सकते हैं के साथ एक सर्वर है, तो। एक्सएमएल फ़ाइल। यदि आपके पास केवल एक आईपी है, तो आप दो उदाहरणों के बीच अंतर करने के लिए संदर्भ xml में संदर्भ पथ सेटिंग का उपयोग करेंगे।

jetty.xml में

, आईपी या मेजबान, और निर्देशिका का उल्लेख 1 उदाहरण के लिए context.xml को रोकने के लिए:,

<Call name="addConnector"> 
    <Arg> 
     <New class="org.mortbay.jetty.nio.SelectChannelConnector"> 
     <Set name="host">HOST OR IP FOR FIRST INSTANCE</Set> 
     <Set name="port"><SystemProperty name="jetty.port" default="80"/></Set> 
     <Set name="maxIdleTime">30000</Set> 
     <Set name="Acceptors">2</Set> 
     <Set name="statsOn">false</Set> 
     <Set name="confidentialPort">443</Set> 
     <Set name="lowResourcesConnections">5000</Set> 
     <Set name="lowResourcesMaxIdleTime">5000</Set> 
     </New> 
    </Arg> 
</Call> 
<Call name="addLifeCycle"> 
    <Arg> 
    <New class="org.mortbay.jetty.deployer.ContextDeployer"> 
     <Set name="contexts"><Ref id="Contexts"/></Set> 
     <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts/directory_for_FIRST_instance</Set> 
     <Set name="scanInterval">5</Set> 
    </New> 
    </Arg> 
</Call> 
jetty.xml में

को देखें आईपी ​​या मेजबान, और निर्देशिका 2 उदाहरण के लिए context.xml को रोकने के लिए:

<Call name="addConnector"> 
    <Arg> 
     <New class="org.mortbay.jetty.nio.SelectChannelConnector"> 
     <Set name="host">HOST OR IP FOR SECOND INSTANCE</Set> 
     <Set name="port"><SystemProperty name="jetty.port" default="80"/></Set> 
     <Set name="maxIdleTime">30000</Set> 
     <Set name="Acceptors">2</Set> 
     <Set name="statsOn">false</Set> 
     <Set name="confidentialPort">443</Set> 
     <Set name="lowResourcesConnections">5000</Set> 
     <Set name="lowResourcesMaxIdleTime">5000</Set> 
     </New> 
    </Arg> 
</Call> 
<Call name="addLifeCycle"> 
    <Arg> 
    <New class="org.mortbay.jetty.deployer.ContextDeployer"> 
     <Set name="contexts"><Ref id="Contexts"/></Set> 
     <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts/directory_for_SECOND_instance</Set> 
     <Set name="scanInterval">5</Set> 
    </New> 
    </Arg> 
</Call> 

यदि ऊपर दिखाए गए अनुसार परिभाषित किया गया है, तो आप युद्ध फ़ाइल को पुनः लोड कर सकते हैं और संदर्भ xml फ़ाइल को स्पर्श करके एप्लिकेशन को पुनरारंभ कर सकते हैं।

संदर्भ निर्देशिका की अलग-अलग उप-निर्देशिकाओं में अलग संदर्भ फ़ाइलों को रखें, प्रत्येक एक ही युद्ध फ़ाइल को इंगित करता है, लेकिन विभिन्न संदर्भ पथ और विभिन्न वर्चुअल होस्ट के साथ।

/opt/Jetty/contexts/subdirectory_for_first_instance/context_first.xml
/opt/Jetty/contexts/subdirectory_for_second_instance/context_second.xml

context_first.xml में

- यदि आप एक नोड (firstapp) निर्दिष्ट कर सकते हैं कि हमेशा होगा अपने पहले ऐप से लिंक

<Set name="contextPath">/firstapp</Set> 

संदर्भ_सेकंड में लिंक।एक्सएमएल - यदि आप एक नोड (firstapp) कि हमेशा अपने दूसरे एप्लिकेशन से लिंक करेगा निर्दिष्ट कर सकते हैं

<Set name="contextPath">/secondapp</Set> 

(ऊपर आवश्यक (दो अलग संदर्भ पथ है) करता है, तो आप उन्हें एक ही आईपी से चलाना चाहते हैं, मेरा मानना ​​है)

फिर दो आभासी मेजबान को परिभाषित अलग संदर्भ फ़ाइलों में (यूआरएल जो ब्राउज़र द्वारा किया जा रहा है नक्शा चाहिए):
context_first.xml में:

<Set name="virtualHosts"> 
    <Array type="String"> 
    <Item>www.my_first_app.com</Item> 
    </Array> 
</Set> 

और context_second.xml

में
<Set name="virtualHosts"> 
    <Array type="String"> 
    <Item>www.my_second_app.com</Item> 
    </Array> 
</Set> 

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

पहुँचा जा सकता है कर सकते हैं

इसके अलावा, और महत्वपूर्ण बात यह है कि आप अपने आवेदन में संदर्भ पैरामीटर भेज सकते हैं ताकि यह निर्धारित हो सके कि यदि आवश्यक हो तो यह कौन सा उदाहरण है।

संदर्भ मानकों का उदाहरण प्रत्येक उदाहरण के लिए अद्वितीय मान भेजने का:

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<!-- Custom context configuration         --> 
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
<Set name="initParams"> 
    <New class="java.util.HashMap"> 
    <Put name="customer">Joes Fish Store</Put> 
    <Put name="ShowPanelNames">N</Put> 
    <Put name="FiscalYearStartMonth">10</Put> 
    <Put name="LiveEmail">Y</Put> 
    </New> 
</Set> 
+0

बहुत अच्छी तरह से समझाया समाधान – Kyle

0

मुझे पता है यह पुराना है, लेकिन वास्तव में इस सवाल का जवाब नहीं है प्रदान की जवाब, भविष्य में संदर्भ के लिए आप एक से अधिक WebappContext रों प्राप्त कर सकते हैं के बाद से id विशेषता Configure पर जोड़कर उसी .war का उपयोग कर।

<Configure id="magazinesContext" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/magazines</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/bookstore.war</Set> 
    <Set name="extractWAR">true</Set> 
</Configure> 

<Configure id="booksContext" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/books</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/bookstore.war</Set> 
    <Set name="extractWAR">true</Set> 
</Configure> 

नोट तथापि संदर्भ में परिभाषित सभी नामकरण संसाधन या तो संदर्भ

<Arg> 
    <Ref id="magazinesContext" /> 
</Arg> 

का उपयोग कर देना चाहिये कि तो तुम के संदर्भ में DBCP पूलिंग संसाधन "pg_conn", Arg बिना अगर WebappContext की आईडी (इस मामले में या तो "पत्रिकाएंटेन्स्ट" या "किताबेंटेक्स्ट") संसाधन वैश्विक रूप से परिभाषित किया जाएगा, यानि अंतिम वेबएप कॉन्टेक्स्ट लोड जीत जाएगा। उदाहरण के लिए

लें निम्नलिखित WebappContext परिभाषा जहां "pg_conn" विश्व स्तर पर परिभाषित किया गया है:

<Configure id="magazinesContext" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/magazines</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/bookstore.war</Set> 
    <Set name="extractWAR">true</Set> 
    <New id="pg_conn" class="org.mortbay.jetty.plus.naming.Resource"> 
     <Arg>jdbc/db</Arg> 
     <Arg> 
      <New class="org.apache.commons.dbcp.BasicDataSource"> 
       <Set name="driverClassName">org.postgresql.Driver</Set> 
       <Set name="url">jdbc:postgresql://localhost:5432/test_db</Set> 
       <Set name="username">test</Set> 
       <Set name="password">*****</Set> 
      </New> 
     </Arg> 
    </New> 
</Configure> 

और यह एक है, जहां यह WebappContext के उदाहरण के लिए परिभाषित किया गया है:

<Configure id="magazinesContext" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/magazines</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/bookstore.war</Set> 
    <Set name="extractWAR">true</Set> 
    <New id="pg_conn" class="org.mortbay.jetty.plus.naming.Resource"> 
     <Arg> 
      <Ref id="magazinesContext" /> 
     </Arg> 
     <Arg>jdbc/db</Arg> 
     <Arg> 
      <New class="org.apache.commons.dbcp.BasicDataSource"> 
       <Set name="driverClassName">org.postgresql.Driver</Set> 
       <Set name="url">jdbc:postgresql://localhost:5432/test_db</Set> 
       <Set name="username">test</Set> 
       <Set name="password">*****</Set> 
      </New> 
     </Arg> 
    </New> 
</Configure> 
संबंधित मुद्दे

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