Pages

SELAMAT DATANG (WELCOME)

Monday, April 22, 2013

Membuat Web Service

Yuppp, tulisan kali ini bakal ngebicarain gimana cara ngebikin web service instan yang bisa dipake jadi tugas kuliah. Sebenarnya, requirement dari tugas gw kali ini cuma mengimplementasikan web service. Sangat minimal emang requirement-nya. Kalo diliat dari situsnya netbean, sejam juga selesai tuh. Cuma berhubung dosennya rese, jadi musti pake yang namanya database. Masalahnya, menurut sang dosen, inti dari web service adalah berbagi operasi penting yang gak bisa dilakukan oleh suatu client. Nah, hal yang mirip2 gitu adalah gimana caranya mengakses suatu data yang krusial untuk dibagi, tapi perlu di-share penggunaannya. Jadilah harus ada suatu mekanisme pengaksesan data di server web service yang nantinya akan dikirimkan oleh client dari web service. Kira-kira gambarannya gini:
Jadi....Kasusnya gini. Ada sebuah server yang memiliki database tentang harga kurs. Server akan memberikan informasi ini kepada client. Hanya informasi harga. Server gak melakukan hal lain, selain memberikan data tersebut. Untuk di-client, berguna menampung harga yang diberikan server dan melakukan perkalian terhadap input user. Jadi yang dah gw bikin, interface nya, pas jalan program sebagai berikut:
Jadiiiii... Yang perlu dilakukan pertama kali untuk mengimplementasikan hal ini, pastinya ngebikin databasenya. Asumsi, gw dah tau wahai reader semua, gimana cara ngebikin database-nya. Gw pake MySQL bundle-an dari XAMPP, dan nama database adalah "konversi" dengan 1 tabel (yaitu "mata_uang"), dengan gambaran data sebagai berikut:
Setelah itu, yang perlu kita lakukan adalah membuat web service di sisi server web service dengan menggunakan netbean (Gw pake Netbean versi "6.9.1" dan java versi "1.6.0_26-b03"). Selalu ingat, bahwa web service gak punya yang namanya interface terhadap end-user. Yang dimiliki oleh server hanya operasi. Jadi, sekarang kita bikin satu operasi konversi. Langkah2nya adalah:
Klik File --> New Project. Pilih Categories : "Java Web" dan Project bagian "Web Application". Tekan Next, terus ganti deh namanya sesuai keinginan. Kalo gw, hasilnya adalah seperti ini:
Pilih Server, pastikan memilih Server GlassFish 3, dan Java EE Version-nya adalah Java EE 6 Web. Lalu tekan Finish (gw melewatkan pemilihan framework, coz gw gak make framework pas bikinnya. Jadi langkah berikutnya gw abaikan sampe muncul satu project yang dah gw bikin).
Langkah selanjutnya adalah membuat si web service sehingga memiliki operasi yang meminta input "mata uang asal" konversi dan "mata uang ke" konversi (Jadi maxutnya, kalo dari USD --> IDR, USD jadi mata uang asal, IDR jadi mata uang ke). Caranya adalah, klik kanan di bagian project yang sudah terbentuk tadi, pilih new, dan pilih "Web Service". Lalu akan muncul suatu window pop-up untuk menentukan nama kelas dan lain-lain. Yang perlu dilakukan adalah mengeset namanya. Gw nge-set dengan hasil seperti ini:
Lalu, pergi ke bagian Desain (tab atas sebelah kiri), tekan bagian add operation dan masukkan parameter sebagai berikut:
Setelah itu tekan OK, dan akan muncul suatu operasi. Operasi dari web service ini, masih memiliki operasi yang kosong dengan return value adalah 0. Sekarang, tugas kita adalah membuat method-nya. Method yang akan kita buat adalah untuk mengambil nilai database. Cara pengambilan yang gw lakukan agak sedikit ribet bin rumit, coz gw make kelas lain buat koneksinya, dan enggak nanamin di operasi web service. Jadi, langkah berikut yang kita lakukan adalah membuat 1 kelas untuk koneksi yaitu kelas DbManager. Caranya, pilih New--> Java Class --> Masukkan nama adalah DbManager seperti berikut:
Isi dari kelas ini adalah sebagai berikut:

package konversi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DbManager {
    /* digunakan  untuk menampung koneksi */
    private Connection conn = null;
    boolean connected = false;
    public DbManager(){

 }

  public void Connect() throws SQLException {
        boolean flag = false;
        try{
            Class.forName("com.mysql.jdbc.Driver");
        }catch (Exception e){
            e.printStackTrace();
            flag=true;
        }
        if(!flag){
            try {
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/konversi","root","");
                connected= true;
            }catch(SQLException e){
                throw new SQLException();
            }
        }
    }

    public ResultSet fetchRows(String sql){

        ResultSet rs = null;
        try{
             Statement st = conn.createStatement();
             rs = st.executeQuery(sql);
        }catch(Exception e){
             System.out.println(e.getMessage());
        }
        return rs;
 }
}

Lalu buat lagi sebuah kelas baru, yaitu kelas Uang dengan isi sebagai berikut:


