Senin, 10 Juni 2013

Pertemuan ke 9


Cara konfigurasi Media Server pada Windows



Teknologi nirkabel modern tidak hanya memungkinkan Anda terhubung ke internet tanpa kabel atau kawat, tetapi juga memungkinkan Anda berbagi atau streaming musik dan video antara berbagai perangkat. Dengan Windows 7, Anda dapat mengalirkan musik favorit Anda dan video ke TV, PC di ruangan lain, penguat nirkabel atau sistem speaker atau bahkan ke komputer remote dan perangkat melalui Internet. Menyiapkan server media untuk streaming konten mungkin tampak sedikit menakutkan pada awalnya. Namun, dengan sedikit perencanaan dan pengetahuan jaringan dasar, mengkonfigurasi server media di Windows 7 dan streaming konten Anda relatif sederhana. 

Kebutuhan  JaringanHal ini dimungkinkan untuk melakukan streaming media dari satu Windows 7 komputer ke komputer lain menggunakan kabel Ethernet kuno dan router atau hub. Namun, untuk mengambil keuntungan dari semua manfaat Media Layanan yang ditawarkan, Anda akan memerlukan jaringan nirkabel. Itu berarti, minimal, Anda akan membutuhkan sebuah router nirkabel dan komputer atau perangkat dengan Wi-Fi adapter diinstal. Komputer yang sebenarnya Anda gunakan untuk melayani media di seluruh jaringan tidak memerlukan adaptor nirkabel atau kartu. Bahkan, menghubungkan server ke router nirkabel melalui kabel Ethernet memberikan kinerja yang lebih baik Streaming dengan komputer nirkabel lain dan perangkat pada jaringan. Namun demikian, untuk komputer, smartphone, konsol game yang Anda ingin media stream, menggunakan adaptor nirkabel akan menyediakan Anda dengan lebih banyak fleksibilitas.Banyak smartphone dan laptop, dan beberapa konsol game, termasuk built-in wireless adapter. Namun, jika Anda ingin menambahkan kemampuan Wi-Fi untuk komputer desktop atau konsol game, Anda mungkin perlu membeli dan memasang dongle USB wireless adapter.Instalasi salah pada sistem Windows 7 sederhana, meskipun, dan tidak memerlukan lebih dari mencolokkan adaptor atau dongle ke port USB yang kosong dan kemudian menunggu untuk sistem operasi untuk mendeteksi dan mengkonfigurasi secara otomatis. Jika Anda ingin melakukan streaming media dari server ke TV secara nirkabel, Anda akan memerlukan perangkat pemutar media digital yang terhubung ke router Wi-Fi dan televisi. Anda bahkan dapat melakukan streaming media ke sistem hiburan rumah Anda jika Anda memiliki high-end audio / video receiver dengan adaptor jaringan. 

