Post on 28-May-2015
description
transcript
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
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
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
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>
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 กลบมาดงตวอยาง
:
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>การทางานเสรจสมบรณ <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
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
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
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
10
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
14. คลกขวาท PTTServlet.java แลวเลอก Run File แลวกด OK จะไดผลลพธเปนราคานามนลาสด ดงแสดงในรปท 6
รปท 6 แสดงผลลพธทไดจากการเรยกใช Web Service Operation: CurrentOilPrice ของปตท.
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 เปน
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
13
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
รปท 2 แสดงหนาตางสาหรบใหทดสอบเรยก Web Service
3. โปรแกรมจะเรยกใช Web Services และจะแสดงผลลพธทได พรอมทงแสดงคา SOAP Request และ SOAP Response ดงแสดงตวอยางในรปท 3
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
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
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
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
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]
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
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
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 กอนการรน
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
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
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
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) ;
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
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
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
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
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
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
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
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
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
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
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 เพอสามารถใหเขยนโปรแกรมไดงายขน
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>");
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 ดงน
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
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);
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
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
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
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
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
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
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;
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
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);
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
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
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 เพอแสดงผลลพธอกท
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
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
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 แสดงผลลพธของหนงสอทงหมดทมอย
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
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;
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
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();
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 โปรแกรมเวบเพอใหผใชเลอกโรงพยาบาล
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(); }
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
63
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
รปท 2 ผลลพธในการแสดงตาแหนงของโรงพยาบาลจากใน Google Map
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
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
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 }
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
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>
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() {
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>");
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() จะเหนขอมลใหมทปอนเขามา
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 เพอไปหนาถดไป
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
74
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
รปท 2 แสดงผลลพธทไดจากการกาหนดคาใหกบ WSDL Document
4. กด Next > แลวกด Finish จะไดไฟล HelloSample.wsdl ดงรปท 3
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
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
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
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
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
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
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>
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
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
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
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
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
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
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
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
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
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
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 ไมควรทจะพมพเอง)
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);
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
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; } }
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 โดยมขนตอนดงน
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
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
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
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
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
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>
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
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 ททาการเรยกมา
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
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 โดยมขนตอนการพฒนาดงน
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
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
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
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
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>
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>