2013-01-31 17 views
5

Designing J2EE Applications for Real-Life Clustered Environmentsजावा क्लस्टर वातावरण में स्थिर चर

इस लेख ने कहा कि क्लस्टर वातावरण में जावा स्थिर चर का उपयोग नहीं कर सकते, लेकिन हम सुविधा की तरह स्थिर चर का उपयोग करना चाहते हैं (मूल्य का केवल एक प्रतिलिपि एक क्लस्टर में सभी वस्तु द्वारा साझा आवेदन) हम क्या उपयोग करना चाहिए?

+0

ध्यान दें कि यह आलेख 2004 में लिखा गया था, जबकि कुछ सामग्री अभी भी सत्य है, मैं इसे संदर्भ के रूप में उपयोग नहीं करता। –

+0

आप अपरिवर्तनीय आंतरिक वर्ग को "ऑब्जेक्ट द्वारा साझा किए गए मूल्य की केवल एक प्रति" के रूप में मानना ​​चाहेंगे " यदि साझा स्थिति कुछ मूल डेटा प्रकार हैं, तो अंतिम उदाहरण चर आपकी आवश्यकता में फिट होना चाहिए। – spiritwalker

+1

यदि आपके डेटा ऑपरेशन के दौरान नहीं बदला जाता है (उदा। आपने कुछ प्रॉपर्टी फ़ाइल लोड की है) तो आप 'स्थिर' का उपयोग कर सकते हैं। एकमात्र कमी यह है कि आपको दो बार प्रारंभ करना होगा (प्रत्येक JVM के लिए एक बार)। यदि डेटा बदल रहा है, तो आपको परिवर्तनों का ट्रैक रखने के लिए कुछ प्रतिकृति विधि का उपयोग करना होगा, या डेटाबेस, मेमकैच इत्यादि जैसे "सत्य का एकल स्रोत" होना चाहिए। – gaborsch

उत्तर

4

एक स्थैतिक चर केवल एक जावा वर्चुअल मशीन द्वारा प्राप्त किया जा सकता है, जो एक वर्ग लोडर से भरा हुआ है। यदि आपको यह मान कई JVM में साझा करने की आवश्यकता है, तो आप डेटाबेस, कैश (memcached, redis), या किसी अन्य बाहरी सिस्टम का उपयोग कर सकते हैं।

+0

हम हमेशा क्लस्टर पर्यावरण में सार्वजनिक स्टेटिक फाइनल संशोधक का उपयोग करके स्थिरांक घोषित करते हैं, हमें इसका निरंतर घोषणा करने के लिए उपयोग नहीं करना चाहिए क्योंकि केवल एक JVM इस स्थिरता तक पहुंच सकता है? – user1169587

+1

आपको स्थिरांक के साथ समस्या नहीं होगी (आपके पास प्रत्येक नोड में निरंतर की "प्रतिलिपि" होगी), लेकिन जब आपके पास "स्थैतिक" चर (अंतिम नहीं) होता है, तो इसे संशोधित किया जा सकता है, और उसी मूल्य का होगा प्रत्येक वर्ग से प्रत्येक पढ़ने के लिए (धागे के साथ काम करते समय यह हमेशा सत्य नहीं होता है, जो स्थानीय रूप से मूल्य की प्रतिलिपि बना सकता है), लेकिन केवल एक JVM से। यदि आपके पास एक वितरित एप्लिकेशन (उदाहरण के लिए रिमोट ईजेबी) है, तो आप उस JVM में "स्थानीय रूप से" मान को संशोधित करेंगे (प्रत्येक JVM में शायद संशोधित नहीं किया जाएगा (शायद विभिन्न होस्ट मशीनों में भी)। – greuze

0

आप इसे बीन @javax.enterprise.context.ApplicationScoped के साथ बनाने की कोशिश कर सकते हैं।

मैंने यह कोशिश नहीं की है, लेकिन ऐसा लगता है कि ग्लासफ़िश 3.1 को इसका समर्थन करना चाहिए (कम से कम प्रलेखन इसे अस्वीकार नहीं करता है)।

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