Konfigurasi ServerKonfigurasi komputer yang ingin Anda gunakan sebagai server media untuk melakukan streaming konten melalui jaringan relatif sederhana dan umumnya memerlukan sedikit lebih dari beberapa klik mouse. Untuk mulai mengkonfigurasi Windows 7 server media, Anda harus mengaktifkan fitur pada Windows Media Player. Anda dapat mengaktifkan streaming dalam Windows Media Player dengan hanya meluncurkan program ini, klik "Stream" pada toolbar dan kemudian memilih "Aktifkan Media Streaming" pilihan. Setelah itu, muncul sebuah jendela dan meminta konfirmasi bahwa Anda ingin mengaktifkan fitur dan meminta Anda untuk memilih jenis media yang ingin berbagi dan streaming dalam jaringan Anda. Setelah Anda memilih jenis media streaming, cukup klik tombol "OK" dan media Anda sudah siap untuk berbagi dan streaming melalui jaringan lokal. 
Konfigurasi remote Komputer dan PerangkatSetelah Anda mengkonfigurasi komputer server media Anda, mengakses musik dan video di atasnya dari komputer lain di jaringan relatif mudah. Namun demikian, Anda harus menghubungkan komputer atau perangkat ke jaringan lokal sebelum Anda dapat melakukannya.Setelah Anda mengaktifkan Wi-Fi pada komputer jaringan dan terhubung ke router, atau terhubung melalui kabel Ethernet, Anda dapat mengakses media pada server langsung dari Windows Media Player. Buka Windows Media Player pada komputer dan terbuka Perpustakaan jaringan dari panel navigasi. Jika Anda mengklik "Lain Perpustakaan" link, nama jaringan dari komputer server media muncul. Anda kemudian dapat mengklik nama jaringan server dan menelusuri mesin untuk media yang ingin bermain di PC yang terhubung. Jika Anda ingin melakukan streaming media ke penerima media digital yang kompatibel dengan Windows terhubung ke TV, smartphone atau penerima, Anda dapat menggunakan "Play untuk" fitur di Windows Media Player. Hubungkan ponsel cerdas, penerima Wi-Fi atau perangkat nirkabel lainnya ke router dan biarkan mendapatkan alamat IP. Setelah Anda menghubungkan perangkat nirkabel ke router, cukup klik "Play To" tombol pada tab Putar di Windows Media Player dan memilih perangkat yang ingin Anda untuk melakukan streaming konten. Jika perangkat mendukung Windows Media Streaming, aplikasi pemutar pada perangkat harus membuka dan mulai bermain sungai otomatis. 
Internet StreamingKetika mengkonfigurasi streaming media di Windows 7, Anda juga dapat memilih untuk mengizinkan koneksi remote jika Anda ingin melakukan streaming konten ke komputer atau perangkat portabel melalui Internet. Namun, jika Anda memilih untuk melakukan streaming konten melalui Internet, Anda harus membuat sebuah Nama Domain Sistem layanan dinamis untuk router dan jaringan sehingga Anda dapat mengakses komputer server menggunakan "www.mymediaserver.com" alamat ketik komputer remote atau perangkat browser Web.Menyiapkan DNS dinamis relatif sederhana, dan beberapa layanan seperti DynDND, FreeDNS dan No-IP memungkinkan Anda untuk melakukannya secara gratis (link di Resources). Windows 7 juga mendukung penggunaan Windows Live ID untuk memungkinkan berbagi hanya untuk pengguna berwenang jauh login account yang valid terkait untuk digunakan dengan media komputer yang server Anda. Anda harus berhati-hati ketika memungkinkan streaming melalui Internet, meskipun, dan memastikan bahwa Anda menggunakan password yang kuat dan enkripsi router. Kegagalan untuk menggunakan password yang kuat atau enkripsi router dapat memungkinkan hacker atau orang yang tidak sah lain untuk mengakses komputer server media dan sistem lain yang terhubung ke jaringan.

TUGAS Besar Sistem Client Server


Membuat Game Domino menggunakan Java
di bawah ini adalah hasil running 


Pertemuan ke 7 (Catatan Kuliah)

Sistem Client Server

Multithreading


Multithreading mengacu kepada dua atau lebih task (tugas, thread) yang berjalan (sedang dieksekusi) di dalam satu program. Thread merupakan suatu path eksekusi independen di dalam program. Banyak thread dapat nerjalan secara konkuren (berbarengan) di dalam program. Setiap thread di dalam Java dibuat dan dikendalikan oleh kelas java.lang.Thread. Suatu program Java dapat mempunyai banyak thread, dan thread-thread ini dapat berjalan secara bersamaan, secara asinkron atau sinkron.
Multithreading mempunyai beberapa keuntungan, dibandingkan multiprocessing, di antaranya:
  • Thread bersifat lightweight, sedangkan proses lebih berat. Perlu diketahui bahwa proses adalah program yang sedang berada di memory atau processor, sedang dieksekusi. Thread dapat diartikan sebagai anak dari proses.
  • Thread-thread berbagi pakai ruang alamat yang sama dan karena itu dapat berbagi pakai data dan kode (instruksi)
  • Context switching antar thread biasanya lebih murah daripada antar proses.
  • Biaya komunikasi antar thread relatif lebih rendah daripada komunikasi antar proses.
  • Thread memungkinkan task-task berbeda dikerjakan secara konkuren.
Note: Penjelasan lebih detail mengenai konsep thread dan proses dapat dibaca pada buku teks mengenai Sistem Operasi, di antaranya karya Stallings dan Tanenbaum yang banyak digunakan di Universitas di Dunia.
Kelas Thread merupakan turunan dari kelas Object. Kelas Object sendiri mempunyai metode notify(), notifyAll() dan wait(), sedangkan kelas Thread menyediakan metode sleep() dan yield(). Metode-metode ini akan sering digunakan dalam pengelolaan aplikasi banyak thread.




