Transcript
Page 1: Java Web Services and SOA Exercises [in Thai]

1

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Hand-on Exercises

Java Web Services and SOA

Using NetBeans IDE with Open ESB

GlassFish Server and MySQL Database

Assoc.Prof.Dr. Thanachart Numnonda and

Assist.Prof.Dr. Thanisa Kruawaisayawan

April 2013

Page 2: Java Web Services and SOA Exercises [in Thai]

2

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercises Exercise 1: Calling Existing Web Services 3 Exercise 2: Java Web Services 11 Exercise 3: Axis2 Web Services 16 Exercise 4: āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļš MySQL Database 22 Exercise 5: Java Web Services from Session Bean (1) 29 Exercise 6: Java Web Services from Session Bean (2) 40 Exercise 7: RESTful Web Services 53 Exercise 8: Google Map Web Services 57 Exercise 9: āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•āļ”āļ•āļ­āļāļēāļ™āļ‚āļ­āļĄāļĨ MongoDB 64 Exercise 10: Developing a Simple Synchronous BPEL Program 72 Exercise 11: BPEL for Writing to File 82 Exercise 12: Simple BPEL Invoking Web Services 95

Page 3: Java Web Services and SOA Exercises [in Thai]

3

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 1: Calling Existing Web Services

āđāļšāļšāļāļāļŦāļ”āđƒāļ™āļšāļ—āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Web Services āļ—āļĄāļ­āļĒāđāļĨāļ§ āļ‹āļ‡āļˆāļ°āđ€āļĨāļ­āļāļĄāļē 3 āļšāļĢāļāļēāļĢāļ”āļ‡āļ™

āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ— 1 āļ­āļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĒāļ™āđ€āļ‡āļ™āļ•āļĢāļēāļĢāļ°āļŦāļ§āļēāļ‡āļ›āļĢāļ°āđ€āļ—āļĻ

āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ— 2 āđ€āļĨāļ‚āļ›āļĢāļ°āļˆāļēāļ•āļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™āļ‚āļ­āļ‡ āļāļĢāļĄāļŠāļĢāļĢāļžāļēāļāļĢ

āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ— 3 āļĢāļēāļ„āļēāļ™āļēāļĄāļ™āļĨāļēāļŠāļ”āļ‚āļ­āļ‡ āļ›āļ•āļ—.

āđ‚āļ”āļĒāļˆāļ°āđƒāļŠ soapUI, NetBeans āđāļĨāļ° GlassFish Server

āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ— 1 āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Services āđ‚āļ”āļĒāđƒāļŠ soapUI

āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Open Source āļ—āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ€āļ›āļ™āđ€āļ„āļĢāļ­āļ‡āļĄāļ­āđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠ

āļ‹āļ‡āđ€āļ›āļ™āļ—āļ™āļĒāļĄāđƒāļŠāļāļ™āļ­āļĒāļēāļ‡āļāļ§āļēāļ‡āļ‚āļ§āļēāļ‡ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ„āļ›āļ”āļēāļ§āļ™āđ‚āļŦāļĨāļ”āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ„āļ”āļ— www.soapui.org

āđ‚āļ”āļĒāđ€āļĄāļ­āļ•āļ”āļ•āļ‡āđāļĨāļ§ āđƒāļŦāļ—āļēāļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļĢāļĒāļāđƒāļŠāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New soapUI Project 2. āđƒāļ™āļŠāļ­āļ‡ Initial WSDL āđƒāļŦāđƒāļŠ

http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1

Page 4: Java Web Services and SOA Exercises [in Thai]

4

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ soapUI Project āđƒāļ™ soapUI

3. āļˆāļēāļāļ™āļ™āļāļ”āļ›āļĄ OK āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļ™āļ‚āļ™āļĄāļē 4. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ConversionRate āļ‚āļ­āļ‡ CurrencyConvertorSoap āđāļĨāļ§āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Request1 5. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āļ„āļēāļ‚āļ­āļ‡ SOAP Request āļ—āļˆāļ°āļŠāļ‡āđ„āļ› āđƒāļŦāđƒāļŠāļ„āļēāļ”āļ‡āļ™

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/">

<soapenv:Header/> <soapenv:Body> <web:ConversionRate> <web:FromCurrency>USD</web:FromCurrency> <web:ToCurrency>THB</web:ToCurrency> </web:ConversionRate> </soapenv:Body> </soapenv:Envelope>

Page 5: Java Web Services and SOA Exercises [in Thai]

5

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

6. āļāļ”āļ›āļĄ Submit request (āđ€āļ„āļĢāļ­āļ‡āļŦāļĄāļēāļĒāļŠāđ€āļ‚āļĒāļ§) āļ—āļ­āļĒāļ—āļēāļ‡āļ‹āļēāļĒāļšāļ™ āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ„āļ” SOAP Response āļāļĨāļšāļĄāļēāļ”āļ‡āđāļŠāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āđ„āļ”āļ”āļ‡āļ™

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<soap:Body> <ConversionRateResponse xmlns="http://www.webserviceX.NET/"> <ConversionRateResult>31.403/ConversionRateResult> </ConversionRateResponse> </soap:Body> </soap:Envelope>

āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ— 2

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļ”āļŠāļ­āļšāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ SoupUI āļāļšāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ—āđƒāļŠāđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāļēāļ•āļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™ āļ§āļēāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New soapUI Project 2. āđƒāļ™āļŠāļ­āļ‡ Initial WSDL āđƒāļŦāđƒāļŠ

https://rdws.rd.go.th/ServiceRD/CheckTINPINService.asmx?WSDL āđāļĨāļ§āļāļ” OK

3. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ServicePIN āđƒāļ™ CheckTINPINServiceSoap āđāļĨāļ§āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Request1 4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āļ„āļēāļ‚āļ­āļ‡ SOAP Request āđƒāļŦāļ—āļēāļāļēāļĢāđƒāļŠāļ„āļēāļ‚āļ­āļ‡ username āđāļĨāļ° password

āđ€āļ›āļ™ anonymous āđāļĨāļ°āđƒāļŠāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāļēāļ•āļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™āļ—āļ•āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļš āđ‚āļ”āļĒāđāļŠāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āđ„āļ”āļ”āļ‡āļ™ :

<chec:ServicePIN> <!--Optional:--> <chec:username>anonymous</chec:username> <!--Optional:--> <chec:password>anonymous</chec:password> <!--Optional:--> <chec:PIN>3605699082386</chec:PIN> </chec:ServicePIN>

:

5. āļāļ”āļ›āļĄ submit request (āđ€āļ„āļĢāļ­āļ‡āļŦāļĄāļēāļĒāļŠāđ€āļ‚āļĒāļ§) āļ—āļ­āļĒāļ—āļēāļ‡āļ‹āļēāļĒāļšāļ™ āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ„āļ” SOAP Response āļāļĨāļšāļĄāļēāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡

:

Page 6: Java Web Services and SOA Exercises [in Thai]

6

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

<NewDataSet xmlns=""> <CheckingResult diffgr:id="CheckingResult1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> <ID>3605699082386</ID> <DigitOk>true</DigitOk> </CheckingResult> <Message diffgr:id="Message1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> <Code>W00000</Code>

<Description>āļāļēāļĢāļ—āļēāļ‡āļēāļ™āđ€āļŠāļĢāļˆāļŠāļĄāļšāļĢāļ“ &lt;br> Success "</Description> </Message> </NewDataSet> </diffgr:diffgram>

:

āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ— 3

āļāļēāļĢāļžāļ’āļ™āļē Web Service Client

āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļŠāļĢāļēāļ‡ Web Application Project āļ‚āļ™āđƒāļŦāļĄ āđ€āļžāļ­āđƒāļŠāđƒāļ™āļāļēāļĢāđ€āļĢāļĒāļ Web Services āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›āļ™ Web

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļš Project āđ„āļ§ āđāļĨāļ§āļāļ” Next 4. āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āļāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 6 Web

āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2 āđāļĨāļ§āļāļ” Finish

Page 7: Java Web Services and SOA Exercises [in Thai]

7

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ New Web Application

5. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ExistingWSDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™

Web Services āđāļĨāļ° File Types āđ€āļ›āļ™ Web Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠ URL āđ€āļ›āļ™

http://www.pttplc.com/webservice/pttinfo.asmx?wsdl āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 3 āđāļĨāļ§āļāļ” Finish

Page 8: Java Web Services and SOA Exercises [in Thai]

8

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ New Web Service Client 7. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āļˆāļ°āļĄ Folder āļ—āļŠāļ­ Web Service References āļ‚āļ™āļĄāļē 8. āļ„āļĨāļāļ‚āļ§āļēāļ— ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ­āļ New > Servlet āļˆāļēāļāļ™āļ™āđƒāļŦāļāļēāļŦāļ™āļ”āļŠāļ­āđ€āļ›āļ™ PTTServlet āđāļĨāļ°

Package: āđ€āļ›āļ™ servlets āđāļĨāļ§āļāļ” Finish 9. āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ PTTServlet.java āđƒāļŦāļĨāļš sourcecode āļ—āļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļ„āļēāļŠāļ‡ try

āđāļĨāļ° finally 10. āļ„āļĨāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§āļēāļ‡āļ„āļēāļŠāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ­āļ Insert Code āļˆāļēāļāļ™āļ™āđƒāļŦāđ€āļĨāļ­āļ Call Web Service

Operation āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ operation āļ‚āļ­āļ‡ Web Service

11. āđ€āļĨāļ­āļ CurrentOilPrice āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5 āđāļĨāļ§āļāļ” OK

Page 9: Java Web Services and SOA Exercises [in Thai]

9

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ Operation: CurrentOilPrice āļ‚āļ­āļ‡āļ›āļ•āļ—.

12. āđ€āļžāļĄ code āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ PTTServlet.java āļ”āļ‡āļ™

@WebServlet(name = "PTTServlet", urlPatterns = {"/PTTServlet"}) public class PTTServlet extends HttpServlet { @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/www.pttplc.com/pttinfo.asmx.wsdl") private com.pttplc.ptt_webservice.PTTInfo service; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.print(currentOilPrice("TH")); } finally { out.close(); } } : private String currentOilPrice(java.lang.String language) { com.pttplc.ptt_webservice.PTTInfoSoap port = service.getPTTInfoSoap(); return port.currentOilPrice(language); } }

13. āļ„āļĨāļāļ‚āļ§āļēāļ— ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ­āļ Clean and Build

Page 10: Java Web Services and SOA Exercises [in Thai]

10

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

14. āļ„āļĨāļāļ‚āļ§āļēāļ— PTTServlet.java āđāļĨāļ§āđ€āļĨāļ­āļ Run File āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āđ€āļ›āļ™āļĢāļēāļ„āļēāļ™āļēāļĄāļ™āļĨāļēāļŠāļ” āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ Web Service Operation: CurrentOilPrice āļ‚āļ­āļ‡āļ›āļ•āļ—.

Page 11: Java Web Services and SOA Exercises [in Thai]

11

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 2: Java Web Services

āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services āļŠāļēāļŦāļĢāļš Java EE āđ‚āļ”āļĒāđƒāļŠāļŠāļ”āļ„āļēāļŠāļ‡ JAX-WS āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Services Provider āļšāļ™ Java EE Server āļ—āļ‡āļ™āļŠāļ”āļ„āļēāļŠāļ‡ JAX-WS āļˆāļ°āļŠāļ§āļĒāļ—āļēāđƒāļŦāļāļēāļĢāļŠāļĢāļēāļ‡āđāļĨāļ°āđ€āļĢāļĒāļāđƒāļŠ Web Services āļ”āļ§āļĒāļ āļēāļĐāļē Java āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‡āļēāļĒāļ‚āļ™ āļāļēāļĢāļžāļ’āļ™āļē Web Services āļˆāļ°āđāļšāļ‡āđ„āļ”āđ€āļ›āļ™āļŠāļ­āļ‡āļŠāļ§āļ™āļ„āļ­ Web Service Requester (Client) āđāļĨāļ° Web Service Provider (Server) āļ‹āļ‡āļāļēāļĢāļžāļ’āļ™āļē Web Service Provider āļŠāļēāļĄāļēāļĢāļ–āļ—āļēāđ„āļ” 2 āļ§āļ˜āļ„āļ­

1. Web Services āļ—āļĢāļ™āļšāļ™ Web Server āđ‚āļ”āļĒāđƒāļŠ Java Servlet 2. Web Services āļ—āļĢāļ™āļšāļ™ Application Server āđ‚āļ”āļĒāđƒāļŠ Session Bean

āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŠ NetBeans āļŠāļĢāļēāļ‡ Web Service āļ—āļŠāļ­ calculateTax āđ‚āļ”āļĒāđƒāļŠ Servlet āļ‹āļ‡āļˆāļ°āļĢāļ™āļ­āļĒāļšāļ™ GlassFish Server 3.1.2 Server āđ€āļžāļ­āđāļŠāļ”āļ‡ Web Services āļāļēāļĢāļŠāļ‡ SOAP message āđāļĨāļ° WSDL āļ‚āļ­āļ‡ Services

āļāļēāļĢāļžāļ’āļ™āļē calculateTax Web Service

āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļŠāļĢāļēāļ‡ Web Application Project āļ‚āļ™āđƒāļŦāļĄ āđ€āļžāļ­āđƒāļŠāđƒāļ™āļāļēāļĢāđ€āļāļš Web Service āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›āļ™ Web

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ TaxWSDemo āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļš Project āđ„āļ§ 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āļāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 6

Web āđāļĨāļ§āļāļ” Finish 5. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” TaxWSDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web

Services āđāļĨāļ°āđ€āļĨāļ­āļ File Types āđ€āļ›āļ™ Web Service āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Web Service āļāļēāļŦāļ™āļ” Web Service Name: āđ€āļ›āļ™ TaxService āđāļĨāļ° Package:

āđ€āļ›āļ™ ws āđāļĨāļ§āļāļ” Finish 7. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ›āļĢāļ°āļāļēāļĻ Web Services āļ—āļŠāļ­ TaxService āđƒāļ™āđ‚āļŦāļ™āļ” Web Services āļ‚āļ­āļ‡āļŦāļ™āļēāļ•āļēāļ‡ Project

āđāļĨāļ°āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨāļ—āļŠāļ­ TaxService.java 8. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” TaxWSDemo > Web Services āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” TaxService

āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Add Operationâ€Ķ 9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Operation āļāļēāļŦāļ™āļ” Method āđ€āļ›āļ™ calculateTax āļŠāļ™āļ”āļ‚āļ­āļ‡ Return Type āđ€āļ›āļ™

Page 12: Java Web Services and SOA Exercises [in Thai]

12

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

double āđāļĨāļ°āļāļ”āļ›āļĄ Add āđ€āļžāļ­āđ€āļžāļĄ Input parameter āđ‚āļ”āļĒāļāļēāļŦāļ™āļ” Name āđ€āļ›āļ™ income āđāļĨāļ° Type āđ€āļ›āļ™āļŠāļ™āļ” double āđāļĨāļ§āļāļ” OK

10. āļ„āļĨāļāļ—āđāļ—āļ› Source āļ‚āļ­āļ‡ TaxService.java āđāļĨāļ°āļ›āļĢāļšāļ›āļĢāļ‡āđ€āļĄāļ˜āļ­āļ” calculateTax āļ”āļ‡āļ™

import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService() public class TaxService { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } } }

11. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” TaxWSDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Clean and Build āļˆāļēāļāļ™āļ™āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ”

TaxWSDemo āļ­āļāļ„āļĢāļ‡ āđāļĨāļ§āđ€āļĨāļ­āļ Deploy āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Service

1. āļ„āļĨāļāļ‚āļ§āļēāļ— TaxService āđƒāļ™ Web Services āđāļĨāļ§āđ€āļĨāļ­āļ Test Web Service āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āļ§āļ˜āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Service āđƒāļ™ Netbeans

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļŦāļ™āļēāļˆāļ­āđ€āļžāļ­āđƒāļŦāđ€āļĢāļēāļ›āļ­āļ™āļ‚āļ­āļĄāļĨāļ­āļ™āļžāļ• āļ‹āļ‡āļ„āļ­āļˆāļēāļ™āļ§āļ™āđ€āļ‡āļ™āļ—āļ•āļ­āļ‡āļāļēāļĢāļ„āļēāļ™āļ§āļ“āļ āļēāļĐ āđƒāļ™āļ—āļ™āļˆāļ°āđƒāļŠāļ•āļ§āđ€āļĨāļ‚āđ€āļ›āļ™ 730000 āđāļĨāļ°āļāļ”āļ›āļĄ calculateTax āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2

Page 13: Java Web Services and SOA Exercises [in Thai]

13

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āļŦāļ™āļēāļ•āļēāļ‡āļŠāļēāļŦāļĢāļšāđƒāļŦāļ—āļ”āļŠāļ­āļšāđ€āļĢāļĒāļ Web Service

3. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Web Services āđāļĨāļ°āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ” āļžāļĢāļ­āļĄāļ—āļ‡āđāļŠāļ”āļ‡āļ„āļē SOAP Request āđāļĨāļ° SOAP Response āļ”āļ‡āđāļŠāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āđƒāļ™āļĢāļ›āļ— 3

Page 14: Java Web Services and SOA Exercises [in Thai]

14

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ Web Service āļžāļĢāļ­āļĄāļ—āļ‡ SOAP Request āđāļĨāļ° SOAP Response 4. āļŦāļĨāļ‡āļˆāļēāļāļāļ” Back āļāļĨāļšāļĄāļēāļ—āļŦāļ™āļēāđ€āļ”āļĄāđāļĨāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ WSDL āļ‚āļ­āļ‡ Web

Service āļ™āđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļāđ€āļĨāļ­āļāļ— WSDL File āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢāļ„āļĨāļāđ€āļžāļ­āđ€āļĢāļĒāļāļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ WSDL

Page 15: Java Web Services and SOA Exercises [in Thai]

15

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āļēāļāļēāļĢāđ€āļĢāļĒāļ url āļŠāļ­ http://localhost:8080/TaxWSDemo/TaxServiceService?WSDL āđāļĨāļ°āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡ WSDL

6. āđ‚āļ›āļĢāđāļāļĢāļĄ Web Service āļˆāļ°āļ–āļāļ•āļ”āļ•āļ‡āļšāļ™ GlassFish Server 3.1.2 āļŠāļēāļĄāļēāļĢāļ–āļ”āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ—

GlassFish Server 3.1.2 āđƒāļ™āđāļ—āļ› Services āđāļĨāļ°āđ€āļĨāļ­āļ View Admin Console āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6

āļŦāļĢāļ­āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›āļ” Web Browser āđāļĨāļ°āđ€āļĢāļĒāļ url āļ— http://localhost:4848 āđ‚āļ”āļĒāļĄ user āđ€āļ›āļ™ admin

āđāļĨāļ° password āđ€āļ›āļ™ adminadmin

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĒāļāļ” Admin Console

Page 16: Java Web Services and SOA Exercises [in Thai]

16

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 3: Axis2 Web Services

āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļ•āļ”āļ•āļ‡ Axis2 Web Services āļšāļ™ Tomcat Web Server āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āļžāļ’āļ™āļē Web Service āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans

āļāļēāļĢāļ•āļ”āļ•āļ‡ Axis2 āļšāļ™ Tomcat

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ•āļ”āļ•āļ‡āđ‚āļĄāļ”āļĨ Axis2 āđ€āļžāļ­āļ—āļēāđƒāļŦ Tomcat āđ€āļ›āļ™ Web Service Provider āļ—āļ—āļēāļ‡āļēāļ™āļ āļēāļĒāđƒāļ• Axis2 Framework āđ‚āļ”āļĒ Axis2 āļĄāļ‚āļ­āļ”āđ€āļŦāļ™āļ­ JAX-WS API āđƒāļ™āđāļ‡āļ—āļ§āļē Axis2 āļĄ WS-Security āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āļēāļ‡āļēāļ™āđ„āļ”āđ€āļĢāļ§āļāļ§āļē āļ‹āļ‡āļāļēāļĢāļžāļ’āļ™āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āļ—āļēāļāļēāļĢāļ”āļēāļ§āļ™āđ‚āļŸāļĨ axis2.war āļˆāļēāļ http://ws.apache.org/axis2/ 2. āļ„āļ”āļĨāļ­āļāđ„āļŸāļĨ axis2.war āļ āļēāļĒāđƒāļ•āđƒāļ™āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ—āļŠāļ­ webapps āļ—āļ­āļĒāđƒāļ™ CATALINA_BASE āļ‚āļ­āļ‡ Tomcat 3. āļāļĢāļ“āļ—āđ„āļĄāļ—āļĢāļēāļšāđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ‚āļ­āļ‡ Catalina Base āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ„āļ™āļŦāļēāđ„āļ”āđ‚āļ”āļĒāđ€āļ›āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans

āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Services āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Servers āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Properties āļ‚āļ­āļ‡ Apache Tomcat āđ‚āļ”āļĒāđ„āļ”āļ­āļ°āļĨāļ­āļ Server āļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ‚āļ­āļ‡ Catalina Base āļ”āļ‡āļĢāļ›āļ— 1

āļĢāļ›āļ— 1 āļāļēāļĢāļŦāļēāļ•āļēāđāļŦāļ™āļ‡āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ‚āļ­āļ‡ Catalina Base

4. āļˆāļ°āđ„āļ”āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ āļēāļĒāđƒāļ• webapps āļ”āļ‡āļĢāļ›āļ— 2

Page 17: Java Web Services and SOA Exercises [in Thai]

17

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ‚āļ­āļ‡ webapps āļ āļēāļĒāļŦāļĨāļ‡āļˆāļēāļāļ„āļ”āļĨāļ­āļāđ„āļŸāļĨ axis2.war

5. āļ—āļēāļāļēāļĢ Start/Restart Tomcat āđāļĨāļ§āļ—āļ”āļŠāļ­āļš Axis2 āđ‚āļ”āļĒāļāļēāļĢāđ€āļĨāļ­āļ url āļ—āļŠāļ­ http://localhost:8084/axis2/ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āļĢāļ›āļ— 3 āđ‚āļ”āļĒāļ āļēāļĒāđƒāļ™ Services āļˆāļ°āļĄāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ•āļ§āļ­āļĒāļēāļ‡āļŠāļ­ Version āļĢāļ™āļ­āļĒ

āļĢāļ›āļ— 3 āļŦāļ™āļēāļˆāļ­āļ‚āļ­āļ‡ Tomcat Axis2

Page 18: Java Web Services and SOA Exercises [in Thai]

18

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

6. āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ™āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠāļ™ Soap UI āđ‚āļ”āļĒāļ­āļēāļ‡āļ­āļ‡āļ–āļ‡ WSDL āļ— http://localhost:8084/axis2/services/Version?wsdl

āļāļēāļĢāļ•āļ”āļ•āļ‡ Axis2 Plugin āļŠāļēāļŦāļĢāļš NetBeans

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ•āļ”āļ•āļ‡ Axis2 Plugin āđ€āļžāļ­āļ—āļēāđƒāļŦ NetBeans āļŠāļēāļĄāļēāļĢāļ–āļžāļ’āļ™āļē Axis2 Web Services āđ„āļ”āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ­āļāđ€āļĄāļ™ Tools > Plugins

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Plugins āđ€āļĨāļ­āļāđāļ—āļ› Downloaded āđāļĨāļ§āļāļ”āļ›āļĄ Add Plugins āđāļĨāļ§āđ€āļĨāļ­āļāđ„āļ›āļ—āđ„āļŸāļĨ org-netbeans-modules-websvc-axis2.nbm āļ‹āļ‡āđ„āļ”āļ—āļēāļāļēāļĢāļ”āļēāļ§āļ™āđ‚āļŦāļĨāļ”āļĄāļēāļāļ­āļ™āļŦāļ™āļēāļ™

3. āļāļ”āļ›āļĄ Install āđāļĨāļ§āļāļ”āļ›āļĄ Next āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢāļĒāļ­āļĄāļĢāļšāđ€āļ‡āļ­āļ™āđ„āļ‚ āđāļĨāļ°āļāļ”āļ›āļĄ install āļ­āļāļ„āļĢāļ‡

4. āđ€āļĄāļ­āļ—āļēāļāļēāļĢāļ•āļ”āļ•āļ‡āđ€āļŠāļĢāļˆāļŠāļ™āđāļĨāļ§ āđƒāļŦāđ€āļĨāļ­āļ Restart IDE Now āđ€āļžāļ­ restart āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļ‚āļ™āļĄāļēāđƒāļŦāļĄ āđāļĨāļ§āļāļ”āļ›āļĄ Finish āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Tools > Plugin

5. āļˆāļēāļāļ™āļ™āļˆāļ°āļ•āļ­āļ‡āļ—āļēāļāļēāļĢ Config Tomcat āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ– deploy Axis2 Web Service āđ„āļ”āđ‚āļ”āļĒāļ­āļ•āđ‚āļ™āļĄāļ• āđ‚āļ”āļĒāđƒāļŦāđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Tools > Options

6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Options āđ€āļĨāļ­āļāđāļ—āļ› Axis2 āđāļĨāļ§āļāļēāļŦāļ™āļ”āļ„āļē Axis2 .aar Files āđ€āļ›āļ™āļ•āļēāđāļŦāļ™āļ‡āļ—āđ€āļĢāļēāļ•āļ”āļ•āļ‡ axis2.war āļĨāļ‡āđ„āļ› āđāļĨāļ°āļāļēāļŦāļ™āļ”āļ„āļē Axis URL āđ€āļ›āļ™ http://localhost:8084/axis2/

7. āļāļēāļŦāļ™āļ” username āđāļĨāļ° password āļ‚āļ­āļ‡Tomcat Manager āđƒāļŦāļ–āļāļ•āļ­āļ‡ āļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āđƒāļ™āļĢāļ›āļ— 4 āđāļĨāļ§āļāļ”āļ›āļĄ OK [āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ Tomcat Users āļŠāļēāļĄāļēāļĢāļ–āļ„āļ™āļŦāļēāđ„āļ”āļˆāļēāļāđ„āļŸāļĨ CATALINA_BASE/conf/tomcat-users.xml]

Page 19: Java Web Services and SOA Exercises [in Thai]

19

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 4 āļāļēāļĢ Config āļ„āļēāļŠāļēāļŦāļĢāļš Tomcat Axis2

āļāļēāļĢāļžāļ’āļ™āļē Axis2 Web Service

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Axis2 Web Service āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java āđāļĨāļ° Java Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ Axis2Demo āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļšāđ„āļŸāļĨāđ„āļ§ āđāļĨāļ§āļāļ” Finish 4. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Axis2Demo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web Services āđāļĨāļ° Axis2 Service from Java

āđāļĨāļ§āļāļ” Next

Page 20: Java Web Services and SOA Exercises [in Thai]

20

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

6. āđ€āļĨāļ­āļāļŠāļ­āļ‡ Create Empty Web Service āđāļĨāļ§āļāļ” Next 7. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ› āļāļēāļŦāļ™āļ”āļŠāļ­ Class Name āđ€āļ›āļ™ TaxServices āđāļĨāļ° Package āđ€āļ›āļ™ ws āđāļĨāļ§āļāļ”

Finish 8. āļ›āļĢāļšāļ›āļĢāļ‡ source code āđ€āļžāļ­āđ€āļžāļĄāđ€āļĄāļ˜āļ­āļ”āļ—āļŠāļ­ calculateTax āļ”āļ‡āļ™

package ws;

public class TaxServices {

public double calculateTax(double income) {

return 0.1 * income;

}

}

9. āļ—āļēāļāļēāļĢ Deploy Web Services āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Axis Web Services āļ—āļ­āļĒāļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Axis2Demo āđāļĨāļ§āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Deploy to Server āļ”āļ‡āļĢāļ›āļ— 5

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢ Deploy Axis Web Services to Server

10. āļ—āļ”āļŠāļ­āļšāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāđ„āļ”āđ‚āļ”āļĒāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđāļĨāļ°āļžāļĄāļž URL: http://localhost:8084/axis2/ āļˆāļēāļāļ™āļ™āļ„āļĨāļ Services āļˆāļ°āđ€āļŦāļ™āđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ—āļŠāļ­ TaxServices āļ­āļĒ āļ”āļ‡āļĢāļ›āļ— 6

Page 21: Java Web Services and SOA Exercises [in Thai]

21

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡ TaxServices āļ āļēāļĒāđƒāļ™ Services

11. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ™āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠāļ™ Soap UI āđ‚āļ”āļĒāļ­āļēāļ‡āļ­āļ‡āļ–āļ‡ WSDL āļ— http://localhost:8084/axis2/services/TaxServices?wsdl āđ„āļ”

12. āđ‚āļ”āļĒāļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Request1 āđāļĨāļ°āđƒāļŠāļ„āļē income āđ€āļŠāļĢāļˆāđāļĨāļ§ āļˆāļ°āļ•āļ­āļ‡āļ—āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™ port āļˆāļēāļ 8080 āđ€āļ›āļ™ 8084 āļāļ­āļ™āļāļēāļĢāļĢāļ™ āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 7 āđāļĨāļ° 8

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ­āļ edit current.. āđ€āļžāļ­āđ€āļ›āļĨāļĒāļ™ Port āļ‚āļ­āļ‡ axis2

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļ›āļĨāļĒāļ™ Port āļ‚āļ­āļ‡ axis2 āļˆāļēāļ 8080 āđ€āļ›āļ™ 8084 āļāļ­āļ™āļāļēāļĢāļĢāļ™

Page 22: Java Web Services and SOA Exercises [in Thai]

22

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 4: āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļš MySQL Database

āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāđ€āļĢāļĄāļ•āļ™āđƒāļŠāļ‡āļēāļ™ Database Tool āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•āļ­āļāļš Table test āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ MySQL āļŠāļēāļŦāļĢāļšāđ€āļ›āļ™āļ•āļ§āļŠāļ§āļĒāđƒāļŦāļ—āļēāļ‡āļēāļ™āđ„āļ”āđ€āļĢāļ§āļ‚āļ™ āđ€āļŠāļ™āļ›āļāļ•āļ–āļēāļˆāļ° create table āļāļ•āļ­āļ‡āđ€āļ‚āļĒāļ™ SQL āđāļ• Tool āļ™āļĄ GUI āļĄāļēāļŠāļ§āļĒ

āļ—āļēāđƒāļŦāļĨāļ”āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļĨāļ° āļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļ—āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ āļ—āļ‡āļ™āļāļēāļĢāļ—āļēāđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢ download āđāļĨāļ°āļ•āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL āđāļĨāļ° MySQL Workbench āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–āļ—āļēāļāļēāļĢ download āđ„āļ”āļˆāļēāļāđ€āļ§āļš http://dev.mysql.com/

āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ MySQL āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ MySQL Workbench

1. āđƒāļŦāđ€āļ›āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL Workbench āļ”āļ‡āļĢāļ›āļ— 1 āļˆāļēāļāļ™āļ™āļ—āļēāļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

āļĢāļ›āļ— 1 āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠāļ‡āļēāļ™ Program MySQL Workbench

2. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Connection Name āđƒāļŠ Password āļ—āļāļēāļŦāļ™āļ”āđ„āļ§āđƒāļ™āļ•āļ­āļ™āļ•āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQLāļ‹āļ‡āļˆāļ°āļĄāļ„āļēāđ€āļ›āļ™ root āļ”āļ‡āļĢāļ›āļ— 2

āļĢāļ›āļ— 2 āļāļēāļĢāđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ Connection āđ€āļžāļ­āđ€āļ‚āļēāđ„āļ›āļˆāļ”āļāļēāļĢ Database

Page 23: Java Web Services and SOA Exercises [in Thai]

23

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡ books

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ books āđ‚āļ”āļĒāđƒāļŦāļ­āļĒāļ āļēāļĒāđƒāļ• Schema āļ—āļŠāļ­ test āđ‚āļ”āļĒ Table āļ™āļāļēāļŦāļ™āļ”āđƒāļŦāļĄ Column āļ•āļēāļ‡āđ† āļ”āļ‡āļ•āļēāļĢāļēāļ‡āļ— 1

āļ•āļēāļĢāļēāļ‡āļ— 1 Table books

āļŠāļ­Column āļŠāļ™āļ” āļ‚āļ™āļēāļ” Primary Key Index

isbn varchar 20 Y Y

title varchar 70 - -

author varchar 50 - -

price float - - -

āđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ MySQL WorkBench āđƒāļ™āļāļēāļĢāļ—āļˆāļ°āļŠāļĢāļēāļ‡ Tableāļ™āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ•āļēāļ‡āđ† āļ”āļ‡āļ™

1. āļ„āļĨāļāļ— icon āļŠāļ­Add Table... āđāļĨāļ§āđƒāļŠāļŠāļ­table āđāļĨāļ° āļŠāļ­ field āļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļ— 1 āļ”āļ‡āļĢāļ›āļ— 3 āđāļĨāļ§āļāļ”āļ›āļĄ Apply

Page 24: Java Web Services and SOA Exercises [in Thai]

24

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āļāļēāļĢāđ€āļĨāļ­āļāļ„āļēāļŠāļ‡āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡

2. āļŦāļĢāļ­āđƒāļŠāļ„āļēāļŠāļ‡ SQL Statement āļāđ„āļ” āđ‚āļ”āļĒāļ™āļēāđ„āļ›āđƒāļŠāļ—āļŦāļ™āļēāļ•āļēāļ‡ Query1 āđāļĨāļ§ āļāļ” icon āļŠāļēāļĒāļŸāļēāļŠāđ€āļŦāļĨāļ­āļ‡āđ€āļžāļ­āļĢāļ™

CREATE TABLE BOOKS (

ISBN VARCHAR(20) NOT NULL ,

TITLE VARCHAR(70) NULL ,

AUTHOR VARCHAR(50) NULL , PRICE FLOAT NULL , PRIMARY KEY (ISBN) );

3. āđ€āļ›āļ” Tables books āļˆāļ°āđ€āļŦāļ™ Column āļ•āļēāļ‡āđ† āļ”āļ‡āļĢāļ›āļ— 4

Page 25: Java Web Services and SOA Exercises [in Thai]

25

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 4 āļœāļĨāļĨāļžāļ˜āļˆāļēāļāļāļēāļĢāļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡

āļāļēāļĢāđƒāļŠāļ„āļēāļŠāļ‡ SQL āđƒāļ™ MySQL WorkBench

āļ āļēāļĒāļŦāļĨāļ‡āļˆāļēāļāļ—āļĄāļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ books āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāļ„āļēāļŠāļ‡ SQL āđ€āļžāļ­āļ—āļˆāļ°āļ•āļ”āļ•āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄāļĨ āđƒāļ™āļ—āļ™āļˆāļ°āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļĄāļ‚āļ­āļĄāļĨāļĨāļ‡āđƒāļ™ Table āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ•āļēāļ‡āđ†āļ”āļ‡āļ™

1. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Table books āļ”āļēāļ™āļ‚āļ§āļē āļˆāļ°āđ„āļ” SQL Editor āđƒāļŦāļ›āļ­āļ™āļ„āļēāļŠāļ‡ SQL āđ€āļ›āļ™ INSERT INTO books VALUES ('123', 'JAVA', 'Numnonda', 2500.00);

INSERT INTO books VALUES ('456', 'SOA', 'Numnonda', 3000.00) ;

Page 26: Java Web Services and SOA Exercises [in Thai]

26

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āđāļĨāļ§ āļ„āļĨāļāļ— icon āļŠāļēāļĒāļŸāļēāļŠāđ€āļŦāļĨāļ­āļ‡ āļ”āļ‡āļĢāļ›āļ— 5 āļŦāļĢāļ­āļāļ”Ctrl+Shift+Enter āđ€āļžāļ­āļĢāļ™āļ„āļēāļŠāļ‡ SQL āļ—āļ‡āļŦāļĄāļ”

āļĢāļ›āļ— 5 āļāļēāļĢ Executeāļ„āļēāļŠāļ‡āđ€āļžāļĄāļ‚āļ­āļĄāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡

2. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”āļ‚āļ­āļĄāļĨāļ—āļ›āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ— Table āļ—āļŠāļ­ books āđ€āđāļĨāļ§āļĨāļ­āļ Select Rows – Limit 1000 āļ”āļ‡āļĢāļ›āļ— 6

āļĢāļ›āļ— 6 āļāļēāļĢāđ€āļĢāļĒāļāļ”āļ‚āļ­āļĄāļĨāđƒāļ™ Table āļŠāļ­ books

Page 27: Java Web Services and SOA Exercises [in Thai]

27

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

3. āđ€āļĄāļ­āļ•āļ”āļ•āļ‡ Database āđāļĨāļ§āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđƒāļŠ NetBeans āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•āļ­āļāļš Database āđ„āļ”āđ‚āļ”āļĒāļŠāļēāļŦāļĢāļš Netbeans 7.3 āđƒāļŦāđ€āļĨāļ­āļāļ—āđāļ—āļ› Services āļˆāļ°āđ€āļŦāļ™ MySQL Driver āļ—āļĄāļĄāļēāđƒāļŦāđāļĨāļ§ āļ‹āļ‡āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Databases > Drivers āļˆāļ°āđ€āļŦāļ™ Driver āļ—āļŠāļ­ MySQL āđƒāļŦāļ—āļēāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļē āđāļĨāļ§āđ€āļĨāļ­āļ Connect Using

4. āđƒāļŦāļ—āļēāļāļēāļĢāļĢāļ°āļšāļ„āļēāļ‚āļ­āļ‡ Host: āđāļĨāļ° Port: āđ€āļ›āļ™ localhost āđāļĨāļ° 3306 (āļāļĢāļ“āļ—āđ„āļĄāđ„āļ”āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡ port āļ•āļ­āļ™ āļ•āļ”āļ•āļ‡) āļ•āļēāļĄāļĨāļēāļ”āļš

5. āļˆāļēāļāļ™āļ™āđƒāļŦāļĢāļ°āļšāļāļēāļ™āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļāļēāļĢāļ•āļ”āļ•āļ­ (āđƒāļ™āļ—āļ™āļĢāļ°āļš test) 6. āļŠāļēāļŦāļĢāļš User Name: āđāļĨāļ° Password: āđƒāļŦāđƒāļŠāļ„āļēāļ•āļēāļĄāļ—āļāļēāļŦāļ™āļ”āđ„āļ§āđƒāļ™āļ•āļ­āļ™āļ•āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL

āļ‹āļ‡āđƒāļ™āļ—āļ™āļˆāļ°āļĄāļ„āļēāđ€āļ›āļ™ root āđāļĨāļ° root āđ‚āļ”āļĒāđ„āļ”āļ­āļ°āļĨāļ­āļāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāđ„āļ”āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 7

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļš Database Connection

Page 28: Java Web Services and SOA Exercises [in Thai]

28

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

7. āļāļ” OK āļˆāļēāļāļ™āļ™āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Runtime āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Database āļˆāļ°āđ€āļŦāļ™ Connection āđƒāļŦāļĄāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 8

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡ Connection āđ„āļ›āļĒāļ‡ test Database

5. āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš jdbc:mysql://localhost:3306/test āļˆāļ°āđ€āļŦāļ™āļĢāļēāļĒāļāļēāļĢ test > Tables > books āļ„āļĨāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ View Data... āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 9

āļĢāļ›āļ— 9 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ­āļāđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ books

6. āļˆāļ°āđ€āļŦāļ™āļ‚āļ­āļĄāļĨāļ—āļ­āļĒāđƒāļ™āļ•āļēāļĢāļēāļ‡ books āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 10

āļĢāļ›āļ— 10 āđāļŠāļ”āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ Books

Page 29: Java Web Services and SOA Exercises [in Thai]

29

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 5: Java Web Services from Session Bean (1)

āđāļšāļšāļāļāļŦāļ”āđƒāļ™āļšāļ—āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Enterprise Java Bean (EJB) āđ‚āļ”āļĒāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāļšāļ™ GlassFish Server 3.1.2 āđ€āļžāļ­āļ•āļ”āļ•āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄāļĨ MySQL āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļšāļ™ Application Server āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāļ”āļ§āļĒ Entity Class āļ—āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļāļšāļ•āļēāļĢāļēāļ‡āļ—āļŠāļ­ books āđāļĨāļ° Session Bean āđ€āļžāļ­āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āļ—āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠ Entity Class āđƒāļ™āļāļēāļĢāļˆāļ”āļāļēāļĢāđ€āļžāļĄ āđāļāđ„āļ‚ āđāļĨāļ° āļĨāļšāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡ books āđ„āļ”

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļŠāļĢāļēāļ‡ Enterprise Application Project 2. āļžāļ’āļ™āļē Entity Class 3. āļžāļ’āļ™āļē Session Bean 4. āļžāļ’āļ™āļē Web Application 5. āļžāļ’āļ™āļē Java Web Services āļˆāļēāļ Session Bean

āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĄāļāļēāļĢāļ•āļ”āļ•āļ­āļāļš MySQL Database āđ„āļ” āđƒāļŦāļ—āļēāļāļēāļĢāļ”āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡ GlassFish āļˆāļēāļāđƒāļ™ NetBeans āļ”āļ‡āļ™

1. āļ„āļĨāļāļ— tab Services āđƒāļ™ NetBeans 2. āļ„āļĨāļāļ‚āļ§āļēāļ— GlassFish āļ—āļ­āļĒāđƒāļ™ Servers āđāļĨāļ§āđ€āļĨāļ­āļ Properties āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŦāļēāļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡ GlassFish

3. āļˆāļēāļāļ™āļ™āđƒāļŦāļ”āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡ domain āđƒāļ™ GlassFish Server āļˆāļēāļ Domains Folder: āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2

Page 30: Java Web Services and SOA Exercises [in Thai]

30

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡ Domain āđƒāļ™ GlassFish

4. āđ„āļ›āļĒāļ‡āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡ Domain āđƒāļ™ GlassFish āļˆāļēāļāļ™āļ™āđƒāļŦāļ™āļēāđ„āļŸāļĨ mysql-connector-java-5.1.19-bin.jar (MySQL Driver) āđ„āļ›āđƒāļŠāđ„āļ§āđƒāļ™ folder lib āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 3

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠ MySQL Driver āļ āļēāļĒāđƒāļ™ Domain āļ‚āļ­āļ‡ GlassFish

5. Restart GlassFish āđ‚āļ”āļĒāļ„āļĨāļāļ‚āļ§āļēāļ•āļĢāļ‡ GlassFish āļ—āļ­āļĒāđƒāļ™ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļ Restart āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4

Page 31: Java Web Services and SOA Exercises [in Thai]

31

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢ Restart GlassFish Server

āļāļēāļĢāļŠāļĢāļēāļ‡ Enterprise Application Project

āđ€āļĢāļēāļˆāļ°āļāļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĄ Enterprise Application āļ‹āļ‡āļĄāļ—āļ‡ EJB Module āđāļĨāļ° Web Module āļ‚āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄāļ‚āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File => New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ­āļ Enterprise āđ€āļ›āļ™ Enterprise

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ BookApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļš

project āđ„āļ§ āļāļ” Next 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āđ‚āļ”āļĒāļāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 6

āđāļĨāļ°āđƒāļŦāđ€āļĨāļ­āļāļŠāļ­āļ‡ Create EJB Module: āđāļĨāļ° Create Web Application Module: āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5

Page 32: Java Web Services and SOA Exercises [in Thai]

32

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ Enterprise Application

5. āļāļ” Finish

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class

āđ‚āļ›āļĢāđāļāļĢāļĄ EJB 3.0 āļˆāļ°āđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Entity āđ€āļžāļ­āđ€āļ›āļ™āļ­āļ­āļ›āđ€āļˆāļ„āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāļ•āļēāļĢāļēāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ āđƒāļ™āļ—āļ™āđ€āļĢāļēāļˆāļ°āļŠāļĢāļēāļ‡ Entity Class āļ—āļŠāļ­ Books.java āļˆāļēāļāļ•āļēāļĢāļēāļ‡āļ—āļŠāļ­ books āļ‹āļ‡āļĄāļāļēāļĢāļŠāļĢāļēāļ‡āļĄāļēāļāļ­āļ™āđāļĨāļ§ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĄāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookApp-ejb āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Entity

Classes from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ­āļ Data Source: āđ€āļ›āļ™ New Data Sourceâ€Ķ

āđ‚āļ”āļĒāđƒāļŠāļŠāļ­ JNDI Name: jdbc/test āđāļĨāļ°āđ€āļĨāļ­āļāđ€āļŠāļ­āļĄāļ•āļ­āđ„āļ›āļĒāļ‡āļāļēāļ™āļ‚āļ­āļĄāļĨ test āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6

Page 33: Java Web Services and SOA Exercises [in Thai]

33

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Data Source

4. āļāļ” OK āļˆāļēāļāļ™āļ™āļāļ” Add All >> āđ€āļžāļ­āđ€āļĨāļ­āļāļ•āļēāļĢāļēāļ‡āļ—āļ•āļ­āļ‡āļāļēāļĢāļ™āļēāļĄāļēāļŠāļĢāļēāļ‡ Entity Class āļ‹āļ‡āļˆāļ°āđ„āļ” Selected Tables: āđ€āļ›āļ™ books āļāļ” Next āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 7

Page 34: Java Web Services and SOA Exercises [in Thai]

34

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļˆāļēāļ Data Source

5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ entity āđāļĨāļ°āđƒāļŦāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē Crate Persistence Unit āđ„āļ”āļ–āļāđ€āļĨāļ­āļāđ„āļ§ āļ‹āļ‡ Persistence Unit āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļāļēāļŦāļ™āļ”āđƒāļŦ EJB Container āļ‚āļ­āļ‡ Application Server āļĢāđ„āļ”āļ§āļē Entity Class āļˆāļ°āļ–āļāļ„āļ§āļšāļ„āļĄāļ”āļ§āļĒ Entity Manager āļ•āļ§āđƒāļ” āđāļĨāļ°āđ€āļ›āļ™āļ•āļ§āļāļēāļŦāļ™āļ” Data Source āļ—āļˆāļ°āđƒāļŠāļāļš Entity Manager āļ™

6. āđ„āļĄāļˆāļēāđ€āļ›āļ™āļ•āļ­āļ‡āđ€āļ›āļĨāļĒāļ™āļ„āļēāđƒāļ”āđ† āļˆāļēāļāļ™āļ™āļāļ” Next āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 8

Page 35: Java Web Services and SOA Exercises [in Thai]

35

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class

7. āđ€āļĄāļ­āļāļ” Finish āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļŠāļ­ persistence.xml āđƒāļ™ package: Configuration Files āđāļĨāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļŠāļ­ Books.java āđƒāļ™ package: entity

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean

āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļˆāļ°āđƒāļŠ Session Bean āđƒāļ™āļāļēāļĢāļ•āļ”āļ•āļ­āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ­āļ™āđ† āļ āļēāļĒāļ™āļ­āļ EJB Container āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŦāļĨāļēāļ™āļ™āļˆāļ°āļ•āļ”āļ•āļ­āļāļš Entity Class āđ‚āļ”āļĒāļœāļēāļ™ Session Bean āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļŠāļĢāļēāļ‡ Session Bean āļ—āļŠāļ­ BooksFacade.java āļ—āļĄ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļāđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĒāļāļ”āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļ—āļŠāļ­ books āđ‚āļ”āļĒāđƒāļŠ Entity Class āļ—āļŠāļ­ Books.java āđāļĨāļ° EntityManager āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookApp-ejb āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Otherâ€Ķ 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Session

Beans for Entity Classes āđāļĨāļ§āļāļ” Next 3. āļˆāļēāļāļ™āļ™āļāļ” Add All >> āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ sb āđāļĨāļ°āđ€āļĨāļ­āļ local āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 9 āđāļĨāļ§āļāļ” Finish

Page 36: Java Web Services and SOA Exercises [in Thai]

36

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 9 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Bean

5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļŠāļ­ BooksFacade.java āđāļĨāļ° BooksFacadeLocal.java āđƒāļ™ package āļ—āļŠāļ­ sb

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application

āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļˆāļ°āđ€āļ›āļ™āļŠāļ§āļ™āļ‚āļ­āļ‡ Business Logic āđ€āļ—āļēāļ™āļ™ āļāļēāļĢāļžāļ’āļ™āļēāļŠāļ§āļ™āļ‚āļ­āļ‡ Presentation āļˆāļ°āļ•āļ­āļ‡āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļŦāļĢāļ­ Java SE āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđƒāļŦāļœāđƒāļŠāļ›āļ­āļ™ isbn āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āđƒāļ™āļŦāļ™āļēāđ€āļ§āļš findBook.html āđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļŠāļ­ ShowBook.java āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ”āļ‡āļāļĨāļēāļ§āļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html

āđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html āđ€āļ›āļ™āđ€āļ§āļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢāļĄāļŠāļēāļŦāļĢāļšāđƒāļŦāļœāđƒāļŠāļ›āļ­āļ™ isbn āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookApp-war āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Otherâ€Ķ 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ HTML āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ findBook āđāļĨāļ§āļāļ” Finish 4. āđ€āļ‚āļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ findBook.html āļ•āļēāļĄ Listing āļ— 1 āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļĨāļēāļ icon āļ›āļĢāļ°āđ€āļ āļ—

HTML Forms āļ—āļ­āļĒāđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āđ€āļžāļ­āļŠāļēāļĄāļēāļĢāļ–āđƒāļŦāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āļ‡āļēāļĒāļ‚āļ™

Page 37: Java Web Services and SOA Exercises [in Thai]

37

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Listing 1 āđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html <html> <head> <title></title> </head> <body> <form action="ShowBook" method="POST"> <h2>Search Book from ISBN </h2> Enter ISBN <input type="text" name="isbn" value="" /> <input type="submit" value="Find" /> </form> </body> </html>

2. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ ShowBook.java

āđ‚āļ›āļĢāđāļāļĢāļĄ ShowBook.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļˆāļ°āļ­āļēāļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ ISBN āļ—āļœāđƒāļŠāļ›āļ­āļ™āļĄāļēāļˆāļēāļāļŦāļ™āļē findBook.html āđāļĨāļ°āļˆāļ°āđ€āļĢāļĒāļāđ€āļĄāļ˜āļ­āļ” find() āļ‚āļ­āļ‡ session bean āļ—āļŠāļ­ BooksFacade āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookApp-war āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New FileāđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ ShowBook āđāļĨāļ° Package: āđ€āļ›āļ™ servlets āļāļ” Next āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āđƒāļŦāļ„āļĨāļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđāļĨāļ§āđ€āļĨāļ­āļ Insert Codeâ€Ķ > Call

Enterprise Beanâ€Ķ 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Call Enterprise Bean āđ€āļĨāļ­āļ BooksFacade āļ—āļ­āļĒāđƒāļ™ BookApp-ejb āđāļĨāļ§āļāļ” OK 6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļžāļĄ Source code āđƒāļ™āļāļēāļĢāđ€āļĢāļĒāļ EJB āļ”āļ‡āļ™

@EJB

private BooksFacadeLocal booksFacade;

7. āđƒāļŦāļ›āļĢāļšāļ›āļĢāļ‡ Source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āļ”āļ‡āļ™

protected void processRequest(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<title>Servlet ShowBook</title>");

Page 38: Java Web Services and SOA Exercises [in Thai]

38

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

out.println("</head>");

out.println("<body>");

String isbn = request.getParameter("isbn");

Books book = booksFacade.find(isbn);

out.println("Title: " + book.getTitle()+ "<BR>");

out.println("Author: " + book.getAuthor() + "<BR>");

out.println("Price: " + book.getPrice() + "<BR>");

out.println("</body>");

out.println("</html>");

out.close();

}

9. āļ„āļĨāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ Fix Imports āđ€āļžāļ­āļ—āļēāļāļēāļĢ import āļ„āļĨāļēāļŠāļ•āļēāļ‡āđ† āđāļĨāļ§ Save āđ‚āļ›āļĢāđāļāļĢāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļ—āļēāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ•āļĢāļ‡ BookApp āđ€āļžāļ­āļ—āļēāļāļēāļĢ Clean and Build 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ BookApp (āđ„āļĄāđƒāļŠ BookApp-ejb āļŦāļĢāļ­ BookApp-war) 3. āđ€āļĨāļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8080/BookApp-war/findBook.html

āđƒāļŦāđ€āļĢāļēāļ—āļ”āļĨāļ­āļ‡āđƒāļŠāļ‚āļ­āļĄāļĨ 4. āđ€āļĄāļ­āļāļ”āļ›āļĄ Find āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 10

āļĢāļ›āļ— 10 āđāļŠāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ

āļāļēāļĢāļžāļ’āļ™āļē Java Web Services āļˆāļēāļ Session Bean

1. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ Stateless Session Bean āđ„āļ›āđ€āļ›āļ™ Web Services āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāđāļāđ„āļ‚āđ„āļŸāļĨ BooksFacade.java āļ—āļ­āļĒāđƒāļ™āđ‚āļŦāļ™āļ” BookApp-ejb āļ”āļ‡āļ™

Page 39: Java Web Services and SOA Exercises [in Thai]

39

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

@WebService

@Stateless

public class BooksFacade extends AbstractFacade<Books> implements BooksFacadeLocal {

@PersistenceContext(unitName = "BookApp-ejbPU")

private EntityManager em;

@Override

protected EntityManager getEntityManager() {

return em;

}

public BooksFacade() {

super(Books.class);

}

@WebMethod

public Books findBookDetailsByIsbn(String isbn) {

Query query = em.createNamedQuery("Books.findByIsbn").setParameter("isbn", isbn);

return (Books) query.getSingleResult();

}

}

2. āļ„āļĨāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ Fix Imports āđ€āļžāļ­āļ—āļēāļāļēāļĢ import āļ„āļĨāļēāļŠāļ•āļēāļ‡āđ† (javax.jws.WebService, javax.jws.WebMethod āđāļĨāļ° javax.persistence.Query) āđāļĨāļ§ Save āđ‚āļ›āļĢāđāļāļĢāļĄ

3. āļĨāļ­āļ‡āļ—āļ”āļŠāļ­āļšāđ€āļĢāļĒāļāđƒāļŠ Web Service āļˆāļēāļāđƒāļ™ NetBeans (āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠ Test Web Service āđāļĨāļ°āđ€āļ‚āļĒāļ™ code) āđāļĨāļ°āđ‚āļ”āļĒāđƒāļŠ Soap UI

4. āđƒāļŦāļ—āļ”āļĨāļ­āļ‡āđ€āļžāļĄāđ€āļĄāļ˜āļ­āļ”āļ—āļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļ›āļ™ Web Services āđ€āļŠāļ™ findBookDetailsByTitle

Page 40: Java Web Services and SOA Exercises [in Thai]

40

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 6: Java Web Services from Session Bean (2)

āđāļšāļšāļāļāļŦāļ”āđƒāļ™āļšāļ—āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services āļŠāļēāļŦāļĢāļš Java EE āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāļšāļ™ Server āļ—āļĢāļ™āļšāļ™ Java EE āđ‚āļ”āļĒāļŠāļ”āļ„āļēāļŠāļ‡ JAX-WS āļ‹āļ‡āđƒāļ™āļāļĢāļ“āļ™āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŠ NetBeans āļŠāļĢāļēāļ‡ Web Services Method āļ—āļŠāļ­ findEmployeeDetails āļˆāļēāļ Session Bean āđ‚āļ”āļĒ Service āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ„āļ™āļŦāļēāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ employee āļˆāļēāļ table āļ—āļŠāļ­ employees āđāļĨāļ° departments āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ MySQL āļ‹āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ employees āđāļĨāļ° departments

2. āļŠāļĢāļēāļ‡ EJB Module

3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class

4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean

5. āļŠāļĢāļēāļ‡ Web Application

1. āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ employees āđāļĨāļ° departments

āļ‚āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđƒāļŦāļ—āļēāļāļēāļĢāļ„āļ”āļĨāļ­āļ script āļ•āļ­āđ„āļ›āļ™ āđāļĨāļ§āđƒāļŠāđƒāļ™ SQL Command Editor āļ‚āļ­āļ‡ NetBeans āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢ Run SQL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1

create table `test`.DEPARTMENTS ( DEPARTMENT_ID INT not null primary key, DEPARTMENT_NAME VARCHAR(30) not null ); insert into departments values(90,'Executive'); create table `test`.EMPLOYEES ( EMPLOYEE_ID INT not null primary key, FIRST_NAME VARCHAR(20), LAST_NAME VARCHAR(25) not null, DEPARTMENT_ID INT, FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON UPDATE CASCADE ); insert into employees values(100,'Steven','King',90); insert into employees values(101,'Neena','Kochhar',90);

Page 41: Java Web Services and SOA Exercises [in Thai]

41

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Run SQL āđ€āļžāļ­āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡

āđ‚āļ”āļĒāđ€āļĄāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ”āđƒāļ™ tables āļ‚āļ­āļ‡ test āļˆāļ°āļžāļš table āļ—āļŠāļ­ employees āđāļĨāļ° departments āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āļ•āļēāļĢāļēāļ‡āļ—āļ–āļāļŠāļĢāļēāļ‡āļ‚āļ™āļĄāļē

āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Module

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ­āļ Enterprise āđ€āļ›āļ™ EJB

Module āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 3 āđāļĨāļ§āļāļ” Next

Page 42: Java Web Services and SOA Exercises [in Thai]

42

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Module

3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ EmployeeWS āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļšāđ„āļŸāļĨāđ„āļ§ āđāļĨāļ§āļāļ” Next

4. āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āļāļēāļŦāļ™āļ” Jave EE 6 āđāļĨāļ§āļāļ” Finish

āļāļēāļĢāļžāļ’āļ™āļē Employees and Departments Entity Classes

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” EmployeeWS āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Entity Classes

from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ­āļ Data Source: āđ€āļ›āļ™ jdbc/test

āđ€āļžāļ­āđ€āļĨāļ­āļāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āđ„āļ›āļĒāļ‡āļ•āļēāļĢāļēāļ‡ test āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ MySQL

Page 43: Java Web Services and SOA Exercises [in Thai]

43

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āļˆāļēāļāļ™āļ™āđƒāļŦāđ€āļĨāļ­āļāđ„āļ›āļ—āļ•āļēāļĢāļēāļ‡ EMPLOYEES āđāļĨāļ§āļāļ” Add > āđāļĨāļ°āļ„āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Include Related Tables āđ„āļ§āļ•āļēāļĢāļēāļ‡ EMPLOYEES āđāļĨāļ° DEPARTMENTS āļˆāļ°āļ–āļāļĒāļēāļĒāļĄāļēāļ­āļĒāđƒāļ™ Selected Tables: āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4 āđāļĨāļ§āļāļ” Next

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļŠāļēāļŦāļĢāļš EMPLOYEES āđāļĨāļ° DEPARTMENTS

5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ entity āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5 āļˆāļēāļāļ™āļ™āļāļ” Next āđāļĨāļ° Finish

Page 44: Java Web Services and SOA Exercises [in Thai]

44

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢāļĢāļ°āļš Package āļŠāļēāļŦāļĢāļš Entity Classs āļ—āļŠāļĢāļēāļ‡āļ‚āļ™āļĄāļē

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean

āđ‚āļ›āļĢāđāļāļĢāļĄNetBeans āļˆāļ°āļĄ Wizard āđ€āļžāļ­āļŠāļĢāļēāļ‡ Session Bean āļˆāļēāļ Entity Class āđ€āļžāļ­āļŠāļĢāļēāļ‡ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļāđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĒāļāļ”āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ tableāļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš Entity Class āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” EmployeeWS āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New FileāđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Session

Beans for Entity Classes āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Session Beans for Entity Classes āļāļ” Add All >> āđāļĨāļ§āļ„āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Include

Referenced Class āđ„āļ§ āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6 āļˆāļēāļāļ™āļ™āļāļ” Next

Page 45: Java Web Services and SOA Exercises [in Thai]

45

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Beans For Entity Classes

4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ sb āđāļĨāļ°āđ€āļĨāļ­āļ local āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 7 āđāļĨāļ§āļāļ” Finish

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Bean

Page 46: Java Web Services and SOA Exercises [in Thai]

46

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļ‹āļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ” Entity Class āļ—āļŠāļ­ Employees, Departments āđāļĨāļ° Session Bean āļ—āļŠāļ­ AbstractFacade, EmployeesFacade, EmployeesFacadeLocal āđ‚āļ”āļĒāđ€āļĄāļ­āļ—āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāļ„āđāļĨāļ§ āļˆāļ°āļĄāđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 8

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ EmployeeWS āļ—āļ–āļāļŠāļĢāļēāļ‡āļ‚āļ™

āļāļēāļĢāļžāļ’āļ™āļē Web Service Methods: findEmployeeDetails

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļŠāļĢāļēāļ‡ Web Services Method āļ—āļŠāļ­ findEmployeeDetails āđƒāļ™ Session Bean āļ—āļŠāļ­ EmployeesFacade.java āļ—āļžāļ’āļ™āļēāļˆāļēāļāđāļšāļšāļāļāļŦāļ” Enterprise Java Bean āđ‚āļ”āļĒ Services āļ™āļˆāļ°āļ„āļ™āļ„āļē first_name, last_name āđāļĨāļ° department_name āļ‚āļ­āļ‡ employee āđ‚āļ”āļĒāļāļēāļĢāļ„āļ™āļŦāļēāļˆāļēāļ employee_id āļ—āļ›āļ­āļ™āđ€āļ‚āļēāļĄāļē āļ‹āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ„āļŸāļĨ EmployeesFacade.java āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Insert Codeâ€Ķ > Add Business Methodâ€Ķāļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢāđƒāļŠāļ‚āļ­āļĄāļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 3

Page 47: Java Web Services and SOA Exercises [in Thai]

47

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļĄāđ€āļĄāļ˜āļ­āļ”āđƒāļ™ Session Bean

2. āđ€āļžāļĄ source code āđ‚āļ”āļĒāđ€āļžāļĄāļ„āļēāļŠāļ‡ annotation āđ€āļžāļ­āļ›āļĢāļ°āļāļēāļĻāđƒāļŦ session bean āļ™āđ€āļ›āļ™ Web Service āđāļĨāļ°āđ€āļĄāļ˜āļ­āļ” findEmployeeDetails āđ€āļ›āļ™ Web Services Method āđ‚āļ”āļĒāļĄāļ„āļēāļŠāļ‡āļ”āļ‡āļ™

@WebService

@Stateless

public class EmployeesFacade extends AbstractFacade<Employees> implements EmployeesFacadeLocal {

@PersistenceContext(unitName = "EmployeeWSPU")

private EntityManager em;

protected EntityManager getEntityManager() {

return em;

Page 48: Java Web Services and SOA Exercises [in Thai]

48

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

}

public EmployeesFacade() {

super(Employees.class);

}

@WebMethod

public List<String> findEmployeeDetails(int employee_id) {

ArrayList<String> result = new ArrayList<String>();

Employees employee = em.find(Employees.class, employee_id);

result.add("First name: " + employee.getFirstName());

result.add("Last name: " + employee.getLastName());

Departments department = employee.getDepartmentId();

result.add("Department name: " + department.getDepartmentName());

return result;

}

}

2. āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Fix Imports āļāļ” OK āđāļĨāļ§āļāļ”āļ›āļĄ Save 3. āļ—āļēāļāļēāļĢ Clean and Build āđāļĨāļ° Deploy Project 4. āļˆāļēāļāļ™āļ™āđƒāļŦāļ„āļĨāļāļ‚āļ§āļēāļ— EmployeeFacade āđƒāļ™ Web Services āđāļĨāļ§āđ€āļĨāļ­āļ Test Web Service 5. āļāļ” WSDL File āđƒāļ™āļŦāļ™āļē Web Browser āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢ copy URL āļ‚āļ­āļ‡ WSDL File āđ„āļ§ āđ€āļŠāļ™

http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL

Page 49: Java Web Services and SOA Exercises [in Thai]

49

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Web Service

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Application āļšāļ™ Apache Tomcat āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Web Service āļ—āļŠāļ­ findEmployeeDetails āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web āđāļĨāļ° Projects āđ€āļ›āļ™ Web Application

āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ EmployeeWSClient āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat

7.0.14.0 āļāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 6 āđāļĨāļ§āļāļ” Finish 4. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” EmployeeWSClient āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other.. 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web Services āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Web

Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Web Service Client āđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ°āđƒāļŠāļ„āļē

http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL 7. āļāļ” Finish āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ Web Service Reference āđ‚āļ”āļĒāļĄ Service āļŠāļ­ EmployeesFacade 8. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” EmployeeWSClient āđāļĨāļ§āđ€āļĨāļ­āļ New > Servlet.. 9. āļāļēāļŦāļ™āļ” Servlet Name: āđ€āļ›āļ™ EmployeeServlet āđƒāļŠāđƒāļ™ Package: servlets āļāļ” Next 10. āļāļēāļŦāļ™āļ” URL Pattern(s): āđ€āļ›āļ™ /findEmployee āđāļĨāļ§āļāļ” Finish 11. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āļĨāļēāļāđ‚āļŦāļ™āļ” findEmployeeDetails āļĨāļ‡āđƒāļ™āđ„āļŸāļĨ EmployeeServlet.java āļ‚āļ­āļ‡āļŦāļ™āļēāļ•āļēāļ‡

Editor āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļžāļĄ source code āđƒāļŦāļ­āļ•āđ‚āļ™āļĄāļ• āđƒāļŦāļ›āļĢāļšāļ›āļĢāļ‡ source code āđƒāļ™āļŠāļ§āļ™āļ—āđ€āļĢāļĒāļāđƒāļŠ Web Service āļ”āļ‡āļ™

protected void processRequest(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

String id = request.getParameter("id");

int employee_id = Integer.parseInt(id);

List<String> result = findEmployeeDetails(employee_id);

Page 50: Java Web Services and SOA Exercises [in Thai]

50

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

for (String s : result) {

out.print(s + "<BR>");

}

} finally {

out.close();

}

}

private static java.util.List<java.lang.String> findEmployeeDetails(int arg0) {

sb.EmployeesFacadeService service = new sb.EmployeesFacadeService();

sb.EmployeesFacade port = service.getEmployeesFacadePort();

return port.findEmployeeDetails(arg0);

}

12. āļāļ”āļ›āļĄ Save

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļ—āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ EmployeeWSClient 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ EmployeeServlet āđ‚āļ”āļĒāđƒāļŦāđƒāļŠāļ„āļēāļ‚āļ­āļ‡ URI āđ€āļ›āļ™ /findEmployee?id=100 āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ—

4 āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5

Page 51: Java Web Services and SOA Exercises [in Thai]

51

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļē id

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ‚āļ­āļ‡ employee id=100

3. āļ—āļ”āļĨāļ­āļ‡āđ€āļ›āļĨāļĒāļ™ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8084/EmployeeWSClient/findEmployee?id=101 āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6

Page 52: Java Web Services and SOA Exercises [in Thai]

52

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ‚āļ­āļ‡ employee id=101

4. āļ­āļēāļˆāļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ findEmployee.html āđ€āļžāļ­āļĢāļšāļ„āļē employee id āļˆāļēāļāļœāđƒāļŠ āđ‚āļ”āļĒāļāļēāļŦāļ™āļ”āđƒāļŦ findEmployee.html āđ€āļĢāļĒāļāđƒāļŠ EmployeeServlet āļ‹āļ‡āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Web Service āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ­āļāļ—

Page 53: Java Web Services and SOA Exercises [in Thai]

53

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 7: RESTful Web Services āđāļšāļšāļāļāļŦāļ”āđƒāļ™āļšāļ—āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ RESTful Web Services āđ‚āļ”āļĒāđƒāļŠāļŠāļ”āļ„āļēāļŠāļ‡ JAX-RS āđ€āļžāļ­āļŠāļĢāļēāļ‡ Web Services āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”āļ‚āļ­āļĄāļĨāļˆāļēāļāļāļēāļ™āļ‚āļ­āļĄāļĨ MySQL āļœāļēāļ™āļŠāļ”āļ„āļēāļŠāļ‡ Java Persistence API (JPA) āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļŠāļĢāļēāļ‡ Web Application Project 2. āļžāļ’āļ™āļē Entity Class 3. āļžāļ’āļ™āļē RESTful Web Service āļˆāļēāļ Entity Class 4. āļ—āļ”āļŠāļ­āļš RESTful Web Service āļˆāļēāļ Entity Class

1. āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project

āđ€āļĢāļēāļˆāļ°āļāļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĄ Web Application āļ‚āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄāļ‚āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Project āđ€āļ›āļ™ Web

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RestfulWS āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Directory

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļš Project āđ„āļ§ āļāļ” Next 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āđāļĨāļ° Java EE 6 Web āđāļĨāļ§āļāļ” Finish

2. āļāļēāļĢāļžāļ’āļ™āļē Entity Class

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļ—āļŠāļ­ Employees.java āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļ­āļ­āļ›āđ€āļˆāļ„āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāļ•āļēāļĢāļēāļ‡āļ—āļŠāļ­ employees āđƒāļ™ Oracle āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Entity

Classes from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ­āļ Data Source: āđ€āļ›āļ™ jdbc/test

Page 54: Java Web Services and SOA Exercises [in Thai]

54

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āļāļ” OK āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāđ€āļ‰āļžāļēāļ° books āđāļĨāļ§āļāļ” Add > 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ entity āđāļĨāļ°āļāļ” Finish

3. āļāļēāļĢāļžāļ’āļ™āļē Restful Web Service āļˆāļēāļ Entity Class

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Restful Web Services āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āļ•āļ”āļ•āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄāļĨāđ‚āļ”āļĒāļœāļēāļ™ Entity Class āļ—āļžāļ’āļ™āļēāļ‚āļ™āđ„āļ” āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web Services āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ RESTful

Web Services from Entity Classes āđāļĨāļ§āļāļ” Next

4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New RESTful Web Services from Entity Class āļāļ” Add All >> āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1 āđāļĨāļ§āļāļ” Next āļˆāļēāļāļ™āļ™āļāļ” Finish

āļĢāļ›āļ— 1 āļāļēāļĢāđ€āļĨāļ­āļ Entity Class āļŠāļēāļŦāļĢāļš RESTful Web Service

Page 55: Java Web Services and SOA Exercises [in Thai]

55

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āļāļēāļĢāļ—āļ”āļŠāļ­āļš RESTful Web Service āļˆāļēāļ Entity Class āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš RESTful Web Services āļ—āļžāļ’āļ™āļēāļ‚āļ™āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Test Restful Web Services

2. āđ‚āļ›āļĢāđāļāļĢāļĄ Browser āļˆāļ°āđāļŠāļ”āļ‡ uri āļ‚āļ­āļ‡ RESTful Web Services āđƒāļŦāļ„āļĨāļāļ—āđ‚āļŦāļ™āļ” entity.books āđāļĨāļ°āļ„āļĨāļāļ›āļĄ Test āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āļĢāļ›āļ— 2

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ—āļ‡āļŦāļĄāļ”āļ—āļĄāļ­āļĒ

Page 56: Java Web Services and SOA Exercises [in Thai]

56

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

3. āđƒāļŦāļ„āļĨāļāļ— {id} āđāļĨāļ°āļ—āļ”āļĨāļ­āļ‡āļ›āļ­āļ™āļ‚āļ­āļĄāļĨ id āđ€āļ›āļ™ 111 āđāļĨāļ§āļāļ”āļ›āļĄ Test āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ•āļ§āļ­āļĒāļēāļ‡āļ”āļ‡āļĢāļ›āļ— 3

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ—āļĄ id (isbn) āđ€āļ—āļēāļāļš 111

4. āļ—āļ”āļĨāļ­āļ‡āđ€āļ›āļĨāļĒāļ™ methodāđ€āļ›āļ™ DELETE āđ€āļžāļ­āļ—āļ”āļĨāļ­āļ‡āļ—āļēāļāļēāļĢāļĨāļšāļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļ•āļēāļĢāļēāļ‡ books

Page 57: Java Web Services and SOA Exercises [in Thai]

57

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 8: Google Map Web Services

āđāļšāļšāļāļāļŦāļ”āđƒāļ™āļšāļ—āļ™āđ€āļ›āļ™āļ•āļ§āļ­āļĒāļēāļ‡āļāļēāļĢāļžāļ’āļ™āļē Web Services āđāļĨāļ°āđƒāļŠ Web Application āđ€āļĢāļĒāļāđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āđ€āļāļšāļ—āļ­āļĒāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ āļ‹āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļĨāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ

2. āļŠāļĢāļēāļ‡ Enterprise Application Project

3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class

4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean)

5. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java

6. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java

1. āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļĨāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ āļ‚āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđāļĨāļ°āđ€āļ•āļĢāļĒāļĄāļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŠāđƒāļ™āđāļšāļšāļāļāļŦāļ” āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ bkk_hospital āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ Oracle āđ‚āļ”āļĒāđƒāļŦāļ—āļēāļāļēāļĢāļĢāļ™āđ„āļŸāļĨ bkk_hospital.sql āđ€āļžāļ­āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡āđāļĨāļ°āđƒāļŠāļ‚āļ­āļĄāļĨāļĨāļ‡āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ”āļ‡āļ™

CREATE TABLE `test`.`bkk_hospital` (

`hospital_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

`name` VARCHAR(60) NOT NULL,

`address` VARCHAR(100) NOT NULL,

`city` VARCHAR(30) NOT NULL,

`zipcode` VARCHAR(5) NOT NULL,

PRIMARY KEY(`hospital_id`)

) ENGINE = InnoDB;

Page 58: Java Web Services and SOA Exercises [in Thai]

58

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital', '2 Prannok road Siriraj Bangkoknoi', 'Bangkok', '10700');

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital', '51/3 Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900');

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital', 'Phaya Thai Road, Phaya Thai', 'Bangkok', '10400');

2. āļāļēāļĢāļŠāļĢāļēāļ‡ Enterprise Application Project āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļŠāļĢāļēāļ‡ Project āļ—āđ€āļ›āļ™ Enterprise Application āđ‚āļ”āļĒāļĄ Entity Class āļ—āļŠāļ­ BkkHospital āđ€āļžāļ­āļ—āļē ORM (Obeject Relational Mapping) āļāļš table āļ—āļŠāļ­ bkk_hospital āđāļĨāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ­āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļ­āļĒāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļœāđƒāļŠāđ€āļĨāļ­āļ āđ€āļžāļ­āđāļŠāļ”āļ‡āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļˆāļēāļāđƒāļ™ Google Map āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Enterprise

Application Project āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name: āđ€āļ›āļ™ BkkHospitalGoogleMap āđāļĨāļ§āđ€āļĨāļ­āļ Project Location: āđ€āļ›āļ™ Directory

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļš Project āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āđāļĨāļ§āļāļ” Finish 3. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļˆāļēāļ table āļ—āļŠāļ­ bkk_hospital āļ‹āļ‡āļĄāļāļēāļĢāļŠāļĢāļēāļ‡āļĄāļēāļāļ­āļ™āđāļĨāļ§ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BkkHospitalGoogleMap āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Entity Classes from Database āđāļĨāļ§āļāļ” Next

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ­āļ Data Source: jdbc/test 4. āđ€āļĨāļ­āļ bkk_hospital āļˆāļēāļāļ™āļ™āļāļ” Add āđ€āļžāļ­āđ€āļĨāļ­āļāđƒāļŦāđ€āļ›āļ™ Selected Tables: āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ entity āđāļĨāļ§āļāļ” Finish

Page 59: Java Web Services and SOA Exercises [in Thai]

59

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean) āđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade āļˆāļ°āđ€āļ›āļ™ Session Bean āđ€āļžāļ­āļŠāļĢāļēāļ‡ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļāđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĒāļāļ”āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ table āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš Entity Class āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-ejb āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Persistence āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Session Beans for Entity Classes āđāļĨāļ§āļāļ” Next

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Session Beans for Entity Classes āļāļ” Add All > > āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļāļ–āļ”āđ„āļ›āđƒāļŦāļĢāļ°āļš Package: āđ€āļ›āļ™ sb āļŠāļ§āļ™āļ„āļēāļ­āļ™āđ† āđ€āļ›āļ™āļ•āļēāļĄāļ—āļ•āļ‡āđ„āļ§ āđāļĨāļ§āļāļ” Finish

5. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java

āđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļē Servlet āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ­āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļ–āļāļˆāļ”āđ€āļāļš āļ­āļĒāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨ āđ‚āļ”āļĒāļˆāļ°āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ‚āļ­āļ‡ radio āđ€āļžāļ­āđƒāļŦāļœāđƒāļŠāđ€āļĨāļ­āļ āđāļĨāļ°āđ€āļĄāļ­āļœāđƒāļŠāđ€āļĨāļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļ™ āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļŠāļ­ DisplayLocation.java āđ€āļžāļ­āđāļŠāļ”āļ‡āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđ‚āļ”āļĒāđƒāļŠ Google Map Web Services

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļē Java Servlet āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ HospitalSelector āđāļĨāļ° Package āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļŦāļĨāļš Comment āļ—āļ‡āļŦāļĄāļ”āļ—āļ­āļĒāļ āļēāļĒāđƒāļ™āđ€āļ„āļĢāļ­āļ‡āļŦāļĄāļēāļĒ

/* â€Ķ */ āļĢāļ°āļŦāļ§āļēāļ‡āļ„āļēāļŠāļ‡ try āđāļĨāļ° finally 5. āļ„āļĨāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§āļēāļ‡āļ„āļēāļŠāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ­āļ Insert Code āļˆāļēāļāļ™āļ™āđƒāļŦāđ€āļĨāļ­āļ Call Enterprise Bean

āđāļĨāļ§āđ€āļĨāļ­āļ BkkHospitalFacade āļ—āļ­āļĒāđƒāļ™ BkkHospitalGoogleMap-ejb āđāļĨāļ§āļāļ” OK 6. āđ€āļžāļĄāđ€āļ•āļĄ source code āđƒāļŦāđ€āļ›āļ™āļ”āļ‡āļ™

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();

Page 60: Java Web Services and SOA Exercises [in Thai]

60

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

try { List<BkkHospital> hospitals = bkkHospitalFacade.findAll(); out.println("<h1> Hospital in Bangkok </h1>"); out.println("<form action='DisplayLocation'>"); for (BkkHospital hospital : hospitals) { out.println("<input type='radio' name='hospital_id' value='" + hospital.getHospitalId() + "' />" + hospital.getName() + ", " + hospital.getAddress() + ", " + hospital.getCity() + ", " + hospital.getZipcode() + "<br><br>"); } out.println("<input type='submit' value='Show Location' />"); out.println("</form>"); } finally { out.close(); }

7. āļ—āļēāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āđāļĨāļ§āđ€āļĨāļ­āļ Fix Imports 8. Run āđ‚āļ›āļĢāđāļāļĢāļĄ āđāļĨāļ°āļžāļĄāļž URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™

http://localhost:8080/BkkHospitalGoogleMap-war/HospitalSelector āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1

āļĢāļ›āļ— 1 āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āđƒāļŦāļœāđƒāļŠāđ€āļĨāļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ

Page 61: Java Web Services and SOA Exercises [in Thai]

61

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

6. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java

āđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āđ€āļĢāļĒāļāđƒāļŠāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ‚āļ­āļ‡ Google Map āđ€āļžāļ­āđāļŠāļ”āļ‡āđāļœāļ™āļ—āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āđ€āļĨāļ­āļāļˆāļēāļ HospitalSelector.java āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New FileāđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ DisplayLocation āđāļĨāļ°āđ€āļĨāļ­āļ Package āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āļ„āļĨāļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest() āđāļĨāļ§āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Insert Code.. > Call

Enterprise Bean ...āđāļĨāļ§āđ€āļĨāļ­āļ BkkHospitalFacade āļ—āļ­āļĒāđƒāļ™ BkkHospitalGoogleMap-ejb 5. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Services āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Web Services > Google > Map Service 6. āļĨāļēāļāđ€āļ‹āļ­āļĢāļ§āļŠ getGoogleMap āļĄāļēāđƒāļŠāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āļ—āđāļŠāļ”āļ‡ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ

DisplayLocation.java āđāļĨāļ§āđāļāđ„āļ‚ source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest() āļ”āļ‡āļ™

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

Object id = (Object) new Integer(request.getParameter("hospital_id"));

BkkHospital hospital = bkkHospitalFacade.find(id);

String address = hospital.getName() + ", " + hospital.getCity();

java.lang.Integer zoom = 15;

String iframe = "false";

out.println("<h1>Google Map for " + hospital.getName() + "</h1>");

RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);

out.println(result.getDataAsString());

} finally {

out.close(); }

Page 62: Java Web Services and SOA Exercises [in Thai]

62

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

7. āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ‚āļ­āļ‡ Google Map āļ‹āļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļ—āļēāļāļēāļĢāļĨāļ‡āļ—āļ°āđ€āļšāļĒāļ™āļ— url āļ—āļŠāļ­ http://code.google.com/apis/maps/signup.html āđ‚āļ”āļĒāļāļēāļŦāļ™āļ”āļ„āļē My web site URL āđ€āļ›āļ™ http://localhost:8080 āđāļĨāļ§āļāļ”āļ›āļĄ Generate API Key

8. āļ—āļēāļāļēāļĢāļāļ­āļšāļ›āļ„āļē API Key āļ—āđ„āļ”āđ„āļ›āđƒāļŠāđƒāļ™āđ„āļžāļĨāļ—āļŠāļ­ googlemapservices.properties āļ—āļ­āļĒāļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war > Source Packages > org.netbeans.saas.google āļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™

api_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļ„āļĨāļāļ‚āļ§āļēāļ— BkkHospitalGoogleMap āđ€āļžāļ­āļ—āļēāļāļēāļĢ Build āđāļĨāļ° Deploy 2. āļ„āļĨāļāļ‚āļ§āļēāļ— BkkHospitalGoogleMap āđ€āļžāļ­āļ—āļēāļāļēāļĢ Run 3. āļžāļĄāļž URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8080/BkkHospitalGoogleMap-

war/HospitalSelector āđāļĨāļ°āđƒāļŦāđ€āļĨāļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđ€āļžāļ­āļ”āļ•āļēāđāļŦāļ™āļ‡āļˆāļēāļāđƒāļ™ Google Map āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2

Page 63: Java Web Services and SOA Exercises [in Thai]

63

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āļœāļĨāļĨāļžāļ˜āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļˆāļēāļāđƒāļ™ Google Map

Page 64: Java Web Services and SOA Exercises [in Thai]

64

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 9: āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•āļ”āļ•āļ­āļāļēāļ™āļ‚āļ­āļĄāļĨ MongoDB

āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠ Java Servlet āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•āļ­āļāļš āļāļēāļ™āļ‚āļ­āļĄāļĨāļ—āđ€āļ›āļ™ NoSQL āļ­āļĒāļēāļ‡ MongoDB āļ‹āļ‡āđ€āļ›āļ™āļāļēāļ™āļ‚āļ­āļĄāļĨāļ—āđ€āļāļšāļ‚āļ­āļĄāļĨāđāļšāļš Document āđƒāļ™āļĢāļ›āđāļšāļšāļ‚āļ­āļ‡ JSON āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāđ€āļāļšāļ‚āļ­āļĄāļĨāļ‚āļ™āļēāļ”āđƒāļŦāļāđ„āļ”

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļ•āļ”āļ•āļ‡ MongoDB 2. āļ—āļ”āļĨāļ­āļ‡āđƒāļŠ MongoDB 3. āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•āļ­āļāļš MongoDB

1. āļāļēāļĢāļ•āļ”āļ•āļ‡ MongoDB

āđ‚āļ›āļĢāđāļāļĢāļĄāļāļēāļ™āļ‚āļ­āļĄāļĨ MongoDB āļŠāļēāļĄāļēāļĢāļ–āļ—āļēāļ‡āļēāļ™āđƒāļ™āļĢāļ°āļšāļšāļ›āļŽāļšāļ•āļāļēāļĢāļ—āļŦāļĨāļēāļāļŦāļĨāļēāļĒāļ—āļ‡ Windows, Mac OS āļŦāļĢāļ­ Linux āļŠāļēāļŦāļĢāļšāļšāļ™āļĢāļ°āļšāļšāļ›āļŽāļšāļ•āļāļēāļĢ Windows āļŠāļēāļĄāļēāļĢāļ–āļ•āļ”āļ•āļ‡āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ”āļēāļ§āļ™āđ‚āļŦāļĨāļ”āđ„āļŸāļĨ Binary āļˆāļēāļāđ€āļ§āļšāđ„āļ‹āļ• http://www.mongodb.org/downloads āļ‹āļ‡āđ€āļĄāļ­āļ—āļēāļāļēāļĢāļ”āļēāļ§āļ™āđ‚āļŦāļĨāļ”āđ„āļŸāļĨāļ”āļ‡āļāļĨāļēāļ§āđāļĨāļ§ āđƒāļŦāļ—āļēāļāļēāļĢ unzip āđ€āļāļšāđ„āļŸāļĨāđ„āļ§āđƒāļ™āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ—āļ•āļ­āļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āļĄāđ„āļŸāļĨāļ•āļēāļ‡āđ† āļ”āļ‡āļĢāļ›āļ— 1

Page 65: Java Web Services and SOA Exercises [in Thai]

65

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 1 āđ„āļŸāļĨāđ„āļšāļ™āļēāļĢāļ•āļēāļ‡āđ† āļ‚āļ­āļ‡ MongoDB

āļ‹āļ‡āđ„āļŸāļĨāļ—āļŠāļēāļ„āļāļāļ„āļ­

â€Ē mongod.exe āļ—āđ€āļ›āļ™ Database Server â€Ē mongo.exe āļ—āđ€āļ›āļ™āļŦāļ™āļēāļˆāļ­āļ‚āļ­āļ‡ admin

āđ‚āļ”āļĒ Default MongoDB āļˆāļ°āđ€āļāļšāļ‚āļ­āļĄāļĨāđ„āļ§āļ—āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢ \data\db āļ‹āļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āđ„āļ›āļŠāļĢāļēāļ‡āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļ”āļ‡āļāļĨāļēāļ§ āļ āļēāļĒāđƒāļ• Drive C

2. āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđƒāļŠ MongoDB

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļĨāļ­āļ‡āļāļēāļĢāđƒāļŠāļ‡āļēāļ™ MongoDB āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ Mongo.exe āļ‹āļ‡āļāļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ command shell āļ‚āļ­āļ‡ administrator āđāļĨāļ°āđ‚āļ”āļĒ Default āļāļˆāļ°āļāļēāļŦāļ™āļ”āđƒāļŠāļāļēāļ™āļ‚āļ­āļĄāļĨāļ—āļŠāļ­ test āļ‹āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° āđāļŠāļ”āļ‡āļāļēāļ™āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļ­āļĒāđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļžāļĄāļžāļ„āļēāļŠāļ‡

> db

Page 66: Java Web Services and SOA Exercises [in Thai]

66

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļ„āļēāļŠāļ‡āļ—āļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ­āļāļēāļ™āļ‚āļ­āļĄāļĨ (database) āļ—āļ‡āļŦāļĄāļ”āļ„āļ­

>show dbs

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄāļ—āļŠāļ­āļ§āļē mydatabase āđ‚āļ”āļĒāđƒāļŠāļ„āļēāļŠāļ‡

>use mydatabase

āļ„āļēāļŠāļ‡āļ—āļˆāļ°āđāļŠāļ”āļ‡ Tables āļ—āļ‡āļŦāļĄāļ”āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļĨāļ„āļ­

>show collections

āđāļĨāļ°āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”āļ„āļēāļŠāļ‡āđƒāļ™āļāļēāļĢāļŠāļ§āļĒāđ€āļŦāļĨāļ­āđ‚āļ”āļĒ

>help

āļŠāļēāļŦāļĢāļšāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡āļ™āđ€āļĢāļēāļˆāļ°āļ—āļēāļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­ āļŠāļ­āļ‡āđ€āļĨāļĄāļ”āļ‡āļ™

> db.books.insert({isbn:"555123", author:"thanachart", title:"Introduction to MongoDB", price:1200})

āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āļēāļāļēāļĢāđ€āļžāļĄāļ‚āļ­āļĄāļĨāđ„āļ”āđ‚āļ”āļĒāļ„āļēāļŠāļ‡āļ•āļ­āđ„āļ›āļ™

> new_book = {isbn:"555124", author:"James Gosling", title: "Java SE", price: 1400}

> db.books.insert(new_book)

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ—āļ‡āļŦāļĄāļ”āđ„āļ”āļˆāļēāļāļ„āļēāļŠāļ‡

> db.books.find()

āļ‹āļ‡āļāļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āļ™

{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1200 }

{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "isbn" : "555124", "author" : "James Gosling", "title" : "Java SE", "price" : 1400 }

Page 67: Java Web Services and SOA Exercises [in Thai]

67

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļ—āļ‡āļ™ id āļˆāļ°āđ€āļ›āļ™ index āđƒāļ™āļāļēāļĢāļĢāļ°āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ™āļ­āļāļˆāļēāļāļ™āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ„āļ™āļŦāļēāļ‚āļ­āļĄāļĨāļŠāļēāļŦāļĢāļš āļĢāļēāļĒāļāļēāļĢāđƒāļ”āđ† āđ„āļ”āđ€āļŠāļ™ āļāļēāļĢāļ„āļ™āļŦāļēāļ•āļēāļĄāļŠāļ­āļœāđāļ•āļ‡

> db.books.find({author:"thanachart"})

āļŦāļĢāļ­āļ­āļēāļˆāļ•āļ­āļ‡āļāļēāļĢāļ„āļ™āļŠāļ­āļŦāļ™āļ‡āļŠāļ­āļ—āļĄāļ„āļēāļ§āļē Mongo

> db.books.find({title:/Mongo/})

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° update āļ‚āļ­āļĄāļĨ āđ€āļŠāļ™āļ•āļ­āļ‡āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļĢāļēāļ„āļēāļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ—āđāļ•āļ‡āđ‚āļ”āļĒ thanachart āđ€āļ›āļ™ 1300 āđ‚āļ”āļĒāđƒāļŠāļ„āļēāļŠāļ‡

> db.books.update({author:"thanachart"},{$set: {price:1300}})

āđ€āļĢāļēāļˆāļ°āļĨāļ­āļ‡āļ—āļēāļāļēāļĢāđ€āļžāļĄ comment āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āđ€āļŠāļ™āļĄāļœāļ­āļēāļ™āļ—āļŠāļ­ Somchai āļ­āļēāļˆāļĄāļēāđƒāļŦāļ„āļ§āļēāļĄāđ€āļŦāļ™āļ§āļēāļŦāļ™āļ‡āļŠāļ­āļ‚āļ­āļ‡ James Gosling āđ€āļ›āļ™ “good reading book” āđ‚āļ”āļĒāđ€āļĢāļēāļ­āļēāļˆāđƒāļŠāļ„āļēāļŠāļ‡āļ”āļ‡āļ™

> new_comment = {reader:"Somchai", date: new Date(), text: "good reading book"}

> db.books.update({author:/James/},{$push: {comment:new_comment}})

āļ‹āļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ”āļ‚āļ­āļĄāļĨāļ™āđƒāļŦāļĄāđ€āļ›āļ™

{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1300 }

{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "author" : "James Gosling", "comment" : [ { "reader" : "Somchai", "date" : ISODate("2013-02-16T16:45:07.309Z"), "text" : "good reading book" } ], "isbn" : "555124", "price" : 1400, "title" : "Java SE" }

3. āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•āļ­āļāļš MongoDB

āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄāļĨ MongoDB āđ„āļ”āļŦāļĨāļēāļĒāđāļšāļš āđāļ•āđƒāļ™āļ—āļ™āļˆāļ°āđƒāļŠ MongoDB Driver āļ—āļŠāļēāļĄāļēāļĢāļ–āļˆāļ°āļ”āļēāļ§āļ™āđ‚āļŦāļĨāļ”āļĄāļēāđ„āļ”āļˆāļēāļ https://github.com/mongodb/mongo-java-driver/downloads

Page 68: Java Web Services and SOA Exercises [in Thai]

68

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āđƒāļ™āļ—āļ™āļˆāļ°āļŠāļēāļ˜āļ•āļāļēāļĢāđ€āļžāļĄāļ‚āļ­āļĄāļĨāļĨāļ‡āđƒāļ™ MongoDB āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āđƒāļŦāļĄ āđ‚āļ›āļĢāđāļāļĢāļĄ addBook.html āđāļĨāļ° thankyou.html āļ”āļ‡ Listing āļ— 1 āđāļĨāļ° 2 āđāļĨāļ°āļ—āļēāļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›āļ™ Web

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ WebBaseDB āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļš Project āđ„āļ§ āđāļĨāļ§āļāļ” Next 4. āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat āļāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 6 Web āđāļĨāļ§āļāļ”

Finish 5. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > HTML āļāļģāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™

addBook āđāļĨāļ§āļāļ” Finish 6. āđ€āļ‚āļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ addBook.html āļ•āļēāļĄ Listing āļ— 1

Listing āļ— 1 āđ‚āļ›āļĢāđāļāļĢāļĄ addBook.html

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Add a new book</title> </head> <body><h1>Add a new book</h1><P> <form action="MongoDBServlet" method="POST"> ISBN : <input type="text" name="isbn" value="" size="15"/> <BR> Title : <input type="text" name="title" value="" size="50"/> <BR> Author : <input type="text" name="author" value="" size="50"/> <BR> Price : <input type="text" name="price" value="" size="10"/> <BR> <input type="submit" value="Add" /> </form> </body> </html>

7. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > HTML āļāļģāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ thankyou āđāļĨāļ§āļāļ” Finish

8. āđ€āļ‚āļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ thankyou.html āļ•āļēāļĄ Listing āļ— 2

Listing āļ— 2 āđ‚āļ›āļĢāđāļāļĢāļĄ thankyou.html

<html> <head> <title>Thank you</title> </head> <body> <H1>Thank you for inserting data </H1> </body>

Page 69: Java Web Services and SOA Exercises [in Thai]

69

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

</html>

9. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New → Servlet

āļāļģāļŦāļ™āļ” Java Package āđ€āļ›āļ™ controller, Class Name āđ€āļ›āļ™ MongoDBServlet āđāļĨāļ§āļāļ” Finish 10. copy āđ„āļŸāļĨ mongo-2.10.1.jar āđ„āļ›āđ„āļ§āļ—āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢ āđ‚āļ”āļĒāđƒāļŦ Copy āđ„āļ›āļ§āļēāļ‡āļ— directory /lib āļ‚āļ­āļ‡ Apache

Tomcat (āļ‹āļ‡ Default āļ­āļĒāļ— C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\) 11. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ MongoDBServlet.java āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 3

Listing āļ— 3 āđ‚āļ›āļĢāđāļāļĢāļĄ MongoDBServlet.java

package controller;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.UnknownHostException;

import java.sql.SQLException;

import java.sql.Statement;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.mongodb.BasicDBObject;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.Mongo;

/**

* Servlet implementation class MongoDBServlet

*/

@WebServlet("/MongoDBServlet")

public class MongoDBServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

Mongo m = null;

public void init() {

Page 70: Java Web Services and SOA Exercises [in Thai]

70

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

try {

m = new Mongo( "localhost" );

System.out.println("Connected");

} catch (Exception ex) {

System.out.println(ex);

}

}

protected void processRequest(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<title>Add a new book</title>");

out.println("</head>");

out.println("<body>");

out.println("<h1> Add a new book </h1>");

try {

String isbn = request.getParameter("isbn");

String author = request.getParameter("author");

String title = request.getParameter("title");

String priceStr = request.getParameter("price");

float price = Float.parseFloat(priceStr);

DB db = m.getDB( "test" );

BasicDBObject book = new BasicDBObject();

book.put("isbn", isbn);

book.put("author", author);

book.put("title", title);

book.put("price", price);

DBCollection coll = db.getCollection("books");

coll.insert(book);

RequestDispatcher obj = request.getRequestDispatcher("thankyou.html");

obj.forward(request, response);

} catch (UnknownHostException ex) {

out.println("Error " + ex);

return;

}

out.println("</body>");

Page 71: Java Web Services and SOA Exercises [in Thai]

71

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

out.println("</html>");

out.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

processRequest(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

processRequest(request, response);

}

}

4 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB 2. āđ€āļĢāļĒāļāđƒāļŠāļ‡āļēāļ™āļŦāļ™āļē addBook.html āđāļĨāļ§āļ—āļ”āļŠāļ­āļšāļāļĢāļ­āļāļ‚āļ­āļĄāļĨ 3. āđ„āļ›āļ—āđ‚āļ›āļĢāđāļāļĢāļĄ admin āļ‚āļ­āļ‡ MongoDB āđāļĨāļ§āđ€āļĢāļĒāļāļ„āļēāļŠāļ‡ db.books.find() āļˆāļ°āđ€āļŦāļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄāļ—āļ›āļ­āļ™āđ€āļ‚āļēāļĄāļē

Page 72: Java Web Services and SOA Exercises [in Thai]

72

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 10: Developing a Simple Synchronous BPEL Program

āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļĨāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— BPEL āđ€āļžāļ­āđāļŠāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āļāļēāļĢāđ€āļ‚āļĒāļ™ Business Process āđāļšāļš Synchronous āđ‚āļ”āļĒāļˆāļ°āļĄāļāļēāļĢāđƒāļŠ NetBeans āļ‹āļ‡āđ€āļ›āļ™āļŸāļĢāđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— IDE āđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āđāļĨāļ°āđ„āļŸāļĨ BPEL āđāļĨāļ°āđƒāļŠ GlassFish āļ‹āļ‡āđ€āļ›āļ™ Open Source Application Server āļ—āļĄāļēāļžāļĢāļ­āļĄāļāļš Open ESB āđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ BPEL Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚āļ™āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ™ āđ€āļ›āļ™āļ˜āļĢāļāļĢāļĢāļĄāđ€āļžāļ­āļ—āļēāļāļēāļĢāļ„āļ”āļĨāļ­āļāļ‚āļ­āļ„āļ§āļēāļĄ āļ‹āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

1. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ HelloBPEL 2. āļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL 3. āļžāļ’āļ™āļē BPEL Process 4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application

1. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ HelloBPEL āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļŠāļēāļŦāļĢāļš Service Oriented Architecture āļ‚āļ™āļĄāļēāđƒāļŦāļĄ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module

āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ HelloBPEL āđāļĨāļ§āļāļ” Finish

2. āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄāđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” HelloBPEL āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > WSDL Document

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New WSDL DocumentāļāļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ HelloSample āđ€āļĨāļ­āļ WSDL Types: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āđ€āļĨāļ­āļ Type: āđ€āļ›āļ™ RPC Literal āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1 āļˆāļēāļāļ™āļ™āļāļ” Next āđ€āļžāļ­āđ„āļ›āļŦāļ™āļēāļ–āļ”āđ„āļ›

Page 73: Java Web Services and SOA Exercises [in Thai]

73

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ WSDL Document āđ€āļ›āļ™āđāļšāļš SOAP

3. āđƒāļ™āļŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputType (āđ€āļĄāļ­āđƒāļŠāļ‚āļ­āļĄāļĨāđ€āļŠāļĢāļˆāđāļĨāļ§ āļ•āļ­āļ‡āļāļ” Enter āļŦāļ™āļ‡āļ„āļĢāļ‡āđ€āļŠāļĄāļ­) āđāļĨāļ°āļŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ resultType āļ‹āļ‡āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2

Page 74: Java Web Services and SOA Exercises [in Thai]

74

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļš WSDL Document

4. āļāļ” Next > āđāļĨāļ§āļāļ” Finish āļˆāļ°āđ„āļ”āđ„āļŸāļĨ HelloSample.wsdl āļ”āļ‡āļĢāļ›āļ— 3

Page 75: Java Web Services and SOA Exercises [in Thai]

75

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ HelloSample.wsdl

3. āļāļēāļĢāļžāļ’āļ™āļē BPEL Process āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1) āļāļēāļĢāđ€āļžāļĄ partner link

āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ—āđ„āļŸāļĨ helloBPEL.bpel āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ HelloSample.wsdl āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•āļēāļ‡ design āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļĄ PartnerLink āđ€āļ‚āļēāđ„āļ›āđƒāļ™ helloBPEL.bpel

Page 76: Java Web Services and SOA Exercises [in Thai]

76

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

2) āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Receive

1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āļĄāļēāđ„āļ§āļ•āļĢāļ‡āļšāļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄāļ§āļēāļ‡āđ€āļ›āļĨāļē

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Receive āļ—āļŠāļ­ Receive1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ„āļĨāļāļ—āđ„āļ­āļ„āļ­āļ™ Edit āļ•āļēāđāļŦāļ™āļ‡āļšāļ™āļ˜āļĢāļāļĢāļĢāļĄ Receive1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ start āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ PartnerLink1

4. āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ inputVar āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļāļ”āļ‡āļĢāļ›āļ— 5

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļšāļ˜āļĢāļāļĢāļĢāļĄ Receive

5. āļāļ” OK āļˆāļ°āđ„āļ” HelloBPEL.bpel āļ”āļ‡āļĢāļ›āļ— 6

Page 77: Java Web Services and SOA Exercises [in Thai]

77

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡āļāļēāļĢāļĢāļšāļ„āļēāđ€āļ‚āļēāļĄāļēāļˆāļēāļ PartnerLink1

3) āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Reply

1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļšāļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ Process End

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Reply āļ—āļŠāļ­ Reply1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ„āļĨāļāđ„āļ­āļ„āļ­āļ™ Edit āļ‚āļ­āļ‡āļ˜āļĢāļāļĢāļĢāļĄ Reply1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ end āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ PartnerLink1

4. āđƒāļ™āļŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ outputVar āđāļĨāļ§āļāļ” OK

4) āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Assign

1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ—āļ˜āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļžāļ­āđ„āļ›āļĒāļ‡āđāļ—āļ› Mapper āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” inputType āļ‚āļ­āļ‡ inputVar āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” resultType āļ‚āļ­āļ‡ outputVar āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē (āđ€āļ›āļ™āļāļēāļĢāļāļ­āļ›āļ›āļ„āļēāļˆāļēāļāļ­āļ™āļžāļ•āđ„āļ›āļĒāļ‡āđ€āļ­āļēāļ—āļžāļ•) āļ”āļ‡āļĢāļ›āļ— 7

Page 78: Java Web Services and SOA Exercises [in Thai]

78

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļēāļ‚āļ­āļ‡ inputType āđ„āļ›āļĒāļ‡ resultType

3. āđ€āļĄāļ­āđ€āļĨāļ­āļāļāļĨāļšāļĄāļēāļ—āđāļ—āļ› Design āļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 8

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡ helloBPEL.pbel

4. āļāļ”āļ›āļĄ Save

Page 79: Java Web Services and SOA Exercises [in Thai]

79

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļĢāļ™ SampleBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File => New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ HelloApplication āđāļĨāļ§āļāļ” Finish 4. āđƒāļŦāļĨāļēāļāđ‚āļ›āļĢāđ€āļˆāļ„ HelloBPEL āļ—āļ­āļĒāđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āļĄāļēāđƒāļŠāđƒāļ™ JBI Modules āļ—āļ­āļĒāđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design

āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 9

āļĢāļ›āļ— 9 āđāļŠāļ”āļ‡āđ€āļžāļĄ JBI Modules āđƒāļ™ HelloApplication

5. āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ— HelloApplication āđāļĨāļ§āđ€āļĨāļ­āļ Clean and Build āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 10

āļĢāļ›āļ— 10 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāļ„ HelloApplication

Page 80: Java Web Services and SOA Exercises [in Thai]

80

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļ›āļĢāđ€āļˆāļ„ HelloApplication āđāļĨāļ§āđ€āļĨāļ­āļ Deploy 2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” HelloApplication > Test āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Test Case āđƒāļŦāļāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›āļ™ HelloSample.wsdl āļ—āļ­āļĒāđƒāļ™ HelloBPEL āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ HelloSampleOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļ source code āļŠāļ§āļ™ inputType āļ”āļ‡āļ™

<inputType>Hello Thana</inputType>

7. āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 8. āļˆāļ°āđ€āļŦāļ™āļœāļĨāļĨāļžāļ˜āļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™ Listing āļ— 1 [āļŦāļĄāļēāļĒāđ€āļŦāļ•āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļ—āđ€āļ›āļ™ Failed

āđ€āļāļ”āļ‚āļ™āđ€āļ™āļ­āļ‡āļˆāļēāļāļĄāļāļēāļĢāļ™āļēāļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āđ„āļ›āđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļšāļāļšāđ„āļŸāļĨ Output.xml āļ‹āļ‡āļ–āļēāđ„āļĄāļ•āļĢāļ‡āļāļ™ āļāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āđ€āļ›āļ™ Failed āļ”āļ‡āļ™āļ™āļāļēāļĢāļĢāļ™āļ„āļĢāļ‡āđāļĢāļ āļ‹āļ‡āļĒāļ‡āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāđƒāļ™ Output.xml āđƒāļŦāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš āļˆāļ‡āđ„āļ”āļœāļĨāļĨāļžāļ˜āđ€āļ›āļ™ Failed āđāļ•āļ–āļēāđ€āļĢāļēāđ€āļĨāļ­āļ Run āđƒāļ™āļ„āļĢāļ‡āļ–āļ”āđ„āļ› āđ‚āļ”āļĒāļ—āđ„āļĄāđ„āļ”āđ€āļ›āļĨāļĒāļ™āļ„āļēāđƒāļ™ Input.xml āļˆāļ°āļ—āļēāđƒāļŦāđ„āļ”āļœāļĨāļĨāļžāļ˜āļ•āļĢāļ‡āļāļšāļ‚āļ­āļĄāļĨāđƒāļ™ Output.xml āļāļˆāļ°āđ„āļĄāđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āļ™ Failed āļ­āļāļ•āļ­āđ„āļ› āļ”āļ‡āđāļŠāļ”āļ‡āļ•āļ§āļ­āļĒāļēāļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™āđƒāļ™āļĢāļ›āļ— 11

āļĢāļ›āļ— 11 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™ TestCase1

Page 81: Java Web Services and SOA Exercises [in Thai]

81

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Listing āļ— 1 āļœāļĨāļĨāļžāļ˜āļ—āļ­āļĒāđƒāļ™āđ„āļŸāļĨ Output.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/

http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:HelloSampleOperationResponse

xmlns:m="http://j2ee.netbeans.org/wsdl/HelloBPEL/HelloSample"> <resultType>Hello Thana</resultType> </m:HelloSampleOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Page 82: Java Web Services and SOA Exercises [in Thai]

82

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 11: BPEL for Writing to File

āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ­āđ€āļ‚āļĒāļ™āļ‚āļ­āļĄāļĨāļ—āđ„āļ”āļĢāļšāļœāđƒāļŠāļ‡āļēāļ™āļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ FileBPEL 2. āļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļš SOAPBinding 3. āļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļš FileBinding 4. āļžāļ’āļ™āļē BPEL Process 5. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application 6. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ TestCase 7. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ Web Application

1. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ FileBPEL āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļŠāļēāļŦāļĢāļš Service Oriented Architecture āļ‚āļ™āļĄāļēāđƒāļŦāļĄ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module

āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ FileBPEL āđāļĨāļ§āļāļ” Finish

2. āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļš SOAPBinding āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļš SOAPBinding āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚āļ™ āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āđ€āļĨāļ­āļ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New WSDL Document āļāļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ DataIO āļāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™

Concrete WSDL Document āđāļĨāļ°āļāļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC Literal āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1 āđāļĨāļ§āļāļ” Next

Page 83: Java Web Services and SOA Exercises [in Thai]

83

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļē WSDL Document

3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠāļēāļŦāļĢāļšāļŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ id āļāļ” Add āđāļĨāļ§āđ€āļžāļĄ input āļŠāļēāļŦāļĢāļš firstName, lastName, salary (int) āđāļĨāļ°āļŠāļēāļŦāļĢāļšāļŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ result āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2 āļˆāļēāļāļ™āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish

Page 84: Java Web Services and SOA Exercises [in Thai]

84

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠāļ„āļē Input āđāļĨāļ° Output Messages

3. āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļš FileBinding

āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļš FileBinding āđ€āļžāļ­āđ€āļ‚āļĒāļ™āļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New WSDL Document āļāļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ FileResult āđƒāļŦāđ€āļĨāļ­āļ WSDL Type:

āđ€āļ›āļ™ Concrete WSDL Document Binding āđ€āļ›āļ™ FILE āđāļĨāļ° Types āđ€āļ›āļ™ Write āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 3 āļˆāļēāļāļ™āļ™āļāļ” Next

Page 85: Java Web Services and SOA Exercises [in Thai]

85

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠāļ„āļēāļŠāļēāļŦāļĢāļš New WSDL Document

3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļāļēāļŦāļ™āļ”āļ„āļē Path: āđ„āļ›āļ— C:\SOA\output āđ‚āļ”āļĒāļāļ” Browse āđ€āļžāļ­āđ€āļĨāļ­āļ Path: (āļˆāļ°āļ•āļ­āļ‡āļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡ folder āļ™āļ‚āļ™āļĄāļēāļāļ­āļ™) āđāļĨāļ°āđ€āļĨāļ­āļ File Exists: āđ€āļ›āļ™ Append to Existing File āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4 āļˆāļēāļāļ™āļ™āļāļ” Finish

Page 86: Java Web Services and SOA Exercises [in Thai]

86

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļēāļŠāļēāļŦāļĢāļšāļāļēāļĢāđ€āļ‚āļĒāļ™āđ„āļŸāļĨ

4. āļāļēāļĢāļžāļ’āļ™āļē BPEL Process āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 4.1 āļāļēāļĢāđ€āļžāļĄ partner link

1. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ—āđ„āļŸāļĨ fileBPEL.bpel āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DataIO.wsdl āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļ›āđ€āļ—āļēāļ—āļēāļ‡āļ‹āļēāļĒāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•āļēāļ‡ design

2. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DataIOPartnerLink 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ FileResult.wsdl āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•āļēāļ‡

design 4. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ FilePartnerLink

Page 87: Java Web Services and SOA Exercises [in Thai]

87

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡āļ•āļēāđāļŦāļ™āļ‡āļ‚āļ­āļ‡ DataIOPartnerLink āđāļĨāļ° FilePartnerLink āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel

4.2 āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Receive

1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ•āļĢāļ‡āļšāļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄāļ§āļēāļ‡āđ€āļ›āļĨāļē

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Receive āļ—āļŠāļ­ Receive1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Receive1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ start āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DataIOPartnerLink

4. āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK

4.3 āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Reply

1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļŦāļĨāļ‡āļˆāļēāļāļ˜āļĢāļāļĢāļĢāļĄ start

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Reply āļ—āļŠāļ­ Reply1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ end āđāļĨāļ°āđ€āļĨāļ­āļ Partner

Link: āđ€āļ›āļ™ DataIOPartnerLink

Page 88: Java Web Services and SOA Exercises [in Thai]

88

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āđƒāļ™āļŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK

4.4 āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Invoke āļŠāļēāļŦāļĢāļš write

āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Invoke1 āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ invokeWriteToFile

āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ FilePartnerLink āđāļĨāļ° Operation: āđ€āļ›āļ™ write āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name:

āđ€āļ›āļ™ inFile āđāļĨāļ§āļāļ” OK 4.5 āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Assign

1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ invokeWriteToFile

2. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ—āļ˜āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđ‚āļŦāļ™āļ” inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ āđ‚āļ”āļĒāđ€āļĨāļ­āļ String > Concat āļˆāļēāļāļ™āļ™āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡

1. firstName āđ€āļ‚āļēāđ€āļ›āļ™ String āļŠāļ­āļ‡āļ— 1 2. ‘ ‘ āđ€āļ›āļ™ String āļŠāļ­āļ‡āļ— 2 (āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ›āļĄ Space Bar āļšāļ™āļ„āļĒāļšāļ­āļĢāļ”) 3. lastName āđ€āļ‚āļēāđ€āļ›āļ™ String āļŠāļ­āļ‡āļ— 3 4. ‘ => ‘ āđ€āļ›āļ™ String āļŠāļ­āļ‡āļ— 4 5. salary āđ€āļ‚āļēāđ€āļ›āļ™ String āļŠāļ­āļ‡āļ— 5 6. āļˆāļēāļāļ™āļ™āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡ return String āđ„āļ›āļĒāļ‡ part1 āđƒāļ™ inFile āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­ āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6

Page 89: Java Web Services and SOA Exercises [in Thai]

89

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§āļēāļ‡ start āđāļĨāļ° invokeWriteToFile

āļŦāļĄāļēāļĒāđ€āļŦāļ• āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļĄāļˆāļēāļ™āļ§āļ™āđāļ–āļ§āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļĨāļēāļāđ€āļ‚āļēāđ„āļ›āļ— āļ‚āļ­āļ‡ Concat āļˆāļēāļ™āļ§āļ™āđāļ–āļ§āļāļˆāļ°āļ–āļāđ€āļžāļĄāđƒāļŦāļ—āļ™āļ—

3. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ invokeWriteToFile āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ BPEL Mapper āđ€āļĨāļ­āļ String > String Literal āđāļĨāļ§āļāļēāļŦāļ™āļ”āļ„āļēāđ€āļ›āļ™ Success āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŸāļĨāļ”āļĢāļ°āļŦāļ§āļēāļ‡ string literal āļāļš result āļ—āļ­āļĒāđƒāļ™ outData āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 7

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡Business Rule āļĢāļ°āļŦāļ§āļēāļ‡ invokeWriteToFile āđāļĨāļ° end

5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 8

Page 90: Java Web Services and SOA Exercises [in Thai]

90

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļ‡āļĢāļ°āļšāļš

6. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FileBPEL āđ€āļĨāļ­āļ Clean and Build

5. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ FileBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ FileCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļŦāļĨāļēāļāđ‚āļ›āļĢāđ€āļˆāļ„ FileBPEL āļ—āļ­āļĒāđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āļĄāļēāđƒāļŠāđƒāļ™ JBI Modules āļ—āļ­āļĒāđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design 5. āļ„āļĨāļāļ‚āļ§āļēāļ— FileCompositeApp āđ€āļĨāļ­āļ Clean and Build āļˆāļ°āđ€āļŦāļ™āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 9

Page 91: Java Web Services and SOA Exercises [in Thai]

91

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 9 āđāļŠāļ”āļ‡ Service Assembly āļ‚āļ­āļ‡ FileCompositeApp

6. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ TestCase

1. āļ—āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ FileCompositeApp 2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” FileCompositeApp > Test āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Test Case āđƒāļŦāļāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ FileBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›āļ™ DataIO.wsdl āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ DataIOOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļ source code āļ”āļ‡āļ™

<id>1234</id> <firstName>Somjai</firstName> <lastName>Jaidee</lastName> <salary>38000</salary>

7. āļāļ”āļ›āļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 8. āļˆāļ°āđ€āļŦāļ™āļœāļĨāļĨāļžāļ˜āļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 10

āļĢāļ›āļ— 10 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™ TestCase1

9. āđāļĨāļ°āļˆāļ°āđ„āļ”āđ„āļŸāļĨ output.xml āđƒāļ™āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢ c:\SOA\output āļ‹āļ‡āļĄāļ‚āļ­āļĄāļĨāļ”āļ‡āļ™

Somjai Jaidee => 38000

Page 92: Java Web Services and SOA Exercises [in Thai]

92

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

7. āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ Web Application

āļ—āļēāļāļēāļĢāļ„āļ™āļŦāļēāļ•āļēāđāļŦāļ™āļ‡ url āļ‚āļ­āļ‡ soap:address āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđƒāļ™ Service Assembly āļ‚āļ­āļ‡ FileCompositeApp āđƒāļŦāļ„āļĨāļāļ‚āļ§āļēāļ— DataIOPort āđ€āļĨāļ­āļ Clone WSDL to

edit āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 11

āļĢāļ›āļ— 11 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Clone WSDL Port to edit āļ‚āļ­āļ‡ DataIOPort

2. āļˆāļēāļāļ™āļ™āđƒāļŦāļ„āļĨāļāļ‚āļ§āļēāļ— DataIOPort āļ­āļāļ„āļĢāļ‡āđāļĨāļ§āđ€āļĨāļ­āļ Properties 3. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Properties āđƒāļŦāļ—āļēāļāļēāļĢ copy āļ„āļēāļ‚āļ­āļ‡ Location āđƒāļ™ soap:address 4. Location āļ‚āļ­āļ‡ soap:address āļˆāļ°āļĄāļ„āļēāđ€āļ›āļ™āļ•āļ§āđāļ›āļĢāļ—āļŠāļ­ ${HttpDefaultPort} āļ‹āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”āļ„āļēāļ‚āļ­āļ‡

${HttpDefaultPort} āđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĨāļ­āļāļ—āđāļ—āļ› Services āđ‚āļŦāļ™āļ” Servers > GlassFish Server 3.1.2 > JBI > Binding Components > sun-http-binding āļ„āļĨāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ properties āļˆāļ°āđ€āļŦāļ™ Default HTTP Port Number āļ‹āļ‡āļˆāļ°āļĄāļ„āļēāđ€āļ›āļ™ 9080

5. āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›āļ” Web Browser āđāļĨāļ§ paste āļ„āļēāļ— copy āđ„āļ§ āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļ„āļēāļ‚āļ­āļ‡ URL

āđƒāļŦāđ€āļ›āļ™āļ”āļ‡āļ™ http://localhost:9080/DataIOService/DataIOPort?WSDL

āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđƒāļŦāļœāđƒāļŠāļ›āļ­āļ™āļ„āļēāļ‚āļ­āļĄāļĨāļ•āļēāļ‡āđ† āļˆāļēāļāļ™āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āļēāļāļēāļĢāđ€āļ‚āļĒāļ™āļ‚āļ­āļĄāļĨāļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ FileBPUI āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder

āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļšProject āđ„āļ§ 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish Server 3.1.2 āļāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 6

āđāļĨāļ§āļāļ” Finish 5. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web

Services āđāļĨāļ° File Types āđ€āļ›āļ™ Web Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠ URL āđ€āļ›āļ™

http://localhost:9080/DataIOService/DataIOPort?WSDL (āļ„āļ§āļĢāļˆāļ°āļ—āļēāļāļēāļĢ copy āļĄāļēāļˆāļēāļ

Web Browser āđ„āļĄāļ„āļ§āļĢāļ—āļˆāļ°āļžāļĄāļžāđ€āļ­āļ‡)

Page 93: Java Web Services and SOA Exercises [in Thai]

93

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

7. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > HTML 8. āļāļēāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ employeeInput āđāļĨāļ§āļāļ” Finish 9. āđ€āļžāļĄāđ€āļ•āļĄ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ employeeInput.html āļ”āļ‡āļ™

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="EmployeeServlet" method="post"> ID: <input name="id" /><br> Firstname: <input name="firstname"/><br> Lastname: <input name="lastname"/><br> Salary: <input name="salary"/><br><br> <input type="submit" value="Insert" /> </form> </body> </html>

10. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Servlet 11. āļˆāļēāļāļ™āļ™āđƒāļŦāļāļēāļŦāļ™āļ”āļŠāļ­āđ€āļ›āļ™ EmployeeServlet āđāļĨāļ° Package: āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Finish 12. āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ EmployeeServlet.java āđƒāļŦāļĨāļš Comment

āļ—āļ‡āļŦāļĄāļ”āļ—āļ­āļĒāļ āļēāļĒāđƒāļ™āđ€āļ„āļĢāļ­āļ‡āļŦāļĄāļēāļĒ /* â€Ķ */ āļĢāļ°āļŦāļ§āļēāļ‡āļ„āļēāļŠāļ‡ try āđāļĨāļ° finally 13. āļ„āļĨāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§āļēāļ‡āļ„āļēāļŠāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ­āļ Insert Code āļˆāļēāļāļ™āļ™āđƒāļŦāđ€āļĨāļ­āļ Call Web Service

Operation āđƒāļŦāđ€āļĨāļ­āļāđ„āļ›āļ— DataIOOperation āđāļĨāļ§āļāļ” OK 14. āļˆāļēāļāļ™āļ™āđƒāļŦāļ—āļēāļāļēāļĢāļ›āļĢāļšāļ›āļĢāļ‡ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ EmployeeServlet.java āļ”āļ‡āļ™ (āđāļŠāļ”āļ‡āđ€āļ‰āļžāļēāļ°āđ€āļĄāļ˜āļ­āļ”

processRequest)

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { // Call Web Service Operation org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port =

service.getDataIOPort();

// TODO initialize WS operation arguments here java.lang.String id = request.getParameter("id"); java.lang.String firstname = request.getParameter("firstname"); java.lang.String lastname = request.getParameter("lastname"); String tmp = request.getParameter("salary"); int salary = Integer.parseInt(tmp); // TODO process result here java.lang.String result = port.dataIOOperation(id, firstname,

lastname, salary); out.println("Result = "+result);

Page 94: Java Web Services and SOA Exercises [in Thai]

94

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

} catch (Exception ex) { out.println(ex); } finally { out.close(); } }

15. āļ„āļĨāļāļ‚āļ§āļēāļ— FileBPUI āđāļĨāļ§āđ€āļĨāļ­āļ Clean and Build 16. āļ„āļĨāļāļ‚āļ§āļēāļ— employeeInput.html āđāļĨāļ§āđ€āļĨāļ­āļ Run File 17. āļŦāļĨāļ‡āļˆāļēāļāđƒāļŠāļ‚āļ­āļĄāļĨ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 12

āļĢāļ›āļ— 12 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠāļ‚āļ­āļĄāļĨ āđāļĨāļ°āļœāļĨāļĨāļžāļ˜āļ—āđ„āļ”

18. āđāļĨāļ°āđ„āļŸāļĨ output.xml āđƒāļ™āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢ c:\SOA\output āļˆāļ°āļĄāļ‚āļ­āļĄāļĨāļ”āļ‡āļ™

Somjai Jaidee => 38000 Nipa Jingjai => 738000

Page 95: Java Web Services and SOA Exercises [in Thai]

95

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

Exercise 12 Simple BPEL Invoking Web Services

āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ Business Process āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Internal Web Service āļ—āļžāļ’āļ™āļēāļ‚āļ™āļĄāļēāđ€āļ­āļ‡ āđāļĨāļ° External Web Service āļ‚āļ­āļ‡āļ—āļ­āļ™āđ† āļ—āļĄāļ­āļĒ āđ‚āļ›āļĢāđāļāļĢāļĄ Web Service āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚āļ™āļ„āļ­ TaxService āļ—āļĄāđ‚āļ­āđ€āļ›āļ­āļĢāđ€āļĢāļŠāļ™āļ—āļŠāļ­ calculateTax āđāļĨāļ° External Web Service āļ„āļ­āđ€āļ‹āļ­āļĢāļ§āļŠāļ„āļēāļ™āļ§āļ“āļ­āļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ—āļ­āļĒāļ— http://www.webservicex.com/CurrencyConvertor.asmx?wsdl

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

1. āļžāļ’āļ™āļē Web Services 2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ WSBPEL 3. āļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL 4. āļžāļ’āļ™āļē Business Process āļŠāļēāļŦāļĢāļšāđ€āļĢāļĒāļ Web Service 5. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application 6. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ TestCase 7. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ ExternalWSBPEL 8. āļāļģāļŦāļ™āļ” External WSDL Document 9. āļžāļ’āļ™āļēāđ„āļŸāļĨ Client WSDL āđƒāļŦāļĄ 10. āļžāļ’āļ™āļē Business Process āđƒāļŦāļĄāđ€āļžāļ­āđ€āļĢāļĒāļ External Web Service 11. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļˆāļ„ Composite Application āļŠāļēāļŦāļĢāļšāđ€āļĢāļĒāļ Business Process āđƒāļŦāļĄ āđāļĨāļ°āļ—āļēāļāļēāļĢāļ—āļ”āļŠāļ­āļš

āļāļēāļĢāļžāļ’āļ™āļē Web Services

āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Service āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē calculateTax Web Service āđ€āļŠāļ™āđ€āļ”āļĒāļ§āļāļšāđƒāļ™ āđāļšāļšāļāļāļŦāļ”āļ—āļœāļēāļ™āļĄāļē āđ‚āļ”āļĒāļĄ source code āļ”āļ‡āļ™

@WebService public class TaxService {

@WebMethod public double calculateTax(@WebParam(name = "income") double income) {

return 0.1 * income; } }

Page 96: Java Web Services and SOA Exercises [in Thai]

96

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ WSBPEL

āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļŠāļēāļŦāļĢāļš Service Oriented Architecture āļ‚āļ™āļĄāļēāđƒāļŦāļĄ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§āļāļ”

Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ WSBPEL āđāļĨāļ§āļāļ” Finish

āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ WSDL

āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚āļ™ āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WSBPEL āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > WSDL Document

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New WSDL Document āļāļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ WebProcessWSDL āļāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļāļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC Literal āđāļĨāļ§āļāļ” Next

3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠāļēāļŦāļĢāļšāļŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputData (āđ€āļĄāļ­āđƒāļŠāļ„āļēāđ€āļŠāļĢāļˆāđāļĨāļ§ āļ•āļ­āļ‡āļāļ”āļ›āļĄ Enter āļ”āļ§āļĒāđ€āļŠāļĄāļ­ āļĄāļ‰āļ°āļ™āļ™āļ„āļēāļˆāļ°āļāļĨāļšāđ„āļ›āđ€āļ›āļ™ part1 āđ€āļŦāļĄāļ­āļ™āđ€āļ”āļĄ) āđāļĨāļ°āļŠāļēāļŦāļĢāļšāļŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ outputData āļāļ” Next āđāļĨāļ§āļāļ” Finish

āļāļēāļĢāļžāļ’āļ™āļē Business Process

āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

āļāļēāļĢāđ€āļžāļĄ partner link

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļ—āļēāļāļēāļĢāļāļēāļŦāļ™āļ” partner link āļŠāļēāļŦāļĢāļš Web Services āļŠāļ­āļ‡āļŠāļ”āļ„āļ­ TaxService āđāļĨāļ° WebProcessWSDL āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

Page 97: Java Web Services and SOA Exercises [in Thai]

97

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

1. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ—āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ WebProcessWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•āļēāļ‡ design (āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠāđƒāļ™ ) āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ”āļ„āļē Name: āđ€āļ›āļ™ ClientPartnerLink āđāļĨāļ§āļāļ” OK

2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” TaxWSDemo > Web Services āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” TaxService āđāļĨāļ§āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Generate and Copy WSDL ...

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Generate and Copy WSDL āđƒāļŦāđ€āļĨāļ­āļāđ„āļ”āđ€āļĢāļāļ—āļ­āļĢ src āļ āļēāļĒāđƒāļ• WSBPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 1 āļˆāļēāļāļ™āļ™āļāļ” OK

āļĢāļ›āļ— 1 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ Generate and Copy WSDL

4. āļĨāļēāļ TaxService.wsdl āđ„āļ›āđ„āļ§āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļ‚āļ­āļ‡āļŦāļ™āļēāļ•āļēāļ‡ design āđ‚āļ”āļĒāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ TaxPartnerLink āļ‹āļ‡āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 2

āļĢāļ›āļ— 2 āđāļŠāļ”āļ‡ PartnerLink āļ—āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡ WSBPEL

Page 98: Java Web Services and SOA Exercises [in Thai]

98

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Receive

1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ•āļĢāļ‡āļšāļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄāļ§āļēāļ‡āđ€āļ›āļĨāļē

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Receive āļ—āļŠāļ­ Receive1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Receive1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ start āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ ClientPartnerLink

4. āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Reply

1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ Process End

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Reply āļ—āļŠāļ­ Reply1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ end āđāļĨāļ°āđ€āļĨāļ­āļ Partner

Link: āđ€āļ›āļ™ ClientPartnerLink 4. āđƒāļ™āļŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ”

Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Invoke āļŠāļēāļŦāļĢāļš calcualteTax

1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Invoke1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ invokeWS āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ TaxPartnerLink

4. āđƒāļ™āļŠāļ­āļ‡ Operation: āđ€āļĨāļ­āļ calculateTax 5. āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ”

Name: āđ€āļ›āļ™ TaxIn āđāļĨāļ§āļāļ” OK 6. āđƒāļ™āļŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ”

Name: āđ€āļ›āļ™ TaxOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 3

Page 99: Java Web Services and SOA Exercises [in Thai]

99

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 3 āđāļŠāļ”āļ‡ BPEL Process āđƒāļ™āļāļēāļĢāđ€āļĢāļĒāļāđ‚āļ­āđ€āļ›āļ­āļĢāđ€āļĢāļŠāļ™ calculateTax

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Assign

1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ invokeWS

2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” inputData āđƒāļ™āļŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” income āđƒāļ™āļŠāļ§āļ™ TaxIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 4

āļĢāļ›āļ— 4 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§āļēāļ‡ start āđāļĨāļ° invokeWS

3. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ invokeWS āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

Page 100: Java Web Services and SOA Exercises [in Thai]

100

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠāļ§āļ™ TaxOut āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” outputData āđƒāļ™āļŠāļ§āļ™ outData āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 5

āļĢāļ›āļ— 5 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§āļēāļ‡ invokeWS āđāļĨāļ° end

5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 6

āļĢāļ›āļ— 6 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļ‡āļĢāļ°āļšāļš

6. āļāļ”āļ›āļĄ Save āđāļĨāļ° Clean and Build

Page 101: Java Web Services and SOA Exercises [in Thai]

101

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application

āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ WSBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite

Application āđāļĨāļ§āļāļ” Next 3. āļāļģāļŦāļ™āļ” Project Name āđ€āļ›āļ™ WSCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” WSCompositeApp āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆāļ„ WSBPEL āđāļĨāļ§āļāļ”āļ›āļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļžāļĄāđ‚āļŦāļ™āļ” WSBPEL.jar āļ āļēāļĒāđƒāļ• WSCompositeApp > JBI Module 7. āļ—āļģāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāļ„ WSCompositeApp 8. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Service Assemblyāļˆāļ°āđ€āļŦāļ™ CASA Editor āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 7 āļ‹āļ‡ WSBPEL āļ—āđ€āļ›āļ™ BPEL

module āļˆāļ°āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ SOAP request āđāļ•āđ„āļĄāđ€āļŦāļ™TaxPartnerLink āđ€āļĢāļĒāļāđƒāļŠ Web Service āđƒāļ”

āļĢāļ›āļ— 7 āđāļŠāļ”āļ‡ CASA Editor āļ‚āļ­āļ‡ WSBPEL

9. āđ€āļžāļ­āļĢāļ°āļš Web Service āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap āļ—āļ­āļĒāđƒāļ™ palette āļĄāļēāđ„āļ§āđƒāļ™āļŠāļ§āļ™ WSDL Ports āļ‚āļ­āļ‡ CASA Editor āđāļĨāļ°āļ—āļģāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 8

Page 102: Java Web Services and SOA Exercises [in Thai]

102

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļˆāļēāļ WSBPELāđ„āļ›āļĒāļ‡ SOAP

10. āļĢāļ°āļš endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ— casaPort1 āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļāļēāļŦāļ™āļ”āļ„āļē Location āđ€āļ›āļ™ http://localhost:8080/TaxWSDemo/TaxService āđāļĨāļ° Endpoint Name āđ€āļ›āļ™ TaxService

11. Save āđāļĨāļ°āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ WSCompositeApp

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ TestCase

1. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” WSCompositeApp > Test āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Test Case āđƒāļŦāļāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 3. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ WSBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›āļ™ WebProcessWSDL.wsdl āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ WebProcessWSDLOperation āđāļĨāļ§āļāļ” Finish 5. āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļ source code āļŠāļ§āļ™ inputData āļ”āļ‡āļ™

<inputData>400000</inputData>

6. āļāļ”āļ›āļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 7. āļˆāļ°āđ€āļŦāļ™āļœāļĨāļĨāļžāļ˜āļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļ‡āļ™

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:WebProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/WebProcessWSDL"> <outputData xmlns="">33500.0</outputData> </m:WebProcessWSDLOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Page 103: Java Web Services and SOA Exercises [in Thai]

103

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļŦāļĄāļēāļĒāđ€āļŦāļ•

āļāļĢāļ“āļ—āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ™āđ„āļ” āđƒāļŦāđ„āļ›āļ— GlassFish Server 3.1.2 > JBI > Service Assemblies āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 9 āđāļĨāļ§āļ—āļģāļāļēāļĢ Undeploy āđ‚āļ›āļĢāđ€āļˆāļ„āļ­āļ™āđ† āļ­āļ­āļāļ—āļ‡āļŦāļĄāļ” āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ‰āļžāļēāļ°āđ‚āļ›āļĢāđ€āļˆāļ„ WSCompositeApp āđāļĨāļ§āļĨāļ­āļ‡āļĢāļ™āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

āļĢāļ›āļ— 9 āļāļēāļĢ Updeploy āđ‚āļ›āļĢāđ€āļˆāļ„āļ­āļ™āđ† āļ—āļ­āļĒāđƒāļ™ Service Assemblies āļ­āļ­āļāļ—āļ‡āļŦāļĄāļ”

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ ExternalWSBPEL

āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļŠāļēāļŦāļĢāļš Service Oriented Architecture āļ‚āļ™āļĄāļēāđƒāļŦāļĄ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

4. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§āļāļ”

Next 6. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ ExternalWSBPEL āđāļĨāļ§āļāļ” Finish

Page 104: Java Web Services and SOA Exercises [in Thai]

104

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļžāļ’āļ™āļē External WSDL

āļ‚āļ™āļ•āļ­āļ™āļ•āļ­āđ„āļ›āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđ€āļĢāļĒāļāđƒāļŠ External Web Service āļŠāļēāļŦāļĢāļšāļāļēāļĢāļ„āļēāļ™āļ§āļ“āļ­āļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĒāļ™ āđ‚āļ”āļĒāļ‚āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āļ•āļ­āļ‡āļĢāļ°āļš WSDL āļ‚āļ­āļ‡ External Web Service āļ”āļ‡āļāļĨāļēāļ§ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ExternalWSBPEL āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > Other..

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ XML āđāļĨāļ° Projects āđ€āļ›āļ™ External WSDL Document(s) āđāļĨāļ§āļāļ” Next

3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āđ€āļĨāļ­āļ Form URL: āđāļĨāļ§āļāļēāļŦāļ™āļ”āļ„āļēāđ€āļ›āļ™ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āđāļĨāļ§āļāļ” Finish

4. āđ‚āļ›āļĢāđ€āļˆāļ„ ExternalWSBPEL āļˆāļ°āđāļŠāļ”āļ‡āđ‚āļŦāļ™āļ” www.webservicex.com āļ—āļĄ CurrencyConvertor.asmx.wsdl āļ‚āļ™āļĄāļē

5. External WSDL āļ—āđ€āļĢāļĒāļāļĄāļēāļˆāļ°āļĄāđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ”āļ‡āļĢāļ›āļ— 10 āđāļ•āđ€āļ™āļ­āļ‡āļˆāļēāļ WSDL āļ™āļˆāļ°āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° compile āđƒāļ™ NetBeans 7.1 āđ„āļ” āđ€āļ™āļ­āļ‡āļˆāļēāļāļĄ Port Types, Bindings āđāļĨāļ° Services āļ—āđ€āļ›āļ™ HttpGet āđāļĨāļ° HttpPost āļ­āļĒ āđƒāļŦāļ—āļģāļāļēāļĢāļĨāļšāļŠāļ§āļ™āđ€āļŦāļĨāļēāļ™āļ™āļ­āļ­āļ āđ‚āļ”āļĒāļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ”āļ—āđ€āļāļĒāļ§āļ‚āļ­āļ‡āđāļĨāļ§āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ Delete āļˆāļ™āđ€āļŦāļĨāļ­āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡ WSDL āļ”āļ‡āļĢāļ›āļ— 11

āļĢāļ›āļ— 10 WSDL āļ—āļ—āļēāļāļēāļĢāđ€āļĢāļĒāļāļĄāļē

Page 105: Java Web Services and SOA Exercises [in Thai]

105

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 11 WSDL āļ—āļ–āļāļ•āļ­āļ‡

āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ Client WSDL āđƒāļŦāļĄ

āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚āļ™ āļĄāļēāđƒāļŦāļĄāđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§āļšāđ€āļ‹āļ­āļĢāļ§āļŠāđ„āļ” āđ‚āļ”āļĒāđƒāļ™āļāļĢāļ“āļˆāļ°āļāļēāļŦāļ™āļ”āđƒāļŦāļĄ input parameter āļŠāļ­āļ‡āļ•āļ§āļ„āļ­ fromCurrency āđāļĨāļ° toCurrency āđ‚āļ”āļĒāļĄ output parameter āļ„āļ­ result āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WSBPEL āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > WSDL Document

2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New WSDL Document āļāļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ ExternalWSProcessWSDL āļāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļāļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC Literal āđāļĨāļ§āļāļ” Next

3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠāļēāļŦāļĢāļšāļŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ fromCurrency āđƒāļŦāđ€āļ›āļ™āļŠāļ™āļ” xsd:String āđāļĨāļ° toCurrency āđƒāļŦāđ€āļ›āļ™āļŠāļ™āļ” xsd:String āđāļĨāļ°āļŠāļēāļŦāļĢāļšāļŠāļ§āļ™āļ‚āļ­āļ‡ Output: āļāļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ result āđƒāļŦāđ€āļ›āļ™āļŠāļ™āļ” xsd:String āļ”āļ‡āļĢāļ›āļ— 12 āļāļ” Next āđāļĨāļ§āļāļ” Finish

Page 106: Java Web Services and SOA Exercises [in Thai]

106

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 12 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„āļē WSDL Document

āļāļēāļĢāļžāļ’āļ™āļē Business Process āđƒāļŦāļĄāđ€āļžāļ­āđ€āļĢāļĒāļ External Web Service

āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāļēāļŦāļĢāļšāļ™āļĒāļēāļĄ Business Process āđƒāļŦāļĄāļ—āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢāđ€āļĢāļĒāļ External Web Service āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

Page 107: Java Web Services and SOA Exercises [in Thai]

107

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļŠāļĢāļēāļ‡ BPEL Process

1. āļ„āļĨāļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WSBPEL āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„āļēāļŠāļ‡ New > BPEL Process.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New BPEL Process āļāļģāļŦāļ™āļ” Project Name āđ€āļ›āļ™ ExternalWSBPEL āđāļĨāļ§āļāļ” Finish

āļāļēāļĢāđ€āļžāļĄ partner link

āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļ—āļēāļāļēāļĢāļāļēāļŦāļ™āļ” partner link āļŠāļēāļŦāļĢāļš Web Services āļŠāļ­āļ‡āļŠāļ”āļ„āļ­ ExternalWSProcessWSDL āđāļĨāļ° CurrencyConvertor.asmx.wsdl āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ—āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ ExternalWSProcessWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•āļēāļ‡ design āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ”āļ„āļē Name: āđ€āļ›āļ™ ClientPartnerLink āđāļĨāļ§āļāļ” OK

2. āļĨāļēāļ CurrencyConvertor.asmx.wsdlāđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Projects āđ„āļ›āđ„āļ§āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļ‚āļ­āļ‡āļŦāļ™āļēāļ•āļēāļ‡ design āđ‚āļ”āļĒāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ ExternalWSPartnerLink

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Receive

1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ•āļĢāļ‡āļšāļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄāļ§āļēāļ‡āđ€āļ›āļĨāļē

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Receive āļ—āļŠāļ­ Receive1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Receive1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ start āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ ClientPartnerLink

4. āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Reply

1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ Process End

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Reply āļ—āļŠāļ­ Reply1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ end āđāļĨāļ°āđ€āļĨāļ­āļ Partner

Link: āđ€āļ›āļ™ ClientPartnerLink 4. āđƒāļ™āļŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ”

Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK

Page 108: Java Web Services and SOA Exercises [in Thai]

108

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Invoke āļŠāļēāļŦāļĢāļš calcualteTax

1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāļēāļŦāļ™āļ”āļ˜āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ˜āļĢāļāļĢāļĢāļĄ Invoke1

3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ invokeWS āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ ExternalWSPartnerLink

4. āđƒāļ™āļŠāļ­āļ‡ Operation: āđ€āļĨāļ­āļ conversionRate 5. āđƒāļ™āļŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ”

Name: āđ€āļ›āļ™ ConversionRateIn āđāļĨāļ§āļāļ” OK 6. āđƒāļ™āļŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļ™ āđƒāļŦāļāļēāļŦāļ™āļ”

Name: āđ€āļ›āļ™ ConversionRateOut āđāļĨāļ§āļāļ” OK

āļāļēāļĢāđ€āļžāļĄāļ˜āļĢāļāļĢāļĢāļĄ Assign

1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜āļĢāļāļĢāļĢāļĄ invokeWS

2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” fromCurrency āđƒāļ™āļŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” FromCurrency āđƒāļ™āļŠāļ§āļ™ ConversionRateIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđāļĨāļ° toCurrency āđƒāļ™āļŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” ToCurrency āđƒāļ™āļŠāļ§āļ™ ConversionRateIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 13

āļĢāļ›āļ— 13 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§āļēāļ‡ start āđāļĨāļ° invokeWS

3. āđƒāļ™āđ„āļŸāļĨ ExtrenalWSBPEL.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§āļēāļ‡ āļ˜āļĢāļāļĢāļĢāļĄ invokeWS āļāļšāļ˜āļĢāļāļĢāļĢāļĄ end

Page 109: Java Web Services and SOA Exercises [in Thai]

109

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļģāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” ConversionRateResult āđƒāļ™āļŠāļ§āļ™ ConversionRateOut āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” result āđƒāļ™āļŠāļ§āļ™ outData āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 14

āļĢāļ›āļ— 14 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§āļēāļ‡ invokeWS āđāļĨāļ° end

5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 15

āļĢāļ›āļ— 15 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļ‡āļĢāļ°āļšāļš

6. āļāļ”āļ›āļĄ Save āđāļĨāļ° Clean and Build

Page 110: Java Web Services and SOA Exercises [in Thai]

110

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ Composite Application

āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ ExternalWSBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

1. āđ€āļĨāļ­āļāđ€āļĄāļ™ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite

Application āđāļĨāļ§āļāļ” Next 3. āļāļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ ExternalWSCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” ExternalWSCompositeApp āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆāļ„ ExternalWSBPEL āđāļĨāļ§āļāļ”āļ›āļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļžāļĄāđ‚āļŦāļ™āļ” WSBPEL.jar āļ āļēāļĒāđƒāļ• WSCompositeApp > JBI Module 7. āļ—āļģāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāļ„ WSCompositeApp 8. āļ”āļšāđ€āļšāļĨāļ„āļĨāļāļ— Service Assembly āļˆāļ°āđ€āļŦāļ™ CASA Editor āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 16 āļ‹āļ‡ WSBPEL āļ—āđ€āļ›āļ™

BPEL module āļˆāļ°āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ SOAP request āđāļ•āđ„āļĄāđ€āļŦāļ™TaxPartnerLink āđ€āļĢāļĒāļāđƒāļŠ Web Service āđƒāļ”

āļĢāļ›āļ— 16 āđāļŠāļ”āļ‡ CASA Editor āļ‚āļ­āļ‡ WSBPEL

9. āđ€āļžāļ­āļĢāļ°āļš Web Service āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap12 āļ—āļ­āļĒāđƒāļ™ palette āļĄāļēāđ„āļ§āđƒāļ™āļŠāļ§āļ™ WSDL Ports āļ‚āļ­āļ‡ CASA Editor āđāļĨāļ°āļ—āļģāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļ›āļ— 17

Page 111: Java Web Services and SOA Exercises [in Thai]

111

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

āļĢāļ›āļ— 17 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļˆāļēāļ ExternalWSBPELāđ„āļ›āļĒāļ‡ SOAP12

10. āļĢāļ°āļš endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļāļ‚āļ§āļēāļ— casaPort1 āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļāļēāļŦāļ™āļ”āļ„āļē Location āđ€āļ›āļ™ http://www.webservicex.com/CurrencyConvertor.asmx āđāļĨāļ° Endpoint Name āđ€āļ›āļ™ CurrencyConvertor

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœāļēāļ™ TestCase

1. āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ ExternalWSCompositeApp 2. āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” ExternalWSCompositeApp > Test āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test

Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Test Case āđƒāļŦāļāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ WSBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›āļ™ ExternalWSProcessWSDL.wsdl āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ ExternalWSProcessWSDLOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļ source code āļ”āļ‡āļ™

<fromCurrency>USD</fromCurrency>

<toCurrency>THB</toCurrency>

Page 112: Java Web Services and SOA Exercises [in Thai]

112

Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan

7. āļāļ”āļ›āļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 8. āļˆāļ°āđ€āļŦāļ™āļœāļĨāļĨāļžāļ˜āļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļ‡āļ™

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:ExternalWSProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/ExternalWSProcessWSDL"> <result xmlns:msgns="http://www.webserviceX.NET/" xmlns="">31.49</result> </m:ExternalWSProcessWSDLOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>


Recommended