Projekt z AZNU tutorial 1. Definiowanie połączenia do bazy 1. Aplication Server Navigator (ctrl + shift + G) 2. Application Servers / PPM* / New Application Server 3. Standalone Server 4. AZNU / WebLogic 10.3 5. weblogic / welcome1 6. localhost / 7001 / 7002 / (Always use SSL odznaczone) / domain1 7. Test Connecction 8. Finish 2. Tworzenie aplikacji 1. Application Navigator (ctrl + shift + A) 2. New (ctrl + N) 3. General / Applications / Generic Application 4. Zmieniamy Application Name / Next 5. Zmieniamy Project Name / Nie wybieramy żadnej technologii 6. Finish 3. Definiowanie schematu XML 2. XML / XML Schema (jeśli nie ma do wyboru to przełączyć na zakładkę All Technologies) 3. Zmieniamy File Name 4. Tworzymy elementy, przykładowy schemat uzyskamy następująco: 1. exampleelement / PPM / Refactor / Rename (ctrl + alt + R) 2. processinput 3. processinput / PPM / Insert after element processinput / element 4. element1 / PPM / Refactor / Rename (ctrl + alt + R) 5. processoutput 6. processoutput / PPM / Insert after element processoutput / element 7. element1 / PPM / Refactor / Rename (ctrl + alt + R) 8. usluga1input (nazwę usługi należało by dać jakąś bardziej znaczącą niż usluga1) 9. usluga1input / PPM / Insert after element usluga1input / element 10. element1 / PPM / Refactor / Rename (ctrl + alt + R) 11. usluga1output 12. usluga1output / PPM / Insert after element usluga1output / element 13. element2 / PPM / Refactor / Rename (ctrl + alt + R) 14. usluga2input 15. usluga2input / PPM / Insert after element usluga2input / element 16. element1 / PPM / Refactor / Rename (ctrl + alt + R) 17. usluga2output 18. usluga2output / PPM / Insert after element usluga2output / element 19. element1 / PPM / Refactor / Rename (ctrl + alt + R) 20. error 21. processinput / PPM / Insert inside element processinput / sequence
22. sequence / PPM / Insert inside sequence / element 23. element1 / PPM / Refactor / Rename (ctrl + alt + R) 24. zmienna1 (nazwa zależna od założeń procesu) 25. zmienna1 / PPM / Set Type 26. xsd:int 27. sequence / PPM / Insert inside sequence / element 28. element2 / PPM / Refactor / Rename (ctrl + alt + R) 29. zmienna2 (nazwa zależna od założeń procesu) 30. zmienna2 / PPM / Set Type 31. xsd:int 32. processoutput / PPM / Insert inside element processoutput / sequence 33. sequence / PPM / Insert inside sequence / element 34. element3 / PPM / Refactor / Rename (ctrl + alt + R) 35. cena (nazwa zależna od założeń procesu) 36. cena / PPM / Set Type 37. xsd:int 38. powtarzamy kroki 21-37 (lub szybciej - kopiujemy zawartość w Source) odpowiednio dla usluga1input, usluga2input, usluga1output, usluga2output 39. powtarzamy kroki 32-37 dla error dając zmiennej nazwę errorno 5. Save All i backup 6. Od tego momentu nie będzie można dokonywać już żadnych zmian w xsd, więc należy dobrze przemyśleć jego strukturę. 4. Tworzenie plików WSDL 2. Business Tier / Web Services / WSDL Document 3. WSDLUsluga1 4. WSDLUsluga1.wsdl Structure (ctrl + shift + S) (lewy dolny róg) 5. Types / types / schema / PPM / Insert inside schema / include 6.... i wskazujemy nasz plik xsd 7. Zakładka Source 8. W definitions dopisujemy: xmlns:mytypes="http://www.example.org" 9. W types/ xsd:schema zmieniamy targetnamespace na http://www.example.org 10. Save All 11. Zakładka Design 12. Messages / + 13. usluga1inputmessage 14. usluga1inputmessage / PPM / Insert inside usluga1inputmessage / part 15. usluga1inputmessagepart / element / mytypes:ulsuga1input 16. Powtarzamy kroki 12 15 dla usluga1output i error 17. Save All 18. Port Types / + 19. usluga1inputport 20. usluga1inputport / PPM / Insert inside usluga1inputport / operation 21. usluga1operation / Request Response / tns:usluga1inputmessage / tns:usluga1outputmessage / Add Fault / fault / tns:errormessage 22. Bindings / Partner Link Types / + 23. OK 24. Services / + 25. usluga1service 26. usluga1service / Inser inside usluga1service / port
27. usluga1port 28. usluga1port / Insert inside usluga1port / soap12:address 29. Dowolny adres www, np. http://www.example.org 30. Save All i backup 31. Powtarzamy kroki 1-28 dla uslugi 2, lub szybciej: kroki 1-3 + kopia źródła i ctrl + R zmieniając usluga1 na usluga2 5. Tworzymy usługi 2. BPM Tier / BPM Project 3. usluga1 4. Empty Composite 5. Finish 6. New (ctrl + N) 7. Business Tier / Web Services / Java Web Service from WSDL 8. Java EE 1.5, with support for JAX-WS Annotations 9. WSDL Document URL: wybieramy z listy nasz WSDL dla uslugi1 10. Finish 11. OK 12. Otwieramy plik Usluga1InputPortImpl.java 13. Zamieniamy return null; na naszą logikę biznesową dla tej usługi, np.: Usluga1Output out = new Usluga1Output(); out.setcena(usluga1inputmessagepart.getzmienna1() + usluga1inputmessagepart.getzmienna2()); return out; 14. Save All 15. Project1 (na liście projektów) / PPM / Deploy / WebServices 16. Next / AZNU / Finish 17. usluga1 (na liście projektów) / PPM / Deploy / WebServices 18. Next / AZNU / Finish 19. Odpalamy przeglądarkę i stronę EM: 20. http://localhost:7001/em/ 21. Logujemy się na weblogic / welcome1 22. Rozwijamy z lewej węzeł Application Deployments 23. Wybieramy z niego naszą usługę: Application1-usluga1-context-root 24. Klikamy ikonkę Test 25. Wypełniamy na dole pola z naszymi zmiennymi 26. Klikamy na górze Test Web Service 27. Sprawdzamy czy wynik jest ok 28. Powtarzamy kroki 1-27 dla usluga2 29. Backup 6. Tworzenie głównego procesu BPEL 2. BPM Tier / BPM Project 3. process (lub inna nazwa) 4. Composite with BPEL Process 5. Finish 6. BPELProcess i zmieniamy na Synchronous BPEL Process 7. Klikamy lupkę przy input, następnie Import Schema File (prawy górny róg) i wskazujemy nasz plik xsd 8. Wybieramy processinput / OK
9. Lupka przy Output i wybieramy processoutput / OK / OK 10. Wrzucamy Switch między receiveinput a replyoutput 11. Klikamy na <condition> i ustawiamy Label (np. test zmiennych) 12. Ustawiamy Condition klikając na ikonkę kalkulatora i wprowadzając jakieś wyrażenie xpath wykrywające błąd, np.: bpws:getvariabledata('inputvariable','payload','/ns1:processinput/ns1:zmienna1') < 0 13. OK / OK 14. Otwieramy plik wsdl tego projektu (process) 15. Messages / + 16. BPELProcess1ErrorMessage (lub inna nazwa) 17. BPELProcess1ErrorMessage / PPM / Insert inside BPELProcess1ErrorMessage / part 18. errorpart / element / ns1:error 19. W port Types PPM na process (element zawierający w sobie elementy input i output) / Insert inside process / fault 20. client:bpelprocess1errormessage / error / OK 21. Save all i wracamy do procesu bpel 22. Wrzucamy Throw do gałezi pod test zmiennych 23. Throw_1 / Dwuklik 24. W Fault Qname klikamy lupkę i szukamy w Project WSDL Files naszego elementu error / OK / OK 25. Wrzucamy Assign przed replyoutput 26. Assign_1 / Dwuklik 27. + / Copy Operation 28. From wybieramy Expression i wpisujemy 0 29. To wybieramy Variable / outputvariable / payload / ns1:processoutput / ns1:cena 30. OK / OK 31. Wrzucamy na prawą stronę procesu element Partner Link/Adapter/Web Service z BPEL Services 32. Kopijemy z EM (w przeglądarce) ze strony testującej usluga1 jej wsdl i wklejamy w WSDL URL 33. Na pytanie odpowiadamy YES 34. Ustawiamy Partner Role na jedyną opcję dostępną na liście wyboru / OK 35. Powtarzamy kroki 33-36 dla usluga2 36. Wrzucamy element Scope przed replyoutput 37. Rozwijamy element Scope_1 38. Wrzucamy Flow do Scope_1 39. Rozwijamy element Flow_1 40. Wrzucamy Invoke do jednej z jego gałęzi 41. Łączymy Invoke_1 z PartnerLink1 ciągnąć za jeden z trójkącików dostępnych po jego bokach 42. Klikamy + przy zmiennych Input i Output, nie zmieniając nic w wyskakującym okienku (OK) 43. OK 44. Wrzucamy Transform przed Invoke_1 45. Transform_1 / Dwuklik 46. W Source klikamy + i wybieramy inputvariable / payload / OK 47. W Target Variable wybieramy input operacji Invoke_1 48. Klikamy + przy Mapper File 49. Łączymy elementy z lewej strony z elementami ze strony prawej klikając OK w wyskakującym okienku
50. Save All i zamykamy plik Transformation_1.xsl 51. Wrzucamy Assign za Invoke_1 52. Assign_2 / Dwuklik 53. + / Copy operation 54. Wybieramy z lewej Expression i klikamy kalkulatorek 55. Szukamy w outputvariable elementu cena i dodajemy go do wyrażenia 56. Wpisujemy w Expression znak dodawania po wstawionym wyrażeniu 57. Szukamy w Invoke_1_usluga1Operation_OutputVariable elementu cena i dodajemy go do wyrażenia 58. OK 59. Wybieramy z prawej Variable / outputvariable / cena 60. OK / OK 61. Wrzucamy Empty do drugiej gałęzi elementu Flow_1 62. Wrzucamy Invoke przed replyoutput 63. Łączymy Invoke_2 z PartnerLink2 64. Klikamy + przy zmiennych Input i Output, nie zmieniając nic w wyskakującym okienku (OK) 65. Wrzucamy Transform przed Invoke_2 66. Transform_2 / Dwuklik 67. W Source klikamy + i wybieramy inputvariable / payload / OK 68. W Target Variable wybieramy input operacji Invoke_2 69. Klikamy + przy Mapper File 70. Łączymy elementy z lewej strony z elementami ze strony prawej klikając OK w wyskakującym okienku 71. Save All i zamykamy plik Transformation_2.xsl 72. Wrzucamy Switch przed replyoutput 73. Klikamy w <condition> 74. Label: Blad 75. Klikamy kalkulatorek przy expression i wprowadzamy warunek xpath sprawdzający wystąpienie błędu np.: bpws:getvariabledata('invoke_2_usluga2operation_outputvariable','usluga2outputmes sagepart','/ns1:usluga2output/ns1:cena') < 0 76. OK / OK 77. Wrzucamy Throw do gałęzi z labelem Blad 78. Throw_2 / Dwuklik 79. W Fault Qname klikamy lupkę i szukamy w Project WSDL Files naszego elementu error (obojętnie którego) / OK / OK 80. Wrzucamy Assign do gałęzi otherwise 81. Assign_3 / Dwuklik 82. + / Copy operation 83. Wybieramy z lewej Expression i klikamy kalkulatorek 84. Szukamy w outputvariable elementu cena i dodajemy go do wyrażenia 85. Wpisujemy w Expression znak dodawania po wstawionym wyrażeniu 86. Szukamy w Invoke_2_usluga2Operation_OutputVariable elementu cena i dodajemy go do wyrażenia 87. OK 88. Wybieramy z prawej Variable / outputvariable / cena 89. OK / OK 90. W rozwiniętym elemencie Scope_1 klikamy Add Compensation Handler (pod przyciskiem rozwijania/zwijania)
91. Rozwijamy nowo dodaną gałąź 92. Wrzucamy do niej element Compensate (do ozdoby ;)) 93. Wrzucamy Assign za Compensate_1 94. Assign_4 / Dwuklik 95. + / Copy operation 96. From wybieramy Expression i wpisujemy 0 97. To wybieramy Variable / outputvariable / payload / ns1:processoutput / ns1:cena 98. OK / OK 99. Klikamy Add Catch Branch (pod przyciskiem rozwijania/zwijania całego procesu) 100. Dwuklik na nowo dodanym elemencie 101. Klikamy lupkę i szukamy naszą zmienną error 102. Rozwijamy nowo dodaną gałąź 103. Wrzucamy do niej Reply 104. Łączymy Reply_1 z bpelprocess1_client (z lewej) 105. Klikamy + przy Variable 106. OK / OK 107. Wrzucamy Assign przed Reply_1 108. + / Copy operation 109. From wybieramy Expression i wpisujemy -1 110. To wybieramy Variable / Reply_1_process_OutputVariable / payload / ns1:processoutput / ns1:cena 111. OK / OK 112. Wrzucamy Terminate za Reply_1 (dla pewności, że proces się zakończy) 113. Save All i backup 114. Deploy projektu z procesem BPEL 115. Otwieramy EM w przeglądarce i szukamy naszego procesu w zakładce SOA 116. Klikamy Test 117. Wpisujemy wartości zmiennych na dole 118. Klikamy Test Web Service na górze strony 119. Sprawdzamy wynik 120. Kopiujemy adres WSDL 7. Dodawanie mediatora 1. New Project 2. BPM Tier / BPM Project 3. Project Name: Mediator 4. Composite With Mediator 5. Finish 6. Zmieniamy na Synchronous Interface 7. Klikamy lupkę przy Input 8. Klikamy Import Schema File (prawy górny róg) 9. Klikamy lupkę i wskazujemy nasz plik xsd 10. OK / OK 11. wybieramy element processinput 12. OK 13. Klikamy lupkę przy Output 14. Wybieramy processoutput 15. OK / OK 16. Otwieramy plik composite.xml projektu mediatora 17. Przeciągamy WebService na przestrzeń External References 18. Wklejamy adres WSDL
19. OK 20. Browse 21. Klikamy ikonkę dodawania nowego modułu 22. OK 23. Wybieramy dodany moduł 24. OK / OK 25. Łączymy mediatora z dodanym WebService 26. Save All 27. Otwieramy plik mplan 28. Rozwijamy Static Routing 29. Klikamy ikonkę na prawo od Transform Using 30. Create New Mapper File / OK 31. Łączymy elementy 32. Save All i zamykamy plik 33. Powtarzamy kroki 24-27 dla drugiego Transform Using 34. Usuwamy Faults (bo nie pamiętam jak się go dodawało, pewnie gdzieś wcześniej jest błąd) 35. Save All i backup 36. Deploy projektu z mediatorem 37. Otwieramy EM w przeglądarce i szukamy naszego mediatora w zakładce SOA 38. Klikamy Test 39. Wpisujemy wartości zmiennych na dole 40. Klikamy Test Web Service na górze strony 41. Sprawdzamy wynik 42. Kopiujemy adres WSDL 8. Dodawanie proxy dla mediatora 1. Wybieramy nasz pierwszy projekt (ten ze schemą) 2. New (ctrl + N) 3. Business Tier / Web Services / Web Service Proxy 4. Wklejamy adres WSDL 5. Finish 6. Save All i backup 9. Tworzenie pliku jsp 2. General / Projects / Web Project 3. Next next next (na Web Project Profile zaznaczamy ADD JSP Page) 4. Finish 5. Zmieniamy nazwę pliku na index.jsp 6. OK 7. PPM na nowym projekcie / Project Properties 8. Dependiences / Edit Dependiences 9. Wybieramy Build Output z projektu z naszym proxy 10. OK / OK 11. Przełączamy się na zakładkę Source 12. Edytujemy plik jsp, przykład poniżej 13. PPM na projekcie / Run 14. Wybieramy nasz plik index.jsp 15. OK 16. Testujemy działanie 17. Profit :)
* PPM prawy przycisk myszy
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <%@ page contenttype="text/html;charset=windows-1250"%> <%@ page import="org.example.*"%> <%@ page import="com.oracle.xmlns.application1.mediator.mediator1.*"%> <%@ page import="java.text.*"%> <%@ page import="java.util.*"%> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"/> <title>jspclient</title> </head> <body> <% if (request.getparameter("zmienna1")!=null && request.getparameter("zmienna2")!=null){ try{ ProcessInput pi = new ProcessInput(); pi.setzmienna1(integer.parseint(request.getparameter("zmienna1"))); pi.setzmienna2(integer.parseint(request.getparameter("zmienna2"))); ProcessOutput po = new Mediator1_ep().getExecute_pt().execute(pi); %> <h1>wynik</h1> Cena: <%=po.getcena() %> PLN<br/> <% }catch (Exception ex){ %> <h1>error</h1> <% out.print(ex.tostring()); } } %><br/><br/><form> <table style="padding: 3px;"> <tr> <td>zmienna 1</td> <td><input type='text' name='zmienna1' value='<%=request.getparameter("zmienna1") == null? "" : request.getparameter("zmienna1") %>'/></td></tr> <tr> <td>zmienna 2:</td> <td><input type='text' name='zmienna2' value='<%=request.getparameter("zmienna2") == null? "" : request.getparameter("zmienna2") %>'/></td></tr> </table> <input type='submit' value='zamow'></input> </form></body> </html>