Pembuatan Thread
Terdapat 2 (dua) cara membuat thread di dalam Java:
  • Mengimplementasikan interface Runnable (java.lang.Runnable)
  • Menurunkan (extend) kelas Thread (java.lang.Thread)
Mengimplementasikan Interface Runnable
Bentuk dasar (signature) dari interface Runnable adalah
1
2
3
public interface Runnable {
    void run();
}
Pada pendekatan ini, kita harus membuat sebuah kelas yang implementasi interface Runnable menggunakan kata kunci implements Runnable. Kemudian dibuat instansiasi berupa suatu obyek dari kelas itu. Kita perlu meng-override metode run() di dalam kelas itu, satu-satunya metode yang perlu diimplementasikan. Metode run() mengandung logika dari thread yang dibangun.
Prosedur pembuatan thread berdasarkan pendekatan interface Runnable adalah sebagai berikut:
  1. Sebuah kelas meng-implements interface Runnable, menyediakan metode run() di dalamnya yang akan dieksekusi oleh thread nantinya. Obyek dari kelas ini merupakan obyek Runnable.
  2. Obyek dari kelas Thread dibuat dengan melewatkan obyek Runnable sebagai argumen ke konstruktur Thread. Obyek Thread sekarang mempunyai suatu obyek Runnable yang mengimplementasikan metode run().
  3. Metode start() pada obyek Thread yang dibuat sebelumnya dipanggil. Metode start() tersebut kembali segera setelah suatu thread dilahirkan (berhasil dibuat).
  4. Thread berakhir ketika metode run() berakhir, baik dengan penyelesaian normal atau dengan melempar suatu eksepsi tidak tertangkap (uncaught exception).
Di bawah ini adalah sebuah program yang mengilustrasikan pembuatan thread menggunakan interfaca Runnable, bukan meng-extend kelas Thread. Suatu thread dimulai ketika kita memanggil metode start() pada obyek yang dibuat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class RunnableThread implements Runnable {
    Thread runner;
    public RunnableThread() {   }
    public RunnableThread(String threadName) {
        runner = new Thread(this, threadName); // (1) Buat thread baru.
        System.out.println(runner.getName());
        runner.start(); // (2) Memulai eksekusi thread tersebut.
    }
    public void run() {
        //Tampilkan info tentang thread ini
        System.out.println(Thread.currentThread());
    }
}
public class RunnableExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new RunnableThread(), "thread1");
        Thread thread2 = new Thread(new RunnableThread(), "thread2");
        RunnableThread thread3 = new RunnableThread("thread3");
        //Memulai eksekusi thread.
        thread1.start();
        thread2.start();
        try {
            //delay selama satu detik (1000 ms).
            Thread.currentThread().sleep(1000);
        catch (InterruptedException e) {   }
        //Tampilkan info tentang thread main (utama).
        System.out.println(Thread.currentThread());
    }
}
Keluaran dari Program di atas dapat berupa:
thread3
Thread[thread1,5,main]
Thread[thread2,5,main]
Thread[thread3,5,main]
Thread[main,5,main]private
Pendekatan ini harus digunakan jika kelas yang menginstansiasi obyek thread diperlukan (sebagai parent) untuk membuat kelas-kelas lain yang merupakan keturunannya. Pada kasus demikian, kita tidak boleh menurunkan kelas Thread, harus mengimplementasikan Runnable.
Meng-Extend Kelas Thread
Prosedur pembuatan thread melalui pendekatan penurunan kelas Thread adalah sebagai berikut:
  1. Membuat sebuah sub-kelas turunan dari kelas Thread, kemudian meng-override metode run() dari kelas Thread dan di dalamnya didefinisikan beberapa kode yang dieksekusi oleh thread.
  2. Sub-kelas ini dapat memanggil suatu konstruktur Thread secara eksplisit untuk menginisialisasi thread, menggunakan metode super().
  3. Metode start() yang telah diturunkan (secara otomatis) dari kelas Thread dipanggil agar thread segera berjalan.
