RSS

Aplikasi MiniMarket dengan Client Server


Setelah semua aplikasi telah kita membuat, sekarang kita membuat program aplikasi java to java dengan bantuan RMI (Remote Method Invocation).

Syarat objek dapat lewat RMI adalah :
1 membuat interface yang extends ke java.rmi.Remote sedangkan , contoh pembuatan interface :


Kita membuat Interface pada package AksesRMI

untuk akses barang :

===============================================================

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AksesRMI;

import Entitas.Barang;
import Koneksi.Koneksi;
import Services.ServicesBarang;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author admin
 */
public class AksesBarang extends UnicastRemoteObject implements ServicesBarang {

    public AksesBarang() throws RemoteException {
    }

    @Override
    public List<Barang> getBarang() throws RemoteException {
        List<Barang> listBarang = new ArrayList<>();
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            ResultSet resultSet = statement.executeQuery("select * from barang");
            while (resultSet.next()) {
                Barang barang = new Barang();
                barang.setIdBarang(resultSet.getString(1));
                barang.setKategori(resultSet.getString(2));
                barang.setNamaBarang(resultSet.getString(3));
                listBarang.add(barang);
            }
            resultSet.close();
            return listBarang;
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
            return null;
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void insert(Barang barang) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("insert into barang values('" + barang.getIdBarang() + "','" + barang.getKategori() + "','" + barang.getNamaBarang() + "',0,0)");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void update(Barang barang) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("update barang set kategori = '" + barang.getKategori() + "',nama_barang='" + barang.getNamaBarang() + "' where id_barang = '" + barang.getIdBarang() + "'");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void delete(Barang barang) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("delete from barang where id_barang = '" + barang.getIdBarang() + "'");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }
}


===============================================================

Untuk AksesDetailTransaksi

===============================================================

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AksesRMI;

import Entitas.DetailTransaksi;
import Koneksi.Koneksi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author admin
 */
public class AksesDetailTransaksi extends UnicastRemoteObject implements Services.ServicesDetailTransaksi{
 
    public AksesDetailTransaksi() throws RemoteException{
     
    }

