2009-11-24 12 views
11

मुझे टॉमकैट वेब ऐप में लगातार फाइलों को कहां स्टोर करना चाहिए?टॉमकैट के साथ लगातार डेटा कहां/कैसे स्टोर करें?

  • javax.servlet.context.tempdir, संभव नहीं है जब एप्लिकेशन पुन: वितरित किया जाता है यह मिट रहा है/हटाया
  • उदा में एक पूर्ण पथ का उपयोग नहीं करना चाहते हैं सर्वलेट init
  • एक विकल्प
+2

मुझे लगता है कि आप डेटाबेस का उपयोग नहीं करना चाहते हैं? – Suppressingfire

+2

आपको यह बताना होगा कि डेटाबेस एक विकल्प क्यों नहीं है, वे इतने बुनियादी और आम हैं कि इसे अस्वीकार करने का मतलब निश्चित रूप से कुछ और चल रहा है। हो सकता है कि आप एक विशेष रूप से बाधित माहौल में हों, हमें इसके बारे में पता होना चाहिए। – Karl

+2

यह एक विकल्प नहीं है क्योंकि यह नहीं है। मैं यह समझाने के बारे में सोच सकता हूं कि कैसे इन बड़ी फ़ाइलों को विरासत बाहरी उपकरणों द्वारा संसाधित करने की आवश्यकता है जो डेटाबेस के बारे में कुछ भी नहीं जानते हैं, और उन्हें तुरंत डेटाबेस खींचने के लिए डेटाबेस में दिखाते हैं, इस समय कोई उद्देश्य नहीं है। इसके लिए और भी कुछ है, लेकिन इसके लिए मेरा शब्द लें :-) - – nos

उत्तर

9

हमारी टीम यह बहुत कुछ करती है। हमारे द्वारा अनुसरण किया जाने वाला एक सामान्य नियम वेब ऐप के बाहर और टॉमकैट के बाहर है।

हमारे sysadmin ने हमारे सर्वर पर एक निर्देशिका स्थापित की है कि टॉमकैट उपयोगकर्ता के पास अनुमतियां हैं (उदा। /var/tomcat/persist)। हमने इस के तहत एक निर्देशिका संरचना बनाई है कि टोमकैट फाइलों को स्टोर करने के लिए उपयोग करता है, ऐप-विशिष्ट इनिट फाइलें इत्यादि पढ़ता है।

यदि आप अपने सर्वलेट के लिए अपने इनिट-पैराम्स में एक पूर्ण पथ का उपयोग नहीं करना चाहते हैं, तो विचार करें टॉमकैट शुरू होने पर सिस्टम प्रॉपर्टी सेट करना। इसके बारे में अच्छी बात यह है कि टोमकैट के तहत चल रहे प्रत्येक एप्लिकेशन के पास इसका उपयोग होगा। इसके बारे में बुरी बात यह है कि टोमकैट के तहत चल रहे प्रत्येक एप्लिकेशन के पास इसका उपयोग होगा। आप base.persist.dir नाम की एक संपत्ति सेट कर सकते हैं और इसके नीचे प्रत्येक एप्लिकेशन के लिए उपनिर्देशिकाएं बना सकते हैं। हमने CATALINA_OPTS पर्यावरण परिवर्तक के तहत बिन/ निर्देशिका में setenv.sh स्क्रिप्ट में सिस्टम गुण सेट किए हैं।

5

प्रश्न के शीर्षक का उत्तर देना पैरामीटर एक डेटाबेस में फ़ाइलों को संग्रहीत करने नहीं है, क्या एक डेटाबेस एक DataSource और JDNI का उपयोग कर, के बारे में? यहां तक ​​कि वेब पर केवल संदर्भ में, java.io का उपयोग कर फ़ाइलों को लिखना वास्तव में समेकन, थ्रेडिंग, सुरक्षा, क्लस्टरिंग, पोर्टेबिलिटी समस्याओं के कारण अनुशंसित नहीं है। इनमें से कुछ समस्याएं "कामकाजी" हो सकती हैं लेकिन फिर भी, यह वास्तव में एक सर्वोत्तम अभ्यास नहीं है। मानक दृष्टिकोण डेटाबेस का उपयोग करना है और मैं इस विकल्प पर पुनर्विचार करने का सुझाव दूंगा, "फ़ाइल-आधारित" लाइटवेट डेटाबेस जैसे एचएसक्यूएलबीडी या जावाडीबी को मिश्रण में फेंकना।

