Java remote method invocation
કમ્પ્યુટિંગમાં, જાવા રિમોટ મેથડ ઇન્વોકેશન (જાવા આરએમઆઈ) એ જાવા એપીઆઈ છે જે દૂરસ્થ પદ્ધતિનું આહ્વાન કરે છે, જે દૂરસ્થ પ્રક્રિયા કૉલ્સ (આરપીસી) ની ઓબ્જેક્ટ-ઓરિએન્ટેડ સમકક્ષ છે, જેમાં શ્રેણીબદ્ધ જાવા વર્ગોના સીધા સ્થાનાંતરણ અને વિતરિત કચરો-સંગ્રહ માટે સમર્થન છે. મૂળ અમલીકરણ જાવા વર્ચ્યુઅલ મશીન (જેવીએમ) વર્ગ-પ્રતિનિધિત્વ પદ્ધતિઓ પર આધાર રાખે છે અને આમ તે ફક્ત એક જેવીએમથી બીજામાં કોલ કરવાનું સમર્થન કરે છે. આ જાવા-માત્ર અમલીકરણ અંતર્ગતનો પ્રોટોકોલ જાવા રિમોટ મેથડ પ્રોટોકોલ (JRMP) તરીકે ઓળખાય છે. બિન-જેવીએમ સંદર્ભમાં ચાલતા કોડને ટેકો આપવા માટે, પ્રોગ્રામરોએ પાછળથી કોર્બા સંસ્કરણ વિકસાવ્યું હતું. આરએમઆઈ શબ્દનો ઉપયોગ ફક્ત પ્રોગ્રામિંગ ઇન્ટરફેસને સૂચવી શકે છે અથવા એપીઆઈ અને જેઆરએમપી, આઈઆઈઓપી અથવા અન્ય અમલીકરણ બંનેને સૂચવી શકે છે, જ્યારે આરએમઆઈ-આઈઆઈઓપી (વાંચોઃ આઈઆઈઓપી પર આરએમઆઈ) શબ્દ ખાસ કરીને આરએમઆઈ ઇન્ટરફેસને સૂચવે છે જે મોટાભાગની કાર્યક્ષમતાને સહાયક કોર્બા અમલીકરણને સોંપવામાં આવે છે. જાવા આરએમઆઈનો મૂળભૂત વિચાર, ડિસ્ટ્રિબ્યુટેડ ગાર્બેજ-કલેક્શન (ડીજીસી) પ્રોટોકોલ, અને મૂળ સન અમલીકરણ અંતર્ગત મોટાભાગની રચના, મોડ્યુલા-3ના "નેટવર્ક ઓબ્જેક્ટ્સ" લક્ષણમાંથી આવે છે. સામાન્યીકૃત કોડ મૂળ આરએમઆઈ એપીઆઈના પ્રોગ્રામરોએ એચટીટીપી પરિવહન જેવા વિવિધ અમલીકરણને ટેકો આપવા માટે કોડને કંઈક અંશે સામાન્યીકૃત કર્યો. વધુમાં, આરએમઆઈ ઇન્ટરફેસ સાથે સુસંગત રહેવા માટે "મૂલ્ય દ્વારા" દલીલો પસાર કરવાની ક્ષમતા કોર્બા સાથે ઉમેરવામાં આવી હતી. તેમ છતાં, આરએમઆઈ-આઈઆઈઓપી અને જેઆરએમપી અમલીકરણમાં સંપૂર્ણપણે સમાન ઇન્ટરફેસ નથી. આરએમઆઈ કાર્યક્ષમતા પેકેજમાં આવે છે, જ્યારે સનનું મોટાભાગનું અમલીકરણ sun.rmi પેકેજમાં સ્થિત છે. નોંધ લો કે જાવા 5 પહેલાં જાવા આવૃત્તિઓ સાથે વિકાસકર્તાઓએ આર. એમ. આઈ. નો ઉપયોગ કરીને અલગ સંકલન તબક્કામાં આર. એમ. આઈ. સ્ટબ્સનું સંકલન કરવું પડતું હતું. જાવા અને તેનાથી આગળના સંસ્કરણ 5 માટે હવે આ પગલાની જરૂર નથી. જીની સંસ્કરણ જીની જાવામાં આરએમઆઈનું વધુ અદ્યતન સંસ્કરણ પ્રદાન કરે છે. તે સમાન રીતે કાર્ય કરે છે પરંતુ વિતરિત ઓબ્જેક્ટ એપ્લિકેશન્સ માટે વધુ અદ્યતન સુરક્ષા, ઓબ્જેક્ટ શોધ ક્ષમતાઓ અને અન્ય પદ્ધતિઓ પ્રદાન કરે છે. ઉદાહરણ નીચેના વર્ગો RMI નો ઉપયોગ કરીને એક સરળ ક્લાયન્ટ-સર્વર પ્રોગ્રામ અમલમાં મૂકે છે જે સંદેશ પ્રદર્શિત કરે છે. RmiServerIntf ઈન્ટરફેસ એ ઈન્ટરફેસને વ્યાખ્યાયિત કરે છે જે ક્લાયન્ટ દ્વારા ઉપયોગમાં લેવાય છે અને સર્વર દ્વારા અમલમાં મૂકવામાં આવે છે. ઇમ્પોર્ટ java.rmi.Remote; ઇમ્પોર્ટ java.rmi.RemoteException; પબ્લિક ઇન્ટરફેસ RmiServerIntf એક્સટેન્ડ કરે છે રિમોટ {સ્ટ્રિંગ ગેટમેસેજ () થ્રોઝ રિમોટએક્સસેપ્શન;} RmiServer ક્લાસ RMI વિનંતીઓ સાંભળે છે અને ઇન્ટરફેસને અમલમાં મૂકે છે જેનો ઉપયોગ ક્લાયન્ટ દ્વારા દૂરસ્થ પદ્ધતિઓનો ઉપયોગ કરવા માટે થાય છે. આયાત કરો java.rmi.Naming; આયાત કરો java.rmi.RemoteException; આયાત કરો java.rmi.server.UnicastRemoteObject; આયાત કરો java.rmi.registry. *; પબ્લિક ક્લાસ RmiServer YunicastRemoteObject ને એક્સટેન્ડ કરે છે RmiServerIntf [પબ્લિક સ્ટેટિક ફાઇનલ સ્ટ્રિંગ MESSAGE = "હેલો વર્લ્ડ"; પબ્લિક RmiServer () રિમોટએક્સસેપ્શન ફેંકે છે {સુપર (0);// 'આરમિક' સ્ટેપને ટાળવા માટે જરૂરી છે, નીચે જુઓ} પબ્લિક સ્ટ્રિંગ ગેટમેસેજ () {રીટર્ન MESSAGE;} પબ્લિક સ્ટેટિક વોઈડ મેઇન (સ્ટ્રિંગ આર્ગ્સ []) એક્સસેપ્શન ફેંકે છે {System.out.println ("RMI સર્વર શરૂ થયું"); રજિસ્ટ્રી બનાવવા માટે LocateRegistry.createRegistry (1099); System.out.println ("જાવા RMI રેગ") નો પ્રયાસ કરો. ");} કેચ (રિમોટ એક્સેપ્શન ઇ) {// કંઇ ન કરો, ભૂલનો અર્થ એ છે કે રજિસ્ટ્રી પહેલેથી જ અસ્તિત્વમાં છે System.out.println (" જાવા આરએમઆઈ રજિસ્ટ્રી પહેલેથી જ અસ્તિત્વમાં છે. ");}// ઇન્સ્ટાન્ટીએટ RmiServer RmiServer સર્વર = નવું RmiServer ();// આ ઓબ્જેક્ટ ઇન્સ્ટન્સને" RmiServer "Naming.rebind ("// લોકલહોસ્ટ/RmiServer ", સર્વર); System.out.println (" પીઅર સર્વર રજિસ્ટ્રીમાં બંધાયેલું ";}} RmiClient વર્ગ આ તે ક્લાયન્ટ છે જે સર્વર પર રહેતા દૂરસ્થ ઓબ્જેક્ટનો સંદર્ભ (પ્રોક્સી) મેળવે છે અને સંદેશ મેળવવા માટે તેની પદ્ધતિનો ઉપયોગ કરે છે. જો સર્વર ઓબ્જેક્ટએ java.rmi.Remote ને બદલે java.io.Serializable અમલમાં મૂક્યું હોય, તો તેને શ્રેણીબદ્ધ કરવામાં આવશે અને મૂલ્ય તરીકે ક્લાયન્ટને પસાર કરવામાં આવશે. ઇમ્પોર્ટ java.rmi.Naming; પબ્લિક ક્લાસ RmiClient {પબ્લિક સ્ટેટિક વોઈડ મેઇન (શબ્દમાળા args []) અપવાદ આપે છે {RmiServerIntf સર્વર = (RmiServerIntf) Naming.lookup ("// લોકલહોસ્ટ/RmiServer"); System.out.println (server.getMessage ();} આ ઉદાહરણ ચલાવતા પહેલા, આપણે ઉપયોગમાં લીધેલા ઇન્ટરફેસ માટે 'સ્ટબ' ફાઇલ બનાવવાની જરૂર છે. આ કાર્ય માટે આપણી પાસે આરએમઆઈ કમ્પાઇલર છે-'આરમિક' નોંધઃ આપણે દૂરસ્થ ઇન્ટરફેસના અમલીકરણ સાથે '*. વર્ગ' ફાઇલમાંથી એક સ્ટબ ફાઇલ બનાવીએ છીએ, '*. જાવા' ફાઇલમાંથી નહીં. rmic RmiServer નોંધે છે કે ગતિશીલ રીતે જનરેટેડ સ્ટબ ફાઇલો માટે J2SE સપોર્ટનું વર્ઝન 5.0 ઉમેરવામાં આવ્યું છે, અને rmic ફક્ત અગાઉના રનટાઇમ્સ સાથે પછાત સુસંગતતા માટે, અથવા દૂરસ્થ ઓબ્જેક્ટ્સની નિકાસ કરતી વખતે સ્પષ્ટ પોર્ટ નંબર (અથવા શૂન્ય) પ્રદાન ન કરતા પ્રોગ્રામ્સ માટે પ્રદાન કરવામાં આવે છે, જે જનરેટેડ સ્ટબ્સ શક્ય બનાવવા માટે જરૂરી છે, જેમ કે યુનિકાસ્ટરેમોટઓબ્જેક્ટ માટે જાવાડોકમાં વર્ણવેલ છે. ઉપરના કન્સ્ટ્રક્ટરમાં ટિપ્પણી જુઓ. સંદર્ભો બાહ્ય કડીઓ જાવા આરએમઆઈ ટ્યુટોરીયલ-આરએમઆઈ શીખવા માટે એક સારો પ્રારંભિક બિંદુ છે. આર. એમ. આઈ. માં હેલો વર્લ્ડ, જાવા આર. એમ. આઈ. ઓનલાઇન તાલીમ પણ તપાસો-જાવા આર. એમ. આઈ. ની તાલીમ માટે ખૂબ જ સારી અને સંદર્ભ તરીકે આર. એમ. આઈ. પૃષ્ઠ જે. ડી. કે. ડોક્સ (આર. એમ. આઈ. પેકેજ માટે સનનું જાવા એ. પી. આઈ. સંદર્ભ) પ્રોગ્રામિંગ વેબલોજિક આર. એમ. આઈ.-ઓરેકલ વેબલોજિકમાં આર. એમ. આઈ. નો પરિચય. જનરલ રિમોટ મેથડ ઇન્વોકેશન આર. એમ. આઈ. રિમોટ પ્રોસિજર કોલ લેખો ઉદાહરણ તરીકે જાવા કોડ