Informatyzacja przedsiębiorstw WYKŁAD dr inż. Piotr Zabawa IBM/Rational Certified Consultant pzabawa@pk.edu.pl 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 e- mail.
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
Opisana w pliku: Konfiguracja środowiska developerskiego Drools 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 end when // condition(s) albo LHS Account ( balanace < 100 ) then // consequence albo RHS System.out.println( Account balance is less then 100 );
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