    @Override
    public List<DetailTransaksi> getDetailTransaksi() throws RemoteException {
        List<DetailTransaksi> listDetailTransaksi = new ArrayList<>();
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT r.id_pengadaan,r.id_barang,b.nama_barang,"
                + "r.harga_beli_satuan,b.harga_jual,r.jumlah,"
                + "r.tgl_kadaluarsa FROM rel_pengadaan_barang r, barang b WHERE b.id_barang = r.id_barang "
                + "AND id_pengadaan = r.id_pengadaan");
            while (resultSet.next()) {
                DetailTransaksi detailTransaksi = new DetailTransaksi();
                detailTransaksi.setId_pengadaan(resultSet.getString(1));
                detailTransaksi.setId_barang(resultSet.getString(2));
                detailTransaksi.setNama_barang(resultSet.getString(3));
                detailTransaksi.setHarga_beli_satuan(resultSet.getInt(4));
                detailTransaksi.setHarga_jual_satuan(resultSet.getDouble(5));
                detailTransaksi.setJumlah(resultSet.getInt(6));
                listDetailTransaksi.add(detailTransaksi);
            }
            resultSet.close();
            return listDetailTransaksi;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }

            }
        }
    }

    @Override
    public void insert(DetailTransaksi detailTransaksi) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("insert into rel_pengadaan_barang values('"+detailTransaksi.getId_pengadaan()+"','"+detailTransaksi.getId_barang()+"',
'"+detailTransaksi.getJumlah()+"'"
                    + ",'"+detailTransaksi.getHarga_beli_satuan()+"','"+detailTransaksi.getTgl_kadaluarsa()+"',
'"+detailTransaksi.getHarga_jual_satuan()+"','"+detailTransaksi.getJumlah()+"')");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }finally{
            if (statement!=null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void update(DetailTransaksi detailTransaksi) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("update rel_pengadaan_barang set jumlah='"+detailTransaksi.getJumlah()+"', "
                    + "harga_beli_satuan='"+detailTransaksi.getHarga_beli_satuan()+"', tgl_kadaluarsa='"+detailTransaksi.getTgl_kadaluarsa()+"', harga_jual_satuan='"+detailTransaksi.getHarga_jual_satuan()+"' "
                    + "where ID_BARANG ='"+detailTransaksi.getId_barang()+"'");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }finally{
            if (statement!=null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void delete(DetailTransaksi detailTransaksi) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("delete from rel_pengadaan_barang where ID_BARANG ='"+detailTransaksi.getId_barang()+"'");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }finally{
            if (statement!=null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }
 
}


===============================================================

Untuk AksesKategori

===============================================================

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AksesRMI;

import Entitas.Kategori;
import Koneksi.Koneksi;
import Services.ServicesKategori;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author admin
 */
public class AksesKategori extends UnicastRemoteObject implements ServicesKategori {

    public AksesKategori() throws RemoteException {
    }

    @Override
    public List<Kategori> getKategori() throws RemoteException {
        List<Kategori> listKategori = new ArrayList<>();
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            ResultSet resultSet = statement.executeQuery("select * from kategori");
            while (resultSet.next()) {
                Kategori kategori = new Kategori();
                kategori.setKategori(resultSet.getString(1));
                kategori.setDeskripsi(resultSet.getString(2));
                listKategori.add(kategori);
            }
            resultSet.close();
            return listKategori;
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
            return null;
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void insert(Kategori kategori) throws RemoteException {
        Statement statement = null;
     
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("insert into kategori values ('"+kategori.getKategori() +"','"+kategori.getDeskripsi()+"')");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void delete(Kategori kategori) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("delete from kategori where kategori = '"+kategori.getKategori()+"'");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }
}


===============================================================

Untuk AksesPengadaan

===============================================================

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AksesRMI;

import Entitas.Pengadaan;
import Koneksi.Koneksi;
import Services.ServicesPengadaan;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author admin
 */
public class AksesPengadaan extends UnicastRemoteObject implements ServicesPengadaan {

    public AksesPengadaan() throws RemoteException {
    }

    @Override
    public List<Pengadaan> getPengadaan() throws RemoteException {
        List<Pengadaan> listPengadaan = new ArrayList<>();
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            ResultSet resultSet = statement.executeQuery("select * from pengadaan");
            while (resultSet.next()) {
                Pengadaan pengadaan = new Pengadaan();
                pengadaan.setId_pengadaan(resultSet.getString(1));
                pengadaan.setTanggal(resultSet.getString(3));
                pengadaan.setSupplier(resultSet.getString(4));
                pengadaan.setTotal_transaksi(resultSet.getDouble(5));
                listPengadaan.add(pengadaan);
            }
            resultSet.close();
            return listPengadaan;
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
            return null;
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void insert(Pengadaan pengadaan) throws RemoteException {
        Statement statement = null;

        int count = 100;
        try {
            statement = Koneksi.getConnecction().createStatement();
            ResultSet resultSet = statement.executeQuery("select tanggal, id_pengadaan from pengadaan");
            while (resultSet.next()) {
                String data1 = resultSet.getString(1);
                String data2 = resultSet.getString(2);
                if (data1.equals(pengadaan.getTanggal())) {
                    if (count == Integer.valueOf(data2.substring(14, 17))) {
                        count++;
                    }
                }
            }
            String id_pengadaan = "TB." + pengadaan.getTanggal2() + "." + count;
            statement.executeUpdate("insert into pengadaan values('" + id_pengadaan + "'  ,'admin'  ,'" + pengadaan.getTanggal() + "'  ,'" + pengadaan.getSupplier() + "'  ,0)");

        } catch (SQLException e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void delete(Pengadaan pengadaan) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("delete from pengadaan where id_pengadaan = '" + pengadaan.getId_pengadaan() + "'");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }
}


===============================================================

Untuk AksesUser

===============================================================

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AksesRMI;

import Entitas.User;
import Koneksi.Koneksi;
import Services.ServicesUser;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author admin
 */
public class AksesUser extends UnicastRemoteObject implements ServicesUser {

    public AksesUser() throws RemoteException {
    }

    @Override
    public List<User> getUser() throws RemoteException {
        List<User> listUser= new ArrayList<>();
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            ResultSet resultSet = statement.executeQuery("select * from user");
            while (resultSet.next()) {
                User user = new User();
                user.setUsername(resultSet.getString(1));
                user.setPassword(resultSet.getString(2));
                user.setLevel(resultSet.getString(3));
                user.setNama(resultSet.getString(4));
                user.setAlamat(resultSet.getString(5));
                user.setTelpon(resultSet.getString(6));
                listUser.add(user);
            }
            resultSet.close();
            return listUser;
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
            return null;
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void insert(User user) throws RemoteException {
        Statement statement = null;
     
        char[] passw = user.getPassword().toCharArray();
        String sandi = "";
        for (int i = 0; i < passw.length; i++) {
            sandi = sandi + passw[i];
        }

        int level;
        if (user.getLevel().equals("Admin")) {
            level = 0;
        } else {
            level = 1;
        }
     
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("insert into user values('" + user.getUsername() + "',md5('" + sandi + "')," + level + ",'" + user.getNama() + "','" + user.getAlamat() + "','" + user.getAlamat() + "')");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void delete(User user) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("delete from user where username = '" + user.getUsername() + "'");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }

    @Override
    public void reset(User user) throws RemoteException {
        Statement statement = null;
        try {
            statement = Koneksi.getConnecction().createStatement();
            statement.executeUpdate("update user set password=md5('" + user.getPassword2()+ "') where username='" + user.getUsername2() + "'");
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                }
            }
        }
    }
}


===============================================================

Semua method yang di definisikan di dalam interface yang extend ke java.rmi.Remote harus melemparkan remote eksepsi : throws RemoteException , contoh :


Semua kelas yang mengimplementasikan interface diatas harus extends UnicastRemoteObject dan memiliki konstruktor yang throws RemoteException; contoh :


Setelah Akses RMI telah kita buat kita membuat Minimarket-api yang fungsinya untuk menghubungkan client dengan servis. Disini kita liat ada 2 package yaitu entitas dan services.



Untuk source code nya bisa diambil disini

Semoga bermanfaat ya :)

Membuat Aplikasi Minimarket Client Server dengan RMI (Remote Method Invocation)



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).
Kita bisa membuat aplikasi mini market kita berupa client server liat disini

Semoga bermanfaat untuk kalian :)

