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 :
- Presentation Layer
- Business Layer
- 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.

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

InfoQ
1 comment
Comments feed for this article
24 March, 2010 at 9:19 pm
ataherster
penjelasan lanjutan nya dimana gan ?