(संपादित करें: एक अज्ञात कारण से, डेटाबेस एक विकल्प नहीं है JNDI या संदर्भ पैरामीटर या init पैरामीटर का उपयोग करना एक पूर्ण पथ पारित करने के लिए - जो कम बदतर विकल्पों IMHO कर रहे हैं - भी बाहर रखा गया है एक रिश्तेदार के लिए।। पथ, शायद user.home या user.dir पर देखें - या किसी अन्य सिस्टम प्रॉपर्टी जिसे आप कमांड लाइन पर पारित कर सकते हैं। मुझे यह पसंद नहीं है, मैं यह नहीं करूँगा, और इससे पहले बताए गए मुद्दों को हल नहीं किया जाता है, लेकिन यह आपकी पसंद है।)

+0

Claridfied। डेटाबेस एक विकल्प नहीं है। – nos

0

मैं आम तौर पर लगातार डेटा स्टोर करने और डेटासोर्स के माध्यम से इसे बेनकाब करने के लिए डेटाबेस का उपयोग करने का सुझाव दूंगा।

यदि आप ऐसा नहीं करना चाहते हैं, तो मुझे लगता है कि आप "user.home" सिस्टम प्रॉपर्टी का उपयोग करने पर विचार कर सकते हैं (मैंने इसे कुछ परिस्थितियों में उपयोग किया है)। लेकिन ... इस बात की कोई गारंटी नहीं है कि आपका सर्वलेट तब तक पहुंचने के लिए अनुमति के साथ चलाया जाएगा जब तक आप इसे स्वयं कॉन्फ़िगर नहीं करते।

4

टॉमकैट चलाने वाले उपयोगकर्ता की होम निर्देशिका के तहत वेबपैप निर्देशिका में फ़ाइलों को संग्रहीत करना एक अच्छा और सुविधाजनक विकल्प है। यह टोमकैट के बाहर है, जिसका अर्थ है कि यह पुनर्वितरण में टिकेगा, और यह आमतौर पर एक लिखने योग्य निर्देशिका है (क्योंकि यह उपयोगकर्ताओं के घर डीआईआर के तहत बनाया गया है)। लेकिन सिस्टम प्रॉपर्टी के माध्यम से ऐसी निर्देशिका के स्थान को ओवरराइड करने की अनुमति देना हमेशा अच्छा विचार है।

1

आम तौर पर, यह डेटाबेस पर जाएगा।

  • फ़ाइल पथ जो जाना जाता है: ${user.home}/.myapp लेकिन चूंकि ओपी एक डेटाबेस का उपयोग नहीं पर जोर देते हैं, मैं एक अलग दृष्टिकोण की कोशिश होगी। कभी-कभी एप्लिकेशन इसका उपयोग उदाहरण के लिए करते हैं। खोज सूचकांक जिन्हें डेटाबेस में डेटा के आधार पर पुन: गणना किया जा सकता है। उपयोगकर्ता के घर का उपयोग करने के लिए अपने उपयोग के मामले के लिए ठीक हो सकता है।
  • कॉन्फ़िगर करने योग्य फ़ाइल सिस्टम पथ को कॉन्फ़िगरेशन रिपोजिटरी जैसे डेटाबेस या शायद जावा प्राथमिकताएं (यदि आप सर्वलेट इनिट पैराम का उपयोग करना पसंद नहीं करते हैं) में स्टोर करें। एटलसियन जेरा जैसे वाणिज्यिक अनुप्रयोग कॉन्फ़िगर करने योग्य (लेकिन पूर्ण) फाइल सिस्टम पथ का उपयोग करते हैं जहां वे समस्या संलग्नक संग्रहीत करते हैं। अगर वे एक बेहतर तरीके से नहीं जानते हैं, तो मुझे नहीं पता कि कौन करता है :)
+0

tomcat7 (कम से कम उबंटू पर) $ {user.home} पर लिखने के परिणामस्वरूप अनुमतियों के कारण IOException होगा। – Jonathan

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