Business Rule Bagian I

Lagi ngebayangin bagaimana diagnosa dokter itu bisa digantikan oleh komputer. Pasien cukup menjawab sequence pertanyaan kemudian pada akhirnya
komputer memberikan masukan, apa yang sebaiknya dilakukan. Bagi dokter hal ini akan mempermudah kerja dia, bagi pasien tentunya akan lebih transparan untuk setiap diagnosa yang dilakukan.
Lagi ngebayangin juga “sistem pintar” semacam ini bisa berubah-ubah dan bisa diimplementasikan di dunia telekomunikasi. Manager promosi (kalau ada jabatan ini) bisa dibantu untuk mengambil keputusan
promosi yang tepat dan optimal dengan memasukan parameter-parameter pada sistem, dan sistem bisa memutuskan berdasar parameter yang dimasukkan oleh Manager dengan sumber data dari system lain
dan operasi validasi atau bagaimana mengolah data dari system lain tergantung manager tadi.

Kasus diatas adalah contoh-contoh masalah yang bisa diatasi oleh rule engine. Untuk aplikasi yang validasi if else nya tidak sering berubah dan cenderung static, tidak disarankan untuk menggunakan rule engine. Begitu juga dengan aplikasi yang if else nya tidak banyak dan rumit, maka di sarankan menggunakan programatic approach instead of using Rule Engine.

Apliklasi yang sedang saya bangun sekarang adalah sistem untuk deteksi awal kehalalan suatu product berdasar kevalidan data manifest. Sederhanya, barang-barang import dari negara luar akan di check kehalalannya berdasarkan data-data dokument yang terlampir bersama container dan juga berdasar history dari organisasi yang terlibat dalam pengimporan barang tersebut. Pengecekan atau validasi barang tersebut menggunakan rule engine, karena tingkat kerumitan, banyaknya jumlah rule dan perubahan yang sangat dinamic dari validasi itu sendiri tersebut.

Beranjak dari situ kita coba membuat rule-rule sederhana yang akan dieksekusi oleh Aplikasi kita.

Sebagai preamblue, rule sintaxt sederhana:

import com.rbtsb.meter.core.service.impl.Account;
import com.rbtsb.meter.core.service.impl.BasicRulesApp;
import com.rbtsb.meter.core.service.impl.RuleRunnerServiceImpl;

global RuleRunnerServiceImpl ruleRunnerService yang kita kasih nama basic.drl;\

rule “basic rule”

when
$fff:Account( balance < 100 ) // condition
then
$fff.setTest(“Andai”);
ruleRunnerService.setValue($fff);
System.out.println(“Account balance is ” + “less than 100”); // consequence
end

Kemudian kita panggil coba kita eksekui dengan main application untuk mengetes rule kita

import org.drools.KnowledgeBaseFactory;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
 import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;

public class BasicRulesApp {

public static final void main(String[] args) {
 KnowledgeBase knowledgeBase = createKnowledgeBase();
 StatefulKnowledgeSession session = knowledgeBase
 .newStatefulKnowledgeSession();
 BasicRulesApp d=new BasicRulesApp();
 try {
 Account account = new Account();
 RuleRunnerServiceImpl ruleService = new RuleRunnerServiceImpl();
 account.setBalance(50);
 session.insert(account);
 session.setGlobal("ruleRunnerService", ruleService);
 session.fireAllRules();
 System.out.println(account.getTest());

} finally {
 session.dispose();
 }
 }

private static KnowledgeBase createKnowledgeBase() {
 KnowledgeBuilder builder = KnowledgeBuilderFactory
 .newKnowledgeBuilder();
 builder.add(ResourceFactory.newClassPathResource("basic.drl"),
 ResourceType.DRL);
 if (builder.hasErrors()) {
 throw new RuntimeException(builder.getErrors().toString());
 }
 KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
 knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());
 return knowledgeBase;
 }

}

rule sintaxt di atas berektention drl dan sintak nya mirip dengan java
rule “basic rule”
Ini adalah nama rulenya

when
$fff:Account( balance < 100 ) // condition

adalah kondisi yang di check

then
$fff.setTest(“Ini dari Rule”);
ruleRunnerService.setValue($fff);
System.out.println(“Account balance is ” + “less than 100″); // consequence
end

Action yang dilakukan jika kondisi terpenuhi, yakni memprint ke console dan mengeset account object menjadi Ini dari Rule”

Selain itu dibutuhkan model Account yang akan dicheck


public class Account {

private long balance;
 private String test;

//Tambahkan setter dan getter
 }

keluaran di console adalah

Account balance is less than 100
Ini dari Rule

Ini dalah optional, jika menggunakan selain maven, then just add the library path to the project.
Saya menggunakan maven untuk membuild aplikasi ini, tambahkan maven dependency

<!-- Dependencies For Rules -->
 <dependency>
 <groupId>org.drools</groupId>
 <artifactId>drools-core</artifactId>
 <version>5.0.1</version>
 <type>jar</type>
 </dependency>
 <dependency>
 <groupId>org.drools</groupId>
 <artifactId>drools-compiler</artifactId>
 <version>5.0.1</version>
 <type>jar</type>
 </dependency>

To be continued..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: