महत्वपूर्ण नोट: अगर संदर्भ द्वारा पारित साधन विधि के अंदर तर्क मूल्य को संशोधित करने और फोन करने वाले में मूल चर बदलने के लिए, आप नहीं कर सकते। यदि आप किसी ऑब्जेक्ट के संदर्भ के को कॉपी करना चाहते हैं, तो विधि को आपके किसी ऑब्जेक्ट के साथ इंटरैक्ट करने की अनुमति देने के लिए ... हाँ आप कर सकते हैं। जवाब उस दूसरे विकल्प की पड़ताल करता है।
हां। लेकिन यह एक आरएमआई वस्तु होना है। उस मामले में एक आरएमआई स्टब प्रतिलिपि द्वारा पारित किया जाएगा।
RMI तर्कों से गुजरता है और वापसी के दो तरीके को महत्व देता है: (! यह रिमोट अगर इसकी एक संदर्भ हो गया है)
- पूर्ण वस्तु
- कॉपी एक दूरस्थ संदर्भ भेजें।
नमूना
अनुमान हम किसी सेवा की है। यह आरएमआई रजिस्ट्री के माध्यम से प्रकाशित एक आरएमआई ऑब्जेक्ट है, इसलिए यह ग्राहकों के लिए एक्सेसिबल है। ग्राहक इस पर एक विधि (कुछ बनाने के लिए) कॉल कर सकते हैं और सेवा उस नव निर्मित वस्तु के संदर्भ को वापस करना चाहता है। एक क्रमबद्ध प्रति नहीं है लेकिन सर्वर मेमोरी स्पेस में बनाई गई ऑब्जेक्ट का संदर्भ है।
import java.rmi.Remote;
import java.rmi.RemoteException;
// normally published object
public interface MyService extends Remote
{
// creates something and return a "handle" to it
public MyHandle createX(SomeSerializableObj param1) throws RemoteException;
}
// interface for object that the service will return a reference to...
public interface MyHandle extends Remote
{
void doOne();
void doTwo();
}
इस उदाहरण आप कर सकते थे में:
MyService के एक कार्यान्वयन बनाएँ और यह
Registry registry = LocateRegistry.createRegistry(port);
MyService stub = (MyService) UnicastRemoteObject.exportObject(server, 0);
registry.bind("myService", stub);`
और फिर, कुछ RMI ग्राहक यह
के लिए एक संदर्भ मिल सकता है प्रकाशित
Registry registry = LocateRegistry.getRegistry(server, port);
MyService serv1 = (MyService) registry.lookup("myService");
और सेवा ऑब्जेक्ट के संदर्भ के साथ अन्य आरएमआई ऑब्जेक्ट का संदर्भ प्राप्त हो सकता है।
MyHandle handle1 = serv1.createX(...);
handle1.doOne()
इस उदाहरण विधि तर्क धारावाहिक जाता है (यह एक Serializable वर्ग होना चाहिए) जबकि लौटे वस्तु सर्वर में बनाए गए किसी ऑब्जेक्ट को RMI संदर्भ है।
createX के कार्यान्वयन (...) हो सकता है:
public MyHandle createX(...) {
MyHandle handle = new MyHandleImpl(); // create an implementation
createdHandlers.add(handle); // add it to some structure (just a sample)
return handle; // return the implementation. RMI will send to client a RMI reference to this very instance
}
धन्यवाद :) लेकिन मैं काफी अपने जवाब :(नहीं मिलता है आपको एक उदाहरण कृपया प्रदान कर सकते हैं? :) – MBZ
ज़रूर ... मैं उस पल में नहीं हाथ में एक उदाहरण है ... – helios
@MBZ यह मुझे लगता है कि उसने आपको पहले ही एक उदाहरण दिया है, लेकिन यह मूल्य द्वारा पारित संदर्भ का एक और उदाहरण है। यह बिल्कुल संदर्भ से गुजरता नहीं है। कैली में संदर्भ के मान को बदलने से यह कॉलर में नहीं बदलता है। Downvote। – EJP