Koneksi Java Netbeans dengan Database MySQL

Koneksi Java Netbeans Dengan Database MySql

Mungkin masih banyak yang belum mengerti bagaimana cara membuat koneksi java ke mysql. Sebenarnya menghubungkan database mysql ke aplikasi java yang akan kita buat tidaklah rumit. coba deh lihat tutorial berikut ini yang menjelaskan tentang cara membuat kode koneksi java ke database mysql

Caranya:
1. Buat Project baru
2. dalam “package” Source Packages buatlah kelas baru bernama “DB”
3. Lalu copy script berikut :

=================================================================
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package minimarket;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 *
 * @author Administrator
 */
public class koneksi implements key {

   public  Connection con;

    public koneksi() {
        try {
            Class.forName(driver).newInstance();
            con = DriverManager.getConnection(url, username, password);
            if (con == null) {
                System.out.println("KONEKSI GAGAL");
            } else {
                System.out.println("KONEKSI SUKSES");
            }

        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        }
    }
}

================================================================
4. Coba test (di-build lalu di-run)

5. Jika muncul pernyataan seperti berikut ini:
Koneksi dengan Datagase gagal: null
ID dan Password Anda gagal No suitable driver found for jdbc:mysql://localhost:3306/minimarket
Artinya program kita belum bisa terhubung dengan database. Kenapa? Karena dalam Library, kita belum memberikan library “MySQL JDBC Driver” yang berfungsi untuk menjembatani program kita dengan MySQL.

6. Silahkan Klik kanan pada “Libraries” lalu pilih “Add library” 



Add Library



6. Dari pilihan “Global Library” pilih “MySQL JDBC Driver” dan Add library. 

7. Coba “build” lagi source code tersebut. Seharusnya sudah connect dan muncul keterangan “BUILD SUCCESSFUL (total time: 0 seconds)”

8. Jika masih belum nyambung, coba cek kembali apakah MySQL dalam XAMPP sudah berjalan/run? apakah nama database-nya benar? apakah ID dan password MySQL-nya benar? 

Pengaturan Manajemen User dan Login

Untuk Membuat form registrasi kita harus membuat inputan untuk user . Untuk membuat form registrasi kita lihat pada desain database kita :