Berikut ini adalah sebuah program yang mengilustrasikan pembuatan thread dengan meng-extend kelas Thread sebagai ganti mengimplementasikan interface Runnable. Metode start() digunakanuntuk mengeksekusi obyek thread yang dibuat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class XThread extends Thread {
    XThread() {  }
    XThread(String threadName) {
        super(threadName); // Memulai thread.
        System.out.println(this);
        start();
    }
    public void run() {
        //Tampilkan info tentang thread ini
        System.out.println(Thread.currentThread().getName());
    }
}
public class ThreadExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new XThread(), "thread1");
        Thread thread2 = new Thread(new XThread(), "thread2");
        // 2 thread diberikan nama default
        Thread thread3 = new XThread();
        Thread thread4 = new XThread();
        Thread thread5 = new XThread("thread5");
        //Memulai eksekusi thread
        thread1.start();
        thread2.start();
        thread3.start();
        thread4.start();
        try {
    //Metode sleep() dipanggil pada thred main (utama), delay 1 detik.
            Thread.currentThread().sleep(1000);
        catch (InterruptedException e) {  }
        //Tampilkan info tentang thread main
        System.out.println(Thread.currentThread());
    }
}
Keluaran yang diperoleh dapat berupa:
Thread[thread5,5,main]
thread1
thread5
thread2
Thread-3
Thread-2
Thread[main,5,main]
Pada saat membuat thread, ada dua alasan mengapa kita mengimplementasikan interface Runnable, bukan meng-extend kelas Thread:
  • Menurunkan kelas Thread berarti bahwa subclass tidak dapat diturunkan menjadi kelas lain lagi, sedangkan suatu kelas yang mengimplementasikan interface Runnable mempunyai opsi ini.
  • Suatu kelas mungkin hanya diinginkan runnable, karena itu menurunkan Thread secara penuh merupakan pemborosan.
Contoh dari kelas anonim berikut memperlihatkan bagaimana membuat sebuah thread dan langsung menjalankannya:
1
2
3
4
5
6
new Thread() {
   public void run() {
      for(;;) System.out.println(”Stop the world!”);
   }
}
).start();

Pertemuan Ke 6 (Catatan Kuliah)


  • Pengertian Socket
Socket adalah sebuah Class yang disediakan oleh beberapa bahasa pemrograman. Dengan socket, sebuah aplikasi di suatu komputer dapat Tentu saja aplikasi di komputer yang dihubungi menerima koneksi juga menggunakan socket. Dengan kata lain socket adalah suatu Class yang digunakan oleh aplikasi untuk saling berhubungan. berikut ini menunjukkan bagaimana suatu aplikasi berhubungan dengan aplikasi lainnya. Paradigma pada aplikasi jaringan berlaku model client-server. Aplikasi yang menginisialisasi koneksi, disebut aplikasi client. Sedangkan aplikasi yang menerima inisialisasi disebut sebagai aplikasi server. Oleh karena itu, jika kita membangun suatu aplikasi jaringan yang lengkap, maka kita harus membuat aplikasi client maupun aplikasi server.
komunikasiaplikasisocket

  • Pemrograman Socket Menggunakan TCP
Cara kerja aplikasi yang menggunakan TCP dapat digambarkan oleh di bawah ini :
Detail dari proses tersebut adalah :
Untuk bisa melakukan koneksi client server, program server harus berjalan terlebih dahulu. Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mendeteksi adanya permintaan koneksi dari sisi client. Di sisi client terdapat client socket. Jika ingin menghubungi server, maka melalui client socket-nya, client membuat inisialisai koneksi ke welcoming socket milik server, dengan mode three-way handshake. Setelah welcoming socket menerima inisialisasi koneksi dari client socket, aplikasi server akan membuat connection socket di sisi server. Dengan connection socket ini, client socket dan connection socket berinteraksi satu sama lain untuk mengirim dan menerima data.
tcpClient membaca data yang dikirim oleh server dari client socketnya. Kemudian menampilkan data tersebut di monitor.
  • Pemrograman Socket Menggunakan UDP
Contoh aplikasi untuk UDP socket berikut ini menggunakan kasus yang sama dengan kasus yang digunakan oleh TCP socket, yaitu :
Client membaca inputan dari keyboard, kemudian mengirimkan hasilnya ke server melalui socket-nya. Server membaca data yang dikirim oleh client di connection socket Server mengubah data menjadi huruf besar Server mengirimkan data yang telah diubah menuju client melalui socket-nya. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data tersebut di monitor. Perbedaan utama antara aplikasi berbasis TCP dengan aplikasi berbasis UDP adalah di aplikasi UDP tidak ada welcoming socket. Pada UDP tidak ada socket khusus untuk permintaan inisialisai koneksi. Setiap data yang datang ditangani lansung oleh server socket.
Sumber: Rino Subekti, MKom.from handout

