JBPM (12-14) 2008/2009
Z JASR Wiki
<<< Powrót do Tworzenie aplikacji wielowarstowych 2008/2009
Spis treści |
Instalacja w laboratorium:
A) Ściągamy następujące pliki
1. Eclipse 3.4.2: IDE for Java EE Developers http://www.eclipse.org/downloads/ 2. JBoss AS 5.0.0.GA http://www.jboss.org/downloading/?projectId=jbossas&url=https://sourceforge.net/project/showfiles.php?group_id=22866&package_id=16942&release_id=645033 3. jBPM 3.2 http://www.jboss.org/downloading/?projectId=jbossjbpm&url=http://downloads.sourceforge.net/jbpm/jbpm-installer-3.2.6.SP1.jar 4. jBPM GPD http://www.jboss.org/downloading/?projectId=jbossjbpm&url=http://downloads.sourceforge.net/jbpm/jbpm-jpdl-designer-site-3.1.7.zip 5. jBPM 4.0 (na razie nie współpracuje z Eclipsem, ale kilka bibliotek będzie nam potrzebne) http://www.jboss.org/downloading/?projectId=jbossjbpm&url=http://downloads.sourceforge.net/jbpm/jbpm-installer-4.0.0.Alpha2.zip
B) rozpakowujemy Eclipse i jBoss AS
C) instalujemy jBPM:
1. odpalamy instalator: java -jar jbpm-installer-3.2.*.jar 2. wybieramy katalog docelowy 3. zostawiamy zaznaczone jBPM3 jBoss Integration 4. wybieramy jBoss 5.0, server zostawiamy default 5. wybieramy baze danych Hypersonic 6. podajemy lokalizację do rozpakowanego jBoss AS 7. finalizujemu instalacje
C') instalujemy brakującą bibliotekę activation z jBPM4. Można ją ściągnąć z http://students.mimuw.edu.pl/~lk221989/jBPM/activation.jar lub analogicznie do punktu poprzedniego zainstalować jBPM4 (ale NIE integrować go z jBossem). Bibliotekę należy umieścić w <instalacja_jBPM3>/lib/
D) żeby sprawdzić czy działa:
1. uruchamiamy jBoss AS ( .../jboss-5.0.0.GA/bin/run ) 2. wchodzimy na stronę http://localhost:8080/jbpm-console/ 3. logujemu się do systemu (np. admin/admin)
Uwaga!
Po zainstalowaniu jBPM będzie używał standardowej bazy danych Hsqldb. To co aktualnie się w niej znajduje można obejrzeć:
1. wchodząc na http://localhost:8080/jmx-console/ 2. wybierając link 'database=jbpmDB,service=Hypersonic' 3. uruchamiając prostego managera: invoke startDatabaseManager 4. wykonując zwykłe zapytania (np. SELECT * FROM PUBLIC.JBPM_ID_USER pokaże wszystkich użytkowników systemu).
Informacje o używaniu dużych baz danych do współpracy z jBPM można znaleźć tutaj:
http://docs.jboss.org/jbpm/v3/userguide/thejbpmdatabase.html
Zadanie 0 (rozpoznanie walką):
Zalogować się przez konsolę jBPM do systemu i wypróbować działanie istniejących przykładowych procesów (inicjowanie procesu, wypełnianie formularzy, sygnalizowanie tokenów, ręczny przydział zadań).
Można wspomóc się tym tutorialem: http://www.jboss.org/community/docs/DOC-11142
E) instalacja wtyczki do Eclipsa
1. odpalamy Eclipse 2. wybieramy z menu: Help->Software Updates... 3. wybieramy zakładkę 'Availiable Software' i klikamy 'Add Site...' 4. wybieramy 'Archive...' i podajemy ścieżkę do pliku jBPM GPD: jbpm-jpdl-designer-site-3.1.* 5. zaznaczamy wszystko w węźle jBPM jPDL GPD i instalujemy 6. restartujemy Eclipse 7. wchodzimy do menu: Window->Preferences 8. wybieramy zakładkę jBoss JBPM->Runtime Location 9. kilkamy Add i tworzymy nowy runtime, podając ścieżkę do zainstalowanego jBPM3.2 10. zaznaczamy nowo utworzony runtime i klikamy OK 11. tworzymy nowy projekt jBoss jBPM->Process Project; runtime powinien być ustawiony na ten utworzony przed chwilą 12. Aby dodać proces, robimy nowy jBPM Process Definition.
Projekt procesu w jPDL składa się zwykle z następujących plików:
* gpd.xml – plik grafu procesu * processdefinition – plik definicji procesu (tu siedzi prawie wszystko) * forms.xml – plik konfigurujący formularze * myForm.xhtml – plik formularzu (może być ich wiele) * processimage.jpg – obrazek procesu
Aby umieścić proces na serwerze można:
1. wgrać plik (paczkę .zpi) zawierającą projekt procesu 2. użyć opcji Deployment w jBPM'owej wtyczce do Eclipsa (defaultowe ustawienia powinny działać)
Uwaga:
Jeśli w projekcie znajdują się klasy do obsługi akcji (będzie o nich dalej), to też powinny one tam trafić.
Trochę o modelu programowania:
Programowanie w jPDL:
* Wszystko robimy graficznie (chyba, że ktoś woli edytować pliki XML) * Modelem procesu jest skierowany graf (stąd Graph Oriented Programming)
Podstawowe elementy języka to:
* węzły (nodes) * przejścia (transitions) * akcje (actions)
Podczas wykonywania procesu jego instancja porusza się po grafie- token wskazuje w którym miejscu proces czeka. Sygnał mówi tokenowi jak dalej ma się poruczać.
jPDL wprowadza wyraźnie rozróżnienie między stanem i działaniem. Węzły odpowiadają stanom, a akcje podejmowanym w nim działaniom. Np. jeśli w procesie wydawania kredytu występuje ewaluacja wniosku kredytowego, to powinien tam być węzeł 'Ewaluacja' , z którym byłby związany komponent typu action, który wykonywałby ewaluację w oparciu o jakieś reguły biznesowe.
Opis wybranych komponentów:
Zadania (Tasks) to węzły, które wymagają udziału ludzi podczas wykonywania. Podczas egzekucji instancja procesu zatrzyma się i zaczeka aż człowiek (któremu przydzielono zadanie) wykona je.
Stany (States) to węzły zawierający zadania, które są wykonywane przez automatyczne systemy. Zwykle są związane z jakimiś akcjami. Proces zatrzyma się w nich do momentu otrzymania sygnału od automatycznego systemu.
Fork i Join służa do tworzenia współbieżnych i niezależnych egzekucji w procesie. Podczas forkowania token zostaje rozdzielony. Egzekucja opuści Join dopiero gdy wszystkie tokeny z powrotem się połączą.
Decyzje (Decisions) to węzeł dokonujący wyboru ścieżki egzekucji przez proces, na podstawie danych lokalnych (tzn. proces sam decyduje co teraz będzie robił). Jeśli decyzja jest oparta o zewnętrzne systemy, lepiej użyć węzła state z wieloma przejściami.
Węzeł typu Node daje możliwości tworzenia własnego węzła, ze zdefiniowaną przez programistę funkcjonalnością.
Przejścia (Transitions) tworzą ścieżki egzekucji. Muszą być nazwane, by w węźle można było wybrać, która z wychodzących token będzie dalej się poruszał.
Akcje zawierają kod Javy. Służą do umieszczania automatycznej logiki biznesowej i są niewidoczne podczas wykonywania procesu.
Swimline służy do przydzielania ról do zadań procesie. Można przydzielać je konkretnym aktorom lub grupom (wtedy jeden z członków grupy może wybrać sobie takie zadanie). jBPM używa własnych komponentów do zarządzania użytkownikami, ale mogą być one zastąpione.
Process state to stan będący sam w sobie procesem. Używanie tego typu węzłów jest niezbędne w dużych procesach.
Super state to stan będący zbiorem innych stanów. Wygodny w tworzeniu dużych procesów, gdzie często trzeba oddzielać grupy stanów, wykonujące jedną, skomplikowaną czynność (np. faza produkcji może składać się z wielu węzłów).
Tasks (czyli zadania) w skrócie:
Aby dodać do węzła zadanie (może to być np. węzeł start lub task-node) klikamy w Properties->Tasks drugim przyciskiem myszy i robimy NewTask.
* W General wpisujemy nazwę. * W Assignmen wybieramy Expression i wpisujemy np. „user(jakisUserDostepnyWKonsoli)” albo „group(jakasGrupaDostepnaWKonsoli)”. * W Controller wybieramy Default i dodajemy zmienne, które chcemy mieć dostępne w danym węźle. * W Details klikamy GenerateForm i wpisujemy zmienne które mają być dostępne na formularzu * Możemy tez podać przejścia które mają być wybierane z poziomu formularza.
Teraz węzeł zadania jest już oprogramowany i po umieszczeniu na serwerze użytkownicy będą mogli go wypełnić.
Zadanie 1:
Stworzyć prosty proces składania podania. Schemat jest następujący: po złożeniu podania jest ono oceniane. Może być wysłane do uzupełnienia danych (wtedy po uzupełnieniu wróci do ewaluacji) lub zaakceptowane (koniec).
Akcje:
Klasa wykonująca akcję musi implementować org.jbpm.graph.def.ActionHandler. Podczas wykonywania akcji wywoływana jest metoda execute.
public class MyActionHandler implements ActionHandler{
...
public void execute(ExecutionContext ctx) throws Exception {
DoSth()
}
}
Aby dostać się do zmiennej o nazwie „mojaZmienna” można użyć metody getVariable:
String amount = (String) ctx.getContextInstance().getVariable("amount");
Podobnie do ActionHandler działa DecisionHandler (z metodą decide), używany w węzłach typu Decision.
Więcej informacji o akcjach na: http://docs.jboss.org/jbpm/v3/userguide/processmodelling.html#actions
Zadanie 2:
Dodać do procesu prostą akcję wykonywaną przez klasę Javową (np. wysyłanie maili lub wypisywanie tekstu na ekranie). Klasa powinna odwoływać się do danych wprowadzonych przez użytkownika.
Zadanie 3:
Zaprojektować ciekawy proces (z podprocesami, współbieżną egzekucją, automatycznymi decyzjami itd.)
Więcej informacji o jBPM:
* Tutorial: Tworzenia przykładowej aplikacji (video): http://docs.jboss.com/jbpm/v3/demos/movies/jbpm-overview.htm
* Dokumentacja jBPM 3.2 http://docs.jboss.org/jbpm/v3/userguide/
* Dokumentacjia jBPM 4 (jeszcze częściowo niekompletna) http://docs.jboss.com/jbpm/v4.0/userguide/html_single/
* Różne ciekawe informacje http://www.mastertheboss.com/en/jbpm.html
* W tym dobre praktyki jBPM http://www.mastertheboss.com/en/jbpm/106-jbpm-best-practices.html
* książka: „Buisness Process Management with Jboss jBPM” Matt Cumberlidge
*Współpraca jBPM z SEAMem: http://www.mastertheboss.com/en/seam/90-seam-jbpm.html
BPEL:
Podstawowe języki w jBPM to:
* jPDL: język definiowanai procesów, podstawowy w jBPM * BPEL: język wykonywania procesów biznesowych, powszechnie używany w przyrodzie, można dodać jego obsługę w jBPM instalując odpowiedni .jar
Nie są wymiennie stosowalne. Trzeba wybrać, czego się potrzebuje.
* jPDL- jeśli pracujemy lokalnie i używamy dużo Javy (POJO). * BPEL- jeśli używamy dużo (różnych) web serwisów, dane wymieniamy w XML i komunikacja jest asynchroniczna.
NetBeans 6.5 posiada wtyczkę która umożliwia bardzo wygodne tworzenie procesów w BPEL.
Informacje o BPEL w jBPM można znaleźć w dokumentacji http://docs.jboss.com/jbpm/bpel/v1.1/userguide/