• Tidak ada hasil yang ditemukan

Data Access Object Pada Pengembangan Apl

N/A
N/A
Protected

Academic year: 2018

Membagikan "Data Access Object Pada Pengembangan Apl"

Copied!
5
0
0

Teks penuh

(1)

Data Access Object

Pada Pengembangan Aplikasi Web Berorientasi Objek

Menggunakan Bahasa Pemrograman Java

Muhamad Mulya Fuadi Agisna

1

, Bagus Dwi Sandi Putra

2 1116102113, 2116101102

Sistem Informasi, Institut Teknologi Telkom

Jl. Telekomunikasi No. 1 Terusan Buah Batu, Bandung 40257

1contoy.coboy@gmail.com, 2sandiputra19@gmail.com

ABSTRAK

Salah satu sumber informasi yang dapat diakses secara online dan realtime adalah web. Aplikasi web sangat membantu kegiatan masyarakat. Dengan arsitektur client-server, kini aplikasi web mampu menyajikan informasi yang dinamis.

Informasi yang dinamis tersebut diambil dengan melakukan koneksi ke database. Untuk melakukannya, developer sebaiknya membuat kelas koneksi tersendiri yang terpisah dari kelas business logic. Kelas koneksi tersebut disebut juga Data Access Object (DAO).

DAO mampu memberikan portabilitas bagi aplikasi untuk berpindah ke berbagai jenis database engine yang digunakan. Pada paper ini akan dibahas mengenai DAO. Pembahasan yang dilakukan bersifat studi literatur dari berbagai literatur akademik yang berkaitan.

Kata kunci : Data Access Object, DAO, database engine, portabilitas.

ABSTRACT

One source of information that can be accessed online and realtime is web. The web application is very helpful for people’s activities. With a client-server architecture, web applications are now able to present dynamic information.

Dynamic information is retrieved by connecting to the database. To do so, the developers should make its own connection class separate from business logic class. Class connection is called the Data Access Object (DAO).

DAO is able to provide portability for applications to move to different types of database engine that is used. This paper will discuss the DAO. The discussion is conducted literature study of related academic literature.

Keywords : Data Access Object, DAO, database engine, portability.

I.

PENDAHULUAN

Web merupakan salah satu sumber informasi yang banyak digunakan oleh masyarakat. Salah satu produk yang membantu kegiatan dan pekerjaan secara online

dan realtime adalah suatu aplikasi web. Aplikasi tersebut dibuat dengan tujuan agar pemakai dapat berinteraksi dengan penyedia informasi secara mudah dan cepat.

Aplikasi web kini tidak terbatas lagi hanya sebagai penyedia informasi yang statis. Dengan adanya arsitektur client-server, aplikasi web juga mampu memberikan informasi yang dinamis, dengan cara melakukan koneksi terhadap database.

Seorang developer web akan mengalami kesulitan jika harus membangun kode-kode program dalam setiap kelas business logic untuk koneksi aplikasi web yang dibuat ke database. Untuk mengatasi hal tersebut, maka dibuatlah suatu kelas tertentu untuk pengaksesan koneksi ke database.

Hal ini memudahkan developer sehingga tidak perlu membuat kode program yang bermacam-macam

untuk koneksi ke database. Penerapan dari pemaparan di atas dalam ilmu komputer dikenal sebagai Data Access Object (DAO).

II.

DATA ACCESS OBJECT

DAO adalah suatu objek yang menyediakan sebuah interface yang abstrak untuk tipe-tipe database

tertentu. Dengan DAO, developer melakukan koneksi tidak secara langsung ke database melainkan terpisah pada kode program tersendiri. Sehingga DAO mampu memberikan portabilitas bagi aplikasi untuk dapat berpindah dari satu database ke database lain tanpa harus mengganti kode program pada business logic.

Fungsi dari DAO dapat dijelaskan secara lengkap sebagai berikut :

1. DAO dapat digunakan untuk aplikasi yang cukup besar (misalnya skala enterprise) yang mana penyimpanan data pasti dibutuhkan. 2. DAO digunakan untuk memperoleh data dari

(2)

database dari kelas model yang dimodifikasi, atau menghapus records dalam database. 3. DAO menyembunyikan semua detail

penyimpanan data dari keseluruhan business logic di dalam aplikasi.

4. DAO bertindak sebagai perantara aplikasi dan

database. DAO memindahkan dan mengembalikan data di antara objek dan

database records.

