SlideShare a Scribd company logo
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>การทํางานเสร็จสมบูรณ&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
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 จะเก็บขอมูลไวที่ไดเร็กทอรี่ datadb ซึ่งเราจะตองไปสรางไดเร็กทอรี่ดังกลาว
ภายใต 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 FilesApache Software FoundationTomcat 6.0lib)
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:SOAoutput โดยกด 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:SOAoutput ซึ่งมีขอมูลดังนี้
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:SOAoutput จะมีขอมูลดังนี้
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>

More Related Content

PDF
็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
PDF
สร้าง Soap web services ง่ายๆ
PDF
Google App Engine Using Eclipse
DOC
ภาษา Jsp
PDF
Hand-on Exercise Java Web Programming
PDF
Java Web programming Using Eclipse
PDF
Java Web programming Using NetBeans
PDF
lesson3 JSP
็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
สร้าง Soap web services ง่ายๆ
Google App Engine Using Eclipse
ภาษา Jsp
Hand-on Exercise Java Web Programming
Java Web programming Using Eclipse
Java Web programming Using NetBeans
lesson3 JSP

What's hot (8)

PPTX
การเขียนโปรแกรมด้วย Net beans
PDF
SOA Using GlassFishESB and NetBeans [in Thai]
PDF
Java Web Services and SOA Using GlassFish openESB and NetBeans
PDF
lesson2 JSP
DOC
J2 ee คืออะไร
PDF
HTML PHP MySQL สำหรับเว็บโปรแกรมเมอร์มือใหม่
PPTX
การเขียนโปรแกรมโดยใช้ Net bean
PDF
Php training
การเขียนโปรแกรมด้วย Net beans
SOA Using GlassFishESB and NetBeans [in Thai]
Java Web Services and SOA Using GlassFish openESB and NetBeans
lesson2 JSP
J2 ee คืออะไร
HTML PHP MySQL สำหรับเว็บโปรแกรมเมอร์มือใหม่
การเขียนโปรแกรมโดยใช้ Net bean
Php training
Ad

Viewers also liked (6)

PDF
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
PDF
PDF
lesson1 JSP
PDF
lesson4 JSP
PDF
01 ความรู้เกี่ยวกับการ web programming
DOC
แผนการจัดการเรียนรู้ ส่วนประกอบคอมพิวเตอร์ ม.2
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
lesson1 JSP
lesson4 JSP
01 ความรู้เกี่ยวกับการ web programming
แผนการจัดการเรียนรู้ ส่วนประกอบคอมพิวเตอร์ ม.2
Ad

Similar to Java Web Services and SOA Exercises [in Thai] (20)

PDF
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
PDF
Java Web Programming Using NetBeans 6.5
PDF
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
PPTX
Introduction to Web Service
PPT
KMUTNB - Internet Programming 7/7
PPTX
Assignmet1:Start by finding web services using SOAP and WSDL on the Internet/...
PDF
Assignmet1 selectedtopic Topic in Computer Engineer
PDF
Javacentrix com chap09-0
PDF
joomla-2-5-install-appserv
PPT
นายศ ภช ย ดอนชาม_วง ว.5606 รห_ส 5640248230
PDF
PDF
Hotspotubuntu8
PDF
Introduction to SOA
PDF
Web service overview
PDF
ดร.พรกมล
PDF
Javacentrix com chap06-0
PDF
EJB Programming Using Eclipse & JBoss
ODP
Greenstone Installation
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Java Web Programming Using NetBeans 6.5
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Introduction to Web Service
KMUTNB - Internet Programming 7/7
Assignmet1:Start by finding web services using SOAP and WSDL on the Internet/...
Assignmet1 selectedtopic Topic in Computer Engineer
Javacentrix com chap09-0
joomla-2-5-install-appserv
นายศ ภช ย ดอนชาม_วง ว.5606 รห_ส 5640248230
Hotspotubuntu8
Introduction to SOA
Web service overview
ดร.พรกมล
Javacentrix com chap06-0
EJB Programming Using Eclipse & JBoss
Greenstone Installation

More from IMC Institute (20)