Pertemuan ke 5 (Praktikum Pemograman client server)


Contoh Pemograman Sistem client Server dengan menggunakan bahasa pemograman java.
cara membuat program client server adalah sebagai berikut :
1. Gunakan lebih dari 1 komputer gunanya untuk membuat server dan client .
2. Buka aplikasi netbeans pada masing-masing komputer dan beri nama projek komputer 1 beri nama SERVER dan projek 2 beri nama CLIENT.
3. Masukan coding server ke komputer SERVER dan coding client ke Komputer CLIENT, contoh coding server dan client ada di bawah ini.
4. Dalam coding client ganti coding localhost dengan ip komputer Server.
contoh coding client "  Socket s=new Socket("10.0.0.4", 5111);"  dengan mengubah jadi "  Socket s=new Socket("192.168.0.1", 5111);" tergantung ip yang kita setting di komputer sever.
5. Setelah coding client dan server success di running maka isi dalam  komputer client seperti berikut ini:
1. Ini client maka akan muncul di komputer CLIENT



    dan di komputer SERVER





Coding dari Server
**********************************************************************
package tugas_server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Tugas_server {

    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(5111);
            Socket s;
            String balasan;
            String balasan2;
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
            s = ss.accept();
            out = new ObjectOutputStream(s.getOutputStream());
            out.flush();
            in = new ObjectInputStream(s.getInputStream());
            balasan = "";
            balasan2 = "";
            while (true) {
                balasan = "";
                balasan2 = "";
                balasan = ReadMessage(in);
                if (balasan.equals("exit")) break;
                else {
                    if(balasan.equals("ini client"))
                    {
                    SendMessage("ini server, masukan username", out);
                    balasan2 = ReadMessage(in);
                    if (balasan2.equals("admin")){ SendMessage("Selamat Datang Admin", out);}
                    else {
                        if (balasan2.equals("user")){SendMessage("Selamat Datang User", out);}
                        else SendMessage("username tidak diketahui", out);
                        }
                    }
                    else
                    {
                        SendMessage("perintah tidak diketahui", out);
                }
            }
            }
    in.close();
    out.close();
    s.close();
    ss.close();
}catch (IOException ex){
    Logger.getLogger(Tugas_server.class.getName()).log(Level.SEVERE,null,ex);
    }
    }
 public static String ReadMessage(ObjectInputStream in)
 {
 String Reader="";
 try {
     Reader=(String)in.readObject();
 }catch (IOException ex){
     Logger.getLogger(Tugas_server.class.getName()).log(Level.SEVERE,null,ex);
 }catch (ClassNotFoundException ex){
     Logger.getLogger(Tugas_server.class.getName()).log(Level.SEVERE,null,ex);
 }
 System.out.println(Reader);
 return Reader;
 }
 public static void SendMessage(String word, ObjectOutputStream out)
 {
     try{
         out.writeObject(word);
         out.flush();
     }catch (IOException ex){
         Logger.getLogger(Tugas_server.class.getName()).log(Level.SEVERE,null,ex);
     }
    }

}


***********************************************************************

Coding Client.

package tgs_client;
import java.util.Scanner;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author UNLA
 */
public class Tgs_Client {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{
        Socket s=new Socket("10.0.0.4", 5111);
        ObjectInputStream in=null;
        ObjectOutputStream out=null;
        Scanner scanf=new Scanner(System.in);
        String input="";
        String balasan;
        String balasan2;
        out=new ObjectOutputStream(s.getOutputStream());
        out.flush();
        in=new ObjectInputStream(s.getInputStream());
        balasan = "";
        balasan2="";
        while(true)
        {
            balasan="";
            balasan2="";
            input=scanf.nextLine();
            SendMessage(input, out);
            if(input.equals("exit"))break;
            else
            {
                balasan=ReadMessage(in);
                if(balasan.equals("ini server, masukkan username"))
                {
                    input=scanf.nextLine();
                    SendMessage(input, out);
                    balasan2=ReadMessage(in);

                }
            }
        }
        in.close();
        out.close();
        s.close();

