2012-05-22 17 views
6

मैं जानना चाहता हूं कि सिस्टम प्रॉपर्टी कब बदली जाती है। मेरे पास एक एप्लिकेशन सर्वर है, जो किसी भी तरह से एक सिस्टम प्रॉपर्टी बदल रहा है (System.setProperty() मुझे लगता है)। मैं एक बार देख ले रहा था और मैं अलग दृष्टिकोण पाया है:जावा सिस्टम प्रॉपर्टी बदल गई है या नहीं, इसका पता कैसे लगाया जाए?

  1. JPDA?
  2. Observer & Observable?
  3. Property change listener?
  4. JMX?

कोई सुझाव? अग्रिम में धन्यवाद।

+0

आपने जेएमएक्स का उल्लेख किया है। क्या आप अपने आवेदन के बाहर से संपत्ति का पता लगाने की कोशिश कर रहे हैं? – Gray

+1

आप एक सुरक्षा प्रबंधक/नीति के साथ चलने का प्रयास कर सकते हैं जो परिवर्तनों को प्रतिबंधित करता है और देखता है कि 'विभाजन क्या होता है। – bmargulies

+1

आपको यह जानने की आवश्यकता क्यों है कि सिस्टम प्रॉपर्टी बदल दी गई है या नहीं? यदि आपको सिंक्रोनस अधिसूचना की आवश्यकता नहीं है, तो समय-समय पर जांचने के लिए अनुसूचित थ्रेड क्यों न करें? (सबसे आसान चीज जो काम कर सकती है?) –

उत्तर

5

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

MyProperties newProps = new MyProperties(System.getProperties()); 
System.setProperties(newProps); 

फिर, केवल उन गुणों का एक उप-वर्ग लिखें जो प्रासंगिक तरीकों को हुक करता है।

+0

धन्यवाद jtahlborn! हां, क्या आप किसी तरह के सजावट में सोच रहे हैं (जैसे HttpServletRequestWrapper HttpServletRequest के लिए)? बात यह है कि आवेदन को मेरे कार्यान्वयन का आह्वान करना चाहिए ... – Gaucho

+1

@ गौचो - इसे वास्तव में सजावटी होने की आवश्यकता नहीं है। एक साधारण उप-वर्ग जो आपके द्वारा की जाने वाली विधियों को ओवरराइड करता है, आपको बस इतना ही चाहिए। आपको बस अपने सिस्टम में मौजूदा सिस्टम गुणों की प्रतिलिपि बनाने की आवश्यकता है। – jtahlborn

+0

mmm, रोचक, और मैं कैसे कर सकता हूं कि एप्लिकेशन मेरे कार्यान्वयन को डिफ़ॉल्ट रूप से लागू करता है? धन्यवाद! – Gaucho

1

यदि आप मुख्य रूप से इस मुद्दे को ढूंढना चाहते हैं, तो मैं इसके लिए SecurityManager का उपयोग करने पर विचार करूंगा। इसमें checkPropertiesAccess() और checkPropertyAccess() उपलब्ध कुछ विधियां उपलब्ध हैं, जो दिखती हैं कि वे आपको समस्या को हल करने में मदद करेंगे, लेकिन यह आवश्यक नहीं है कि 'सिस्टम प्रॉपर्टी बदलने पर आपको सूचित करें'।

+0

धन्यवाद निकोलस! हां, यह मेरा पहला प्रयास था: {securityManager.checkPermission (new propertyPermission ("javax.xml.parsers.DocumentBuilderFactory", "लिखें") का प्रयास करें);} पकड़ें (सुरक्षा अपवाद सुरक्षा अपवाद) {.../... लेकिन आपको आवश्यकता है पहले एक सुरक्षा प्रबंधक बनाने के लिए। Http://stackoverflow.com/questions/10624468/deny-jvm-system-property-write देखें – Gaucho

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

  • कोई संबंधित समस्या नहीं^_^