Fokus kita sekarang adalah untuk melengkapi data pada table user, dimana table ini nanti kita gunakan sebagai login ke sistem dan untuk mendeteksi siapa yang sedang melakukan transaksi di dalam sistem kita.

Di samping inputan user baru, dalam form ini juga kita sediakan reset password, fungsi ini kita gunakan jika ada user yang lupa dengan password-nya.


Yang perlu di perhatikan dalam management user adalah password dari setiap user harus benar-benar di lindungi, artinya : tidak boleh ada yang tau password user walaupun kita bertindak sebagai admin, solusi untuk permasalahan ini password harus kita enkripsi salah satunya adalah menggunakan MD5. Contoh penggunaan MD5 untuk enkripsi password dalam kasus di atas :


Untuk reset password,contoh kode-nya :



Setelah Kita membuat Manajemen User , selanjutnya kita membuat Form Login nya.



Form login digunakan untuk validasi apakah user yang login sudah terdaftar di dalam database user, jika tidak maka login di tolak :



jika username dan password yang di inputkan oleh user tidak ditemukan dalam database maka variable level=””, yang artinya query ini tidak menghasilkan nilai karena nilai dari level selalu 0 atau 1, dimana 0=admin, 1=user biasa. Untuk kode yang bewarna merah digunakan untuk mendeteksi user login sebagai admin atau karyawan biasa, dimana jika admin sistem mengirimkan nilai 0 ke formMenu, dan mengirimkan nilai 1 jika karyawan biasa.





Membuat Definisi Login Admin atau Karyawan ke dalam FormMenu
Ada beberapa cara untuk menyajikan FormMenu apakah user sebagai Admin atau tidak,diantaranya adalah dengan memanggil FormMenu yang berbeda sesuai dengan fungsi dan hak akses user.tetapi dalam contoh ini akan saya jelaskan penyajian FormMenu dengan mengkondisikan satu FormMenu dengan berbagai hak akses user.
Langkah awal adalah kita tentukan berapa banyak akses user, dalam contoh ini ada 2 : admin dan karyawan.
Untuk Admin,  tersedia menu seperti ini :


Sedangkan untuk kayawan :



Jika belum login atau logout :


Untuk mengkondisikan menu-menu seperti diatas dapat menggunakan contoh kode berikut :



Untuk mengkondisikan agar FormMenu dapat mengenali login kita maka,kita sedikit rubah konstruktor MainMenu dengan memberikan parameter :



Untuk memanggilnya kondisikan :


Sampai pada langkah ini tentu program anda akan terdapat banyak error, knapa ? karena ada perubahan konstruktor pada Form MainMenu yang sebelumnya sudah banyak di panggil pada Form lain. Untuk itu kita harus memiliki variable global yang mampu menampung dan mendeteksi kondisi login, dalam contoh ini saya akan menggunakan Kelas FormLogin untuk membuat variable global tersebut :


sehingga


Variable kondisiLogin inilah yang akan kita panggil ketika memanggil FormMain Menu dari Form yang lain, contoh ketika kita berada pada table barang, dan ingin back ke Menu utama, secara automatis sistem akan memeriksa parameter yang akan di berikan :


Untuk mendeteksi siapa saja yang Login dan Menyimpan ke dalam database transaksi.

Jika pada sebelumnya setiap ada transaksi(baik pengadaan maupun penjualan) usernya sudah kita tentukan, dan sekarang karena kita sudah punya data user maka agar tercatat user siapa yang login ke sistem perlu juga di deteksi dan disimpan kedalam database.



Variable userLogin= akan berisi username yang sukses login. Variable inilah yang akan kita manfaatkan untuk inputan jika melakukan transaksi.

Setelah itu kita ke kelas Pengadaan Barang :


Kita set pada bagian insertnya kita isikan "root"

Insert ke table pengadaan yang mula-mula kita set manual, sekarang kita isi dengan variable global userLogin bertipe static. Lakukan juga dengan cara yang sama untuk Kelas Penjualan Barang.

Semoga bermanfaat ya :)

Membuat Laporan Menggunakan iReport 4.5.1 - Java MySQL



