मैं आरएमआई के साथ अपना पहला कदम कर रहा हूं, और मेरे पास एक साधारण सवाल है।क्या मुझे काम करने के लिए आरएमआई के लिए क्लाइंट, सर्वर और रजिस्ट्री पर सभी कक्षाओं की आवश्यकता है?
मेरे पास एक .jar फ़ाइल है जिसमें लाइब्रेरी से कई विधियों का कार्यान्वयन है। मैं आरएमआई का उपयोग कर .jar फ़ाइल में इस विधियों को कॉल करना चाहता हूं।
मैं जो कोशिश कर रहा हूं वह ऐसा करने के लिए रैपर का एक प्रकार बनाना है।
तो, मैं कुछ इस तरह पर काम कर रहा हूँ:
इंटरफ़ेस वर्ग: इस इंटरफ़ेस तरीकों दूरस्थ वस्तु द्वारा कार्यान्वित किया जाना है।
कार्यान्वयन वर्ग: इस वर्ग में इंटरफ़ेस विधियों का कार्यान्वयन है, प्रत्येक कार्यान्वयन .jar फ़ाइल में संबंधित विधि को कॉल करता है। उदाहरण के लिए, जार फ़ाइल में getDetails() नामक एक विधि है, और यह "ResponseDetail" ऑब्जेक्ट देता है। ResponseDetail एक प्रतिक्रिया वर्ग है जो मेरे पास .jar में है।
सर्वर वर्ग: यह rmiregistry
ग्राहक वर्ग तरीके बांधता है: यह तरीकों कार्यान्वयन में लागू की खपत होगी।
अभी तक इतना अच्छा है? :)
अब, मेरे पास एक lib फ़ोल्डर है जहां .jar फ़ाइल रहता है।
सर्वर मशीन में मैंने इंटरफ़ेस, कार्यान्वयन और सर्वर कक्षाएं तैनात की हैं। मैंने स्टब उत्पन्न किया है, और मैंने सफलतापूर्वक rmiregistry चलाया, लेकिन, इन विवरणों के साथ:
rmiregistry शुरू करने के लिए, मुझे .jar फ़ाइलों का संदर्भ देने के लिए कमांड लाइन में क्लासपाथ सेट करना पड़ा, अन्यथा मुझे java.lang.NoClassDefFoundError। मैं इस .sh फ़ाइल के साथ यह किया:
THE_CLASSPATH=
for i in `ls ./lib/*.jar`
do
THE_CLASSPATH=${THE_CLASSPATH}:${i}
done
rmiregistry -J-classpath -J".:${THE_CLASSPATH}"
सर्वर प्रारंभ करने के लिए, मैं .jar फ़ाइलें संदर्भ के लिए classpath सेट करने के लिए भी था, नहीं तो, मैं java.lang.NoClassDefFoundError मिलता है। मैं कुछ इस तरह उपयोग किया है:
THE_CLASSPATH=
for i in `ls ./lib/*.jar` do
THE_CLASSPATH=${THE_CLASSPATH}:${i}
done
java -classpath ".:${THE_CLASSPATH}" Server
क्लाइंट मशीन: क्लाइंट मशीन से Client.class फ़ाइल को चलाने के लिए, मैं यह करने के लिए .jar फ़ाइलों की प्रतिलिपि, और में उन के संदर्भ करना था क्लासपाथ, क्योंकि अन्यथा, यह नहीं चलता है और मुझे java.lang.N.NoClassDefFoundError मिलता है।
THE_CLASSPATH=
for i in `ls ./lib/*.jar`
do
THE_CLASSPATH=${THE_CLASSPATH}:${i}
done
java -classpath ".:${THE_CLASSPATH}" HelloClient
यह ठीक है: मैं क्लाइंट मशीन पर इस का इस्तेमाल किया था? मेरा मतलब है, क्या मुझे आरएमआई के माध्यम से विधियों को निष्पादित करने के लिए .jar फ़ाइलों को क्लाइंट मशीन पर कॉपी करना है?
स्टैक ओवरफ़्लो में आपका स्वागत है! मैंने आपकी समस्या को आपकी समस्या के बारे में थोड़ा अधिक संकेत देने के लिए बदल दिया, और आपकी पोस्ट को थोड़ा सुधार भी किया। कृपया जांचें कि मैंने आपके अर्थ के कुछ भी नष्ट नहीं किया है। –