package konversi;
import java.sql.ResultSet;

public class Uang {

    private DbManager dbMgr = new DbManager();
    private String asal;
    private String ke;
    private int harga;

    public String getAsal() {
        return asal;
    }

    public void setAsal(String asal) {
        this.asal = asal;
    }

    public String getKe() {
        return ke;
    }

    public void setKe(String ke) {
        this.ke = ke;
    }


    public int getHarga() {
        return harga;
    }

    public ResultSet viewMhs(Uang u){

        try{
            dbMgr.Connect();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        String query = "SELECT harga FROM `mata_uang` WHERE `MataUangAsal`='"+u.getAsal()+"' AND `MataUangKonversi`='"+u.getKe()+"'";


        ResultSet resultMhs = dbMgr.fetchRows(query);
        return resultMhs;
    }
}

Dan tugas berikutnya adalah, menambahkan baris program pada operasi web service untuk memanggil kelas2 yang telah dibuat sebelumnya. Hasil kode dari kelas operasi yang terbentuk setelah dilakukan penambahan kode adalah:

package konversi;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 *
 * @author Asus
 */
@WebService()
public class KonversiKurs {

    /**
     * Web service operation
     */
    @WebMethod(operationName = "TukarUang")
    public int TukarUang(@WebParam(name = "asal")
    String asal, @WebParam(name = "ke")
    String ke) {
        //TODO write your implementation code here:
        System.out.println("harga ");
         Uang u = new Uang();
         u.setAsal(asal);
         u.setKe(ke);
         ResultSet result = null;
         int harga=0;
         
         result = u.viewMhs(u);
         try {
              while(result.next()){
                  harga = result.getInt("harga");
                  
              }
         } catch (SQLException e) {
             e.printStackTrace();
         }
        return harga;
    }

}


Kalo ada error, kemungkinan library MySQL JDBC belum terintegrasi dengan project tadi. Cara menambahkannya adalah dengan melakukan klik kanan pada project, lalu pilih properties. Di selebah kanan, pilih "libraries", dan klik "Add Library" lalu pilih MySQL JDBC.
Dan jadilah service-nya. Tinggal lakukan klik kanan di bagian project web application yang tadi, terus pilih Deploy. Kalo mau tau udah jalan ati belum service-na tinggal pilih bagian "Web Service" di bagian Project, terus pilih satu tingkat di atas operasi yang terbentuk, dan klik kanan, lalu pilih "Test Web Service".
Karena Service dah jadi, Langkah selanjutnya adalah membuat client-nya. Cara membuat klien adalah, buat sebuah project baru. Pilih Categories "Java", dan project "Java Application". Setelah terbentuk project baru, klik kanan di project tersebut, lalu Pilih New--> Web Service Client. Masukkan referensi web service, sehingga client bisa meng-generate dan mengenali service dari server dengan memasukkan WSDL dari web service. WSDL didapat pada saat meng-klik link WSDL yang muncul saat melakukan "Test Web Service" di langkah sebelumnya. Berikut gambarannya:
Dan terbentuklah suatu folder "Web Service References" di sebelah kanan Project tadi. Hal berikutnya yang kita lakukan adalah membuat suatu GUI untuk ditampilkan pada end-ser. Pada Project, pilih New-->JFrame Form, atur namanya sesuai keinginan. Maka akan terbentuk satu kelas Jframe. Dan pada bagian desain, desain-lah form tersebut sehingga berbentuk seperti ini:
Lalu, pada kelas tersebut, di bagian source (Di tab atas ada pilihan source dan design), tambahkan kode untuk memanggil web service. Caranya, klik kanan pada source, lalu pilih Insert code. Akan muncul pilihan untuk memasukkan kode dari web service. Pilih call web service operation, muncul window pop-out dan pilih operasi tukarUang. Gambar sebagai berikut:
Akan tergenerate satu method bersifat static dari java. Method bersifat static ini artinya bisa dipanggil tanpa membentuk objek dari kelas c method. Jadi tinggal panggil ajah pas menjalankan Event dari Button. Jadi tugas selanjutnya adalah membuat Event dari Button. Klik kanan pada Button "Konversi", terus pilih "Event" --> "Action" --> "ActionPerformed,...........". Setelah itu, akan terganti ke dalam mode source, dan paste kode berikut pada method yang dijalankan ketika action button dijalankan:
package konversi;
tring a = asalMataUang.getSelectedItem().toString();
S String b = KeMataUang.getSelectedItem().toString();
int angka_nominal = Integer.parseInt(nominal.getText());
int harga = angka_nominal*tukarUang(a, b);
jTextField2.setText(String.valueOf(harga));
Lihat kan, disana, kita tinggal memanggil method tukarUang(a,b). Untuk kode diatas, nama variabel dari setiap textfield dan combobox mohon disesuaikan sendiri. Gw nganggap lo dah ahli banget buat hal ini. Jadi gak bakal gw bahas lanjut.

1 comment:

Anonymous said...

konfigurasi alamat server pada aplikasi client itu kan sudah paten,, nah bagaimana caranya agar konfigurasi alamat server ada di luar / disimpan pada sebuah file misalnya..