ORM (Object Relational Mapping) [Wiki] adalah suatu metode/teknik pemrograman yang digunakan untuk mengkonversi data dari lingkungan bahasa pemrograman berorientasi objek (OOP) dengan lingkungan database relasional. Seperti kita ketahui, dalam aplikasi enterprise kedua lingkungan tersebut berada pada sistem yang berbeda, yaitu OOP berada pada sisi pemrograman aplikasi, sedangkan database relasional berada pada sisi sistem database. Misi utama dari ORM ini adalah menjembatani kedua sistem yang berbeda tersebut.

ORM memiliki kemampuan untuk menciptakan objek database virtual, yaitu suatu model database yang di representasikan kedalam sebuah objek pada bahasa pemrograman OOP. Berikut ini adalah beberapa kelebihan yang dimiliki ORM, yaitu:

  • Mempercepat pengembangan program. Contohnya, mengurangi perulangan kode query, memudahkan pemakaian karena tabel-tabel ter-representasikan dalam bentuk objek
  • Membuat akses data menjadi lebih abstrak dan portable. Hal ini dikarenakan ORM menghandle pen-generate-an syntax SQL berdasarkan vendor database-nya.
  • Mensupport pengkapsulan business rule pada lapisan Data Access.
  • Mengenerate boilerplate code (unit kode yang reusable) untuk fungsi dasar CRUD (Create,Read,Update,Delete).

Berikut ini saya berikan dua contoh program Java (ORM dan Non ORM) untuk koneksi dan manipulasi data pada Database. Contoh ini saya ambil dari blog sebelah.

Tanpa ORM :


String host = "localhost";
String db = "kiki";
String user = "root";
String pass = "";
String driver = "com.mysql.jdbc.Driver";
String koneksi = "";

koneksi = "jdbc:mysql://"  + host + ":3306/" + db + "?user=" + user +"&password=" + pass;

Class.forName(driver).newInstance();
Connection con = DriverManager.getConnection(koneksi);
Statement stmt = con.createStatement();

String ReqUser =  request.getParameter("username");
String ReqPass = request.getParameter("password");
String QUERY_INSERT = "INSERT INTO Mahasiswa VALUES (“ +ReqUser+ “,” +ReqPass+” )””

Dengan ORM :


public void tambahMhs (){

Mahasiswa ophex = new Mahasiswa();
ophex.setNRP(1);
ophex.setNama("ophex");
ophex.setPassword("mbuh");

HibernateUtil
 .getSessionFactory()
 .getCurrentSession().save(ophex);

 }

Metode yang paling umum dari ORM adalah memetakan Tabel atau query kedalam class Java berupa POJO atau Java Beans. Deskripsi lengkap POJO bisa dilihat di Wiki . Dapat dikatakan, POJO adalah class java yang hanya berisi variabel dan method setter getter tanpa ada method proses lainnya.

Contoh POJO :


public class  Mahasiswa {
 private String NIM;
 private String nama;
 private String alamat;

 public String getNIM() {
 return this.NIM;
 }
 public String getNama()  {
 return this.nama;
 }
 public String getAlamat()  {
 return this.alamat;
 }
 public void setNIM(String NIM) {
 this.NIM = NIM;
 }
 public void setNama(String nama) {
 this.nama = nama;
 }
 public void setAlamat(String alamat) {
 this.alamat = alamat;
 }
 }

… Server Sizing …

Saat hendak memilih jenis komputer server yang akan digunakan terkadang kita dihadapkan dengan beberapa opsi / pilihan. Bererapa variabel yang ikut menentukan seperti apakah untuk platform SAP, Microsoft, Oracle, IBM, atau Apache. Kemudian variabel selanjutnya seperti jumlah pengguna yang terhubung secara konkuren (Concurrent User)apakah kurang dari 100, antara 100 sampai 1000, atau lebih dari 1000. Dari segi Pengklusteran, apakah tanpa cluster, 2 node, 3 node lebih. Selain itu utilisasi sistem apakah kurang dari 40%, kurang dari 60% atau kurang dari 80%.

Variabel lain yang turut mempengaruhi adalah media penyimpanan (Storage) apakah kurang dari 500GB, antara 500GB sampai 1TB, atau di atas 1TB. Selanjutnya apakah server yang hendak dipilih termasuk kategori Blades, Mid-Range, Entry-Level atau Mid-Level. Jenis processor yang dapat dipilih seperti : Xeon, Itanium, Opteron, Sparc.

Dari variabel-variabel yang disebutkan di atas, tentunya diperlukan diskusi yang panjang untuk menentukan jenis server yang akan dipilih. Namun, setalah saya googling, saya bertemu situs Server Sizing yang membantu kita menemukan jenis server yang tepat sesuai variabel yang kita masukkan. Misalnya kita membutuhkan server dengan :
– Platform = Oracle Database 11g
– Jumlah konkuren user = 1000
– Tidak menggunakan Cluster
– System utilization < 60%
– 4 TB Storage
– Termasuk kategory High-Level

