"Hai! Lan siji topik liyane seneng: RMI. RMI singkatan saka Remote Method Invocation . Ing tembung liyane, RMI minangka mekanisme sing ngidini obyek saka siji mesin Java kanggo nelpon cara ing obyek saka mesin Jawa liyane , sanajan padha ing beda. komputer, ing macem-macem negara, utawa ing macem-macem sisih ndonya."

RMI - 1

"Wah! Swara sing apik tenan."

"Ya, nanging aku mung nyoba menehi ringkesan. Kanthi iki, yen digali jero banget, sampeyan bisa bingung karo nuansa cara kerjane."

"Nanging yen sampeyan ora dadi ekstrem, RMI ora mung prasaja banget, nanging uga nyederhanakake urip programer.

"Dadi, kita pengin siji obyek ing program Jawa nelpon cara ing obyek sing ana ing program Jawa liyane. Preduli saka ngendi program iki mlaku."

"Ayo nimbang conto sing paling gampang: nalika loro program mlaku ing komputer sing padha.  Kanggo ngidini program bisa sesambungan liwat Internet, sampeyan kudu ngatur ijin JVM , nanging kita ora bakal nutupi dina iki."

"Ing Jawa, sampeyan bisa nelpon mung cara antarmuka, dudu kelas."

"Dadi, kita duwe rong program. Kepiye carane bisa nelpon cara saben liyane?"

"Ayo nimbang kahanan ing ngendi siji program ngemot obyek, lan program liya pengin nelpon metode ing obyek kasebut. Ayo dadi nelpon program pisanan server, lan kaloro - klien ."

"Kaping pisanan, aku bakal menehi sawetara kode sampel, banjur kita bakal nganalisa."

"Dadi apa sing bakal ditindakake program kita?"

"Hmm. Inggih, kanggo gamblang, program bakal duwe siji cara sing mbalikke senar sing liwati kanggo iku."

"Cukup prasaja."

"Inggih, ayo miwiti:"

"Kaping pisanan, kita butuh antarmuka sing bakal nyukupi syarat kita:"

Antarmuka kanggo komunikasi antarane program
interface Reverse extends Remote
{
 public String reverse(String str) throws RemoteException;
}

"Aku nggawe antarmuka Reverse lan nambah antarmuka panandha Remot, uga RemoteException. Kesalahan sing ora dikarepke bisa kedadeyan nalika metode kasebut diarani. Yen ana, banjur pangecualian iki bakal dibuwang."

"Saiki kita kudu nulis kelas server sing ngetrapake antarmuka iki:"

Kelas kanggo server
class ReverseImpl implements Reverse
{
 public String reverse(String str) throws RemoteException
 {
  return new StringBuffer(str).reverse().toString();
 }
}

"Aku weruh. We mbalikke senar ing cara iki."

"Ya wis."

"Saiki kita kudu nggawe obyek iki bisa diarani saka program liyane. Mangkene carane sampeyan nindakake: "

Enggo bareng obyek
public static final String UNIC_BINDING_NAME = "server.reverse";

public static void main(String[] args) throws Exception
{
 // Create an object to be accessible remotely.
 final ReverseImpl service = new ReverseImpl();

 // Create a registry of shared objects.
 final Registry registry = LocateRegistry.createRegistry(2099);
 // Create a stub for receiving remote calls.
 Remote stub = UnicastRemoteObject.exportObject(service, 0);
 // Register the stub in the registry.
 registry.bind(UNIC_BINDING_NAME, stub);

 // Put the main thread to sleep, or else the program will exit.
 Thread.sleep(Integer.MAX_VALUE);
}

"Aku bakal nerangake iki baris dening baris."

" Ing baris 1 , kita nyimpen jeneng unik (sing digawe) kanggo obyek remot (obyek sing bisa diakses saka jarak jauh) ing variabel  UNIC_BINDING_NAME . Yen program ndadekake sawetara obyek bisa diakses, saben kudu duwe jeneng unik dhewe. jeneng unik obyek iku 'server.reverse'."

" Ing baris 6 kita nggawe obyek ReverseImpl sing bisa diakses saka adoh. Cara kasebut bakal dijaluk."

