Kural Motorları Bora Güngören Portakal Teknoloji AB
2 Kural Motorları Tasarı m TestYazılımAnaliz Ürün Geleneksel (doğrusal) yazılım geliştirme süreci varsayımı:
3 Kural Motorları Problem Tanımı : ● İş kuralları sürekli değişir: –Teslim edilmesi planlanan ürün güncelliğini yitirir. –Teslimat süresi uzar. –Yeteri kadar test edilemez. –Ürün kalitesiz olur. Çözüm Önerisi : ● Kural motorları
4 Kural Motorları ● Kural motorlarının kullanımı ne zaman yararlı? –İş akışları kod seviyesinde yönetilemeyecek kadar karışıksa –İş yapış şekli sürekli değişiyorsa –Değişikliklerin hemen uygulamaya konması gerekiyorsa
5 Kural Motorları ● Kural motoru kullanılması sonucunda –İş yapış şekli tanımları kolayca anlaşılır –İş yapış şekli programlama dillerinden bağımsız olur –İş yapış şekli bilgisini kodlama mantığından ayırır –Kaynak kod değiştirilmeden değiştirilebilir –İş yapış şeklindeki değişiklikler hızlıca uygulamaya konur
6 Kural Motorları ● Kural motorları –Common Knowledge –NxBRE –Portellus –Tris –Haley –Jess –Drools –Microsoft Business Rules Engine –......
7 Kural Motorları ● Her kural motorunun için farklı API tanımlanmıştır. ● Birinden diğerine geçmek zordur ● Kural motoru sağlayıcısına bağımlılık yaratır. ● Java Community Process (JCP) iş kuralı motorları standart. –JSR94 – Java Standards For Rule Engines –
8 Kural Motorları ● JSR94, Kural motoruna Java SE veya Java EE istemcisinden erişim için bir standart sağlar. –Kurallara kaydolmak ve kayıt silmek (register/unregister) –Kuralları incelemek (parse) –Kural meta-datasını incelemek –Kural çalıştırmak –Sonuçları elde etmek –Sonuçları filtrelemek
9 Kural Motorları ● JSR94, aşağıdaki konular için bir standart sağlamaz. –Kural motoru –Kuralların akışı –Kuralların tanımlanması için kullanılan dil –Java teknolojisinin kurulumu
10 Kural Motorları Jess kural motoru için örnek kural tanımı (defrule rule-1 (yagmur) = > (semsiye-getir)) (defrule rule-2 (kaygan-yol) => (dikkatli-araba-kullan)) (defrule rule-3 (yagmur) => (assert kaygan-yol)) (kaygan-yol) (yagmur)
11 Kural Motorları Drools kural motoru için örnek kural tanımı rule "reddedilmediyse onayla" salience -100 when not Rejection() p : Policy(approved == false, policyState:status) exists Surucu(age > 25) Process(status == policyState) then log("ONAYLI: reddedilmemis"); p.setApproved(true); end
12 Kural Motorları Drools xml kural motoru için örnek kural tanımı UserRole.equals(“Admin”) System.out.println( "Sistem Yöneticinizle Görü ş ün" );
13 Kural Motorları Kural Motoruna ba ğ lantı: public class OrnekKural { private static final String KURAL_SAGLAYICISI = "org.jcp.jsr94.jess"; public static void main(String[] args) { try { // Kural servisi sa ğ layıcısını yükle Class.forName("org.jcp.jsr94.jess.RuleServiceProviderImpl"); RuleServiceProvider servis =RuleServiceProviderManager. getRuleServiceProvider(KURAL_SAGLAYICISI); // Get the rule administrator. RuleAdministrator ruleAdministrator =servis.getRuleAdministrator();
14 Kural Motorları InputStream inStream = org.jcp.jsr94.tck.model.Customer.class.getResourceAsStream( "/org/jcp/jsr94/tck/tck_res_1.xml"); RuleExecutionSet res1 =ruleAdministrator. getLocalRuleExecutionSetProvider(null). createRuleExecutionSet( inStream, null ); inStream.close(); String uri = res1.getName(); ruleAdministrator.registerRuleExecutionSet(uri, res1, null); RuleRuntime ruleRuntime = servis.getRuleRuntime(); StatelessRuleSession statelessRuleSession = (StatelessRuleSession) ruleRuntime.createRuleSession(uri,
15 Kural Motorları new HashMap(), RuleRuntime.STATELESS_SESSION_TYPE); Customer inputCustomer = new Customer("test"); inputCustomer.setCreditLimit(5000); Invoice inputInvoice = new Invoice("Invoice 1"); inputInvoice.setAmount(2000); List input = new ArrayList(); input.add(inputCustomer); input.add(inputInvoice); inputCustomer.getCreditLimit()); // Release the statefulRuleSession. statefulRuleSession.release(); System.out.println();
16 Kural Motorları } catch (NoClassDefFoundError e) { if (e.getMessage().indexOf("JessException") != -1) { System.err.println("Error: The RI Jess could not be found."); } else { System.err.println("Error: " + e.getMessage()); } } catch (Exception e) { e.printStackTrace(); }
17 Kural Motorları Standart : JSR94 Java Rule Engine API uyumlu motorlar –Drools –Fair Isaac Blaze Advisor –ILOG JRules –Jess
18 Kural Motorları Standart : JSR94 Java Rule Engine API uyumlu motorlar –Drools –Jess (Jess in Action) –Fair Isaac Blaze Advisor –ILOG Jrules
19 Sorular?