2009-10-05 3 views
7

मेरे पास एक .war फ़ाइल के लिए एक स्रोत पेड़ है जिसे मुझे संशोधित करने की आवश्यकता है ताकि मैं कुछ एप्लिकेशन-विशिष्ट कॉन्फ़िगरेशन जानकारी जोड़ सकूं (इस मामले में एक jdbc कनेक्शन स्ट्रिंग, लेकिन मेरे पास अन्य गुण-जैसे संसाधन हो सकते हैं)। कॉन्फ़िगरेशन जानकारी कहां रखनी है और सर्वलेट के भीतर से इसका उपयोग कैसे करें, इसके लिए सर्वोत्तम प्रथाएं क्या हैं?जहां/कैसे टोमकैट .war फाइलों के लिए कॉन्फ़िगरेशन संसाधनों को सेट अप करें

मुझे लगता है कि यह Tomcat configuration reference है इसके साथ कुछ करने के लिए है, लेकिन जब मैं इसे पढ़ने की कोशिश करता हूं तो मेरी आंखें चमकती हैं।

उत्तर

4

जेडीबीसी कनेक्शन स्ट्रिंग के विशिष्ट मामले के लिए, मैं इसके बजाय एक टोमकैट-प्रबंधित कनेक्शन पूल का उपयोग करने की अनुशंसा करता हूं। आप इसे यहां करने के बारे में और अधिक पढ़ सकते हैं: http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html

यह अधिक काम है, लेकिन मुझे लगता है कि लंबे समय तक यह आपको बेहतर सेवा प्रदान करेगा।

+0

धन्यवाद ...आप शायद लंबे समय तक चलने के बारे में सही हैं, लेकिन शायद यह एकमात्र टॉमकैट ऐप है जो मैं लंबे समय तक काम कर रहा हूं + मेरे पास अपने आवेदन को ट्विक करने के बारे में जानने के लिए बहुत अधिक समय नहीं है। अपाचे दस्तावेज़ बहुत स्पष्ट नहीं हैं। –

+0

यह मेरे बालों को खींचने में समय बिताने के बाद अब थोड़ा और समझ में आता है (हां ...) और JIRA server.xml को देखने के बाद। मैं अपने जावा ऐप के भीतर से डेटासोर्स का उपयोग कैसे करूं? उदाहरण पृष्ठ जेएसपी का एक उदाहरण देता है लेकिन जावा कोड का नहीं। –

+0

उनमें कुछ उदाहरण आगे शामिल हैं (उदा। पोस्टग्रेएसक्यूएल अनुभाग, चरण 4 में)। –

5

वेब ऐप कॉन्फ़िगरेशन के लिए आप क्लासपाथ पर कॉन्फ़िगर कहीं भी रख सकते हैं। तो फिर तुम getResourceAsStream के साथ अपने आवेदन से यह करने के लिए प्राप्त कर सकते हैं या यदि आप वसंत पसंद करते हैं:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
    <list> 
     <value>classpath:my-config.properties</value> 
    </list> 
    </property> 
</bean> 

स्थानों के एक नंबर पर आप बिलाव में classpath पर गुण डाल सकते हैं।

/WEB-INF/classes of your web application 
/WEB-INF/lib/*. jar of your web application 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/i18n/*.jar 
$CATALINA_HOME/common/lib/*. jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar 

उदाहरण के लिए, यदि आप वेब-INF/वर्गों में से एक एक .jar फ़ाइल में और वेब-INF/वर्गों में दोनों my-config.properties डाल उपयोग किया जाएगा: क्रम में उस पर लग रहा है। आप प्रोजेक्ट का परीक्षण करने के लिए डिफ़ॉल्ट रूप से इस तंत्र का उपयोग कर सकते हैं और प्रोड सर्वर पर प्रोड कॉन्फ़िगर ओवरराइड कर सकते हैं।

+0

इसके विपरीत क्या है? यदि मैं वेब एप्लिकेशन के अंदर एक प्रॉपर्टी फ़ाइल रखना चाहता हूं तो बस टॉमकैट को नहीं मिला। क्या ऐसा करने के लिए कोई रास्ता है? – enkara

+0

क्या आपके वेब एप्लिकेशन के अंदर WEB_INF/कक्षाएं नहीं हैं? – leonm

1

हम्म। ऐसा लगता है कि एप्लिकेशन के जावा पक्ष पर जो कुछ भी मैं चाहता हूं उसे प्राप्त करने का सबसे आसान तरीका Servlet.getServletConfig().getInitParameter(parameterName) उदा। getInitParameter ("myApp.connectionString");

लेकिन मुझे नहीं पता कि यह कहां सेट करना है। Tomcat docs context.xml के विभिन्न क्रमिकताओं के बारे में बात करते हैं लेकिन मैं यह सुनिश्चित करना चाहता हूं कि यह पैरामीटर केवल मेरे सर्वलेट को प्रभावित करता है और किसी अन्य को नहीं। मैं इसे अपनी .war फ़ाइल में भी नहीं ढूंढना चाहता हूं ताकि मैं इस पैरामीटर को एप्लिकेशन से स्वतंत्र रख सकूं (उदाहरण के लिए यदि मैं अपग्रेड इंस्टॉल करता हूं)।


अद्यतन: मैं इसे समझ से बाहर, ServletContext.getInitParameter() द्वारा पहुँचा जा सकता कुंजी/मान पैरामीटर यहाँ जाना (या यहां जा सकते हैं) में $ {CATALINA_HOME} /conf/server.xml:

<Server port=... > 
    ... 
    <Service name="Catalina" ...> 
    <Engine name="Catalina" ...> 
     ... 
     <Host name="localhost" ...> 
     <Context path="/myWarFile"> 
      <Parameter name="foo" value="123" /> 
      <Parameter name="bar" value="456" /> 
      ... 
     </Context> 
     </Host> 
    </Engine> 
    </Service> 
</Server> 

यह सर्वलेट myWarFile.war (या URL पथ /myWarFile के साथ अधिक सटीक रूप से) के लिए दो पैरामीटर, "foo" = "123", "bar" = "1236" सेट करता है (और मैं उन्हें Servlet.getServletConfig().getInitParameter("foo") या Servlet.getServletConfig().getInitParameter("bar") के साथ जावा में प्राप्त कर सकता हूं।

मैं भी JIRA के server.xml प्रविष्टि (और what they tell you to set it to for MySQL) को देखा है, वे इस बात का बारीकियों की काफी यकीन नहीं बल्कि एक Parameter की तुलना में एक Resource उपयोग करते हैं, लेकिन ऐसा लगता है जैसे कि यह अधिक उपयुक्त तरीका हो सकता है।

<Server port=... > 
    <Service name="Catalina" ...> 
    <Engine name="Catalina" ...> 
     <Host name="localhost" ...> 
     <Context path="/jira" docBase="${catalina.home}/atlassian-jira" 
      reloadable="false"> 
      <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource" 
      username="jirauser" 
      password="..." 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/jiradb1?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8" 
      maxActive="20" 
      validationQuery="select 1" 
      /> 
     </Context> 
     </Host> 
    </Engine> 
    </Service> 
</Server> 
+0

उन पैरामीटर को web.xml फ़ाइल के सर्वलेट टैग के अंदर कॉन्फ़िगर किया गया है, इनिट-पैरा, पैराम-नाम और पैरा-वैल्यू का उपयोग कर। http://www.orionserver.com/docs/web.xml.html – rodrigoap

+1

* कौन सा * web.xml फ़ाइल? मेरी .war फ़ाइल में या $ {CATALINA_HOME}/conf में? यदि पूर्व में, मुझे ऐसा करने की ज़रूरत नहीं है, अगर बाद में मैं उपयुक्त वाक्यविन्यास को समझ नहीं पा रहा हूं। –

1

आप "आम" classloader common.loader में अपने CATALINA_HOME/conf/catalina.properties में अपने गुण फ़ाइलों के लिए पथ जोड़ सकते हैं।

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