" Ing baris 9 kita nggawe obyek khusus sing disebut registri. Kita kudu nggunakake aplikasi kasebut kanggo ndhaftar obyek sing dituduhake. JVM bakal sesambungan karo dheweke mengko. 2099 minangka port (nomer unik sing bisa digunakake dening program liya kanggo ngakses kita registri obyek).

"Ing tembung liya, kanggo ngakses obyek, sampeyan kudu ngerti nomer unik registri obyek (port) lan jeneng unik obyek, lan duwe antarmuka sing padha karo sing dileksanakake dening obyek remot."

"Aku weruh. Kaya: nelpon liwat telpon (perlu nomer) lan takon Bill (jeneng obyek)?"

"Iya. Saiki ayo diterusake."

" Ing baris 11  , kita nggawe rintisan. Rintisan minangka obyek khusus sing nampa informasi babagan telpon remot, mbongkar, deserializes argumen metode, lan nelpon cara sing dibutuhake. Banjur serializes asil utawa pangecualian, yen ana siji. , lan ngirim kabeh bali menyang sing nelpon."

"Aku ngerti. Meh. Sampeyan ngomong yen 'deserializes argumen metode'. Dadi, tegese argumen metode remot kudu serializable?"

"Ya. Kepiye carane sampeyan ngirim liwat jaringan? Bener, ana pangecualian, yaiku obyek sing diterusake kanthi referensi, nanging kita ora bakal ngomong babagan dina iki."

"Kita bakal sijine kaya iki: sampeyan ora bisa ngliwati obyek non-serializable, nanging yen pancene pengin, sampeyan bisa. Nanging iku pain, ngerti."

"Oke."

"Banjur ayo terus."

" Ing baris 13 , kita ndhaftar rintisan obyek kita ing jeneng unik ing pendaptaran."

" Ing baris 16 , kita sijine utas utama kanggo turu. Kabeh telpon remot diproses ing utas kapisah. Sing penting iku program wis mlaku. Dadi kita mung sijine utas utama kanggo turu kene. Ya iku."

"Oke."

"Apik, banjur iki conto klien:"

Nggarap obyek remot
public static final String UNIC_BINDING_NAME = "server.reverse";

public static void main(String[] args) throws Exception
{
 // Create a registry of shared objects
 final Registry registry = LocateRegistry.createRegistry(2099);

 // Get the object (actually, this is a proxy object)
 Reverse service = (Reverse) registry.lookup(UNIC_BINDING_NAME);

 // Call the remote method
 String result = service.reverse("Home sweet home.");
}

"Aku bakal nerangake kode iki baris demi baris:"

" Baris 1 minangka jeneng unik  obyek remot . Iki kudu padha ing klien lan server."

" Ing baris 6  , kita nggawe « registri obyek remot ». Port (2099) kudu padha karo port pendaptaran kanggo aplikasi server."

" Ing baris 9 , kita entuk obyek saka pendaptaran. Obyek sing bali minangka obyek proxy lan diowahi dadi antarmuka. Antarmuka kudu diwenehi antarmuka panandha Jarak Jauh."

" Ing baris 12 , kita nyebut cara antarmuka kaya-kaya obyek digawe ing program sing padha. Ora ana bedane."

"Keren! Saiki aku bisa nulis aplikasi sing disebarake. Utawa game kaya Battleship kanggo Android."

"Aja wani, Amigo! Sistem operasi Android dicekal ing abad kaping 27 sawise upaya katelu kanggo ngrebut jagad iki. Robot ora duwe akses apa-apa. Ora ana cara kanggo narik sampeyan saka iku. . Sampeyan bakal miwiti mlaku-mlaku mbengok, «Pateni kabeh manungsa!»"

"Hmm. OK. Nanging aku isih kudu takon Diego. Sampeyan ora ngerti, mbok menawa dheweke bakal duwe bab menarik kanggo ngomong bab iku."

"Banjur takok. Oke, nganti sesuk."

"Bye, Rishi. Matur nuwun kanggo pelajaran sing menarik."