नहीं, यह सच नहीं है। यदि ओआरबी स्थानीय ऑब्जेक्ट ऑप्टिमाइज़ेशन (कभी-कभी "कोलाक्टेड ऑब्जेक्ट्स") लागू करता है, तो यह किसी भी सॉकेट नहीं खोलता है, लेकिन यह धारावाहिक/deserialization प्रदर्शन करेगा, जो आमतौर पर marshalling से तेज है। प्रोग्रामिंग मॉडल का उल्लंघन करने से बचने के लिए अतिरिक्त ऑब्जेक्ट प्रतियां बनाई गई हैं।
जेनरेटेड स्टब्स इस अनुकूलन को सक्षम करते हैं।
public interface a extends Remote {
public ArrayList test(ArrayList in1, ArrayList in2) throws RemoteException;
}
यहाँ rmic -iiop रखें एक का परिणाम है::
public ArrayList test(ArrayList arg0, ArrayList arg1) throws java.rmi.RemoteException {
if (!Util.isLocal(this)) {
/* ... trim remote code ... */
} else {
ServantObject so = _servant_preinvoke("test",a.class);
if (so == null) {
return test(arg0, arg1);
}
try {
Object[] copies = Util.copyObjects(new Object[]{arg0,arg1},_orb());
ArrayList arg0Copy = (ArrayList) copies[0];
ArrayList arg1Copy = (ArrayList) copies[1];
ArrayList result = ((a)so.servant).test(arg0Copy, arg1Copy);
return (ArrayList)Util.copyObject(result,_orb());
} catch (Throwable ex) {
Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
throw Util.wrapException(exCopy);
} finally {
_servant_postinvoke(so);
}
}
}
जब एक ठूंठ एक स्थानीय वस्तु से जुड़ा है, यह एक का पता लगाने का ObjectImpl._servant_preinvoke कॉल यहाँ एक उदाहरण स्वरूप है नौकर (आपके मामले में एक ईजेबी रैपर) एक ही JVM के भीतर। फिर, यह इनपुट तर्कों की एक प्रति बनाता है (marshalling अनुकरण), विधि कॉल, और परिणाम वस्तु की एक प्रति बनाता है (फिर marshalling अनुकरण)।
मैं एक वेबलॉगिक विशेषज्ञ नहीं हूं। उस ने कहा, इस दस्तावेज़ का तात्पर्य है कि वेबलॉगिक कोलाक्टेड ऑब्जेक्ट ऑप्टिमाइज़ेशन करता है:
http://download.oracle.com/docs/cd/E13222_01/wls/docs61/cluster/object.html#1007328
स्रोत
2010-04-27 13:29:37