Archive for the 'Java' Category



14
Nov
07

Serializable? saya kira saya mulai paham

Saya tulis kode ini:

package model;
import java.io.Serializable; 

public class bookModel implements Serializable {
    private int id;
    private String title;
    private String writer;
    private String publisher;
    private int page;
    /** Creates a new instance of bookModel */
    public bookModel() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    [...ble..ble..ble...]

}

class di atas merupakan class serializable, kenapa perlu mengimplementasi Serializable? Karena nantinya setelah object dari class ini tercipta, object tersebut akan di passing ke-class lain dan di pakai di sana. Kedua class harus tahu tipe data dari object tersebut sehingga dapat digunakan dengan baik.Misalnya, saya menciptakan object dari class di atas:

 bookModel book = new bookModel();

Jika object itu diakses melalui jaringan (socket, RMI, dll) tipe data dari object tersebut akan menjadi Object. Jadi book menjadi bertipe Object. Padahal class lain yang memerlukan object book harus tahu tipe aslinya (bookModel). Untuk mengetahui itu, maka perlu di-deserialize / casting object tersebut:


//rmi

bookModel book = (bookModel)Naming.lookup("bookDesign");

Untuk itulah diperlukan java serialization yang mempermudah proses-proses pertukaran object.

Advertisements
12
Nov
07

Problem in writing RMI-database application, but it solved today :)

Dari hari jumat kemaren saya nulis aplikasi database sederhana tapi nerapin RMI di dalamnya, untuk manggil method yang berfungsi untuk melakukan beberapa proses ke database. Dari hari jumat ketemu masalah dan stuck di situ, connection variabel yang sial itu selalu null. Hari ini dah ketemu pemecahannya, satu dari sekian cara mungkin 😦

Sebelum lanjut berikut ini pemahaman saya tentang RMI, RMI itu di pake memanggil method yang ada di komputer lain (bisa jadi server) secara remote. Untuk memakai suatau method sebenarnya saya cukup membuat object dari class yang memiliki method yang ingin dipakai dan memanggil method itu via object tsb. Tapi bagaimana klo method tersebut ada di komputer lain? Karena itulah saya pake RMI. Bagaimana teori kerjanya secara masih sedang dipelajari. Nanti saya tulis dipost selanjutnya. Ok lanjut…

Editor yang saya pake NETBEANS 5.5 dengan JDK 1.5

Ini model tabel database-nya dari app yang dibuat:

table.png
Berhubung saya juga nerapin arsitektur MVC maka saya buat modelnya(setter/getter) dulu:

Code:


package model;

import java.io.Serializable;

/**

*

* @author JollkY

*/

public class Book implements Serializable {

	private int id;
 	private String title;
	private int page;
	private String publisher;

	private String writer;</font>

	/** Creates a new instance of Book */
	public Book() {

	}

	public int getId() {
		return id;
	}

	public void setId(int id) {

		this.id = id;

	}

	public String getTitle() {

		return title;

	}

	public void setTitle(String title) {

		this.title = title;

	}

