Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:bim:lab5 [2013/11/18 19:59] kkluza utworzono |
pl:dydaktyka:bim:lab5 [2019/06/27 15:50] (aktualna) |
W tym momencie możemy usunąć warunek dot. kompetencji zespołu z zadania //Evaluate offer// i zamiast niego wprowadzić warunek związany z wysokim ryzykiem projektu (np. ''projectRisk == "Wysokie"''). | W tym momencie możemy usunąć warunek dot. kompetencji zespołu z zadania //Evaluate offer// i zamiast niego wprowadzić warunek związany z wysokim ryzykiem projektu (np. ''projectRisk == "Wysokie"''). |
| |
| Opcjonalnie: Aby przetestować opisane reguły bez Activiti możemy do naszego projektu dołożyć klasę rulerunner.java do uruchomienia reguł, a nasze reguły przetestować przy użyciu klasy rulerunnertest.java. Do tego celu potrzebujemy w eclipsie dołączyć odpowiednie pliki biblioteczne do ''src/main/resources/lib'' -- {{:pl:dydaktyka:bim:lab5:lib.zip|}}.| | | Opcjonalnie: Aby przetestować opisane reguły bez Activiti możemy do naszego projektu dołożyć klasę [[pl:dydaktyka:bim:lab5?&#dodatkowe_pliki_do_testowania_modelu_regulowego|RuleRunner]] do uruchomienia reguł, a nasze reguły przetestować przy użyciu klasy [[pl:dydaktyka:bim:lab5?&#dodatkowe_pliki_do_testowania_modelu_regulowego|RuleRunnerTest]]. Do tego celu potrzebujemy w eclipsie dołączyć odpowiednie pliki biblioteczne do ''src/main/resources/lib'' -- {{:pl:dydaktyka:bim:lab5:lib.zip|}}.| |
| |
Ustawienia dla zadania regułowego: | Ustawienia dla zadania regułowego: |
* Input variables: ${modelRyzyka} | * Input variables: ''${modelRyzyka}'' |
* Result variable: projectRisk | * Result variable: ''projectRisk'' |
| |
Do pliku ''pom.xml'' dołożyć odpowiednie dependencje z [[activiti:konfiguracja\#konfiguracja_silnika_by_zadzialaly_reguly_w_activiti]]. | Do pliku ''pom.xml'' proszę dołożyć odpowiednie dependencje jak na listingu w części [[pl:dydaktyka:bim:lab5?&#dodatkowe_pliki_do_testowania_modelu_regulowego|Dodatkowe pliki...]]. |
==== Uruchomienie modelu z regułami w eclipsie ==== | ==== Uruchomienie modelu z regułami w eclipsie ==== |
| |
Następnie tak przygotowaną klasę możemy wybrać w zakładce **Listeners** w zadaniu **Set offer factors**: | Następnie tak przygotowaną klasę możemy wybrać w zakładce **Listeners** w zadaniu **Set offer factors**: |
| |
{{:pl:dydaktyka:bim:lab5:eclipse4-tasklistener-addmodel.png|}} | {{:pl:dydaktyka:bim:lab5:eclipse4-tasklistener-addmodel.png?950|}} |
| |
Proszę zmodyfikować test, tak by nie przekazywał instancji ''modelRyzyka'' do procesu, tylko korzystał z instancji stworzonej w przygotowanym task listenerze. | Proszę zmodyfikować test, tak by nie przekazywał instancji ''modelRyzyka'' do procesu, tylko korzystał z instancji stworzonej w przygotowanym task listenerze. |
| |
| |
| DO SPRAWOZDANIA: |
| * Proszę w sprawozdaniu umieścić model oraz rozbudowany test. |
| * Proszę umieścić screenshot z eclipsa z rezultatem testu, jak również kod klasy ''pl.org.bpmn.AddModel''. |
==== Wdrożenie i uruchomienie procesu z regułami w Activiti Explorerze ==== | ==== Wdrożenie i uruchomienie procesu z regułami w Activiti Explorerze ==== |
| |
Silnik actviti został [[activiti:konfiguracja&#konfiguracja_silnika_by_zadzialaly_reguly_w_activiti|skonfigurowany]] tak, by mógł uruchamiać zadania regułowe Droolsa. | Jeśli silnik actviti został skonfigurowany tak, by mógł uruchamiać zadania regułowe Droolsa, to będziemy mogli uruchomić proces w Activiti Explorerze. |
| |
Podobnie jak poprzednio, do wdrożenia procesu i reguł potrzebne będą archiwa **jar** oraz **bar** (proszę pamiętać o **unikalnych nazwach klas i plików**!). W archiwum bar dołożymy oprócz diagramu również plik z regułami. Następnie należy: | Podobnie jak poprzednio, do wdrożenia procesu i reguł potrzebne będą archiwa **jar** oraz **bar** (proszę pamiętać o **unikalnych nazwach klas i plików**!). W archiwum bar dołożymy oprócz diagramu również plik z regułami. Następnie należy: |
- Przy użyciu [[http://80.82.18.218:8082/examples/upload123.htm|formularza]] przesłać plik jar do katalogu z bibliotekami dla Activiti Explorera. | - Przekopiować plik jar do katalogu z bibliotekami dla Activiti Explorera. |
- Po poprawnym przesłaniu pliku należy przeładować silnik Activiti Explorera, aby przeczytał biblioteki! (Z racji tego, że pracujemy na jednym silniku na serwerze, to zadanie wymaga synchronizacji kilku osób.). | - Po poprawnym przesłaniu pliku należy przeładować silnik Activiti Explorera, aby przeczytał biblioteki. |
- Jeśli wszystko wykonało się poprawnie, w Activiti Explorerze powinno się dać wdrożyć procesy zawierające zadania regułowe. | - Jeśli wszystko wykonało się poprawnie, w Activiti Explorerze powinno się dać wdrożyć procesy zawierające zadania regułowe. |
| |
==== Integracja procesu "Check offer" (z zajęć 3 i 4) z procesem rozwijanym na zajęciach 1 i 2 ==== | ==== CZĘŚĆ NIEOBOWIĄZKOWA ==== |
| |
| Dla zainteresowanych osób, poniżej przedstawiono możliwości integracji modeli stworzonych w trakcie zajęć oraz dalszej rozbudowy procesu. |
| |
| ==== Integracja procesu "Check offer" (z lab. 3 i 4) z procesem rozwijanym w lab. 1 i 2 ==== |
| |
Jeśli założymy, że podproces **Check offer** jest osobną całością, która mogłaby być użyta w różnych procesach, sensownie będzie go wydzielić jako //Call Activity//. W tym celu zostawimy na diagramie procesu jedynie elementy z wnętrza podprocesu **Check offer**: | Jeśli założymy, że podproces **Check offer** jest osobną całością, która mogłaby być użyta w różnych procesach, sensownie będzie go wydzielić jako //Call Activity//. W tym celu zostawimy na diagramie procesu jedynie elementy z wnętrza podprocesu **Check offer**: |
Upewniwszy się, że nasz podproces działa, zapewniamy mu unikalne ''id'', tak byśmy mogli się do niego odwoływać z innego procesu. | Upewniwszy się, że nasz podproces działa, zapewniamy mu unikalne ''id'', tak byśmy mogli się do niego odwoływać z innego procesu. |
| |
{{ :activiti:tutorial4:eclipse4-callactivitiinprocess.png |}} | {{ pl:dydaktyka:bim:lab5:eclipse4-callactivitiinprocess.png |}} |
| |
Aby odwołać się z **Check offer** w postaci //Call Activity// (jak na powyższym rysunku) do odpowiedniego podprocesu, który zostanie wykonany, ustawiając następujące parametry w ''Main Config'' dla //Call Activity//: | Aby odwołać się z **Check offer** w postaci //Call Activity// (jak na powyższym rysunku) do odpowiedniego podprocesu, który zostanie wykonany, ustawiając następujące parametry w ''Main Config'' dla //Call Activity//: |
* Dodanie zadań przygotowujących dokumenty dla klienta na potrzeby oferty. | * Dodanie zadań przygotowujących dokumenty dla klienta na potrzeby oferty. |
* Dodanie zadania informującego o przyczynie przerwania przetwarzania oferty \\ (np. nie spełniamy warunków formalnych, negatywna analiza merytoryczna, brak możliwości wyceny itp.). | * Dodanie zadania informującego o przyczynie przerwania przetwarzania oferty \\ (np. nie spełniamy warunków formalnych, negatywna analiza merytoryczna, brak możliwości wyceny itp.). |
| |
| ==== Dodatkowe pliki do testowania modelu regułowego ==== |
| |
| <code java RuleRunner.java> |
| package pl.org.bpmn; |
| |
| import java.io.File; |
| |
| import pl.org.bpmn.Model; |
| import org.drools.KnowledgeBase; |
| import org.drools.KnowledgeBaseFactory; |
| import org.drools.builder.KnowledgeBuilder; |
| import org.drools.builder.KnowledgeBuilderError; |
| import org.drools.builder.KnowledgeBuilderErrors; |
| import org.drools.builder.KnowledgeBuilderFactory; |
| import org.drools.builder.ResourceType; |
| import org.drools.io.ResourceFactory; |
| import org.drools.runtime.StatelessKnowledgeSession; |
| |
| public class RuleRunner { |
| |
| public static String runRules(Model modelRyzyka) throws Exception { |
| |
| KnowledgeBase kbase = readKnowledgeBase(); |
| StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession(); |
| ksession.execute(modelRyzyka); |
| System.out.println("Done firing.. --> result = " + modelRyzyka.Ryzyko); |
| return modelRyzyka.Ryzyko; |
| } |
| |
| private static KnowledgeBase readKnowledgeBase() throws Exception { |
| KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); |
| kbuilder.add( |
| ResourceFactory.newClassPathResource("rules" |
| + File.separator + "rules.drl"), |
| ResourceType.DRL); |
| KnowledgeBuilderErrors errors = kbuilder.getErrors(); |
| if (errors.size() > 0) { |
| for (KnowledgeBuilderError error : errors) { |
| System.err.println(error); |
| } |
| throw new IllegalArgumentException("Could not parse knowledge."); |
| } |
| KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); |
| kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); |
| return kbase; |
| } |
| |
| } |
| </code> |
| |
| <code java RuleRunnerTest.java> |
| package pl.org.bpmn; |
| |
| import static org.junit.Assert.assertEquals; |
| |
| import pl.org.bpmn.RuleRunner; |
| import pl.org.bpmn.Model; |
| import org.junit.Test; |
| |
| public class RuleRunnerTest { |
| |
| @Test |
| public void testNiskiegoRyzyka(){ |
| Model modelRyzyka = new Model(); |
| modelRyzyka.Kompetencje = 8; |
| modelRyzyka.Trudnosc = 3; |
| String ryzyko = null; |
| try { |
| ryzyko = RuleRunner.runRules(modelRyzyka); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| assertEquals("Niskie", ryzyko); |
| } |
| |
| @Test |
| public void testWysokiegoRyzyka(){ |
| Model modelRyzyka = new Model(); |
| modelRyzyka.Kompetencje = 2; |
| modelRyzyka.Trudnosc = 7; |
| String ryzyko = null; |
| |
| try { |
| ryzyko = RuleRunner.runRules(modelRyzyka); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| assertEquals("Wysokie", ryzyko); |
| } |
| |
| @Test |
| public void testSredniegoRyzyka(){ |
| Model modelRyzyka = new Model(); |
| modelRyzyka.Kompetencje = 8; |
| modelRyzyka.Trudnosc = 8; |
| String ryzyko = null; |
| |
| try { |
| ryzyko = RuleRunner.runRules(modelRyzyka); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| assertEquals("Srednie", ryzyko); |
| } |
| |
| @Test |
| public void testBrakuRegulOkreslajacychRyzyko(){ |
| Model modelRyzyka = new Model(); |
| modelRyzyka.Kompetencje = 5; |
| modelRyzyka.Trudnosc = 5; |
| String ryzyko = null; |
| |
| try { |
| ryzyko = RuleRunner.runRules(modelRyzyka); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| assertEquals("Brak danych", ryzyko); |
| } |
| |
| } |
| </code> |
| |
| W pliku ''pom.xml'' powinny zostać dołożone następujące elementy: |
| <code xml> |
| <properties> |
| <drools-version>5.3.0.Final</drools-version> |
| </properties> |
| <dependencies> |
| <dependency> |
| <groupId>org.drools</groupId> |
| <artifactId>drools-core</artifactId> |
| <version>${drools-version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.drools</groupId> |
| <artifactId>drools-compiler</artifactId> |
| <version>${drools-version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.drools</groupId> |
| <artifactId>drools-decisiontables</artifactId> |
| <version>${drools-version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.drools</groupId> |
| <artifactId>drools-transformer-xstream</artifactId> |
| <version>5.0.1</version> |
| </dependency> |
| </dependencies> |
| <repositories> |
| <repository> |
| <id>jboss-public-repository-group</id> |
| <name>JBoss Public Maven Repository Group</name> |
| <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url> |
| </repository> |
| </repositories> |
| </code> |