        // TODO code application logic here
    }
public static void SendMessage(String word, ObjectOutputStream out)
{
    try{
        out.writeObject(word);
        out.flush();
    } catch (IOException ex){
        Logger.getLogger(Tgs_Client.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public static String ReadMessage(ObjectInputStream in)
{
    String reader="";
    try{
        reader=(String) in.readObject();
    } catch (IOException ex){
        Logger.getLogger(Tgs_Client.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex){
        Logger.getLogger(Tgs_Client.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(reader);
    return reader;
}
}

Pertemuan Ke 4 (Catatan Kuliah)


RMI (Remote Method Invocation)
1.        Definisi
RMI adalah sebuah tekhnik pemanggilan method remote yang lebih secara umum lebih baik dari RPC. RMI menggunakan paradigma pemrograman berorientasi obyek. RMI memungkinkan kita untuk mengirim obyek sebagai parameter dari remote method. Dengan dibolehkannya program Java memanggil method pada remote obyek, RMI membuat pengguna dapat mengembangkan aplikasi Java yang terdistribusi pada jaringan.

2.        Tujuan
1.    Menyediakan fasilitas bagi programmer untuk dapat mendistribusikan objek yang digunakan pada beberapa proses yang berbeda.
2.    Dapat berjalan dalam satu mesin ataupun di beberapa mesin yang terhubung dengan jaringan.

3.        Aplikasi Obyek Terdistribusi
Aplikasi RMI sering kali terdiri dari dua program terpisah yaitu server dan client.
1.    Aplikasi Server
  • Membuat beberapa remote objek
  • Menyediakan referensi terhadap objek-objek tersebut sehingga dapat diakses
  • Menunggu RMI client merequest server
2.   Aplikasi Client
  • Mendapatkan referensi remote ke satu atau lebih objek remote di server
  • Menjalankan method dari objek tersebut
  • Meminta pemanggilan ke beberapa remote objek berbasarkan referensi yang diterimanya.
RMI menyediakan mekanisme dimana server dan client berkomunikasi dan memberikan informasi secara timbal balik, aplikasi ini disebut aplikasi obyek terdistribusi.
4.        Cara Kerja RMI
Dalam model ini, sebuah proses memanggil method dari objek yang terletak pada suatu host/computer remote. Dalam paradigma ini, penyedia layanan mendaftarkan dirinya dengan server direktori pada jaringan. Proses yang menginginkan suatu layanan mengontak server direktori saat runtime, jika layanan tersedia, maka referensi ke layanan akan diberikan. Dengan menggunakan referensi ini, proses dapat berinteraksi dengan layanan tsb. Paradigma ini ekstensi penting dari paradigma RPC. Perbedaannya adalah objek yang memberikan layanan didaftarkan (diregister) ke suatu layanan direktori global, sehingga memungkinkan untuk ditemukan dan diakses oleh aplikasi yang meminta layanan tersebut.
5.        Implementasi RMI


Berikut ilustrasi yang terjadi pada metode RMI:
Programmer pada client menulis :
Server_id.service(values_to_server,result_arguments);
Pada sisi server mempunyai fungsi sebagai berikut :
Public service(in type1 arg from client; out type2 arg to_client)
{——-}
Programmer pada client tidak mengetahui bahwa reply message yang didapatkan berasal dari server yang dikirim melalui jaringan.




Gambar Ilustrasi Implementasi RMI
Komponen-komponen dam RMI(gambar 2.2) :
  • Object A(client) : meminta layanan
  • Object B(server) : menghantarkan layanan
  • Proxy for B
-  Ketika object A mempunyai remote reference ke object B, maka akan timbul objek proxy B pada host object A. Proxy terbuat ketika remote object reference digunakan pertama kali.
-  Proxy adalah perwakilan objek yang berada pada remote, dengan kata lain ketika terjadi invokasi dari A ke B ditangani seolah – olah hanya mengakses Proxy B.
-  Ketika invokasi terjadi proxy menggunakan metode marshals untuk membungkus pesan yang akan dikirim ke server. Dan setelah menerima hasil dari server proxy menggunakan metode unmarshal (membuka bungkus) untuk kemudian diteruskan ke client (Object A).
  •  Skeleton for object B
-          Pada sisi server, terdapat object kerangka (skeleton) yang berhubungan ke class, kalau object pada class tersebut dapat diakses oleh RMI.
-          Skeleton menerima pesan kemudian melakukan unmarshal dan meneruskan ke  method object yang dituju. Dan kemudian menunggu hasil dari object B dan kemudian membungkus hasil (unmarshal) dan kemudian dikirimkan ke client (Objec A).
-          Ada bagian dari skeleton B yang disebut dengan dispatcher. Dispatcher menerima request dari communication module, dan kemudian mengidentifikasi invokasi dan mengarahkan permintaan ke corresponding method ( method pada skeleton yang berfungsi untuk berkomunikasi dengan object).
  • Communication Modul (Modul Komunikasi)
-          Communication modul pada client atau server bertanggung jawab dalam pertukaran pesan yang dilakukan melalui metode request dan reply.
  • Remote Reference Module
-        Bagian ini bertugas untuk menterjemahkan antara referensi objek lokal dan remote. Proses berkomunikasi antara mereka disimpan dalam remote object table.
-       Yang menggenerate class untuk proxy dan skeleton adalah middleware.
-       Contoh : CORBA, Java RMI
Object A dan object B dipunyai oleh aplikasi (berada pada Application Layer) Remote Reference Modul dan Communication modul dimiliki oleh middleware. Proxy B dan Sekeleton B berada antara middleware dan aplikasi yang di generate oleh middleware.
6.        Langkah-langkah  proses dengan RMI :

1.    Urutan pemanggilan pada object client mengaktifkan method pada proxy yang akan berhubungan dengan invoked method (method yang ter-invokasi) pada object B.
2.    Kemudian method yang ada pada proxy melakukan pembungkusan argumen menjadi suatu pesan (marshalling) dan meneruskan ke modul komunikasi.
3.    Berdasarkan pada remote reference yang didapat dari remote reference modul, modul komunikasi memulai request dan reply protocol melalui network.
4.    Modul komunikasi pada server menerima request dari client. Kemudian berdasarkan referensi lokal yang diterima dari remote reference modul maka akan mengaktifkan method untuk berkomunikasi dengan object pada skeleton B (corresponding method).
5.    Method pada skeleton meng-ekstrak (unmarshalling) argumen pada pesan yang di terima dan mengaktifkan corresponding method (method yang berfungsi untuk melakukan komunikasi) pada object B (server).
6.    Setelah menerima hasil dari object B, method dari skeleton akan membungkus hasil tersebut dalam sebuah pesan (marshalling) dan meneruskan pesan yang sudah dibungkus ke modul komunikasi.
7.    Modul komunikasi mengrimkan pesan tersebut ke client melalui jaringan.
8.    Modul komunikasi pada client menerima hasil (reply) dari server dan meneruskan ke corresponding method pada proxy.
9.    Kemudian proxy meng-ektrak hasil (unmarshalling) dan meneruskan ke object A (client).

7.        Contoh RMI dengan menggunakan Java RMI :
Server object akan mencetak ”Hello Ruddy” ke layar & mengembalikan pesan ke klien
Pada sisi server :
-          Server Method
import java.rmi.*;
public interface SimpleInterface       
String printMessage(String name) throws RemoteException;
}
-          Server Object
import java.rmi.*;
import java.rmi.server.*;
public class SimpleServer extends UnicastRemoteObject implements SimpleInterfac
public SimpleServer() throws RemoteException { super(); }
public String printMessage(String name) throws RemoteException {
System.out.println(name);
return(Hello + name);
}
public static void main(String args[]) {
System.setSecurityManager(new RMISecurityManager());
try {
SimpleServer newServer = new SimpleServer();
System.out.println(SimpleServer attempting to
bind to the registry);
Naming.rebind(//ruddy.info:30010/SimpleServer,
newServer);
System.out.println(SimpleServer bound in the registry);
} catch(Exception e) {System.out.println(SimpleServer error: + e.getMessage());
e.printStackTrace();
}}
}

Pada sisi client :
import java.rmi.*;
public class SimpleClient {
private static SImpleInterface server = null;
public static void main(String args[]) {
try {
server = (SimpleInterface)
Naming.lookup(//ruddy.info:30010/SimpleServer);
System.out.println(server.printMessage (Ruddy));
} catch(Exception e) {
System.out.println(SimpleClient error: + e.getMessage());
e.printStackTrace();
}}
}