Dewasa ini aplikasi sangat krusial untuk menunjang pekerjaan di berbagai bidang. Sering kali programmer disibukan dan dipusingkan dengan aturan bisnis yang sering berubah-ubah dan tentunya hal ini sangat merepotkan developer jika aplikasi yang dibuat tidak bisa meng cover bisnis secara fleksibel.
Bagaimanakan untuk menyiasati perubahan bisnis tanpa memakan effort cukup tinggi salah satunya yaitu dengan menggunakan Business Rule engine. Kali ini saya akan menggunakan Business Rule Engine dari Drools dan untuk penjelasan Drools itu apa mudah-mudahan dapat saya posting di lain waktu
.
Yang akan saya angkat kali ini adalah bagaimana kita melakukan perubahaan pada business yang sedang berjalan dalam waktu singkat. Jawaban dari hal ini tentusaja dengan melakukan coding (WT*) pasti sangat painfull
. Oke, bagaimana jika saya bilang saya akan merubahnya secara “on the fly” (Tentunya aplikasi yang dibuat harus sudah mengakomodir hal ini he…) dan pertanyaan berikutnya adalah bagaimana bisa bisa kita rubah secara “on the fly” bukan kah harus restart server (untuk web application) jika kita merubah logic dari code java?
Disini saya akan memberikan contoh bagaimana mengeksekusi java code secara “on the fly” menggunakan drools KnowledgeBuilder. Untuk jar yang dibutuhkan adalah:
- antlr*.jar
- common-compiler.jar
- drools-api*.jar
- drools-compiler*.jar
- drools-core*.jar
- mvel2-*.jar
- jdt-core*.jar
Berikut penggalan perintahnya
Map map = new HashMap();
map.put(1, Integer.parseInt("15"));
map.put(2, Integer.parseInt("20"));
StringBuffer sb = new StringBuffer();
sb.append("import java.util.*; \n")
.append("import java.lang.*; \n")
.append("rule \n")
.append(" test \n")
.append(" when \n")
.append(" map : Map() \n")
.append("then \n")
.append(" int a = (Integer) map.get(1); \n" +
" int b = (Integer) map.get(2); \n"+
" int c = a + b; \n"+
" map.put(3,c); \n"+
" map.put(4,(float)c /2 ); \n")
.append("end");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(sb.toString().getBytes()),
ResourceType.DRL );
if ( kbuilder.hasErrors() ) {
System.err.println( kbuilder.getErrors().toString() );
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.insert( map );
ksession.fireAllRules();
System.out.println("The Result is: "+map);
ksession.dispose();
Untuk output dari penggalan kode ini adalah:
“The Result is: {1=15, 2=20, 3=35, 4=17.5}“
Selamat ber ekslplorasi