Maka akan menampilkan beberapa jenis server, beserta konfigurasi dan estimasi harganya, juga disediakan link guna menuju produk yang ditampilkan. Selamat mencoba !

Yoga Prihastomo

Prolog :
Dalam tulisan ini saya akan memberikan analogi singkat tentang Spring Framework yang mulai mendunia dan cukup familiar di ranah Enterprise Application dan telah menjadi Sub divisi dari perusahaan virtual VM Ware. Dalam tulisan ini sangat terinspirasi dari tulisan Rod Johnson pada Theserverside.com, dimana beliau adalah founding father dari Spring framework itu sendiri.

Content :

Dalam skala Enterprise Application dikenal adanya konsep MVC (Modelling View Controller) yang mana konsep ini akan memisahkan proses pembangunan aplikasi kepada beberapa layer utama. Hal ini dilakukan untuk mencapai target “separation of concern”, dimana tiap layer memiliki fungsi yang berbeda-beda sehingga perlu dipisahkan. Dalam penerapannya, layer bisa dipisahkan menjadi 3 bagian utama :

  1. Presentation Layer
  2. Business Layer
  3. Data Access Layer

Dalam proses pembagian layer ini kita akan mengenal beberapa teknologi lagi selain Spring yang menjadi Core/ Inti dari semuanya. Sebelum pembahasan melebar, mungkin ada beberapa pembaca yang bertanya kenapa harus ada “separation of concern”??, sederhananya saya akan memberikan contoh berikut :
Anda memiliki aplikasi Sistem Online KRS yang terdiri dari 3 modul utama yaitu Tambah data, Edit data dan delete data, dimana 3 modul utama dipisahkan menjadi 3 file utama yaitu AddKrs.jsp, EditKrs.jsp dan DeleteKrs.jsp. Dalam ketiga file ini anda pastinya membutuhkan koneksi ke database, sehingga anda akan membuat proses initiasialisasi database pada tiap file tersebut :
Pada file AddKrs.jsp, EditKrs.jsp dan DeleteKrs.jsp :

<%
 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
 <strong>Connection</strong> conn = DriverManager.getConnection("jdbc:odbc:<DSN name>")
 %
<html>
...
</html>

Pada contoh diatas anda serta merta telah melakukan pelanggaran konsep MVC, dimana anda mencampuradukkan seluruh layer ke dalam satu layer saja. Sehingga yang terjadi adalah kita senantiasa melakukan re-inisialisasi koneksi pada tempat yang terpisah-pisah (Scattering) , sehingga kode program terlihat sangat kusut dan “hard to maintain”/sulit untuk dirawat.
Ilustrasi sederhana diatas jikalau terus digunakan hingga menjadi aplikasi yang semi-enterprise bahkan enterprise bisa-bisa menjadi aplikasi yang sangat sulit untuk dilakukan proses maintenance bahkan merubah koneksi saja bisa melibatkan hampir seluruh file. Sehingga dibutuhkan konsep MVC dimana akan memisahkan perhatian kita dari tampilan/UI/Presentation layer hingga data akses.
Presentation Layer, secara harfiah bisa dikatakan sebagai layer terdepan yang bisa dilihat oleh user. Kita bisa menggunakan beberapa extension dan tag semacam html, jsp dan php namun pada akhirnya seluruh tampilan tetap saja akan di-render menjadi tag html, karena itulah yang hanya akan dibaca oleh browser kita.

Business Layer, pada layer ini akan menangani seluruh inputan dan permintaan dari presentation layer, dari logika add, delete, edit hingga list data semua diolah oleh layer ini. Dimana business layer terdiri dari “Front Controller” dan “End Controller”. Pada konteks java kita mengenalnya sebagai back bean (Istilah JSF) atau Form Action (istilah struts) untuk merepresentasi kode server yang akan menangani seluruh data yang masuk. Pada layer ini biasanya menggunakan POJO (Plain Old Java Object) yang akan melakukan aktivitas dari validasi data, konversi inputan hingga proses yang berkaitan langsung dengan sisi terdalam dari business layer (End Controller) itu sendiri, misalnya interaksi ke database, proses pengiriman message melalui JMS, proses setting time scheduler dan lain-lain.

Data Access Layer, Pada layer ini / layer terakhir akan berinteraksi langsung ke database aplikasi, dari membuat SQL query untuk insert,delete hingga select, keseluruhan yang berkenaan dengan pengaksesan data harus diolah pada layer ini. Layer ini pun memiliki beberapa teknologi turunan semacam ORM (Object Relational Mapping) , JPA atau JDO, namun bahasan ini kita tidak akan dibahas pada tulisan kali ini.

The requesting processing workflow in Spring Web MVC (high level)

Gambar 1 : The requesting processing workflow in Spring Web MVC (high level)