	[........ source lengkapnya di http://www.4shared.com/file/29059871/5faf7c8/src.html .......]
}

Sebelum lanjut untuk membuat controller dan DAO-nya, diperlukan design method-nya dulu dalam suatu interface sehingga untuk controller dan DAO-nya tinggal implements aje gitu.Code: package design;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;
import model.Book;

/**
*
* @author JollkY
*/
public interface dataAccessObject extends Remote {
public int saveBook(Book objBuku) throws RemoteException;
public int deleteBook(int idBuku) throws RemoteException;
public int editBook(Book objBuku) throws RemoteException;
public List<Book> getAllBook() throws RemoteException;
public Book getBookById(int id) throws RemoteException;
public Book getBookByTitle(String title) throws RemoteException;
public Book getBookByWriter(String writer) throws RemoteException;
}

err… dari listing method yang ada di interface itu, saya baru buat coding lenkap untuk method getAllBook(), yang lainnya blum. Blum sempat aja. Selanjutnya adalah buat File koneksi dolo.

Code:

package Connection;

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

/**
*
* @author JollkY
*/
public class DBConnection {
private Connection con = null;
private String DRIVER = “com.mysql.jdbc.Driver”;
private String URL = “jdbc:mysql://localhost:3306/mybook”;
private String USER = “binsus”;
private String PASS = “phpBB2”;
/**
* Creates a new instance of DBConnection
*/
public DBConnection() {
if(con==null) {
try {
Class.forName(DRIVER).newInstance();
this.con = DriverManager.getConnection(URL, USER, PASS);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}

public Connection getConnection() {
return this.con;
}

[…..Source lengkap di sini…..]
}

Abis itu buat code untuk controller dan DAO. Controller dan DAO ini yang merupakan implement dari interface dataAccessObject, nantinya di letakkan di sisi server yang dipakai server untuk membuat koneksi dan melakukan akses ke database.

Berikut code controller

Code:

package controller;

import Connection.DBConnection;
import dao.BookDao;
import design.dataAccessObject;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.List;
import model.Book;

/**
*
* @author JollkY
*/
public class BookController implements dataAccessObject {

/** Creates a new instance of BookController */
public BookController() throws RemoteException {
UnicastRemoteObject.exportObject(this);
}

public int saveBook(Book objBuku) throws RemoteException {

return 0;
}

public int deleteBook(int idBuku) throws RemoteException {

return 0;
}

public int editBook(Book objBuku) throws RemoteException {

return 0;
}

public List<Book> getAllBook() throws RemoteException {
List<Book> listBook = new ArrayList<Book>();
DBConnection con = new DBConnection();
BookDao dao = new BookDao(con.getConnection());
listBook = dao.getAllBook();
return listBook;
}

[…..Source lengkap di sini….]
}

berikut code DAO,

Code:

package dao;

import Connection.DBConnection;
import design.dataAccessObject;
import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Book;

/**
*
* @author JollkY
*/
public class BookDao implements dataAccessObject {
private Connection con = null;
private PreparedStatement st = null;
private ResultSet rs = null;
int sukes = 0;

/** Creates a new instance of BookDao */
public BookDao(Connection con) {
this.con = con;
}

public int saveBook(Book objBuku) throws RemoteException {

return 0;
}

public int deleteBook(int idBuku) throws RemoteException {

return 0;
}

public int editBook(Book objBuku) throws RemoteException {

return 0;
}

public List<Book> getAllBook() throws RemoteException {
String query = “SELECT * FROM buku”;
List<Book> daftarBuku = new ArrayList<Book>();
if(this.con==null) {
System.out.println(“Con null”);
}
try {
this.st = this.con.prepareStatement(query);
this.rs = this.st.executeQuery();
while(this.rs.next()) {
Book b = new Book();
b.setId(this.rs.getInt(1));
b.setTitle(this.rs.getString(2));
b.setPage(this.rs.getInt(3));
b.setPublisher(this.rs.getString(4));
b.setWriter(this.rs.getString(5));

daftarBuku.add(b);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return daftarBuku;
}

[….sorce lengkap di sini….]

}

Code untuk server

Code:

package Server;

import controller.BookController;
import design.dataAccessObject;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

/**
*
* @author JollkY
*/
public class ServerBook {

/** Creates a new instance of ServerBook */
public ServerBook() {
try {
// String name = “dataAccessObject”;
dataAccessObject bookController = new BookController();
// dataAccessObject stub = (dataAccessObject) UnicastRemoteObject.exportObject(bookController, 0);
// Registry regist = LocateRegistry.getRegistry();
// regist.rebind(name, stub);

Naming.rebind(“dataAccessObject”, bookController);
System.out.println(“Server Ready”);
} catch(Exception ex) {
ex.printStackTrace();
}
}

public static void main(String[] args) {
new ServerBook();
}

}

Naming.rebind(“dataAccessObject”, bookController); – berguna untuk melakukan remote call ke RMI registry yang ada di localhost.

Code untuk client

Code:

package Client;

import controller.BookController;
import design.dataAccessObject;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.List;
import model.Book;

/**
*
* @author JollkY
*/
public class Tester {

/** Creates a new instance of Tester */
public Tester() {
}

public static void main(String[] args) {
try {
//Registry regis = LocateRegistry.getRegistry();
//dataAccessObject dataBuku = (dataAccessObject) regis.lookup(“dataAccessObject”);

Object obj = Naming.lookup(“dataAccessObject”);
dataAccessObject dataBuku = (dataAccessObject) obj;
// BookController dataBuku = new BookController();

List<Book> allBook = dataBuku.getAllBook();
// System.out.println(allBook);
for(Book b:allBook) {
System.out.println(b.getId());
System.out.println(b.getTitle());
System.out.println(b.getPage());
System.out.println(b.getPublisher());
System.out.println(b.getWriter());
System.out.println(“======================”);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}

}

Naming looku, untuk melihat apakah di dalam rmiregistry ada object dengan nama “dataAccessObject”. Obect ini sebenarnya bertipe dataAccessObject, tetapi saat “diambil” dari rmiregistry dia kehilangan tipe datanya. Untuk perlu dilakukan casting

dataAccessObject dataBuku = (dataAccessObject) obj;

Compiling and Running…

1. Lakukan hal berikut. Klik kanan pada nama project -> pilih Properties -> klik menu Run -> Browse main class -> pilih class server (“ServerBook” untuk app saya). Hal ini berguna untuk memberitahukan pada java, untuk menjalankan class ini saat saya mengeksekusi file .jar -nya.

2. Compile fil-file tersebut

compiling.png

3. Buat class stub dan skeleton -nya.

stub_skel.png

4. Jalankan rmregistry. Lakukan ini dalam folder src, sebab akan gagal saat menjalankan server jika dilakukan di luar folder src. Blum tau juga apa sebabnya T.T

start_rmi.png

5. Pindah ke folder dist dan eksekusi file .jar -nya

run_jar.png

6. Eksekusi file file client

done.png

Hampir lupa ini struktur project di netbean -nya

struct.png

Masalah yang saya temukan adalah saat saya menjalankan server sama dengan cara menjalankan client, variabel connection selalu null. Tapi setelah melakukan point 1 dan point 5 server berjalan dengan lancar. Dan jangan lupa pada class Book perlu implements Serializable. 🙂

Link download http://www.4shared.com/file/29059871/5faf7c8/src.html

that’s all for today, Gracias 🙂

03
Aug
07

Tanggal String, cukup fleksibel

Potongan kode untuk membuat tanggal yang cukup fleksibel.

Pseudocode:

{….}

Calendar cal = Calendar.getInstance(TimeZone.getDefault());

String TIME_FORMAT = “yyyy-MM-dd”;

java.text.SimpleDateFormat stf = new java.text.SimpleDateFormat(TIME_FORMAT);

stf.setTimeZone(TimeZone.getDefault());

String tglTransaksi = stf.format(cal.getTime());

{….}

11
Jul
07

Java database concept

Konsep pemrogramman database dengan java!!

Yuuukkksss… saya bukan orang generalis tapi saya cuma pengen belajar, meskipun saya lebih tertarik

ke jaringan,

tapi kan bukan berarti saya gak boleh belajar java programming, sapa tau saya bisa mengaplikasikan java dalam jaringan dan pastinya bisa.

Tulisan in cuma sekedar untuk mambantu saya mengingat lagi apa yg dah dipelajari, biar gak rugi…

Dalam aplikasi yang menghubungkan java dengan database, sebaiknya struktur programnya (code) di bagi menjadi tiga layer, yaitu:

1. Layer Aplikasi

2. Layer Bisnis Objek

3. Layer Data Access Object

4. Data base

5. Accessor (Setter & Getter) / model

Pembahasan:

1. Layer aplikasi hanya berisi source code yang nantinya berfungsi untuk mengatur tampilan yang akan berinteraksi dengan user.

2. Layer Bisnis Objek hanya berisi source code yang berguna untuk menghubungkan layer aplikasi dengan layer DAO. Permintaan koneksi ke database juga dapat dimulai dari sini. Biasanya saya membuat suatu class static lain benama DataBaseConnection() agar propertynya dapat dipakai langsung, kemudian dilayer ini saya membuat objek Connection(), misallnya:

Connection con = DataBaseConnection.DataBaseConnection()

Kode di atas akan memanggil constructor kepunyaan class DataBaseConnection() dengan langsung mengembalikan suatu objek dari kelas Connection(), yang nantinya akan digunakan untuk melakukan request” ke database.

3. Layer DAO berisi source code yang berfungsi untuk melakukan request ke database, jadi layer inilah yang akan berhubungan dengan database. Biasanya mengembalikan objek” yang berisi data yang diminta, tapi juga bisa tidak mengembalikan apapun. Minimal mengembalikan laporan bahwa request ke database sukses disampaikan. Data yang dikembalikan diarahkan ke layer BO, nanti dari BO akan diteruskan ke Layer aplikasi. Meskipun di layer ini terjadi hubungan dengan database, tetapi ada hal yang perlu diperhatikan, yaitu:

– Jangan membuka atau menutup koneksi dengan dengan database pada layer ini!! Kenapa?? Saya juga cuma di kasih tau, nanti saya cari tahu lagi kenapa?

4. Layer Database isinya ya Database yang menjadi sumber data untuk aplikasi.

5. Model, model ini biasanya berisi setter & getter untuk mengambil nilai suatu variable karena

variabel” tersebut dibuat dengan modifier private

graph.jpg

Sekian…

Semoga gua gak lupa… =)




April 2019
S S M T W T F
« Feb    
 12345
6789101112
13141516171819
20212223242526
27282930  

Top Clicks

  • None

Blog Stats

  • 18,062 hits
Advertisements