SlideShare a Scribd company logo
1 of 112
Download to read offline
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>
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]

More Related Content

What's hot

การเขียนโปรแกรมด้วย Net beans
การเขียนโปรแกรมด้วย Net beansการเขียนโปรแกรมด้วย Net beans
การเขียนโปรแกรมด้วย Net beansApisit Song
 
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]Thanachart Numnonda
 
Java Web Services and SOA Using GlassFish openESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeansJava Web Services and SOA Using GlassFish openESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeansSoftware Park Thailand
 
HTML PHP MySQL สำหรับเว็บโปรแกรมเมอร์มือใหม่
HTML PHP MySQL สำหรับเว็บโปรแกรมเมอร์มือใหม่HTML PHP MySQL สำหรับเว็บโปรแกรมเมอร์มือใหม่
HTML PHP MySQL สำหรับเว็บโปรแกรมเมอร์มือใหม่Manop Kongoon
 
การเขียนโปรแกรมโดยใช้ Net bean
การเขียนโปรแกรมโดยใช้ Net beanการเขียนโปรแกรมโดยใช้ Net bean
การเขียนโปรแกรมโดยใช้ Net beanTanyong Kiss'memory
 

What's hot (8)

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

Viewers also liked

Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using  Eclipse and TomcatJava Web Programming (JSP/Servlet) Using  Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using Eclipse and TomcatIMC Institute
 
01 ความรู้เกี่ยวกับการ web programming
01 ความรู้เกี่ยวกับการ web programming01 ความรู้เกี่ยวกับการ web programming
01 ความรู้เกี่ยวกับการ web programmingsupatra178
 
แผนการจัดการเรียนรู้ ส่วนประกอบคอมพิวเตอร์ ม.2
แผนการจัดการเรียนรู้ ส่วนประกอบคอมพิวเตอร์ ม.2แผนการจัดการเรียนรู้ ส่วนประกอบคอมพิวเตอร์ ม.2
แผนการจัดการเรียนรู้ ส่วนประกอบคอมพิวเตอร์ ม.2พงศธร ภักดี
 

Viewers also liked (6)

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

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

Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeansHand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeansIMC Institute
 
คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...
คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...
คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...Arrat Krupeach
 
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeansJava Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeansIMC Institute
 
Joomla-installation
Joomla-installationJoomla-installation
Joomla-installationSo Pias
 
Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5Thanachart Numnonda
 
คู่มือ Joomla
คู่มือ Joomlaคู่มือ Joomla
คู่มือ JoomlaJatupon Panjoi
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App EngineIMC Institute
 
โปรแกรม Net beans
โปรแกรม Net beansโปรแกรม Net beans
โปรแกรม Net beansBoOm mm
 
สร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpressสร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpresskruburapha2012
 

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

Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeansHand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
 
คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...
คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...
คู่มือการใช้งานระบบจัดเก็บข้อมูลบุคลากร ฝ่ายเดินรถ แขวงนครสวรรค์ การรถไฟแห่งป...
 
Joomla 56 km
Joomla 56 kmJoomla 56 km
Joomla 56 km
 
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeansJava Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
 
Joomla-installation
Joomla-installationJoomla-installation
Joomla-installation
 
Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5
 
Websocket & HTML5
Websocket & HTML5Websocket & HTML5
Websocket & HTML5
 
คู่มือ Joomla
คู่มือ Joomlaคู่มือ Joomla
คู่มือ Joomla
 
Joomla
JoomlaJoomla
Joomla
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine
 
650 1
650 1650 1
650 1
 
โปรแกรม Net beans
โปรแกรม Net beansโปรแกรม Net beans
โปรแกรม Net beans
 
Hotspotubuntu8
Hotspotubuntu8Hotspotubuntu8
Hotspotubuntu8
 
สร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpressสร้างเว็บไซต์ด้วยWordpress
สร้างเว็บไซต์ด้วยWordpress
 
Scan tool 3
Scan tool 3Scan tool 3
Scan tool 3
 
Gisบี
GisบีGisบี
Gisบี
 
Web dav android
Web dav androidWeb dav android
Web dav android
 
Web dav android (1)
Web dav android (1)Web dav android (1)
Web dav android (1)
 
Cent os
Cent osCent os
Cent os
 
webprogramming eclipse-jsp
webprogramming eclipse-jspwebprogramming eclipse-jsp
webprogramming eclipse-jsp
 

More from IMC Institute

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

More from IMC Institute (20)

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