Dalam membuat DAO, seorang developer harus mempertimbangkan apakah kelas yang dibuat berupa

singleton atau tidak. Bahasa Object Oriented Programming (OOP) mengunggulkan konsep pewarisan (inheritance) suatu kelas sebagai cara utama untuk memperluas fungsionalitasnya. Singleton

secara efektif dapat mencegah konsep pewarisan tersebut.

DAO dibuat menjadi singleton ketika developer

tidak ingin terjadi multiple instances dari kelas DAO.

Jika developer ingin mendesain suatu single-user application dan tidak menghiraukan akses konkuren, DAO singleton sangat cocok dan mudah untuk diimplementasikan. Jika terdapat beberapa user

dengan akses konkuren, developer dapat menggunakan konsep DAO thread-safe singleton.

Pada DAO singleton, developer harus memastikan bahwa setiap method di dalamnya bersifat atomik dan tidak menampung state pada setiap pemanggilannya.

Hal yang mencirikan bahwa suatu DAO singleton

adalah hanya ada satu instansiasi (satu objek) yang dibuat dari kelasnya. Contoh kode program yang mencirikannya adalah sebagai berikut :

III.

DEFINISI PADA DAO DAN

JDBC DRIVER

Seperti yang telah dijelaskan pada bagian pendahuluan, developer cukup membuat satu kelas koneksi. Namun, jika digunakan database engine yang berbeda, tetap perlu ada definisi pada beberapa baris

yang menunjukkan database engine yang digunakan tanpa merombak keseluruhan kode program.

Jika database engine yang digunakan adalah Microsoft SQL Server 2008, beberapa definisi yang harus ditulis adalah sebagai berikut :

1. Database url

Keterangan:

a. Bisa ganti localhost dengan IP beserta portnya yang sesuai dengan konfigurasi pada SQL Server Configuration Manager. b. Ganti DatabaseName sesuai dengan

nama database yang digunakan.

2. Class.forName("com.microsoft.j dbc.sqlserver.SQLServerDriver" ).newInstance();

Driver yang diperlukan untuk dimasukkan ke dalam project aplikasi adalah sqljdbc_4.0.2206.100_enu.exe (Microsoft JDBC Driver 4.0 for SQL Server).

Jika database engine yang digunakan adalah Oracle 11g, beberapa definisi yang harus ditulis adalah sebagai berikut :

1. Database url private static SampleDAO instance =

null;

