2009-05-04 15 views
8

का उपयोग कर मैं एक परियोजना के लिए आरएमआई का उपयोग कर रहा हूं जिसका मैं वर्तमान में काम कर रहा हूं और मैं एकाधिक होस्टों से एक ही आरएमआई रजिस्ट्री में बाध्य करना चाहता हूं।एकल आरएमआई रजिस्ट्री

हालांकि जब मैं ऐसा करने का प्रयास मैं कह एक त्रुटि

java.rmi.AccessException मिलती है: अनुमति नहीं Registry.Registry.bind; उत्पत्ति/1 9 2.168.0.9 गैर-स्थानीय होस्ट

मैंने इतना गुस्सा किया और ऐसा लगता है कि आरएमआई दूरस्थ मेजबान को डिफ़ॉल्ट रूप से बाध्यकारी से रोकता है, जो मैं जानना चाहता हूं, क्या इसे ओवरराइड करने या इसे छोड़ने का कोई तरीका है?

अगर कोई इस मुद्दे को दूर करने के बारे में कोई सुझाव देता है तो उनकी अत्यधिक सराहना की जाएगी, मैंने विभिन्न नीति फ़ाइलों का उपयोग करने और सुरक्षा प्रबंधक को ओवरराइड करने का प्रयास किया है लेकिन कोई भी काम नहीं कर रहा है।

उत्तर

0

हर किसी के लिए धन्यवाद समाधान मैं साथ में अंत Cajo Framework इस वितरण के लिए एक बहुत लचीला प्रणाली देता है का उपयोग किया गया आया जवाब देती है और मुझे के रूप में मैं फिट देखा रजिस्ट्री को संभालने के लिए के लिए यह अनुमति दी। यह एनएटी, फ़ायरवॉल और HTTP प्रॉक्सी के पीछे भी काम कर सकता है, जो बहुत उपयोगी है।

मेरा मानना ​​है कि rndm.buoy द्वारा सुझाए गए प्रॉक्सीइंग की विधि कुछ मामलों में काम करेगी लेकिन यह कुछ सिस्टम पर परेशानी हो सकती है।आरएमआई को गलत नेटवर्क इंटरफेस से जुड़े कुछ मुद्दों का सामना करना पड़ता है, विशेष रूप से डेबियन आधारित लिनक्स वितरण पर चलते समय मुझे यह समस्या थी।

0

मैं गलत हो सकता हूं, लेकिन ऐसा लगता है कि rmiregistry एप्लिकेशन अनिवार्य रूप से स्थानीय नामकरण सेवा पर एक रैपर है। जिसका मतलब है कि इसे दूरस्थ वस्तुओं को इंगित करने का कोई तरीका नहीं है।

आपको एक नामकरण कार्यान्वयन की आवश्यकता है, और इस पर क्लस्टर किया गया है। J2EE एएस क्लस्टरिंग समाधान में जाने के लिए विचार करें। जेएनडीआई पेड़ क्लस्टर के भीतर साझा किया जाता है।

+0

आप गलत हैं। आरएमआई रजिस्ट्री * एक नामकरण सेवा है। यह किसी भी चीज़ पर एक रैपर नहीं है। यह स्थानीयहोस्ट के अलावा अन्य बाध्य/rebind/unbind अनुरोध स्वीकार नहीं करेगा। यह वही बात नहीं है जो दूरस्थ वस्तुओं को इंगित करने में सक्षम नहीं है। यह। – EJP

1

मैं आपके प्रश्न को गलत समझ सकता हूं, यदि ऐसा है तो कृपया मुझे बताएं।

मेरे पास जावा आरएमआई के साथ सीमित अनुभव है, हमने इसे हमारे डिजाइन पैटर्न क्लास में प्रॉक्सी पैटर्न के साथ उपयोग किया। (पाठ्यपुस्तक: हेडफर्स्ट डिजाइन पैटर्न)

हम विश्वविद्यालय परियोजनाओं के बाहर से हमारी परियोजनाओं को काम करने में सक्षम नहीं थे, लेकिन नेटवर्क से सीधे कनेक्ट होने पर वे पूरी तरह से काम करते थे। हमारे प्रोफेसर के मुताबिक, इंटरनेट या वैन पर हमारे कार्यान्वयन में आरएमआई का उपयोग करना संभव नहीं था। एक समाधान उसने सुझाव दिया था कि एक वीपीएन की आवश्यकता होगी। मेरा मानना ​​है कि व्लादिमीर सही है कि इसे स्थानीय नामकरण सेवा के साथ करना है।

+0

नहीं। क्लाइंट-साइड प्रॉक्सी वाले नेटवर्क पर कॉलबैक को अक्षम करने और आरएमआई एफएक्यू के आइटम ए .1 में वर्णित समस्या के साथ ऐसा करना है। 'स्थानीय नामकरण सेवा' कल्पना की एक उपज है। – EJP

7