PDF
นิตยสาร Digital Trends ฉบับที่ 14
PDF
Digital trends Vol 4 No. 13 Sep-Dec 2019
PDF
บทความ The evolution of AI
PDF
IT Trends eMagazine Vol 4. No.12
PDF
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
PDF
IT Trends 2019: Putting Digital Transformation to Work
PDF
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
PDF
IT Trends eMagazine Vol 4. No.11
PDF
แนวทางการทำ Digital transformation
PDF
บทความ The New Silicon Valley
PDF
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
PDF
แนวทางการทำ Digital transformation
PDF
The Power of Big Data for a new economy (Sample)
PDF
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
PDF
IT Trends eMagazine Vol 3. No.9
PDF
Thailand software & software market survey 2016
PPTX
Developing Business Blockchain Applications on Hyperledger
PDF
Digital transformation @thanachart.org
PDF
บทความ Big Data จากบล็อก thanachart.org
PDF
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
นิตยสาร Digital Trends ฉบับที่ 14
Digital trends Vol 4 No. 13 Sep-Dec 2019
บทความ The evolution of AI
IT Trends eMagazine Vol 4. No.12
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
IT Trends 2019: Putting Digital Transformation to Work
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
IT Trends eMagazine Vol 4. No.11
แนวทางการทำ Digital transformation
บทความ The New Silicon Valley
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
แนวทางการทำ Digital transformation
The Power of Big Data for a new economy (Sample)
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
IT Trends eMagazine Vol 3. No.9
Thailand software & software market survey 2016
Developing Business Blockchain Applications on Hyperledger
Digital transformation @thanachart.org
บทความ Big Data จากบล็อก thanachart.org
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation

Java Web Services and SOA Exercises [in Thai]

  • 1. 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. 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. 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. 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. 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. 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
  • 7. 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. 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. 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. 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. 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. 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. 13 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan รูปที่ 2 แสดงหนาตางสําหรับใหทดสอบเรียก Web Service 3. โปรแกรมจะเรียกใช Web Services และจะแสดงผลลัพธที่ได พรอมทั้งแสดงคา SOAP Request และ SOAP Response ดังแสดงตัวอยางในรูปที่ 3
  • 14. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 63 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan รูปที่ 2 ผลลัพธในการแสดงตําแหนงของโรงพยาบาลจากใน Google Map
  • 64. 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. 65 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan รูปที่ 1 ไฟลไบนารี่ตางๆ ของ MongoDB ซึ่งไฟลที่สําคัญก็คือ • mongod.exe ที่เปน Database Server • mongo.exe ที่เปนหนาจอของ admin โดย Default MongoDB จะเก็บขอมูลไวที่ไดเร็กทอรี่ datadb ซึ่งเราจะตองไปสรางไดเร็กทอรี่ดังกลาว ภายใต Drive C 2. การทดลองใช MongoDB เราสามารถที่จะทดลองการใชงาน MongoDB โดยการเปดโปรแกรม Mongo.exe ซึ่งก็จะเปนโปรแกรม command shell ของ administrator และโดย Default ก็จะกําหนดใชฐานขอมูลที่ชื่อ test ซึ่งเราสามารถที่จะ แสดงฐานขอมูลที่ใชอยูได โดยการพิมพคําสั่ง > db
  • 66. 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. 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. 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. 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 FilesApache Software FoundationTomcat 6.0lib) 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. 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. 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. 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. 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. 74 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan รูปที่ 2 แสดงผลลัพธที่ไดจากการกําหนดคาใหกับ WSDL Document 4. กด Next > แลวกด Finish จะไดไฟล HelloSample.wsdl ดังรูปที่ 3
  • 75. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 85 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan รูปที่ 3 แสดงการใสคาสําหรับ New WSDL Document 3. ในหนาถัดไป กําหนดคา Path: ไปที่ C:SOAoutput โดยกด Browse เพื่อเลือก Path: (จะตองทําการสราง folder นี้ขึ้นมากอน) และเลือก File Exists: เปน Append to Existing File ดังแสดงในรูปที่ 4 จากนั้นกด Finish
  • 86. 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. 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. 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. 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. 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. 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:SOAoutput ซึ่งมีขอมูลดังนี้ Somjai Jaidee => 38000
  • 92. 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. 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. 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:SOAoutput จะมีขอมูลดังนี้ Somjai Jaidee => 38000 Nipa Jingjai => 738000
  • 95. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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>