Wykład 2
Transkrypt
Wykład 2
Informatyzacja przedsiębiorstw WYKŁAD dr inż. Piotr Zabawa IBM/Rational Certified Consultant [email protected] wersja 0.1.0 07.10.2010 Wykład 2 Modelowanie procesów biznesowych z wykorzystaniem BPMN w środowisku Jboss Drools Literatura Wykład ten (Wykład 2) powstał na podstawie dwóch książek: Bali M., Drools JBoss Rules 5.0. Developers Guide, Packt Publishing 2009. Browne P., JBoss Drools Business Rules, Packt Publishing 2009. oraz na podstawie dokumentacji do JBoss Drools. Elementy diagramu BPMN2 • Na wykładzie tym zostaną zaprezentowane tylko te elementy standardu BPMN2, które są dostępne w obecnej wersji z poziomu JBossDrools 5.1. • W drugiej części wykładu zostanie zaprezentowany sposób skonfigurowania środowiska developerskiego do modelowania procesów i reguł biznesowych w Eclipse. Zostanie też zaprezentowany sposób tworzenia prostych projektów. • Bardziej zaawansowany przykład (od modelu biznesowego po aplikację Java EE) zostanie omówiony na jednym z kolejnych wykładów. Start/End Start – jedyny na diagramie workflow początek procesu. Nie ma wejścia i ma jedno wyjście. End – jeden z wielu możliwych końców procesu. Ma jedno wejście i nie ma wyjścia. Gateways Diverge (Split) – miejsce rozgałęzienia procesu w wiele ścieżek. AND – przepływ we wszystkich wyjściach naraz OR – przepływ do wszystkich warunków true XOR – zostanie wybrane dokładnie jedno wyjście Converge (Join) – miejsce połączenia wielu ścieżek procesu w jedną. AND – kontynuacja po zakończeniu wszystkich wejść XOR – kontynuacja po zakończeniu pierwszego wejścia Tasks Rule – obejmuje grupę reguł biznesowych do uruchomienia w ramach tego tasku. Script – blok kodu do wykonania w ramach tego tasku. User Task – task wymagający podjęcia działań przez business workera. Subprocess – podproces służący dekompozycji złożonego procesu lub ponownemu użyciu. Service Tasks Log - wbudowana usługa logowania do pliku. Email – wbudowana usługa powiadamiania email. Events Timer – zdarzenie wyzwalane timerem. Error – zdarzenie wyzwalane błędem. Message – zdarzenie wyzwalane komunikatem. Sub-Process Sub-Process – służy modelowaniu podprocesów osadzanych w ramach procesu. Podproces ma dostęp do wszystkich danych procesu, którego jest elementem. Podobnie jak proces musi mieć jeden stan początkowy i może mieć wiele stanów końcowych. Multiple Instances Multiple Instances – wielokrotne uruchomienie podprocesu zawartego w tym kontenerze. Zaawansowany przykład modelu Zaawansowany przykład modelu Zaawansowany przykład modelu Wady tradycyjnego podejścia Wady tradycyjnego podejścia: if (customer.getLevel() == Level.Gold){ // coś dla Gold } else if (customer.getLevel==Level.Silver){ if (customer.getAccounts()==null){ // coś dla Silver, który nnie ma rachunku??? } else{ for(Account account : customer.getAccounts()) if (account.getBalance<0){ // coś dla Silver mającego konto z debetem } else if (account.getBalance>=0 and account.getBalance()<=1000){} else if (account.getBalance>1000 and account.getBalance()<=100000){} else if (account.getBalance>100000 and account.getBalance()<=500000){} // … } } Jak obsługiwać zmiany logiki w takim kodzie? Rozwiązanie problemu Lepiej rozbić to na niezależne warunki: if Customer(level==Level.Silver) and no Account if Customer(level==Level.Silver) and has Account debit if Customer(level==Level.Silver) and has Account less then 1000 //… Uzasadnienie dla reguł biznesowych • Zalety • Wady • Kiedy nie stosować Reguły biznesowe - zalety • • • • Łatwiej zrozumieć analitykowi i nowemu programiście Łatwiej skupić się na istocie problemu, czyli co a nie jak Łatwość dodawania, usuwania reguł Łatwość wprowadzania zmian zarówno do reguł jak i do modelu dziedzinowego • Duża efektywność algorytmu • Łatwość odwzorowania w reguły wymagań formułowanych przez analityków Reguły biznesowe - zalety • Łatwość korzystania z jednolitego mechanizmu przy dodawaniu zobowiązań biznesowych, np. audyt, raportowanie, logowanie zdarzeń • Łatwość ponownego użycia • Uwolnienie reguł od sekwencyjności przetwarzania (w odróżnieniu od języków deklaratywnych) • Łatwość wykonywania reguł z procesu lub uruchamiania procesów w regułach (Drools) Reguły biznesowe - zalety • Niezależne cykle życia. Wydzielenie reguł i procesu z cyklu życia oprogramowania w osobną grupę często zmieniających się artefaktów; niezależność zmian reguł/procesów i kodu oprogramowania • Łatwość osadzania Drools w aplikacjach Reguły biznesowe - wady • Konieczność przestawienia się programistów na inny sposób myślenia • Trudności w wykrywaniu i usuwaniu błędów w regułach/procesie • Trudność śledzenia reguł bez dogłębnej znajomości tego jak działa silnik Reguły biznesowe - wady • Wysokie wymagania dla zasobów pamięciowych • Teoretyczne niebezpieczeństwo wpadnięcia w rekursję jeśli reguły zmieniają sobie nawzajem dane, na których działają (teoretyczne jeśli modelujemy działający już proces) Reguły biznesowe – kiedy nie? • • • • Jeśli mniej niż 20 reguł Jeśli logika biznesowa zmienia się rzadko Jeśli reguły są proste, działają tylko na jednym obiekcie Jeśli w pseudo-kodzie poziom zagnieżdżenia instrukcji warunkowych jest mniejszy niż 3 • Jeśli software ma charakter doraźny i nie będzie ewoluował • Jeśli brakuje zasobów do obsługi reguł biznesowych Drools Jest to tzw. BLiP (Business Logic integration Platform). Na zajęciach skorzystamy z: • Drools Expert – silnik reguł biznesowych • Drools Flow – silnik procesów biznesowych • Drools Fusion – zdarzenia biznesowe Instalacja środowisk Na kolejnych slajdach przedstawiono sposób instalacji całego uniwersalnego środowiska deweloperskiego i wykonawczego. Jednak do samego działania w Drools wystarczy wykonać jedynie następujące kroki: • Instalacja uniwersalnego środowiska developerskiego • Konfiguracja środowiska developerskiego Drools Instalacja uniwersalnego środowiska deweloperskiego Środowisko to służy jednocześnie do: • Modelowania w UML • Modelowania w BPMN z wykorzystaniem Drools i uruchamiania modeli • Pisania aplikacji Java EE w przyjętym szkielecie • Pisania aplikacji Java SE/EE wykorzystujących silniki Drools Instalacja opisana w pliku: UniversalIDE_01_Installation.pdf Instalacja uniwersalnego środowiska wykonawczego Środowisko to służy do uruchamiania: • Aplikacji Java EE • Modeli BPMN w JBoss Drools Instalacja opisana w pliku: UniversalRuntime_01_InstallAndConfig.pdf Konfiguracja uniwersalnego środowiska deweloperskiego Środowisko to wykorzystuje następujące środowisko wykonawcze: • JBoss AS i/lub Tomcat jako serwery aplikacyjne • MySQL i/lub Derby jako serwery baz danych • JBoss Drools Konfiguracja opisana w pliku: UniversalIDE_02_Configuration.pdf Konfiguracja środowiska developerskiego Drools Opisana w pliku: JBossDrools_01_RuntimeSetting.pdf Przykłady Drools_HelloWorld Są to maksymalnie uproszczone przykłady „na dobry początek” pokazujące różne przydatne mechanizmy dostępne w silnikach oferowanych przez Drools. Wszystkie przykłady odwołują się do różnych zagadnień związanych z powitaniami (HelloWorld). Mogą stanowić dobrą podstawę do rozpoczęcia własnych eksperymentów zarówno ze środowiskiem developerskim jak i z samym zagadnieniem modelowania procesów biznesowych. Były pisane przeze mnie w bardzo szybkim tempie, więc tym bardziej wszelkie uwagi i sugestie są mile widziane. W dalszej części wykładu mechanizmy poznane na tych prostych przykładach zostaną wykorzystane w przykładach bardziej zaawansowanych odnoszących się do systemów bankowych – warto zatem je od razu tutaj poznać. Przykłady Drools_HelloWorld szybki przegląd i szybki start • HelloWorld01_ProcessOnly – zrobiony za pomocą kreatora zawierający proces z akcją i klasę runnera • HelloWorld02_RuleOnly – zrobiony za pomocą kreatora zawierający reguły i klasę runnera • HelloWorld03_ProcessAndRule – zrobiony na podstawie dwóch poprzednich łączący proces z regułami i zawierający zmienioną klasę runnera • HelloWorld04_ProcessAndDSLRule – przykład poprzedni dostosowany do oczekiwań analityków biznesowych dzięki wykorzystaniu DSL (Domain-Specific Language) Przykłady Drools_HelloWorld zdarzenia i analiza statystyczna • HelloWorld05_RulesAndEvents – prosty program pokazujący jak korzystając z silnika reguł biznesowych doprowadzić do wypisania powitania sterowanego zdarzeniem • HelloWorld06_StatefullSession – nieco bardziej złożony program ilustrujący sposób przeprowadzenia analizy statystycznej faktów znajdujących się w bazie wiedzy silnika reguł biznesowych • HelloWorld07_DroolsTypeDeclaration – dość skomplikowany przykład, w którym przeprowadzana jest analiza statystyczna dotycząca zdarzeń biznesowych Przykłady Drools_HelloWorld zdarzenia na osi czasu • HelloWorld08_? – uzupełnić! • HelloWorld09_? – uzupełnić! Przykłady Drools_HelloWorld architektura • HelloWorld10_BusinessRulesEngine – przykład pokazujący jak w sposób nie naiwny korzystać w aplikacji z silnika reguł biznesowych ukrytego za interfejsem uzupełnić! • HelloWorld11_BusinessProcessEngine – przykład ilustrujący możliwość ukrycia przed aplikacją procesu biznesowego za interfejsem uzupełnić! Sposób utworzenia nowego projektu Sposób utworzenia nowego przykładu z procesem opisany w pliku: JBossDrools_02_ProjectCreationWizard.pdf Przykłady Drools_HelloWorld Sposób uruchomienia przykładu z procesem opisany w pliku: JBossDrools_03_ProjectWorkflowExecution.pdf Koncepcja silnika reguł biznesowych Przykład – reguła biznesowa: package droolsbook; rule „basic rule” when // condition(s) albo LHS Account ( balanace < 100 ) then // consequence albo RHS System.out.println(„Account balance is less then 100”); end Koncepcja silnika reguł biznesowych Przykład c.d. – bean jako zwykła klasa Java (POJO): package droolsbook; public class Account{ private long balance; public long getBalance(){ return balance; } public void setBalance(long balance){ this.balance = balance; } @Override public boolean equals(final Object other){//…} @Override public int hashCode(){//…} @Override public String toString(){//…} } Koncepcja silnika reguł biznesowych Opis koncepcji działania na powyższym przykładzie. Klasa klienta realizuje następujące kroki: • Tworzy obiekt bazy wiedzy • Umieszcza w tym obiekcie zasoby (tu: reguły biznesowe) • Tworzy obiekt sesji (stanowej lub bezstanowej) • Tworzy obiekt klasy Account • Umieszcza obiekt klasy Account w obiekcie sesji • Uruchamia reguły Do tworzenia obiektów Drools wykorzystywany jest Builder. Bardziej szczegółowe informacje widać w Drools_HelloWorld. Koncepcja silnika reguł biznesowych Opis reakcji silnika Drools: Drools próbuje dopasować każdy fakt (tu: Account) umieszczony w sesji z bazą wiedzy do każdego warunku reguł biznesowych umieszczonych w bazie wiedzy aby sprawdzić które fakty spełniają te reguły. Etap ten to tzw. pattern matching. Jeśli dany fakt spełnia wszystkie warunki w danej regule biznesowej, to jest wykonywana dla tego faktu konsekwencja określona wtej regule biznesowej. Czyli mamy funkcjonalność wyprowadzoną na zewnątrz z faktów i przeniesioną do reguł. Innymi słowy funkcjonalnością obiektów sterujemy spoza nich. Koncepcja silnika reguł biznesowych Opis reakcji silnika Drools c.d.: Jeśli faktów jest więcej i warunki danej reguły dotyczą więcej niż jednego faktu, to silnik reguł biznesowych dopasowuje zestawy faktów w taki sposób, aby znaleźć wszystkie zestawy faktów spełniające daną regułę (wszystkie jej warunki jednocześnie). Następnie konsekwencja takiej reguły jest realizowana dla każdego zestawu dopasowanego wcześniej z sukcesem. Koncepcja silnika reguł biznesowych Kolejność wykonania: Kolejność wykonania konsekwencji dla poszczególnych obiektów nie jest określona – decyduje o tym silnik reguł biznesowych (por. uwagi o wadach silników). Jednak są w Drools mechanizmy pozwalające zapanować do pewnego stopnia nad kolejnością wykonania: • Agenda – Priorytety reguł (salience) – Grupowanie reguł • (activation-group) albo (agenda-group) • Ruleflow czyli Workflow (ruleflow-group) Język reguł biznesowych • Reguła może zawierać wiele warunków Account ( balance == 200) Customer (name == „John”) • Reguła może deklarować zmienne (to tylko deklaracja – podstawianiem zajmuje się silnik) $account : Account ( $type : type ) • Reguła może używać zadeklarowanej zmiennej (dla każdego znalezionego obiektu klasy Account znajdujemy wszystkie obiekty klasy Customer o polu account będącym znalezionym wcześniej obiektem klasy Account) $account : Account() Customer ( account == $account ) Język reguł biznesowych • Typy natywne java i inne – String – Wyrażenie regularne – Date – Boolean – Enum • Komentarze – pojedyncza linia # lub // – /* blok */ • Pakiety i importowanie Język reguł biznesowych • Zmienne globalne (deklaracja, przekazanie do sesji, skorzystanie w regule) • Dialekty – Java – domyślny – mvel – przydatny ze względu na skróconą formę zapisu reguł Język reguł biznesowych • Operatory w warunkach reguł – And – Or – Not – Exists – Eval – return value restriction (wywołanie metody faktu ujęte w nawiasy) – Inline eval – Nested accessors Język reguł biznesowych • Operatory w warunkach reguł c.d. – This – Działania na kolekcjach • Contains • Not contains • Member of • Not member of • from Język reguł biznesowych • Metody w konsekwencjach reguł – Modify (modyfikuje fakt w ramach sesji) – Insert (umieszcza nowy fakt w sesji) – Retract (usuwa fakt z sesji) Język reguł biznesowych • Atrybuty reguł – salience – no-loop – dialect