public static SampleDAO getInstance(){ if (instance == null) {

try { instance = new SampleDAO(); }

catch (Exception e) { e.printStackTrace(); }

}

return instance;

private static final String

databaseurl=”jdbc:microsoft:sqlserver

://localhost:1433;SelectMethod=Cursor ;DatabaseName=namaDatabase”;

public SampleDAO() throws Exception{ try{

Class.forName("com.micr osoft.jdbc.sqlserver.SQ LServerDriver").newInst ance();

} catch (Exception e){

System.out.println("err or class name"); throw new Exception(); }

try{

connect();

} catch(SQLException e ){ System.out.println("con nection error"); e.printStackTrace(); throw new Exception(); }

}

private static final String

databaseurl=”jdbc:oracle:thin:@localh

(3)

Keterangan:

a. Bisa ganti localhost dengan IP beserta portnya yang sesuai dengan konfigurasi pada Oracle 11g Enterprise Manager. b. Ganti namaDatabase sesuai dengan

nama database yang digunakan.

2. Class.forName("oracle.jdbc.dri ver.OracleDriver").newInstance ();

Driver yang diperlukan untuk dimasukkan ke dalam project aplikasi adalah ojdbc5.jar (Classes for use with JDK 1.5. It contains the JDBC driver classes, except classes for NLS support in Oracle Object and Collection types).

IV.

METHOD GET DAN RELEASE

CONNECTION

Seperti yang telah dijelaskan pada bab sebelumnya, DAO singleton hanya akan ada satu objek yang diinstansiasi. Sehingga setiap kali pemanggilan objek harus terjadi secara sinkronis. Kode program pada DAO terdapat method

getConnection() dan

releaseConnection() yang dispesifikasikan dengan kata kunci synchronized, sebagai berikut :

Method getConnection() digunakan untuk mendapatkan koneksi ke database selama periode waktu tertentu. Setelah akses ke database selesai, maka dilakukan pelepasan koneksi dengan pemanggilan methodreleaseConnection().

Setiap objek dan kelas pada Java memiliki monitor (pemantau) yang terasosiasi pada objek dan kelas tersebut. Monitor gampangnya adalah suatu pengunci yang menyambungkan akses ke suatu objek atau kelas. Untuk memperoleh akses tersebut, suatu thread

membutuhkan suatu monitor, kemudian dijalankan. Hal ini terjadi secara otomatis ketika developer

membuat suatu method synchronized.

Untuk memperoleh akses ke monitor secara eksplisit, thread memanggil methodsynchronized

di dalam objek itu sendiri. Untuk melepas monitor secara temporer, thread memanggil fungsi wait(). Penggunaan wait() dengan cara ini memungkinkan thread secara bergantian mengakses monitor pada titik sinkronisasi tertentu.

Ketika hanya ada dua thread pada kode program, fungsi notify() digunakan untuk memberitahu

thread lain untuk berjalan.

V.

METHOD EXECUTE SELECT

QUERY

Pada method executeSelectQuery()

digunakan kata kunci, yaitu ResultSet. Suatu objek

ResultSet menentukan penunjukkan kursor pada baris data yang sedang dipilih. Secara default, objek public SampleDAO() throws Exception{

try{

Class.forName("oracle .jdbc.driver.OracleDr iver").newInstance();

} catch (Exception e){

System.out.println("err or class name"); throw new Exception(); }

try{

connect();

} catch(SQLException e ){ System.out.println("con nection error"); e.printStackTrace(); throw new Exception(); }

}

private synchronized Connection getConnection () {

while(!conIsFree) { try{

wait();

}catch(InterruptedExcep tion e){}

}

conIsFree = false; notify();

return con; }

private synchronized void releaseConnection() {

while(conIsFree){ try{

wait();

}catch(InterruptedExcep tion e){}

}

conIsFree = true; notify();

(4)

ResultSet tidak bisa di-update dan hanya dapat bergerak ke depan saja.

Kelas interface dari ResultSet menyediakan

methodgetter seperti getBoolean, getLong, dsb. untuk mengambil nilai kolom pada baris yang sedang ditunjuk.

Kode program dari method

executeSelectQuery dapat dilihat seperti di bawah ini.

Algoritma di atas menunjukkan bahwa program memanggil method getConnection()

untuk mendapatkan koneksi ke database. Pada kode program di atas terdapat sebuah objek Statement. Objek Statement dapat digunakan untuk mengirimkan SQL Query ke database dengan menggunakan statement.executeQuery(query) dengan objek pengembalian bertipe ResultSet. Setelah itu, program akan melepas koneksi dengan memanggil method releaseConnection(). Objek ResultSet dikembalikan karena seperti pada penjelasan di atas, objek tersebut menampung nilai kolom yang telah diambil.

VI.

METHOD EXECUTE UPDATE

QUERY

Kode program dari method executeUpdateQuery dapat dilihat seperti di bawah ini.

public ResultSet

executeSelectQuery(String query) throws SQLException{

getConnection(); boolean ok = true; ResultSet rs = null; try{

//boolean oldCommitMode = con.getAutoCommit(); //con.setAutoCommit(fal se);

Statement statement = con.createStatement(); rs =

statement.executeQuery( query);

con.commit(); }

catch(Exception e){ ok = false; }

finally{

releaseConnection(); }

if(!ok){

throw new SQLException(); }

return rs; }

public boolean

executeUpdateQuery(String[] sqls){ boolean returnValue = true; getConnection();

boolean oldCommitMode = false; boolean commitModeChecked = false;

try{

oldCommitMode = con.getAutoCommit(); commitModeChecked = true;

con.setAutoCommit(false );

Statement statment = con.createStatement(); for(int i=0;

i<sqls.length ;i++) statment.addBatch(sqls[ i]);

int[] batchState = statment.executeBatch() ;

boolean batchSuccessful = true;

for(int i=0;

i<batchState.length;i++ )

if(batchState[i]==statm ent.EXECUTE_FAILED){

batchSuccessful = false;

}

(5)

Algoritma di atas menunjukkan bahwa program memanggil method getConnection() untuk mendapatkan koneksi ke database. Pada kode program di atas juga terdapat sebuah objek

Statement untuk menjalankan query bernama

sqls. Seperti dilihat, argumen method ini bertipe

arrayString. Hal ini digunakan karena query yang akan dijalankan lebih dari satu dalam sekali eksekusi. Nilai yang dikembalikan pada method ini adalah

returnValue yang bertipe data boolean. Nilai ini akan menunjukkan apakah query yang dijalankan berhasil atau tidak. Jika berhasil, nilai yang dikembalikan adalah true, dan false untuk tidak berhasil.

Pada method ini juga terdapat pemanggilan

con.commit() dan con.rollback(). Pemanggilan kedua method ini sangat penting karena

con.commit() digunakan untuk menyimpan hasil eksekusi query yang berhasil, dan

con.rollback() digunakan untuk membatalkan eksekusi query yang gagal untuk dilakukan. Sehingga konsistensi database dapat terjaga dari segala kegagalan eksekusi yang terjadi.

DAFTAR PUSTAKA

[1] Berger, Max. 2005. Data Access Object Pattern. Jurnal dari http://max.berger.name/research/silenus/. [2] Laboratorium Prodase. 2012. Modul Praktikum Sistem Basis Data. Sistem Informasi, Institut Teknologi Telkom.

Website

[1] IBM, “Advanced DAO Programming”, 07 Oktober

2003, http://www.ibm.com/developerworks/library/j-dao/, diakses pada tanggal 16 Desember 2012. [2] Java Practices, “Data Access Object”, 30 Agustus

2013,

http://www.javapractices.com/topic/TopicAction.do? Id=66, diakses pada tanggal 16 Desember 2012. [3] PKP, “Data Access Objects (DAOs)”, no date, http://pkp.sfu.ca/ojs/docs/technicalreference/2.1/class ReferenceDataAccessObjects.html, diakses pada tanggal 16 Desember 2012.

[4] Linkedin Discussions: Software Design Patterns and Architecture, “should we make our Data Access Object(Dao) class as singelton if not why(vice versa)”,

no date, http://www.linkedin.com/groups/should-we-make-our-Data-145246.S.112264905, diakses pada tanggal 16 Desember 2012.

[5] stackoverflow: design patterns, “Is it ok to make a DAO class as Singleton [closed]”, 29 Juni 2011, http://stackoverflow.com/questions/6516230/is-it-ok-to-make-a-dao-class-as-singleton, diakses pada tanggal 16 Desember 2012.

[6] BPSE, “Data Access Object”, 06 April 2011,

http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/dao.html, diakses pada tanggal 16 Desember 2012.

[7] JAVAWORLD, “Synchronizing threads in Java,

Part 1”, 01 April 1996,

http://www.javaworld.com/jw-04-1996/jw-04-synch.html, diakses pada tanggal 16 Desember 2012.

//lanjutan

if(!batchSuccessful){ returnValue = false;

con.rollback(); }else {

con.commit(); }

}catch (Exception e ){ returnValue = false; }finally{

if(commitModeChecked){ try{

con.setAu toCommit( oldCommit Mode); }catch(SQLExcept ion e){}

}

releaseConnection(); }

Referensi

Dokumen terkait

Untuk mengetahui apakah dengan dilaksanakannya reorganisasi di PT PLN (Persero) P3B Jawa Bali akan dapat meningkatkan kinerja organisasi sehingga didapatkan suatu mekanisme

Dalam hal penagihan dan peringatan secara tertulis (somasi) tersebut tidak dipatuhi oleh pelaku kerugian negara sebagaimana dimaksud dalam Pasal 48, maka Kepala

Saya merasa kurang nyaman jika orang tua membahas mengenai karir saya kelak Membahas keinginan orang tua terhadap karir dan pendidikan saya hanya menambah beban pikiran Bantuan

Nilai koefisien determinasi sebesar 0,964 yang menunjukkan bahwa 96,4 persen variasi (naik turunnya) jumlah kredit konsumtif pada bank umum di Bali dijelaskan oleh variasi

Proses pembuatan elastomer termoplastik dengan cara polimerisasi emulsi telah dilakukan antara karet alam lateks dengan campuran monomer stiren dan metil metakrilat menggunakan

The CVTL approach, in line with the Government National Water and Sanitation Guidelines and International Federation of the Red Cross Red Crescent (IFRC) Water and Sanitation

Anak hanya dapat mengenal kehidupan di waktu sekarang, karena memang memorinya tidak cukup kuat untuk menyimpan kejadian-kejadian di waktu lalu. Sehingga kemampuan anak

IRR memiliki pengaruh positif terhadap ROA, jika IRSA (Interest Rate Sensitivity Asset) lebih kecil dari pada IRSL (Interest Rate Liabilties) pada saat suku bunga