Setelah kita memahami konsep “separation of concern” itu sendiri , lalu pada konsep munculnya Spring Framework adalah berfungsi untuk mengintegrasi seluruh modul yang akan kita gunakan ke dalam satu file konfigurasi saja, yang kita kenal dengan Application-Context.xml. File ini dibutuhkan untuk melakukan proses sentralisasi konfigurasi sehingga terawat dan tidak kusut, itu harfiahnya.
Rod Johnson dalam menjelaskan beberapa keunikan Spring menjelaskan diantaranya adalah Spring is an increasingly important integration technology (Spring secara bertahap melakukan integrasi teknologi) dan Spring is both comprehensive and modular. Spring has a layered architecture, meaning that you can choose to use just about any part of it in isolation, yet its architecture is internally consistent. So you get maximum value from your learning curve. You might choose to use Spring only to simplify use of JDBC, for example, or you might choose to use Spring to manage all your business objects. And it’s easy to introduce Spring incrementally into existing projects (singkatnya spring akan mengelola seluruh bisnis objek anda pada satu tempat saja, contonya penggunaan JDBC untuk koneksi database, Time Scheduler, JMS, DAO (Data Access Object) dan lain-lain).

Dari keunikan diatas spring menjadi framework yang bukan hanya framework biasa, ia memiliki fokus pada pengelolaan bisnis objek yang sangat berguna pada aplikasi-aplikasi enterprise.

Dengan adanya satu file konfigurasi yang mengelola keseluruhan objek, tiap class yang terkait dengan proses-proses semacam add , delete, insert dan lain-lain, cukup menginisialisasi objek yang telah di “boot” oleh spring tanpa perlu melakukan konfigurasi-konfigurasi lainnya pada saat digunakan.
Berikut potongan tampilan dari application-context.xml :

<beans>

  <bean id="myDataSource"
	class="org.apache.commons.dbcp.BasicDataSource"
	destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
    <property name="username" value="someone" />
  </bean>
….
<bean id="exampleDataAccessObject"
		class="example.ExampleDataAccessObject">
    <property name="dataSource" ref="myDataSource" />
  </bean>
….
</beans>

Tag diatas digunakan untuk melakukan inisialisasi database dengan id adalah myDataSource dan kita coba mendefinisikan satu objek data access yang menggunakan data source (exampleDataAccessObject), dimana property data source akan di-reference ke id myDataSource, lalu setelah konfigurasi ini di “bootstrap” diawal, setiap class yang ada pada tataran business layer dapat menggunakan objek ini cukup dengan melakukan set saja, contoh :

public class ExampleBusinessObject implements MyBusinessObject {

	private ExampleDataAccessObject dao;
	private int exampleParam;

	public void setDataAccessObject(ExampleDataAccessObject dao) {
		this.dao = dao;
	}

	public void setExampleParam(int exampleParam) {
		this.exampleParam = exampleParam;
	}

	public void myBusinessMethod() {
		// do stuff using dao
	}
}

Dengan objek dao telah di-set, objek dapat langsung digunakan. Ini tidak lepas dari konsep “Dependency Injection” yang akan kita bahas pada tulisan berikutnya.

Kesimpulan :
Pada tulisan ini saya ingin menyampaikan bagaimana Spring framework bekerja sebagai core/inti dari satu aplikasi enterprise, dimana ia akan mengelola objek-objek dalam satu file konfigurasi tanpa perlu tiap objek yang akan menggunakannya melalukan perubahan API dan lain-lain, cukup menggunakannya saja.
NB : Jika ada expert yang membaca, sangat diharapkan perbaikan dan tambahannya dalam bentuk comment.

Site Reference:
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework

Pdf Documentation, Spring Release 3.0 bab Spring MVC

Setelah hampir dua bulan tidak bertemu, akhirnya diputuskan pada tanggal 29 Januari berkumpul di cibubur. Pada jam 12 malam lengkap sudah personel mikrolima. Karena sudah waktu istirahat satu per satu tertidur lelap. Kecuali masih ada dua jangkung yang belum tertidur, entah apa yang dilakukannya.😀

Pagi hari pun tiba, lima orang keluar dari ‘kandang’  mencari sarapan. Jalan santai dan membeli nasi uduk tidak jauh dari rumah Mr. K kemudian membeli makanan dan minuman ringan. Setelah perut sudah terisi mulailah acara presentasi sesuai tema masing. Tema pertama oleh aye (me), SVN dan bugtracker. kedua aplikasi ini sebagai pendukung pengembangan aplikasi ke depannya.

Tema kedua oleh pak yoga, menjelaskan Database Design for Enterprise Application. Sebelum tema kedua kami berlima istirahat shalat dhuhur dan makan siang.

Presentasi yang ketiga dilanjutkan oleh pak aditiya (manager keuangan), berupa laporan keuangan yang dalam waktu singkat simpanan jadi berkurang drastis😀. kemudian dilanjutkan pada pak hari yang menjelaskan apa itu AOP.

Dan yang terakhir adalah Mr. K, yang menjelaskan Spring.

Untuk kelanjutan selanjutnya Insya Allah pada tanggal 26 februari 2010.