Thursday, July 23, 2009

Keberhasilan Riset Plugin Based Architecture dengan SWING



Ini adalah perubahan rencana arsitektur dari kode sebelumnya (suka2 saya dunk).

Zahir Saya Pakai Sebagai Tool Verifikasi Metode Akuntansi (dan juga pembukuan jasa ini sih)

Dimulai dari penggunaan Zahir sbg solusi saya untuk software akuntansi pribadi (ternyata perlu sekali), dan dari beberapa rencana sebelumnya, yaitu saya ingin wujudkan aplikasi ERP milik sendiri via Eclipse RCP, maka dorongan untuk menyempurnakan pustaka2 sendiri pemercepat pengembangan aplikasi Swing GUI, membuat saya melakukan pengetesan sederhana agar mekanisme plugin (kira2 spt itulah) yang dimiliki Eclipse, bisa juga dimiliki aplikasi akuntansi ini.

Dan berhasil.

Inti dari semua keberhasilan itu, adalah kemampuan Java untuk menginisialisasi kelas secara run time, dengan baris kode ini :

Class.forName("startup.PluginOne").newInstance();

Lihat, bahwasanya argumen "startup.PluginOne" adalah Fully Qualified Name untuk kelas yang akan diinstansiasi. Dalam pembicaraan plugin, maka itu adalah nama kelas startup untuk menginisialisasi Plugin. Tentu, jika dikembangkan lebih lanjut, akan sangat kompleks manajemen plugin yang bisa terjadi, namun untuk test pertama ini, cukuplah baris kode di bawah ini menjadi titik awal memasuki pengembangan tersebut :

Plugin p = (Plugin) Class.forName("startup.PluginOne").newInstance();

Yaitu, saya akan punya kelas Plugin, yang merupakan induk dari semua plugin yang akan dikembangkan. Nantinya, diharapkan plugin yang berupa file Jar, tinggal dikopi ke suatu folder khusus, maka framework ini akan menginisialisasi plugin tersebut, yang efeknya adalah menambahkan fungsionalitas aplikasi secara runtime. Dengan sangat mudah. (bayangkan, jika modul2 ERP yang berdiri sendiri, namun terintegrasi, dapat sekedar di kopi ke suatu folder, tanpa perlu manajemen / instalasi tambahan).

Itu saja yang menjadi pokok pikiran saya seharian lalu. Silahkan download tiga proyek yang telah saya sertakan disini, yaitu :
  1. Platform : ini merupakan framework utama aplikasi. Nantinya, Anda tinggal mengkustomize aplikasi ini untuk mendapatkan software kustom.
  2. PlatformLibrary : merupakan core dari mekanisme plugin yang diacu baik oleh project Platform maupun project plugin2 yang lain. Kelas Plugin, induk dari semua plugin, ada di project ini.
  3. PluginOne : contoh satu plugin yang telah dikembangkan. Plugin ini melakukan kontribusi terhadap toolbar utama (tombol Plugin Penjualan).

Sejauh ini, sebenarnya saya ingin menahan diri dahulu untuk membuat artikel ini, sebelum mengimplementasikan satu kekurangan akhir, yaitu lokasi dari file jar plugin masih ditambahkan via opsi Libraries pada Netbeans. Tentu ini tidak boleh terjadi. Nah, salah satu cara agar instansiasi kelas secara dinamis bisa dipanggil menggunakan JAR yang diletakkan dimana saja, adalah dengan menggunakan Jar Component Loader disini. Sayang, semalam hasil download tidak baik. Jadi, cukuplah disini saja.

Semoga bermanfaat!
NB:
  • Aplikasi Run yang memunculkan window utama adalah Platform.
  • Nantinya, jika dikerjakan bersama2 oleh lebih dari satu programmer, maka masing2 programmer cukup mengembangkan sistemnya sesuai dengan interface dari PlatformLibrary, yang didistribusikan via JAR (atau source Netbeans saja jika masih dalam heavy development). Setelah selesai, ia cukup menyerahkan JAR hasil kerjaannya, dan integrator tinggal mengkopi saja JAR tersebut ke folder plugin. Tentu mekanisme ini menunggu dipergunakannya juga JCL.
  • Ada masukan dari agar dipakai JPF (Java Plugin Framework). Kayanya develop snediri deh. Dan kemudian share...
  • Wealah, screenshot aplikasinya malah g kbawa. Hehe. Segitu dulu aja ya

No comments: