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

Podobne dokumenty