Setelah kita mendesain sebuah form pada aplikasi minimarket. Sekarang saya akan membuat tutor. bagaimana cara membuat laporan pada aplikasi tersebut. Untuk menampilkan sebuah laporan kita perlu suatu library (JasperReport) dan iReport. Untuk melakukan penginstallan ini bisa menggunakan plugin pada Netbeans, bisa juga menginstall .exe. Saya membuat tutor. ini dengan menggunakan sebuah installan .exe dan menggunakan versi iReport 4.5.1. Akan tetapi saya tidak akan menjelaskan bagaimana menginstallnya karena sama halnya dengan menginstall software-softaware lain. Baiklah setelah anda menginstall iReport, langkah yang dilakukan selanjutnya adalah :
1. Membuat koneksi dari iReport kedalam database. Klik langkah pada gambar berikut :


2. Setelah itu, akan muncul sebuah form, seperti gambar dibawah ini. Dan pilih "Database JDBC connection" 


3. Kemudian klik Next. Akan muncul form baru. Kemudian ada beberapa kolom yang harus diisi. Yang pertama adalah beri nama Koneksi_minimarket. Kemudian pada JDBC Driver pilih "MySQL (com.mysql.jdbc.Driver)". Masukkan url dari database anda, pada gambar dibawah ini url untuk database aplikasi minimarket yang bernama mini_market. Ingat cara menulis url? yaitu "jdbc:mysql://localhost:3306/mini_market". Username dan Password merupakan default dari XAMPP, biasanya username nya merupakan "root" dan passwordnya tidak ada, jika XAMPP anda di set suatu password maka inputan. Klik test untuk melihat koneksi sukses atau tidak.


Jika koneksi sukses akan seperti dibawah ini :


4. Setelah itu klik save untuk menyimpan koneksi tersebut.


5. Langkah berikutnya adalah menentukan desain laporan. Klik langkah ke-2. Lihat pada gambar dibawah ini :



6. Kemudian akan muncul sebuah form untuk memilih desain yang sudah ada pada iReport, akan tetapi jika ingin mendesain sendiri juga telah disediakan. Jika sudah klik "Launch Report Wizard".


7. Langkah selanjutnya menentukan direktori untuk menyimpan file yang kita buat. Klik Next :


8. Langkah kedelapan adalah menampilkan database dengan query untuk memanggilnya. Pada contoh dibawah ini menampilkan semua database pada tabel barang.


9. Kemudian langkah ini adalah menampilkan Fields yang akan ditampilkan pada form. Jika ingin menampilkan semua, maka pindah semua nama field dengan menggunakan tanda ">>". 



10. Dan yang terakhir adalah klik finish. Anda telah berhasil membuat laporan dengan iReport.

11. Setelah pada form barang dibuat laporannya, kita dapat membuat laporan untuk keperluan yang lain.

Semoga Bermanfaat :)

Implementasi Pemrograman Visual Kedalam Sistem Informasi



MEMBUAT SISTEM INFORMASI MINIMARKET

Setelah sebelumnya saya membahas tentang membuat database di Power Designer 15. Sekarang adalah mengimplementasikan ke dalam desain visual nya

Dibawah ini adalah hasil dari pembuatan Conceptual Data Model dari StudyKasus MiniMarket.


Ini adalah bagian Physical Data Model yang nantinya akan di generate menjadi database nya yang berekstensi .sql

Setelah database kita buat, kita membuat user interface yang berbasiS GUI yang akan diimplementasikan dalam desain visual pada netbeans 7.3

1. MEMBUAT FORM KATEGORI

Kita buat user interface untuk form kategori barang adalah sebagai berikut


Di dalam databasenya :



2. MEMBUAT FORM DAFTAR BARANG



JComboBox yang digunakan oleh kategori mengambil semua isi dari kolom kategori pada table kategori, contoh :



Contoh baris program untuk mengambil/menampilkan nilai pada table kedalam JCombobox : missal nama dari JCombox kita adalah comboKategori


3. VALIDASI INPUTAN

a. PROSES INSERT
Proses ini digunakan untuk mencegah adanya inputan data sampah/data yang tidak valid, seperti mengisi nilai dengan string kosong dll.



Gunakan pengkondisian(IF…ELSE) untuk menghindari data yang tidak diinginkan bisa masuk kedalam database, contoh :


b. PROSES DELETE



Proses delete adalah menghapus baris data yang diinginkan,agar supaya dikenali baris mana yang akan dihapus maka harus dipilih(di klik) terlebih dahulu ID mana yang di gunakan sebagai kunci penghapusan.
Disamping itu proses delete jika memenuhi syarat jangan langsung dilakukan penghapusan, hal ini sangat rawan bagi user jika tidak sengaja melakukan perintah delete.