सीमा के चारों ओर जाने का एक तरीका है लेकिन यह वही है: एक कार्य-आसपास। वैसे भी, इसे आज़माने के लिए स्वतंत्र महसूस करें। यह हमारे लिए काम करता है।

केंद्रीय आरएमआई रजिस्ट्री चलाने वाले होस्ट पर एक छोटी सी सेवा चलाती है जो रिमोट ऑब्जेक्ट को केवल एक दूरस्थ विधि से बांधती है: proxyRebind। इस विधि का कार्यान्वयन केवल उस वस्तु को बांधता है जो इसे केंद्रीय रजिस्ट्री में प्रदान किया जाता है (यह विफल नहीं होगा क्योंकि रजिस्ट्री इस सेवा के समान मशीन पर है)।

अन्य सभी होस्ट बस इस दूरस्थ वस्तु को देख पाएंगे और प्रॉक्सी रिबिंड को अपने स्वयं के रिमोट ऑब्जेक्ट्स के साथ बुलाएंगे।

यह काम करता है क्योंकि दूरस्थ रूप से होस्ट की गई रजिस्ट्रीज़ पर लुक-अप की अनुमति है। आपका मूल प्रयास विफल रहा क्योंकि दूरस्थ रूप से होस्ट की गई रजिस्ट्रीज़ पर बाध्यकारी अनुमति नहीं है।

मुझे बताएं कि आपको इस पर और स्पष्टता की आवश्यकता है या नहीं।

/आरएस

+0

यह चालाक है! जेआरई की भावी रिलीज में संभावित सुरक्षा छेद के रूप में बंद होने की तरह कुछ ऐसा लगता है। मैं इस तकनीक पर निर्भर कोई बड़ा डिजाइन निर्णय नहीं लेगा। –

+0

अगर इसे बंद करना था, तो बहुत समय पहले हुआ होगा! मैं पिछले 10 सालों से इस कार्यान्वयन कर रहा हूं! – user40552

+0

rndm.buoy मैंने इसे कार्यान्वित करने का प्रयास किया है और ऑब्जेक्ट वास्तव में सफलतापूर्वक बाध्य करता है हालांकि जब मैं रिमोट विधि का आह्वान करने का प्रयास करता हूं तो मुझे अपवाद मिलता है 'java.rmi.ConnectException: कनेक्शन होस्ट करने से इनकार कर दिया: 127.0.1.1; नेस्टेड अपवाद है: 'भले ही रिमोट ऑब्जेक्ट को आईपी 1 9 .1.168.126.137 को हल करना चाहिए, मुझे आश्चर्य है कि अगर कुछ ऐसा है जो मुझे याद आ रहा है, तो क्या आप कृपया अपने सुझाव पर विस्तार कर सकते हैं, इसकी सराहना की जाएगी। –

2

2 एक तरह से चारों ओर सीमा प्राप्त करने के लिए नहीं है, लेकिन यह यह क्या है है: एक काम के आसपास। वैसे भी, इसे आजमाएं। यह हमारे लिए काम करता है। proxyRebind:

केंद्रीय RMI रजिस्ट्री चल रहा है मेजबान पर एक छोटा सा सेवा है जो सिर्फ एक दूरस्थ विधि के साथ एक दूरस्थ वस्तु बाध्य होगा चलाते हैं। का कार्यान्वयन यह विधि केवल ऑब्जेक्ट को बाध्य करता है जो इसे केंद्रीय रजिस्ट्री में प्रदान किया जाता है (यह विफल नहीं होगा क्योंकि रजिस्ट्री उसी मशीन पर इस सेवा पर है)।

अन्य सभी मेजबान बस इस दूरस्थ वस्तु देखने और अपने स्वयं के दूरदराज के वस्तुओं के साथ proxyRebind आह्वान करेंगे।

यह काम करता है क्योंकि दूरस्थ रूप से होस्टेड रजिस्ट्रीज़ पर लुक-अप की अनुमति है। आपका मूल प्रयास विफल हुआ क्योंकि दूरस्थ रूप से होस्ट की गई रजिस्ट्रीज़ पर बाध्यकारी की अनुमति नहीं है।

मुझे बताएं कि आपको इस पर स्पष्टता की आवश्यकता है या नहीं।

यह पूरी तरह से काम करता है। देखभाल करने के लिए एकमात्र चीज निम्नलिखित है हमेशा सही ढंग से सेट किया जाना चाहिए। -Djava.rmi.server.hostname = "स्थानीय होस्ट आईपी"

+0

एक बहुआयामी मेजबान में 'java.rmi.server.hostname' सेट करना आवश्यक है या यदि आइटम में वर्णित अनुसार आपके DNS में कुछ गलत है [आरएमआई अकसर किये गए सवाल के ए.1] (http://docs.oracle .com/JavaSE/7/डॉक्स/technotes/गाइड/RMI/faq.html # डोमेन)। – EJP

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