java web services and soa exercises [in thai]

112
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

Upload: imc-institute

Post on 28-May-2015

10.649 views

Category:

Documents


15 download

DESCRIPTION

Hand on exercises for "Java Web Services and SOA" training on 22-24 April 2013

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>