Untuk menampilkan form konfirmasi gunanakan ConfirmDialog yang dimiliki oleh kelas JOption, contoh :



Setelah anda selesai melakukan praktek diatas, maka form input dan output dari tabel kategori dan table barang sudah tercipta, untuk selanjutnya adalah membuat form pengadaan barang dan detail pengadaan.

4. MEMBUAT FORM PENGADAAN BARANG

Desainlah form pengadaan barang sehingga memiliki tampilan sebagai berikut :





Dalam form diatas tidak terdapat inputan id pengadaan, karena kita ingin memberikan format automatis dari id pengadaan adalah sebagai berikut :
TB.TANGGAL_PEMBELIAN.NOMOR
Misal pada tanggal 10 April 2013 kita melakukan beberapa transaksi maka ID yang terbentuk adalah :
TB.10.04.2013.100
TB.10.04.2013.101
TB.10.04.2013.102
………………………….. dst.
Petunjuk :
Untuk membuat ID_PENJUALAN seperti contoh diatas dapat menggunakan sintak :


Pada contoh diatas inputan tanggal berupa tampilan tanggal, kita dapat menggunakan objek ini dengan menambahkan library JDateChooser, dapat anda download di www.netbeans.org cari plugin dengan nama JDateChooser, kemudian tambahkan pada jendela palette melalu palette Manager :


Dalam Form diatas juga terdapat button didalam JTable, untuk membuat button tersebut dapat menggunakan seperti contoh berikut :
o Membuat kelas yang extends ke JButton dan mengimplementasikan TableCellRenderer


Kemudian panggil kelas tersebut kedalam baris kolom pada proses select, contoh :

o Untuk memberikan evenhandling terhadap button di dalam JTable,salah satunya dapat menggunkan sintak berikut :


o Jika anda ingin melakukan insert data tanpa harus menekan tombol insert (cukup menggunkan perintah enter keyboard) kita bisa memberikan event pada txtSuplier dengan Event keyPressed.


Kemudian kondisikan seperti sintak berikut :


Membuat Form Detail Pembelian

Setelah itu kita membuat form detail transaksi seperti di bawah ini :



Di bagian detail barang , akan didapatkan hasil seperti ini




 Nama Barang di ambil dari kategori barang . Seperti pada gambar diatas.

Untuk load data dari database ke JComboxbox dapat dilihat dalam petunjuk pada praktikum 1, untuk memberikan event pada JCombobox perhatikan contoh berikut :




Ketika kita memanggil Form Detail Pengadaan Secara Automatis kita mendapatkan nomor id_pengadaan seperti berikut :


Untuk mengirimkan nilai tertentu dari satu kelas/Form ke kelas/Form yang lain dapat kita lakukan dengan membuat konstruktor yang meminta parameter, contoh sintak berikut :


Dalam Form diatas juga terdapat JRadioButton yang menyatakan ada tidaknya tanggal Kadaluarsa,kita dapat memberi event agar jika salah satu dipih maka yang lain di disable, kita dapat memberikan event mouse enter dan mouse exit,
Missal :
JRadioButton1 memiliki nama=JRadioButton1
JRadioButton2 memiliki nama=JRadioButton2


Pada Form diatas terdapat juga Form untuk memberikan harga jual,karena harga jual hanya terdapat satu harga dan tidak mungkin kita memberikan harga yang berbeda pada satu barang maka pastikan penyimpanan harga jual ada dalam table barang, ubahlah table anda jika terdapat kesalahan analisa :

Buatlah juga Form untuk memberikan harga jual



Load data barang kedalam Form harga jual,dan lakukan edit jika harga jual belum di berikan,contoh :



Untuk menampilkan data diatas dapat menggunkan query :



Setelah anda selesai pada praktikum 2 maka seharusnya proses yang anda lakukan adalah seperti berikut :




5. MEMBUAT FORM MENU

Untuk memudahkan pengaturan dan analisa data,langkah selanjutnya sebelum kita ke transaksi penjualan adalah membuat Form Menu.



untuk menu user :


menu management barang :


menu pengadaan :


menu penjualan :


menu laporan :



