Migrasi DI dari Spring ke Managed Bean JSF
Berhubung libur panjang akhirnya jadi iseng. Karena iseng akhirnya saya melakukan migrasi DI (Dependency Injection) sebuah aplikasi kecil saya dari Spring ke Managed Bean JSF. Hal ini saya lakukan karena Spring akhir-akhir ini merubah kebijaksanaan perbaikan bugsnya. Karena hal ini saya jadi ingin tahu apakah migrasi dari Spring itu layak dilakukan? Berapa besar usaha yang diperlukan untuk migrasi? Apakah feature DI dalam JSF dan EJB 3 sudah bisa menggantikan feature DI Spring?
Pada saat ini Java EE 6 sebenarnya sudah memiliki 2 jenis feature DI yaitu Managed Bean dari JSF dan EJB 3 Annotation. Aplikasi kecil saya memanfaatkan feature DI dan Declarative Transaction Spring. Karena keterbatasan waktu maka saya cuma migrasi feature DI Spring ke Managed Bean JSF sedangkan feature Declarative Transaction Spring yang harus di migrasi ke EJB 3 belum saya lakukan. Sesudah migrasi maka aplikasi pindah dari declarative transaction ke programmatic transaction.
Pengalaman apa yang didapat dari migrasi ini?
- Feature DI dari Managed Bean JSF masih terlalu terbatas. Sebagai contoh Spring bisa menciptakan obyek bean lewat factory sedangkan JSF tidak bisa.
- Scope dari Managed Bean JSF juga tidak flexibel. Dalam Spring sebuah bean bisa di inject ke bean lain walaupun berbeda scope (singleton, request, session) secara leluasa. Dalam Managed Bean JSF sebuah bean cuma bisa di inject ke bean yang scopenya lebih pendek umurnya. Bean dengan scope application bisa diinject ke bean dengan scope session akan tetapi sebaliknya tidak bisa.
- Managed Bean JSF cuma bisa melakukan setter injection sedangkan constructor injection tidak bisa. Spring bisa melakukan baik setter injection maupun constructor injection.
- Semua isu diatas bisa di solve kalau kita bersedia menerima keterbatasan DI dari Managed Bean JSF dan melakukan sedikit coding tambahan.
Jadi apa kesimpulannya? Migrasi dari Spring itu effortnya tidak besar akan tetapi kalau kita migrasi maka kita akan kehilangan banyak feature bermanfaat. Pada saat ini feature DI dari JSF dan EJB 3 (Java EE 5) belum bisa menggantikan feature Spring 100% akan tetapi kalau dibilang bisa menggantikan 80% memang benar.
Kalau di Java EE 6 feature DI dari JSF dan EJB 3 ditingkatkan hingga setara dengan feature DI dari Spring saat ini maka Spring bisa modar dengan sukses. Buat mereka yang kebutuhannya sederhana maka feature DI dan Declarative Transaction dari JSF dan EJB 3 saat ini sudah cukup memadai.
Posted by Samuel Franklyn [Java] ( October 06, 2008 12:36 PM ) Permalink
