Instalacja JBPM
jBPM to elastyczny pakiet Business Process Management (BPM). Jest lekki, w pełni open-source (dystrybuowany na licencji Apache License 2.0) i napisany w Javie. Umożliwia modelowanie, wykonywanie i monitorowanie procesów biznesowych i przypadków przez cały cykl ich życia.
jBPM korzysta z następujących komponentów:
- Serwera aplikacji WildFly (wersja community Jboss Entreprise Application Server) rozwijanej przez Red Hat
- Drools jako silnik reguł biznesowych, Artemis JMS do obsługi komunikacji między komponentami,
- KIE Server - lekki serwer wykonawczy, który służy do uruchamiania procesów biznesowych BPMN, reguł Drools oraz optymalizacji OptaPlanner. Jego główną rolą jest wykonywanie tych elementów w oparciu o zadania przekazywane przez API (REST lub JMS). Sam KIE Server nie oferuje interfejsu graficznego do modelowania – jest jedynie serwerem uruchamiającym procesy i reguły. Kiedy finalnie uruchomisz http://localhost:8080/business-central połączysz sie właśnie z KIE Server
- KIE Workbench - aplikacja webowa działająca na serwerze aplikacyjnym (np. WildFly), która udostępnia graficzny interfejs do modelowania procesów BPMN, zarządzania regułami Drools i tworzenia formularzy.
Pobranie JBPM i przygotwanie systemu operacyjnego
jBPM wymaga Maven. jBPM jest zbiorem bibliotek i zależności zewnętrznych (np. Hibernate, Drools, itp.), które muszą być zainstalowane i dostępne podczas kompilacji i uruchamiania aplikacji. Maven pozwala na łatwe zarządzanie tymi zależnościami jBPM jest podzielone na różne moduły (np. jBPM core, jBPM console, jBPM human task, itp.), z których każdy może mieć swoje własne zależności. Maven pozwala na zarządzanie tymi zależnościami i modułami w sposób spójny, co ułatwia zarówno rozwój, jak i utrzymanie projektu.
Maven
Pobierz Maven ze strony https://maven.apache.org/download.cgi a następnie dodaj do zmiennych Windows 'MAVEN_HOME' oraz do zmiennej 'PATH' scieżkę '%MAVEN_HOME%\bin'.
Repozytorium projektów JBPM będzie domyślnie przechowywane w:
C:\Users\user\.m2\repository
Możesz to zmienić ustawiając zmienna M2_HOME z odpowiednią ścieżką.
Java
JBPM nie uruchamia się w środowisku Java wyższym niż versja 8. Pobierz JDK np w wersji 'jdk8u432-b06'. Nie musisz ustawiać JAVA_HOME ze wskazaniem na tę wersję, wystarczy że ustawisz ją w pliku który uruchamia JBPM, standalone.bat:
set "JAVA_HOME=C:\Program Files\Java\jdk8u432-b06"
Pobranie JBPM
Ze strony https://www.jbpm.org/download/community.html pobierz zip oznaczony 'Download jBPM 7.74.1.Final server (single zip) distribution'. Po rozpakowaniu na dysku, upenij się że system będzie miał prawo zapisu w katalogach JBPM - pisanie do pliku konfiguracyjnego, tworzenie XML z ustawieniami serwera, pobieranie konektorów bazy danych i tworzenie konfiguracji połączenia.
Przygotowanie bazy danych
Domyślna instalacja JBPM zawiera baze danych H2. Do celów produkcyjnych potrzebujesz innej. Jeśli zdecydujesz sie na skorzytanie z MySQL lub Postgresql, JBPM ma skrypt ktory wykona konfigurajcę za Ciebie. Najlepszym pomysłem będzie użycie Postgresql (MySQL czesto faktycznie jest bazą MariaDB, domyslny konektor ktory przychodzi z instalacja JBPM nie wspolpracuje z MySQL w Windows a po instalacji mysql-connector-java-5.1.49-bin.jar JBPM mimo ze uzywa bazy, zglasza w logu bledy o niekompatybilnosci). Użyjemy zatem Postgresql.
Instalacja Postgresql
Nie musisz instalować bazy Postgres trwale w systemie. Do celów testu wystarczy pobranie np postgresql-17.0-1-windows-x64-binaries ze strony https://www.postgresql.org/download/. Po rozpakowaniu zip uruchom polecenia:
# Inicjacja bazy (wcześniej ustaw użytkownika w config, katalogu share). Katalog 'data' przechowuje dane.
initdb -D Z:\Postgresql\data -U postgres -A scram-sha-256 --pwprompt
# Uruchamianie
pg_ctl -D "Z:/Postgresql/data" -l "plik_dziennika.log" start
# Sprawdzanie statusu
pg_ctl -D "Z:/Postgresql/data" status
# Zatrzymanie:
pg_ctl -D "Z:/Postgresql/data" stop
Utworz baze, użytkownika dla JBPM i nadaj uprawnienia
Dobrym pomysłem będzie użycie DBeaver - jest lżejszy niż PGAdmin. Korzystając z tego GUI (zaznacz opcje 'show all databases' we właściwościach połączenia) utwórz baze 'jbpm', użytkownika 'jbpm' z hasłem 'jbpm' (to test) a następnie wykonaj szereg poleceń SQL by nadać temu użytkownikowi odpowiednie uprawnienia:
GRANT CONNECT ON DATABASE jbpms TO jbpm;
GRANT USAGE ON SCHEMA public TO jbpm;
GRANT CREATE ON SCHEMA public TO jbpm;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jbpm;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO jbpm;
Przygotowanie pliku konfiguracyjnego JBPM
Konfiguracja połączenia z bazą danych
Wejdż do katalogu 'bin' JBPM i wykonaj następujące polecenie (doda ono niezbędne dyrektywy do pliku konfiguracyjnego standalone.xml, pobierze konektor Postgresql, utworzy katalog 'modules\org\postgres\main')
jboss-cli.bat --file=jbpm-postgres-config.cli
Polecenie to dodało linie:
<system-properties>
<property name="org.kie.server.persistence.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
...
<datasources>
<xa-datasource jndi-name="java:jboss/datasources/jBPMDS" pool-name="jBPMXADS">
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
5432
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
jbpm
</xa-datasource-property>
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
<driver>postgres</driver>
<security>
<user-name>jbpm</user-name>
<password>jbpm</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<validate-on-match>true</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>120000</background-validation-millis>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</xa-datasource>
..
<drivers>
<driver name="postgres" module="org.postgres">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
Możesz usunąć teraz datasource H2, driver H2.
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
...
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
JBPM ciągle jednak nie będzie używać Postgres jako bazy danych. By tak się stało zmień default-bindings (zmień wskazanie na datasource):
<default-bindings .... datasource="java:jboss/datasources/jBPMDS" ..../>
Ustawienie dostępności pamięci
Domyślnie jBPM startuje z następującą alokacją pamięci (ustawienia w standalone.conf.bat):
set "JAVA_OPTS=-Xms64M -Xmx1512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=512m"
Zalecane jest zwiększenie tych wartości dla przeciętnie obciążonego systemu:
JAVA_OPTS="-Xms256M -Xmx2048M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=1024M"
Mail [SMTP]
Będziesz potrzebować komunikacji smtp by wysyłać maile z powiadomieniami o taskach oczekujących na realizację lub w innych celach. W tym celu połącz sie z WildFly CLI:
jboss-cli.bat
Następnie wpisz 'connect', prompt zmieni się na:
[standalone@localhost:9990 /]
Wykonaj kolejno trzy polecenia:
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=jbpm-mail-smtp/:add(host=smtp.email.com, port=465)
/subsystem=mail/mail-session=jbpm/:add(jndi-name=java:/jbpmMailSession, from=Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript. )
/subsystem=mail/mail-session=jbpm/server=smtp/:add(outbound-socket-binding-ref=jbpm-mail-smtp, ssl=true, username=Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript. , password=password)
Rozłącz się z WildFly. W efekcie tych poleceń do pliku standalone.xml zostanie wpisana konfiguracja serwera oraz sesji e-mail. Oto co znajdziesz w ustawieniach:
<subsystem xmlns="urn:jboss:domain:mail:4.0">
<mail-session name="jbpm" jndi-name="java:/jbpmMailSession" from="Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript. ">
<smtp-server outbound-socket-binding-ref="jbpm-mail-smtp" ssl="true" username="Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript. " password="xxxx"/>
</mail-session>
</subsystem>
...
<outbound-socket-binding name="jbpm-mail-smtp">
<remote-destination host="mail.pl" port="465"/>
</outbound-socket-binding>
jBoss potrafi wykorzystywać różne sesje email. To jakiej sesji użyje jBPM możesz wpisać na stałe do standalone.xml w sekcji <system-properties>:
<property name="org.kie.mail.session" value="java:/jbpmMailSession"/>
Możesz też startować jbpm z parametrem sesji:
standalone.bat -Dorg.kie.mail.session=java:/jbpmMailSession
Interfejsy [http, https]
Jeśli chesz by Twoja instalacja była dostępna z innego miejsca niz localhost, zmień domyślne zapisy w sekcji:
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
<interface name="unsecure">
<inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
</interface>
</interfaces>
'Public' to interfejs dostępny dla użytkowników aplikacji. W konfiguracji standalone.xml jest jeszcze kilka innych miejsc do ustawień sieciowych; nazwa serwera, komunikacja wsdl itd.
Uruchamianie jBPM
JBPM uruchamisz po prostu wykonujac standalone.bat z katalogu bin. Domyślnie użyty zostanie plik konfiguracyjny standalone.xml z katalogu standalone/configuration. Jeśli chcesz wskazać inny plik konfiguracyjny wykonaj polecenie:
standalone.bat -c plik-konfiguracyjny.xml
Po uruchomieniu jBPM wpisz w przeglądarce https://localhost:8443/business-central/ a następnie zaloguj się kontem administratora: wbadmin/wbadmin
Certyfikat TLS
Przy pierwszym uruchomieniu jBPM stworzy self-signed certyfikat TLS wgra go do utworzonego podczas startu keystore. Jeśli chcesz używać innego certyfikatu, wgraj go do keystore jBPMKeystore.jceks który znajduje w katalogu standalone/configuration. Możesz użyć w tym celu wygodnego GUI https://keystore-explorer.org/
Przechowywanie dokumentów
Domyślne 'Marshalling strategies' jBPM przechowują dokumenty w katalogu 'bin\.docs'. Możesz zmienić tę lokalizację wstawiając w <system-properties> zapis:
<property name="org.jbpm.document.storage" value="Z:/jbpm/xx/.docs"/>
Potencjalne problemy
Jesli server nie bedzie posiadac capabilities 'process', usun server i zresetuj jBPM