Anda bebas dalam membuat tampilan Form Menu, agar lebih menarik anda dapat memberikan Icon ke dalam tiap kategori menu. Setelah anda membuat form menu,hubungkan semua form yang telah anda buat sebelumnya sehingga semua data tersingkronisasi.

Selanjutnya buatlah form Stok untuk menampilkan detail stok, contoh :



Dalam form stok terdapat search barang, sebelumnya berikan event terlebih dahulu terhadap textField Searching dengan


Kemudian kita dapat menggunakan sintak query seperti berikut untuk memperoleh efek pencarian


6. MEMBUAT FORM PENJUALAN

Setelah proses pengadaan selesai langkah selanjutnya adalah melakukan design penjualan barang :
Form ini



Form ini terdiri dari dua table, table pertama merupakan daftar dari barang yang akan di jual, dimana barang yang ditampilkan adalah barang yang jumlah stoknya lebih dari nol (0). Table kedua akan menampung barang yang akan dibeli oleh konsumen, ada beberapa catatan yang harus diperhatikan dalam proses transaksi disini :
-  Kita di tolak untuk melakukan semua aktifitas kecuali menekan button back jika kita belum menekan button “Transaksi Baru”
Petunjuk :
Buatlah dua kondisi, misal kondisi awal dan kondisi transaksi aktif :
Contoh : kondisi awal


Contoh : kondisi transaksi aktif


Id Penjualan akan automatis di generate ketika kita membuat transaksi baru, dan button transaksi baru akan disable sampai ada pembayaran.

Kita dapat membuat kode automatis dari kombinasi tanggal dan counter seperti yang pernah kita lakukan pada transaksi pengadaan :
Contoh : generate id_penjualn




Jika terjadi transaksi maka ada stok barang yang berkurang langsung di tampilkan dalam table barang

Pada proses ini berarti kita juga melakukan update terhadap stok barang
- Jika terjadi pembatalan pembelian maka stok barang harus bertambah

Pada proses ini berarti kita juga melakukan update terhadap stok barang
- Setiap terjadi transaksi per-item maka sistem akan menghitung laba dari setiap transaksi

Untuk memperoleh laba, disini diperlukan analisa berapa harga beli dan berapa harga jual dari tiap barang, karena pilihan kita berdasarkan stok yang masih ada, maka harus kita telusuri sebenarnya stok yang ada itu berada pada id_pengadaan berapa dan berapa harga jualnya, disini sangatlah memungkinkan dalam satu kali transaksi kita memperoleh dua harga beli yang berbeda sehingga ukuran labanya pun tidak sama, namun dalam aplikasi yang diinginkan adalah laba total, untuk contoh kode berikut mungkin dapat dijadikan bahan analisa mendapatkan laba :




7. MEMBUAT REPORT

Membuat Report di Java-Netbeans Menggunakan JasperReport dan Ireport

- JasperReport : adalah software(library) open source untuk reporting.
- iReport : adalah Visual Designer untuk membuat laporan yang komplek, menggunakan jasperReport Library.

jasperReport dapat anda download di alamat : http://jasperforge.org/

 Installasi iReport dan jasperReport ke dalam Netbeans

Dalam praktikum ini kita akan menggunakan :
- iReport versi 5.0.4 dapat anda download di plugin.netbeans.org
- jasperReport versi 5.1
disamping libarary jasperReport kita juga membutuhkan libarary pendukung dari jasperReport a.l :
- commons-beanutils-1.8
- commons-collections-3.2
- commons-digester-2.1
- commons-logging-1.1.2
- groovy-all-1.8
- jdt-compiler/jasper-compiler-jdt
Setelah semua liarary sudah kita dapatkan maka proses installasinya adalah sebagai berikut :

Buka editor netbeans-> tools -> Plugins


Pilih Downloaded -> Add Plugin


Untuk memeriksa apakah iReport sudah terinstall pada netbeans kita dapat kita periksa dengan :
Membuat New File -> cari menu Report, perhatikan langkah dibawah ini :

Langkah selanjutnya adalah menambahkan library jasperReport dan library pendukung lainnya dengan cara : Buatlah folder baru, kemudian berilah nama, misal : lib dan untuk penjelasan selanjutnya lihat disini

Semoga penjelasan saya di atas dapat bermanfaat bagi anda. Terima kasih :)