soa using glassfishesb and netbeans [in thai]

134
1 Hand-on Exercises Java Web Services and Service Oritened Architecture Using GlassFish ESB and NetBeans 6.5 Dr.Thanachart Numnonda and Asst Prof.Thanisa Kruawaisayawan Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Upload: thanachart-numnonda

Post on 15-Jan-2015

2.218 views

Category:

Documents


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: SOA Using GlassFishESB and NetBeans [in Thai]

1

Hand-onExercises

Java Web Servicesand

Service Oritened ArchitectureUsing GlassFish ESB and NetBeans 6.5

Dr.Thanachart Numnondaand

Asst Prof.Thanisa Kruawaisayawan

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 2: SOA Using GlassFishESB and NetBeans [in Thai]

2

Exercises

Exercise 1: Calling External Web ServicesExercise 2: Java Web ServiceExercise 3: RESTful Web Services Exercise 4: Twitter Web Services and Google Calendar API Exercise 5: Google Map Web ServicesExercise 6: Developing a Simple Synchronous BPEL programExercise 7: BPEL for writing to fileExercise 8: BPEL for Writing to DatabaseExercise 9: BPEL for Sending Message to a JMS

QueueExercise 10: BPEL Invoking Web ServicesExercise 11: BPEL : Structured Activities

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 3: SOA Using GlassFishESB and NetBeans [in Thai]

3

Exercise 1: Calling External Web Services

แบบฝ�กห�ดในบทน� เป�นการพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Web Services ท��ม�อย()แล�ว ซ-�งจะเล�อกมา 3 บร2การด�งน�

การทดลองท�� 1 ราคาน 4าม�นล)าส6ดของ ปตท.การทดลองท�� 2 อ�ตราแลกเปล��ยนเง2นตราระหว)างประเทศการทดลองท�� 3 ราคาห6�น

โดยจะใช� NetBeans และ GlassFish V2 Server

การพ#ฒนา Web Service Client

แบบฝ�กห�ดน� จะสร�าง Web Application Project ข- นใหม) เพ��อใช�ในการเร�ยก Web Services โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Java Web และ Web Application แล�วกด

Next3. ก4าหนด Project Name เป�น ExternalWSDemo แล�วเล�อก Project Location เป�น folder ท��เรา

ต�องการจะเกMบไฟลWไว� 4. จากน� นเล�อก Server เป�น GlassFish V2 ก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด

Finish

การทดลองท�� 1

1. คล2[กขวาท��โหนด ExternalWSDemo จากน� นเล�อกค4าส��ง New > Other… ให�เล�อก Categories เป�น Web Services และ Web Service Client แล�วกด Next

2. ในไดอะลMอก New Web Service Client ให�เล�อก WSDL URL: แล�วใส) URL เป�น http://www.pttplc.com/pttinfo.asmx?wsdl ด�งแสดงในร(ปท�� 1 แล�วกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 4: SOA Using GlassFishESB and NetBeans [in Thai]

4

ร5ปท�� 1 แสดงไดอะลMอก New Web Service Client

3. ในหน�าต)าง Projects จะม� Folder ท��ช��อ Web Service References ข- นมา 4. คล2[กขวาท�� ExternalWSDemo แล�วเล�อก Servlet จากน� นให�ก4าหนดช��อเป�น PTTServlet และ

Package: เป�น servlets แล�วกด Finish5. คล2[กขวาภายในเมธอด processRequest ในไฟลW PTTServlet.java แล�วเล�อก Web Service Client

Resources > Call Web Service Operation ด�งแสดงในร(ปท�� 2

ร5ปท�� 2 แสดงการเร�ยกใช� operation ของ Web Service

6. เล�อก CurrentOilPrice ด�งแสดงในร(ปท�� 3 แล�วกด OK

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 5: SOA Using GlassFishESB and NetBeans [in Thai]

5

ร5ปท�� 3 แสดงการเร�ยกใช� Operation: CurrentOilPrice ของปตท.

7. ภายในไฟลW PTTServlet.java ให�ใส) language เป�น TH แล�ว Run ไฟลW จะแสดงราคาน 4าม�นล)าส6ด ด�งแสดงในร(ปท�� 4

ร5ปท�� 4 แสดงผลล�พธWท��ได�จากการเร�ยกใช� Web Service Operation: CurrentOilPrice ของปตท.

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 6: SOA Using GlassFishESB and NetBeans [in Thai]

6

การทดลองท�� 2

1. คล2[กขวาท��โหนด ExternalWSDemo จากน� นเล�อกค4าส��ง New > Web Service Client แล�วกด Next2. ในไดอะลMอก New Web Service Client ให�เล�อก WSDL URL: แล�วใส) URL เป�น

http://www.webservicex.com/CurrencyConvertor.asmx?wsdl 3. คล2[กขวาท�� ExternalWSDemo แล�วเล�อก Servlet จากน� นให�ก4าหนดช��อเป�น CurrencyServlet และ

Package: เป�น servlets แล�วกด Finish4. คล2[กขวาภายในเมธอด processRequest ในไฟลW CurrencyServlet.java แล�วเล�อก Web Service

Client Resources > Call Web Service Operation เล�อก ConversionRate แล�วกด OK5. แก�ไขไฟลW CurrencyServlet.java ด�งน�

6. Run ไฟลW CurrencyServlet.java จะแสดงอ�ตราแลกเปล��ยนเง2นตรา ด�งแสดงในร(ปท�� 5

ร5ปท�� 5 แสดงผลล�พธWท��ได�จากการเร�ยกใช� Web Service Operation: ConversionRate

การทดลองท�� 3

1. คล2[กขวาท��โหนด ExternalWSDemo จากน� นเล�อกค4าส��ง New > Web Service Client แล�วกด Next2. ในไดอะลMอก New Web Service Client ให�เล�อก WSDL URL: แล�วใส) URL เป�น

http://www.webservicex.com/stockquote.asmx?WSDL 3. คล2[กขวาท�� ExternalWSDemo แล�วเล�อก Servlet จากน� นให�ก4าหนดช��อเป�น StockServlet และ

Package: เป�น servlets แล�วกด Finish 4. คล2[กขวาภายในเมธอด processRequest ในไฟลW StockServlet.java แล�วเล�อก Web Service Client

Resources > Call Web Service Operation เล�อก GetQuote แล�วกด OK

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 7: SOA Using GlassFishESB and NetBeans [in Thai]

7

5. แก�ไขไฟลW StockServlet.java โดยใส) symbol เป�น request.getParameter("symbol");

6. Run ไฟลW7. ทดสอบโปรแกรมโดยใส) ?symbol=java ต)อท�าย URL ด�งน�

http://localhost:8080/ExternalWSDemo/StockServlet?symbol=java ได�ผลล�พธWด�งแสดงในร(ปท�� 6

ร5ปท�� 6 แสดงผลล�พธWท��ได�จากการเร�ยกใช� Web Service Operation: GetQuote เม��อปsอน symbol เป�น java

8. ทดสอบโปรแกรมโดยใส) ?symbol=goog ต)อท�าย URL ด�งน� http://localhost:8080/ExternalWSDemo/StockServlet?symbol=goog ได�ผลล�พธWด�งแสดงในร(ปท�� 7

ร5ปท�� 7 แสดงผลล�พธWท��ได�จากการเร�ยกใช� Web Service Operation: GetQuote เม��อปsอน symbol เป�น goog

การทดสอบ Web Services โดยใชM SoapUI

โปรแกรม SoupUI เป�นโปรแกรม Open Source ท��สามารถใช�เป�นเคร��องม�อในการทดสอบเวMบเซอรWว2สท��น2ยมใช�ก�นอย)างกว�างขวาง เราสามารถท��จะไปดาวนWโหลดโปรแกรมน� ได�ท�� www.soupui.org และท4าการ

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 8: SOA Using GlassFishESB and NetBeans [in Thai]

8

ทดสอบเวMบเซอรWว2สในการทดลองท� งสามข�างต�น นอกจากน� เราย�งสามารถต2ดต� งโปรแกรม SoapUI ภายใน NetBeans ได�โดยการดาวนWโหลด SoupUI NetBeans Plugin (ไฟลW com-eviware-soapui-netbeans-module-2.5.1.nbm) และท4าการต2ดต� งตามข� นตอนด�งน�

1. ในโปรแกรม NetBeans เล�อกเมน( Tools > Plugins2. ในไดอะลMอก Plugins เล�อกแทป Downloaded แล�วกดป6zม Add Plugins..แล�วเล�อกไฟลW com-eviware-

soapui-netbeans-module-2.5.1.nbm ซ-�งท4าการดาวนWโหลดมาก)อนหน�าน� จะได�ไดอะลMอกด�งร(ป

3. กดป6zม Install แล�วกดป6zม Next จนท4าการต2ดต� งเสรMจแล�วเล�อกให� Restart โปรแกรม NetBeans ข- นมาใหม)

เราสามารถทดสอบการใช�งาน SoupUI ท��ต2ดต� งข- นมาใน NetBeans เพ��อทดสอบเวMบเซอรWว2สด(อ�ตราแลกเปล��ยนตามข� นตอนด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Web Services Testing Project

แล�วกด Next3. ก4าหนด Project Name เป�น CurrencyExcangeWSTestProject แล�วเล�อก Project Location เป�น

folder ท��เราต�องการจะเกMบไฟลWไว�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 9: SOA Using GlassFishESB and NetBeans [in Thai]

9

4. ก4าหนดค)า Initial WSDL (URL/file) เป�น http://www.webservicex.com/CurrencyConvertor.asmx?wsdl แล�วกด Finish

5. โปรแกรมจะสร�างโปรเจMคน� ข- นมา และม� WSDL ของเวMบเซอรWว2สแสดงข- นมา ห�ทดลองเล�อกโหนด CurrencyConvertorSoap จะเหMนรายละเอ�ยดของ WSDL ด�งต�วอย)างในร(ป

6. ขยายโหนด CurrencyConvertorSoap แล�วเล�อกโอเปอรWเรช��น ConversionRate แล�วคล2[กขวาเล�อกค4าส��ง New Request

7. ในไดอะลMอก New Request ก4าหนดค)าเป�น Request1 8. หน�าต)าง 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>

9. กดป6zม 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>34.105</ConversionRateResult> </ConversionRateResponse> </soap:Body></soap:Envelope>

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 10: SOA Using GlassFishESB and NetBeans [in Thai]

1

Exercise 2: Java Web Services

แบบฝ�กห�ดในบทน� เป�นการพ�ฒนาโปรแกรม Web Services ส4าหร�บ Java EE โดยใช�ช6ดค4าส��ง JAX-WS ซ-�งจะเป�นการพ�ฒนาบน Server ท��ร�นบน Java EE โดยช6ดค4าส��ง JAX-WS จะช)วยท4าให�การสร�างและเร�ยกใช� Web Services ด�วยภาษา Java เป�นไปได�ง)ายข- น

การพ�ฒนา Web Services จะแบ)งเป�นสองส)วนค�อ Web Service Provider (Server) และ Web Service Requester (Client) แบบฝ�กห�ดน� จะเร2�มจากการพ�ฒนา Web Service ซ-�งสามารถท4าได� 2 ว2ธ�ค�อ

1. Web Services ท��ร�นบน Web Server โดยใช� Java Servlet2. Web Services ท��ร�นบน Application Server โดยใช� Session Bean

แบบฝ�กห�ดน� จะแสดงข� นตอนการใช� NetBeans สร�าง Web Service ท��ช��อ calculateTax โดยใช� Servlet ซ-�งจะร�นอย()บน GlassFish V2 Server เพ��อแสดง Web Services การส)ง SOAP message และ WSDL ของ Services

การพ#ฒนา calculateTax Web Service

แบบฝ�กห�ดน� จะสร�าง Web Application Project ข- นใหม) เพ��อใช�ในการเกMบ Web Service โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Java Web และ Projects เป�น Web

Application แล�วกด Next3. ก4าหนด Project Name เป�น TaxWSDemo แล�วเล�อก Project Location เป�น folder ท��เราต�องการจะ

เกMบไฟลWไว� 4. จากน� นเล�อก Server เป�น GlassFish V2 ก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด Finish5. คล2[กขวาท��โหนด TaxWSDemo จากน� นเล�อกค4าส��ง New > Other… ให�เล�อก Categories เป�น Web

Services และ Web Service แล�วกด Next6. ในไดอะลMอก New Web Service ก4าหนด Web Service Name: เป�น TaxServices และ Package:

เป�น ws แล�วกด Finish7. โปรแกรมจะประกาศ Web Services ท��ช��อ TaxServices ในโหนด Web Services ของหน�าต)าง

Project และหน�าต)าง Editor จะแสดงไฟลWท��ช��อ TaxServices.java

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 11: SOA Using GlassFishESB and NetBeans [in Thai]

2

8. ในหน�าต)าง Projects ขยายโหนด TaxWSDemo > Web Services แล�วคล2[กขวาท��โหนด TaxServices เล�อกค4าส��ง Add Operation…

9. ในไดอะลMอก Add Operation ก4าหนด Method เป�น calculateTax ชน2ดของ Return Type เป�น double และ เพ2�ม Input parameter หน-�งต�วค�อ income ชน2ด double แล�วกด OK

10. คล2[กท��แทป Source ของ TaxServices.java และปร�บปร6งเมธอด calculateTax ด�งน� import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;

@WebService()public class TaxServices { @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. คล2[กขวาท��โหนด TaxWSDemo จากน� นเล�อกค4าส��ง Clean and Build จากน� นคล2[กขวาท��โหนด TaxWSDemo อ�กคร� ง แล�วเล�อก Deploy

การทดสอบ Web Service

โปรแกรม Web Service จะถ(กต2ดต� งบน GlassFish V2 และสามารถเร�ยกด(ได�การใช� System Admin Console โดยการเป~ด Web Browser และเร�ยก url ท�� http://localhost:4848 โดยก4าหนด user เป�น admin และ password เป�น adminadmin

1. โปรแกรมจะแสดง Applications และ Web Services ด�งแสดงในร(ปท�� 1

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 12: SOA Using GlassFishESB and NetBeans [in Thai]

3

ร5ปท�� 1 แสดงรายละเอ�ยดใน GlassFish V2 (Sun Java Application Server)

2. เราสามารถท��จะทดสอบ Web Service น� ผ)านทาง Admin Console ได�โดยกดป6zม Test หร�อทดสอบจาก Netbeans โดยคล2[กขวาท�� TaxServices ใน Web Services ด�งแสดงในร(ปท�� 2

ร5ปท�� 2 แสดงว2ธ�การทดสอบ Web Service ใน Netbeans

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 13: SOA Using GlassFishESB and NetBeans [in Thai]

4

3. โปรแกรมจะแสดงหน�าจอเพ��อให�เราปsอนข�อม(ลอ2นพ6ต ซ-�งค�อจ4านวนเง2นท��ต�องการค4านวณภาษ� ในท��น� จะใส)ต�วเลขเป�น 730000 ด�งแสดงในร(ปท�� 3

ร5ปท�� 3 แสดงหน�าต)างส4าหร�บให�ทดสอบเร�ยก Web Service

4. แล�วกดป6zม calculateTax โปรแกรมจะเร�ยกใช� Web Services และจะแสดงผลล�พธWท��ได� พร�อมท� งแสดงค)า SOAP Request ด�งแสดงในร(ปท�� 4

ร5ปท�� 4 แสดงผลล�พธWท��ได�จากการเร�ยกใช� Web Service และแสดง SOAP Request

5. เราสามารถท��จะแสดงค4าส��ง WSDL ของ Web Service น� โดยการเล�อก WSDL File โปรแกรมจะท4าการเร�ยก url ช��อ http://localhost:8080/TaxWSDemo/TaxServicesService?WSDL และจะได�ผลล�พธWด�งแสดงในร(ปท�� 5

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 14: SOA Using GlassFishESB and NetBeans [in Thai]

5

ร5ปท�� 5 แสดงรายละเอ�ยดของ WSDL

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 15: SOA Using GlassFishESB and NetBeans [in Thai]

6

Exercise 3: RESTful Web Services

เน��อหาทต�องศ�กษาก�อน Enterprise Java Bean

แบบฝ�กห�ดในบทน �เป�นการพ�ฒนาโปรแกรม RESTful Web Services โดยใช�ช�ดค�าส� ง JAX-RS เพ" อสร�าง Web Services ท จะเร ยกด&ข�อม&ลจากฐานข�อม&ล MySQL ผ+านช�ดค�าส� ง Java Persistence API (JPA)

ข��นตอนในการพ�ฒนาโปรแกรม1. การต-ดต��งโมด&ล RESTful Web Services

2. สร�าง Web Application Project

3. พ�ฒนา Entity Class

4. พ�ฒนา RESTful Web Service จาก Entity Class

5. ทดสอบ RESTful Web Service

6. พ�ฒนา RESTful Web Service Client Stubs

การต�ดต��งโมด�ล RESTful Web Services

ข��นตอนน �จ�าเป�นเฉพาะโปรแกรม NetBeans เวอร0ช� น 6.0 ซ2 งไม+ได�ต-ดต��งโมด&ลน �มา แต+ส�าหร�บผ&�ใช�โปรแกรม NetBeans 6.1 ข2�นไปสามารถข�ามข��นตอนน �ไปได� ส�าหร�บข��นตอนการต-ดต��งโมด&ลน �ม ด�งน �

1. เล"อกเมน& Tools => Plugin

2. ในไดอะล5อก Plugins เล"อกแทป Available Plugins แล�วเล"อกช+อง RESTful Web Services

3. กดป�6ม Install แล�วท�าการต-ดต��งโดยการกดป�6ม OK และยอมร�บเง" อนไขของล-ขส-ทธ-8โปรแกรม

การสร�าง Web Application Project

เราจะก�าหนดให�โปรแกรมน �เป�นโปรแกม Web Application ข��นตอนแรกจะเป�นการสร�าง Project ใหม+ข2�นมาใน NetBeans ซ2 งม ข��นตอนด�งน �

1. เล"อกเมน& File => New Project..

2. ในไดอะล5อก New Project ให�เล"อก Categories เป�น Java Web และเล"อก Project เป�น Web

Application แล�วกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 16: SOA Using GlassFishESB and NetBeans [in Thai]

7

3. ก�าหนด Project Name เป�น RestfulWS แล�วเล"อก Project Location เป�น Director ท เราต�องการจะเก5บไฟล0ไว� กด Next

4. จากน��นเล"อก Server เป�น GlassFishV2 แล�วกด Finish

การพ�ฒนา Entity Class

ข��นตอนน �จะเป�นการสร�าง Entity Class เพ" อต-ดต+อก�บ table ท ช" อ books ใน MySQL โดยม ข��นตอนการพ�ฒนาเช+นเด ยวก�บแบบฝ�กห�ดการพ�ฒนา Enterprise Java Bean ซ2 งเราจะได� Entity Class ท ช" อ Books และ Persistence Unit

ท�าการแก�ไขเพ" อเพ- ม property ของ ไฟล0 persistence.xml ด�งน �

<?xml version="1.0" encoding="UTF-8"?><persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="RestfulWSPU" transaction-type="JTA"> <jta-data-source>jdbc/test</jta-data-source> <properties> <property name="toplink.jdbc.user" value="root" /> <property name="toplink.jdbc.password" value="MySQL_password" /> </properties> </persistence-unit></persistence>

การพ�ฒนา Restful Web Service จาก Entity Class

ข��นตอนน �จะเป�นการพ�ฒนา Restful Web Services เพ" อให�สามารถต-ดต+อก�บฐานข�อม&ลโดยผ+าน Entity

Class ท พ�ฒนาข2�นได� โดยจะม ข��นตอนการพ�ฒนาด�งน �

1. เล�อกหน�าต�าง Projects แล�วคล��กขวาท��โหนด RestfulWS จากน��นเล�อกค�าส��ง New > Other...

2. ในไดอะล!อก New File ให�เล�อก Categories ท��ช��อ Web Services เล�อก File Types: เป$น RESTful

Web Services from Entity Class แล�วกด Next

3. ในไดอะล!อก New RESTful Web Services from Entity Class ให�เล�อก Books ด�งร&ป แล�วกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 17: SOA Using GlassFishESB and NetBeans [in Thai]

8

4. โปรแกรม NetBeans จะสร�าง class ต�างๆ ด�งร&ป

5. กดป)*ม Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 18: SOA Using GlassFishESB and NetBeans [in Thai]

9

การทดสอบ RESTful Web Service จาก Entity Class

ข��นตอนน �จะเป�นการทดสอบ RESTful Web Services ท พ�ฒนาข2�นโดยจะม ข��นตอนด�งน �

1. เล"อกหน�าต+าง Projects แล�วคล-:กขวาท โหนด RestfulWS จากน��นเล"อกค�าส� ง Test Restful Web Services

2. โปรแกรม Browser จะแสดง uri ของ RESTful Web Services ให�เล"อกโหนด books และคล-:ก isbn

จะได�ผลล�พธ0ด�งร&ป

3. ทดลองป;อนข�อม&ล isbn เป�น 123 แล�วกดป�6ม Test จะได�ผลล�พธ0ต�วอย+างด�งร&ป

4. ทดลองเปล ยน method เป�น DELETE และ PUT เพ" อท�าการลบและเพ- มข�อม&ลเข�าไปในตาราง books

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 19: SOA Using GlassFishESB and NetBeans [in Thai]

1

Exercise 4:Twitter Web Services and Google Calendar API

แบบฝ�กห�ดในบทน� เป�นต�วอย)างการใช� Web Services ท��ม�อย()ใน Social Networks โดยจะใช� Web Services ของ Twitter เพ��อเข�ยนโปรแกรม update status ของ Twitter ส)วนต�ว จาก Web Application ท��พ�ฒนาข- น จากน� นจะเข�ยนโปรแกรมต2ดต)อก�บ Google Calendar โดยใช� Java API ของ Google เพ��อเร�ยกด( ก4าหนดน�ดหมายองผ(�ใช�ในว�นป�จจ6บ�น จากน� นจะสามารถเล�อกน�ดหมายท��แสดงข- นเพ��อส)งผ)านไปย�ง Twitter โดยการเร�ยกใช� Web Services

การสรMาง User Account สSาหร#บ Twitter และ Google Calendar

แบบฝ�กห�ดน� จะเร�ยกใช�เวMบไซตWSocial Network สองแห)งค�อ Twitter และ Google Calendar

• เวMบ Twitter เป�นบร2การส4าหร�บให�เราสามารถท��จะเช��อมต)อก�บ เพ��อน สมาช2กในครอบคร�ว และเพ��อนร)วมงานได�อย()ตลอดเวลา โดยการตอบค4าถามส� นๆอย)างบ)อยคร� งว)า What are you doing? เราสามารถท��จะลงทะเบ�ยนเวMบน� ได�ท�� twitter.com และเม��อท4าการลMอกอ2นเข�าไปแล�วจะได�ต�วอย)างเวMบด�งร(ป

• เวMบ Google Calendar เป�นเวMบท��ให�ผ(�ใช�จ�ดการก4าหนดการน�ดหมายต)างๆได�โดยสามารถสร�าง แสดง แก�ไข และลบได�ผ)านโปรแกรมเวMบบราวเซอรW โดยข�อม(ลการน�ดหมายจะถ(กเกMบไว�ท�� Google ท4าให�ผ(�ใช�สามารถเร�ยกผ)านเวMบจากเคร��องใดๆกMได� เราสามารถท��จะลงทะเบ�ยนเวMบน� ได�ท��

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 20: SOA Using GlassFishESB and NetBeans [in Thai]

2

www.google.com/calendar และเม��อท4าการลMอกอ2นเข�าไปแล�วจะได�ต�วอย)างเวMบด�งร(ป

• กรณ�ท��ผ(�ใช�ม� account อย()ใน Facebook เราสามารถท��จะให� status update ของ Twitter ถ(กส)งผ)านมาย�งเวMบไซตW Facebook ของเราได�โดยอ�ตโนม�ต2โดยการเล�อก Facebook Application ช�อ http://apps.facebook.com/twitter/ ด�งต�วอย)างในร(ป

การสร�าง JSF Web Application ส�าหร�บ Twitter

ข��นตอนน �จะเป�นกาสร�าง Web Application โดยใช� JSF Visual Web Framework เพ" อท�าการส+ง

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 21: SOA Using GlassFishESB and NetBeans [in Thai]

3

ข�อความตอบค�าถาม What are you doing? จากโปรแกรมท พ�ฒนาข2�นไปย�ง Twitter โดยเร ยกใช� Web

Services ซ2 งม ข��นตอนด�งน �

1. เล"อกเมน& File > New Project..

2. ในไดอะล5อก New Project ให�เล"อก Categories เป�น Java Web และเล"อก Projects เป�น Web

Application แล�วกด Next

3. ก�าหนด Project Name เป�น TwitterJSF แล�วเล"อก Project Location เป�น Director ท เราต�องการจะเก5บไฟล0ไว� จากน��นเล"อก Server เป�น GlassFish V2 จากน��นกด Next

4. ในช+อง Frameworks ให�เล"อก Visual Web JavaServer Faces จากน��นกด Finish

โปรแกรมท จะพ�ฒนาข2�นยต�องการจะให�ม หน�าจอส+วนต-ดต+อผ&�ใช�ด�งร&ป โดยผ&�ใช�สามารถป;อนข�อความใน TextField และเม" อกดป�6ม Twitter Notification โปรแกรมจะส+งข�อความไปย�ง Twitter โดยม ข��นตอนการพ�ฒนาโปรแกรมด�งน �

1. ในโปรเจ5ค TwitterJSF ให�เล"อกไฟล0 Page1.jsp หน�าต+าง Editor จะแสดงไฟล0น �ในโหมด Design

2. ในหน�าต+าง Properties ให�ก�าหนดค+าของ Title เป�น Twitter Notification

3. ในหน�าต�าง Palette ลากไอคอน Label ท��อย&�ภายในโหนด Basic มาไว�ในหน�าต�างการออกแบบของ Page1.jsp แล�วแก�ไขข�อความเป$น What are you doing? แล�วกด Enter ในหน�าต�าง Properties

ส�าหร�บ Label1 ให�เปล��ยน Style เพ��อเล�อก Font เป$น Time News Roman ขนาด 18

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 22: SOA Using GlassFishESB and NetBeans [in Thai]

4

4. ลากไอคอน TextField ท��อย&�ภายในโหนด Basic มาไว�ในหน�าต�างการออกแบบของ Page1.jsp ในต�าแหน�งด�งร&ปท��แสดงข�างต�น

5. ในหน�าต�าง Properties ส�าหร�บ TextField1 ให�เปล��ยนค�า columns เป$น 60 และค�า id จาก textField1

เป$น answerTf

6. ให�ท�าการคล��กขวาท�� answerTf แล�วเล�อก Add Binding Attribute

7. ลากไอคอน Button ท��อย&�ภายในโหนด Basic มาไว�ในหน�าต�างการออกแบบของ Page1.jsp ในต�าแหน�งด�งร&ปท��แสดงข�างต�น แล�วแก�ไขข�อความเป$น Twitter Notification

8. ในหน�าต�าง Properties ส�าหร�บ Button ให�เปล��ยนค�า id จาก button1 เป$น sendButton

ข��นตอนถ�ดมาจะเป�นการเข ยน Source code เพ" อก�าหนดการท�างานของการกดป�6ม Twitter Notification โดยม ข��นตอนการท�างานด�งน �

9. ในหน�าต+าง editor ให�กล�บมาเล"อกแทป Design แล�วกดด�บเบ-�ลคล-:กท ป�6ม Twitter Notification

10. เล"อกแทป Services แล�วขยายโหนด Web Services > Twitter > What are you doing service > statuses > [update.{format}]

11. ลากเซอร0ว-ส updateStatus มาไว�ในหน�าต+าง editor ซ2 งแสดง source code ในค�าส� ง action ของป�6ม และให�แก�ไข source code ด�งน �

public String sendButton_action() {

try { String status = (String) answerTf.getValue(); String inReplyToStatusId = null; String format = "xml";

RestResponse result = TwitterWhatAreYouDoingService.updateStatus(status, inReplyToStatusId, format); if (result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.StatusType.class) instanceof twitter.whatareyoudoingservice.twitterresponse.StatusType) { twitter.whatareyoudoingservice.twitterresponse.StatusType resultObj = result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.StatusType.class); } else if (result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.NilClasses.class) instanceof twitter.whatareyoudoingservice.twitterresponse.NilClasses) { twitter.whatareyoudoingservice.twitterresponse.NilClasses resultObj = result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.NilClasses.class); } //TODO - Uncomment the print Statement below to print result. //System.out.println("The SaasService returned: "+result.getDataAsString()); } catch (Exception ex) { ex.printStackTrace(); } return null; }

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 23: SOA Using GlassFishESB and NetBeans [in Thai]

5

เราจะต�องท4าการระบ6 username และ password ของ Twitter โดยการก4าหนดค)า properties ท��อย()ในไฟลW twitterwhatareyoudoingserviceauthenticator.properties ท��อย()ในโหนด TwitterJSF > Source Packages > org.netbeans.saas.twitter ด�งต�วอย)าง

# To change this template, choose Tools | Templates# and open the template in the [email protected] password=xxxxxxxx

เราสามารถทดสอบร�นโปรแกรมน� แล�วทดลองปsอนข�อความด�งร(ป จากน� นเราสามารถท��จะเร�ยกด(ผลข�อการส)งข�อความไปย�ง Twitter ได�จากเวMบ Twitter หร�อกรณ�ท��เราเช��อมโยง Twitter ไปย�ง Facebook เราจะสามารถเหMนการอ�ปเดตเวMบ

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 24: SOA Using GlassFishESB and NetBeans [in Thai]

6

การสร�าง Web Application ส�าหร�บส�งน�ดหมายใน Google Calendar ไปย�ง Twitter

ข��นตอนน �จะเป�นกาสร�าง Web Application โดยใช�เพ" อท�าการแสดงน�ดหมายจาก Google Calendar

แล�วเล"อกน�ดหมายเพ" อส+งไปย�ง Twitter โปรแกรมจะถ&กก�าหนดให�อย&+ภายใน Web Project ท ช" อ TwitterTester

ท ม ไฟล0ต+างๆค"อ

1. CalendarTwitter.html

เป�นการแสดง Web Page เพ" อให�ผ&�ใช�ป;อนข�อม&ล account ของท��ง Google Calendar และ Twitter ด�งร&ป โดยม source code ด�งน �

<html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="CalendarServlet" method="POST">

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 25: SOA Using GlassFishESB and NetBeans [in Thai]

7

<H2> Google Calendar Account</H2> <p> Username : <input type="text" name="googleUser" value="" /> <br> Password : <input type="password" name="googlePwd" value="" />

<H2> Twitter Account </H2>

<p> Username : <input type="text" name="twitterUser" value="" /> <br> Password : <input type="password" name="twitterPwd" value="" />

<p><input type="submit" value="Show Today Events" /> </form> </body></html>

2. CalendarServlet.java

โปรแกรม Servlet เพ" อแสดงน�ดหมายของผ&�ใช�ใน Google Account ท ระบ�เพ" อมาแสดงด�งต�วอย+างในร&ป

โปรแกรม Servlet น �จะเร ยกใช� Google API ซ2 งผ&�ใช�จะต�องท�าการดาวน0โหลดไฟล0 java/lib/gdata-calendar-1.0.jar และ java/lib/gdataclient-1.0.jar มาจาก http://code.google.com/p/gdata-java-client/downloads/list และต�อง

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 26: SOA Using GlassFishESB and NetBeans [in Thai]

8

ดาวน0โหลดไฟล0 google-collect-1.0-rc1.zip มาจาก http://code.google.com/p/google-collections/downloads/list

จากน��นจะต�องท�าการต-ดต��ง Library น �ใน NetBeans โดยม ข��นตอนด�งน �

1. เล"อกเมน& Tool > Library..

2. ในไดอะล5อก Library Manager ให�เล"อก New Library.. แล�วก�าหนด Library Name เป�น G ฏ ata

3. ก�าหนด Classpath ของ GData เป�น ไฟล0ต+างๆด�งน �• gdata-base-1.0.jar• gdata-calendar-2.0.jar• gdata-calendar-meta-2.0.jar• gdata-client-1.0.jar• gdata-client-meta-1.0.jar• gdata-core-1.0.jar

4. ก�าหนด Sources เป�น [$gdata-director$]\gdata\java\src

5. ก�าหนด Javadoc เป�น [$gdata-director$]\gdata\java\doc

6. จากน��นสร�าง Libray ท ช" อ GoogleCollection โดยให�ก�าหนด Classpath เป�น• google-collect-1.0-rc1.jar• google-collect-testfw-1.0-rc1.jar

จากน��นจะต�องท�าการเพ- ม Library ท��งสองใน Web Project ท พ�ฒนาข2�น

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 27: SOA Using GlassFishESB and NetBeans [in Thai]

9

โปรแกรม CalendarServlet จะม เมธอดในการ Authentication ของ Twitter เพ" อก�าหนด username

และ password โดยม source code ด�งน �

private static String CLASS_NAME = TwitterWhatAreYouDoingServiceAuthenticator.class.getSimpleName(); private static String ATTR_PREFIX = CLASS_NAME.toLowerCase(); private static final String PROP_FILE = ATTR_PREFIX + ".properties";

public void setAuthenticationForTwitter(String username, String password) { try { Properties props = new Properties(); props.load(TwitterWhatAreYouDoingServiceAuthenticator.class.getResourceAsStream(PROP_FILE)); props.setProperty("username", username); props.setProperty("password", password); } catch (IOException ex) { Logger.getLogger(TwitterWhatAreYouDoingServiceAuthenticator.class.getName()).log(Level.SEVERE, null, ex); } }

และม เมธอดในการเร ยกน�ดหมายท��งหมดใน Google Calendar โดยจะเร ยกเมธอด Calendar.getInstance() เพ" อเอาว�นเวลาป?จจ�บ�นมา จากน��นจะต�องแปลงว�นเวลาให�อย&+ในร&ปแบบด�งน � dd-mm-yyyyThh:mm:ss เพ" อส+งเป�นพาราม-เตอร0ของ Google Calendar ในการหาการน�ดหมายในช+วงว�นเวลาระหว+างต�วแปร startTime ถ2งต�วแปร endTime

public CalendarEventFeed getTodayEvents(String username, String password) { try { CalendarService myService = new CalendarService("exampleCo-exampleApp-1"); myService.setUserCredentials(username, password);

Calendar today = Calendar.getInstance(); int day = today.get(Calendar.DAY_OF_MONTH); String dayStr = "" + day; if (day < 10) { dayStr = "0" + day; } int month = today.get(Calendar.MONTH) + 1; String monthStr = "" + month; if (month < 10) { monthStr = "0" + month; } int year = today.get(Calendar.YEAR);

String todayStr = year + "-" + monthStr + "-" + dayStr; String startTime = todayStr + "T00:00:00"; String endTime = todayStr + "T23:59:59"; URL feedUrl = new URL("http://www.google.com/calendar/feeds/" + username + "/private/full"); CalendarQuery myQuery = new CalendarQuery(feedUrl); myQuery.setMinimumStartTime(DateTime.parseDateTime(startTime)); myQuery.setMaximumStartTime(DateTime.parseDateTime(endTime));

CalendarEventFeed resultFeed = myService.query(myQuery, CalendarEventFeed.class);

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 28: SOA Using GlassFishESB and NetBeans [in Thai]

10

return resultFeed; } catch (Exception ex) { ex.printStackTrace(); return null; } }

ส�าหร�บเมธอด processRequest จะม source code ด�งน �

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

CalendarEventFeed resultFeed = getTodayEvents(googleUser, googlePwd);

String twitterUser = request.getParameter("twitterUser"); String twitterPwd = request.getParameter("twitterPwd");

setAuthenticationForTwitter(twitterUser, twitterPwd);

out.println("<html>"); out.println("<head>"); out.println("<title>Servlet CalendarServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1> Today Events are </h1>"); out.println(" <form action='TwitterUpdate'>"); for (int i = 0; i < resultFeed.getEntries().size(); i++) { CalendarEventEntry entry = resultFeed.getEntries().get(i);

String eventTitle = entry.getTitle().getPlainText(); String eventDescription = entry.getPlainTextContent(); out.println("<input type='checkbox' name='eventName' value='" + eventTitle + " : " + eventDescription + "'/>"); out.println("<b>" + eventTitle + "</b>"); out.println("\t" + eventDescription); for (int j = 0; j < entry.getTimes().size(); j++) { When when = entry.getTimes().get(j); out.println("\t" + when.getStartTime()); out.println("\t" + when.getEndTime() + "<br>");

}

} out.println("<p> <input type='submit' value='Twitter Notification' />"); out.println("<input type='reset' value='Reset' />"); out.println("</form>"); out.println("</body>"); out.println("</html>");

out.close(); }

3. TwitterUpdate.java

โปรแกรม Calendar Servlet จะเร ยกใช� Twitter Update ซ2 งม การเร ยกใช�เว5บเซอร0ว-สท ช" อ

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 29: SOA Using GlassFishESB and NetBeans [in Thai]

11

updateStatus โดยการเข ยน source code สามารถท�าได�โดยการลากเซอร0ว-สด�งกล+าวมาไว�ในหน�าต+าง Editor

แล�วปร�บปร�ง source code ด�งน �

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

out.println("<html>"); out.println("<head>"); out.println("<title>Servlet TwitterUpdate</title>"); out.println("</head>"); out.println("<body>"); String[] events = request.getParameterValues("eventName"); for (int i = 0; i < events.length; i++) { String status = "Today Event: " + events[i] + " [Auto message from my own Java Application]"; String inReplyToStatusId = null; String format = "xml"; try {

RestResponse result = TwitterWhatAreYouDoingService.updateStatus(request, response, status, inReplyToStatusId, format); if (result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.StatusType.class) instanceof twitter.whatareyoudoingservice.twitterresponse.StatusType) { twitter.whatareyoudoingservice.twitterresponse.StatusType resultObj = result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.StatusType.class); } else if (result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.NilClasses.class) instanceof twitter.whatareyoudoingservice.twitterresponse.NilClasses) { twitter.whatareyoudoingservice.twitterresponse.NilClasses resultObj = result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.NilClasses.class); } //TODO - Uncomment the print Statement below to print result. //out.println("The SaasService returned: "+result.getDataAsString()); } catch (Exception ex) { ex.printStackTrace(); }

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

} finally { out.close(); } }

เราสามารถท จะทดลองร�นโปรแกรมน � แล�วตรวจสอบผลล�พธ0จากการอ�ฟเดตใน Twitter ด�งร&ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 30: SOA Using GlassFishESB and NetBeans [in Thai]

12

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 31: SOA Using GlassFishESB and NetBeans [in Thai]

1

Exercise 5: Google Map Web Services

แบบฝ�กห�ดในบทน� เป�นต�วอย)างการใช� Google Map Web Services เพ��อเข�ยน Web Application เพ��อแสดงต4าแหน)งของโรงพยาบาลท��เกMบรายละเอ�ยดท��อย()ในฐานข�อม(ล

การสรMางฐานขMอม5ลโรงพยาบาล

ข� นตอนแรกจะเป�นการสร�าง table และเตร�ยมข�อม(ลเพ��อใช�ในแบบฝ�กห�ด โดยใช�โปรแกรม NetBeans หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ bkk_hospital ในฐานข�อม(ล MySQL ท��ช��อ test โดยก4าหนดให�ม� column ต)างๆ ด�งน�

hospital_id INTEGER Primary Keyname VARCHAR(60)address VARCHAR(100)city VARCHAR(30)zipcode VARCHAR(5)

หร�อร�นไฟลW bkk_hospital.sqlCREATE 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;

ข� นตอนต)อมาให�ใส)ข�อม(ลรายละเอ�ยดท��อย()ของโรงพยาบาลใน table ท��สร�างข- น โดยการร�น Store Procedure ด�งน�

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 32: SOA Using GlassFishESB and NetBeans [in Thai]

2

Road, Phaya Thai', 'Bangkok', '10400')

การสร�าง Enterprise Application Project

แบบฝ�กห�ดน �จะสร�าง Project ท เป�น Enterprise Application โดยม Entity Class ท ช" อ BkkHospital

เพ" อท�า ORM (Obeject Relational Mapping) ก�บ table ท ช" อ bkk_hospital และม โปนแกรม Java Servlet

ในการแสดงรายช" อโรงพยาบาลท อย&+ในฐานข�อม&ลให�ผ&�ใช�เล"อกแล�วเร ยกใช�โปรแกรม Java Servlet อ กโปรแกรมในการแสดงต�าแหน+งของโรงพยาบาลจาก Google Map โดยม ข��นตอนการสร�างโปรเจ5คด�งน �

1. เล"อกเมน& File > New Project..

2. ในไดอะล5อก New Project ให�เล"อก Categories เป�น Java EE และเล"อก Projects เป�น Enterprise

Application แล�วกด Next

3. ก�าหนด Project Name: เป�น BkkHospitalGoogleMap แล�วเล"อก Project Location: เป�น Director

ท เราต�องการจะเก5บไฟล0ไว� จากน��นเล"อก Server เป�น GlassFish V2 แล�วกด Finish

การพ�ฒนาโปรแกรม Entity Class

ข��นตอนน �จะเป�นการสร�าง Entity Class จาก table ท ช" อ bkk_hospital ซ1�งม�การสร�างมาก�อนแล�ว โดยม�ข��นตอนการพ�ฒนาโปรแกรมน �ม ด�งน �

1. เล"อกหน�าต+าง Projects แล�วคล-:กขวาท โหนด BkkHospitalGoogleMap-ejb จากน��นเล"อกค�าส� ง New > Other..

2. ในไดอะล5อก New File ให�เล"อก Categories ท ช" อ Persistence เล"อก File Types: เป�น Entity Classes

from Database แล�วกด Next

3. ในไดอะล5อก New Entity Classes from Database ให�เล"อก Data Sources: เป�น jdbc:mysql//localhost:3306/test และ Selected Tables: เป�น bkk_hospital ดแล�วกด Next

4. ในไดอะล5อกถ�ดไปให�ระบ� Package: เป�น entity แล�วกดป�6ม Create Persistence Unit...

5. ในไดอะล5อก Create Persistence Unit... ก�าหนด Persistence Unit Name: เป�น HospitalGoogleMapPU และค+า Presistence Libray เป�น TopLink แล�วกด Create

6. กด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 33: SOA Using GlassFishESB and NetBeans [in Thai]

3

การพ�ฒนาโปรแกรม BkkHospitalFacade (Session Bean)

โปรแกรม BkkHospitalFacade จะเป�น Session Bean เพ" อสร�าง Business method ในการสร�าง แก�ไข ลบ และเร ยกด&ข�อม&ลของ table ท สอดคล�องก�บ Entity Class โดยจะม ข��นตอนการพ�ฒนาด�งน �

1. เล"อกหน�าต+าง Projects แล�วคล-:กขวาท โหนด BkkHospitalGoogleMap-ejb จากน��นเล"อกค�าส� ง New > Other...

2. ในไดอะล5อก New File ให�เล"อก Categories ท ช" อ Persistence เล"อก File Types: เป�น Session Beans

for Entity Classes แล�วกด Next

3. ในไดอะล5อก New Session Beans for Entity Classes ให�เล"อก Selected Entity Classes: เป�น entity.BkkHospital แล�วกด Next

4. ในไดอะล5อกถ�ดไปให�ระบ� Package: เป�น entity ส+วนค+าอ" นๆ เป�นตามท ต��งไว� แล�วกด Finish

การพ�ฒนาโปรแกรม HospitalSelector.java

โปรแกรม HospitalSelector.java เป�นโปแกรมจาวา Servlet เพ" อแสดงรายช" อโรงพยาบาลท เก5บในฐานข�อม&ลโดยจะแสดงใน Drop-down List และเม" อผ&�ใช�เล"อกโรงพยาบาลโปรแกรมจะส+งต+อไปย�งโปรแกรม Servlet

ท ช" อ DisplayLocation.java เราสามารถท จะพ�ฒนาโปรแกรม HospitalSelector.java ตามข��นตอนในการพ�ฒนา Java Servlet ท อธ-บายไว�ในแบบฝ�กห�ดท ผ+านมา โดยม source code ด�งน �

package controller;

import entity.BkkHospital;import entity.BkkHospitalFacadeLocal;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.ejb.EJB;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

public class HospitalSelector extends HttpServlet { @EJB private BkkHospitalFacadeLocal bkkHospitalFacade; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 34: SOA Using GlassFishESB and NetBeans [in Thai]

4

List<BkkHospital> hospitals = bkkHospitalFacade.findAll(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet HospitalSelector</title>"); out.println("</head>"); out.println("<body>"); 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>"); } out.println("<input type='submit' value='Show Location' />"); out.println("</form>"); out.println("</body>"); out.println("</html>");

} ....}

การพ�ฒนาโปรแกรม DisplayLocation.java

โปรแกรม DisplayLocation.java เป�นโปรแกรม Servlet ท เร ยกใช�เว5บเซอร0ว-สของ Google Map

แสดงแสดงแผนท ของโรงพยาบาลท เล"อกจาก HospitalSelector.java โดยม ข��นตอนการพ�ฒนาโปรแกรมด�งน �ด�งน �

1. เล"อกหน�าต+าง Projects แล�วคล-:กขวาท โหนด HospitalGoogleMap จากน��นเล"อกค�าส� ง New > Other

2. ในไดอะล5อก New File ให�เล"อก Categories ท ช" อ Web เล"อก File Types: เป�น Servlet แล�วกด Next

3. ก�าหนด Class Name: เป�น DisplayLocation และ Package เป�น controller แล�วกด Finish

4. เล"อกหน�าต+าง Services แล�วขยายโหนด Web Services > Google > Map Service

5. ในหน�าต+าง Editor คล-:กขวา sourec code แล�วเล"อกค�าส� ง Insert Code.. > Call Enterprise Bean ...

แล�วเล"อก BkkHospitalFacade

6. ลากเซอร0ว-ส getGoogleMap มาใส+ไว�ในหน�าต+าง Editor ท แสดง source code ของไฟล0 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(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet DisplayLocation</title>"); out.println("</head>"); out.println("<body>"); try {

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 35: SOA Using GlassFishESB and NetBeans [in Thai]

5

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()); } catch (Exception ex) { ex.printStackTrace();

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

out.close(); }

7. โปรแกรมน �จะเร ยกใช�เว5บเซอร0ว-สของ Google Map ซ2 งเราจะต�องท�าการลงทะเบ ยนท url ท ช" อ http://code.google.com/apis/maps/signup.html โดยก�าหนดค+า My web site URL เป�น http://localhost:8080 แล�วกดป�6ม Generate API Key

8. ท�าการก5อบป@Aค+า API Key ท ได�ไปใส+ในไพล0ท ช" อ googlemapservices.properties ท อย&+ภายในโหนด HospitalGoogleMap > Source Packages > org.netbeans.saas.google ด�งต�วอย+างเช+นapi_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg

การทดสอบโปรแกรม

1. ท�าการ Build และ Deploy โปรแกรม BkkHospitalGoogleMap

2. Run โปรแกรม BkkHospitalGoogleMap

3. เล"อก URL ของ Web Browser เป�นจะได�ผลล�พธ0ในการร�นโปรแกรมด�งต�วอย+าง

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 36: SOA Using GlassFishESB and NetBeans [in Thai]

6

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 37: SOA Using GlassFishESB and NetBeans [in Thai]

7

Exercise 6: Developing a simple synchronous BPEL program

แบบฝ�กห�ดน� เป�นการพ�ฒนาโปรแกรม BPEL เพ��อแสดงต�วอย)างการเข�ยน Business Process แบบ Synchronous แบบฝ�กห�ดน� จะอธ2บายการใช� NetBeans เพ��อสร�างไฟลW XML Schema, ไฟลW WSDL และไฟลW BPEL โปรแรม BPEL Process ท��จะพ�ฒนาข- นเป�นธ6รกรรมเพ��อท4าการค�ดลอกข�อความ

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนาโปรเจMค HelloBPEL2. พ�ฒนา XML Schema3. พ�ฒนาไฟลW WSDL4. พ�ฒนา BPEL Process5. พ�ฒนาโปรเจMค Composite Application

การพ#ฒนาโปรเจ̀ค HelloBPEL

แบบฝ�กห�ดน� จะท4าการสร�างโปรเจMคส4าหร�บ Service Oriented Architecture ข- นมาใหม) โดยจะม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File => New Project..2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น BPEL Module แล�วกด

Next3. ก4าหนด Project Name เป�น HelloBPEL แล�วกด Finish

การพ#ฒนา XML Schema

ข� นตอนถ�ดไปเป�นการสร�างไฟลW XML Schema เพ��อก4าหนดร(ปแบบของไฟลW XML ด�ง Listing ท�� 1 ซ-�งโปรแกรม NetBeans จะม� Wizard ในการสร�าง XML Schema อ�ตโนม�ต2 โดยม�ข� นตอนการพ�ฒนาด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 38: SOA Using GlassFishESB and NetBeans [in Thai]

8

1) สร�างไฟลW SampleData.xsd

1. เล�อกหน�าต)าง Projects ขยายโหนด HelloBPEL แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > Other..

2. ในไดอะลMอก New File เล�อก Categories: เป�น XML และ File Types: เป�น XML Schema แล�วกด Next

3. ก4าหนด File Name: เป�น SampleData แล�วกด Finish 4. หน�าต)าง Editor จะแสดงไฟลW SampleData.xsd ด�งร(ป

2) สร�าง Complex Type ส4าหร�บ XML schema

1. ในไฟลW SampleData.xsd เล�อกแทป Design แล�วลากไอคอน Complex Type ในหน�าต)าง Palette มาไว�ภายใต�โหนด Complex Type

2. โปรแกรม NetBeans จะเพ2�ม complex type ใหม)ท��ช��อ newComplexType ให�ก4าหนดช��อใหม)เป�น simpleProcess จะได�ผลล�พธWด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 39: SOA Using GlassFishESB and NetBeans [in Thai]

9

3) การเพ2�ม local element ส4าหร�บ simpleProcess

1. ในไฟลW SampleData.xsd เล�อกแทป Design แล�วลากไอคอน Element ในหน�าต)าง Palette มาไว�ภายใต�โหนด simpleProcess โปรแกรม NetBeans จะเพ2�มโหนดใหม)ช��อ newElement

2. คล2[กขวาท��โหนด newElement แล�วเล�อก Properties3. ในไดอะลMอก newElement ก4าหนดค)า Name: เป�น paramA และเล�อกป6zม ellipse (...) ท��ค)า Definition

แล�วขยายโหนด Built-in Types ใน List แล�วเล�อกโหนด string โดยแล�วกดป6zม Close จะได�ผลล�พธWด�งร(ป

4) การเพ2�ม global element

1. ในไฟลW SampleData.xsd เล�อกแทป Design แล�วลากไอคอน Element ในหน�าต)าง Palette มาไว�ภายใต�โหนด Element โปรแกรม NetBeans จะเพ2�มโหนดใหม)ช��อ newElement ภายใต�โหนด Element

2. คล2[กขวาท��โหนด newElement แล�วเล�อก Properties3. ในไดอะลMอก newElement ก4าหนดค)า Name: เป�น typeA และเล�อกป6zม ellipse (...) ท��ค)า Definition

แล�วขยายโหนด Complex Types ใน List แล�วเล�อกโหนด simpleProcess โดยแล�วกดป6zม Close จะได�ผลล�พธWด�งร(ป

4. กดป6zม Save

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 40: SOA Using GlassFishESB and NetBeans [in Thai]

10

Listing ท 1 ไฟล0 SampleData.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/SampleData" xmlns:tns="http://xml.netbeans.org/schema/SampleData" elementFormDefault="qualified"> <xsd:complexType name="simpleProcess"> <xsd:sequence> <xsd:element name="paramA" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="typeA" type="tns:simpleProcess"/></xsd:schema>

การพ#ฒนาไฟลe WSDL

ข� นตอนถ�ดไปเป�นการสร�างไฟลW WSDL ส4าหร�บน2ยามเวMบเซอรWว2สท��จะใช�ในโปรเจMค โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects ขยายโหนด HelloBPEL แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > WSDL Document...

2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น HelloSample เล�อกช)อง Import XML Schema File(s) แล�วเล�อกไฟลW src/SampleData.xsd โดยการกดป6zม Browse แล�วเล�อกไฟลWด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 41: SOA Using GlassFishESB and NetBeans [in Thai]

11

3. กด Next ในหน�าถ�ดไป ส4าหร�บส)วนของ Input: ก4าหนด Message Part Name เป�น inputType และเล�อกป6zม (...) ในส)วน Element Or Type แล�วเล�อก HelloBPEL > src/SampleData.xsd > Elements > typeA จากรายการ ด�งร(ป

4. ส4าหร�บส)วนของ Output: ก4าหนด Message Part Name เป�น resultType และเล�อกป6zม (...) ในส)วน

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 42: SOA Using GlassFishESB and NetBeans [in Thai]

12

Element Or Type แล�วเล�อก HelloBPEL > src/SampleData.xsd > Elements > typeA จากรายการ และจะได�ไดอะลMอกด�งร(ป

5. กด Next ในหน�าถ�ดไป ส4าหร�บค)า Binding Subtype เล�อกป6zม Document Literal แล�วกด Finish จะได�ไฟลW HelloSample.wsdl ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 43: SOA Using GlassFishESB and NetBeans [in Thai]

13

การพ#ฒนา BPEL Process

ข� นตอนน� เป�นการสร�างไฟลW BPEL ส4าหร�บน2ยาม Business Process ท��จะใช�ในโปรเจMค โดยม�ข� นตอนการพ�ฒนาด�งน�

1) สร�างไฟลW HelloProcess.bpel

1. เล�อกหน�าต)าง Projects ขยายโหนด HelloBPEL แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > BPEL Process..

2. ก4าหนด File Name: เป�น HelloProcess แล�วกด Finish3. โปรแกรม NetBeans จะสร�างไฟลW HelloProcess.bpel และหน�าต)าง Editor จะแสดงไฟลWในโหมด

designer ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 44: SOA Using GlassFishESB and NetBeans [in Thai]

14

.

2) การเพ2�ม partner link

1. ในไฟลW HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน HelloSample.wsdl ในหน�าต)าง Project มาไว�ภายใต�หน�าต)าง design

2. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ให�ใช�ค)าท��ก4าหนดมาแล�ว กด OK

3) การเพ2�มธ6รกรรม Receive

1. ในไฟลW HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต)าง Palette มาไว�มาไว�ตรงบลMอกธ6รกรรมว)างเปล)า

2. โปรแกรมจะก4าหนดธ6รกรรม Receive ท��ช��อ Receive1 ในหน�าต)าง Design ให�คล2[กท��ไอคอน Edit ต4าแหน)งบนธ6รกรรม Receive1

3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ให�ก4าหนด Name: เป�น start และเล�อก Partner Link: เป�น PartnerLink1

4. ในช)อง Input Variable: กดป6zม Create.. เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น inputVar แล�วกด OK จะได�ไดอะลMอกด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 45: SOA Using GlassFishESB and NetBeans [in Thai]

15

5. กด OK จะได� HelloProcess ด�งร(ป

3) การเพ2�มธ6รกรรม Reply

1. ในไฟลW HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง บลMอกธ6รกรรม Receive1 ก�บธ6รกรรม Process End

2. โปรแกรมจะก4าหนดธ6รกรรม Reply ท��ช��อ Reply1 ในหน�าต)าง Design ให�คล2[กไอคอน Edit ของธ6รกรรม Reply1

3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ให�ก4าหนด Name: เป�น end และเล�อก Partner Link: เป�น PartnerLink1

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 46: SOA Using GlassFishESB and NetBeans [in Thai]

16

4. ในช)อง Output Variable: กดป6zม Create.. เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด Name: เป�น outputVar แล�วกด OK

4) การเพ2�มธ6รกรรม Assign

1. ในไฟลW HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม start ก�บธ6รกรรม end

2. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign1 แล�วเล�อกแทป Mapper ท4าการโยงโหนด paramA ในส)วน inputVar ในหน�าต)างด�านซ�ายเข�าก�บโหนด paramA ในส)วน inputVar ในหน�าต)างด�านขวา (เป�นการกMอปป��ค)าจากอ2นพ6ตไปย�งเอาทWพ6ต) ด�งร(ป

3. จะได� BPEL Process ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 47: SOA Using GlassFishESB and NetBeans [in Thai]

17

4. กดป�6ม Save

การพ�ฒนาโปรเจ"ค Composite Application

ข��นตอนน �เป�นการสร�าง Composite Application เพ" อท ร�น SampleBPEL บน BPEL Engine ท ใช�มาตรฐาน JBI โดยม ข��นตอนด�งน �

1. เล"อกเมน& File => New Project..

2. ในไดอะล5อก New Project ให�เล"อก Categories เป�น SOA และ Projects เป�น Composite

Application แล�วกด Next

3. ก�าหนด Project Name เป�น HelloApplication แล�วกด Finish

4. ในหน�าต+าง Project เล"อกโหนด HelloApplication แล�วคล-:กขวาเล"อก Add JBI Module ..

5. ให�เล"อกโปรเจ5ค HelloBPEL แล�วกดป�6ม Add Project JAR Files

6. โปรแรม NetBeans จะเพ- มโหนด HelloBPEL.jar ภายใต� HelloApplication > JBI Module

การทดสอบโปรแกรม

1. ท�าการ Deploy โปรเจ5ค HelloApplication จะได�หน�าต+าง Editor ด�งร&ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 48: SOA Using GlassFishESB and NetBeans [in Thai]

18

2. ในหน�าต+าง Project เล"อกโหนด HelloApplication > Test แล�วคล-:กขวาเล"อก New Test Case

3. ในไดอะล5อก New Test Case ให�ก�าหนด Test Case Name: เป�น TestCase1 แล�วกด Next

4. ในหน�าถ�ดไปให�เล"อกไฟล0 WSDL เป�น HelloSample.wsdl แล�วกด Next

5. ในหน�าถ�ดไปให�เล"อก HelloSampleOperation แล�วกด Finish

6. หน�าต+าง Editor จะแสดงไฟล0 Input.xml ให�แก� source code ส+วน paramA ด�งน � <sam:paramA>Hello Thana</sam:paramA>

7. เล"อกโหนด TestCase1 แล�วคล-:กขวาเล"อก Run

8. จะเห5นผลล�พธ0ปรากฎในไฟล0 Output.xml ด�ง Listing ท 2[หมายเหต�การร�นคร��งแรกจะไม+ม ผลเปร ยบเท ยบจ2งแสดงผลเป�น fail แต+คร��งต+อๆมาจะม ผลเปร ยบเท ยบจ2งระบ�ว+า pass ด�งร&ป]

Listing ท 2 ผลล�พธ0จากการร�น HelloBPEL

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 49: SOA Using GlassFishESB and NetBeans [in Thai]

19

xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="http://xml.netbeans.org/schema/SampleData" xmlns="http://xml.netbeans.org/schema/SampleData"><SOAP-ENV:Header/><SOAP-ENV:Body> <typeA xmlns="http://xml.netbeans.org/schema/SampleData"> <ns0:paramA xmlns:ns0="http://xml.netbeans.org/schema/SampleData">Hello Thana</ns0:paramA> </typeA></SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 50: SOA Using GlassFishESB and NetBeans [in Thai]

20

Exercise 7: BPEL for Writing to File

แบบฝ�กห�ดน� เป�นการสร�าง Business Process เพ��อเข�ยนข�อม(ลท��ได�ร�บผ(�ใช�งานลงไฟลW โดยใช�โปรแกรม BPEL

ข��นตอนในการพ�ฒนาโปรแกรม12. พ�ฒนาโปรเจMค FileBPEL 13. พ�ฒนาไฟลW WSDL ส4าหร�บ SOAPBinding 14. พ�ฒนาไฟลW WSDL ส4าหร�บ FileBinding15. พ�ฒนา BPEL Process16. พ�ฒนาโปรเจMค Composite Application17. ทดสอบโปรแกรมผ)าน TestCase18. ทดสอบโปรแกรมผ)าน Web Application

1. การพ#ฒนาโปรเจ̀ค FileBPEL

แบบฝ�กห�ดน� จะท4าการสร�างโปรเจMคส4าหร�บ Service Oriented Architecture ข- นมาใหม) โดยจะม�ข� นตอนการพ�ฒนาด�งน�

6. เล�อกเมน( File > New Project7. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น BPEL Module แล�ว

กด Next8. ก4าหนด Project Name เป�น FileBPEL แล�วกด Finish

2. การพ#ฒนาไฟลe WSDL สSาหร#บ SOAPBinding

ข� นตอนถ�ดไปเป�นการสร�างไฟลW WSDL ส4าหร�บ SOAPBinding ส4าหร�บน2ยาม Business Process ท��จะพ�ฒนาข- น เพ��อให�สามารถเร�ยกใช�เป�นเวMบเซอรWว2สได� โดยม�ข� นตอนการพ�ฒนาด�งน�

3. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด FileBPEL ให�เล�อก New > WSDL Document ..4. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น DataIO ก4าหนด WSDL Type: เป�น

Concrete WSDL Document และก4าหนด Binding เป�น SOAP และ Types เป�น RPC Literal ด�งแสดงในร(ปท�� 1 แล�วกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 51: SOA Using GlassFishESB and NetBeans [in Thai]

21

ร5ร5ปท�� 1 แสดงการก4าหนดค)า WSDL Document

5. ในหน�าถ�ดไป ส4าหร�บส)วนของ Input: ก4าหนด Message Part Name เป�น id กด Add แล�วเพ2�ม input ส4าหร�บ firstName, lastName, salary (int) และส4าหร�บส)วนของ Output: ก4าหนด Message Part Name เป�น result ด�งแสดงในร(ปท�� 2 จากน� นกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 52: SOA Using GlassFishESB and NetBeans [in Thai]

22

ร5ปท�� 2 แสดงการใส)ค)า Input และ Output Messages

2. การพ#ฒนาไฟลe WSDL สSาหร#บ FileBinding

ข� นตอนถ�ดไปเป�นการสร�างไฟลW WSDL ส4าหร�บ FileBinding เพ��อเข�ยนลงไฟลW โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด FileBPEL ให�เล�อก New > WSDL Document ..2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น FileResult ให�เล�อก WSDL Type:

เป�น Concrete WSDL Document Binding เป�น FILE และ Types เป�น Write ด�งแสดงในร(ปท�� 3 จากน� นกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 53: SOA Using GlassFishESB and NetBeans [in Thai]

23

ร5ปท�� 3 แสดงการใส)ค)าส4าหร�บ New WSDL Document

3. ในหน�าถ�ดไป ก4าหนดค)า File Name: เป�น result.txt ส4าหร�บ Path: ให� กด Browse… เพ��อเล�อก Path: ไปท�� C:\SOA\_output (กรณ�ท��ย�งไม)ม� folder จะต�องท4าการสร�างข- นมา) และเล�อก File Exists: เป�น Append to Existing File ด�งแสดงในร(ปท�� 4 จากน� นกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 54: SOA Using GlassFishESB and NetBeans [in Thai]

24

ร5ปท�� 4 แสดงการก4าหนดค)าส4าหร�บการเข�ยนไฟลW

3. การพ#ฒนา BPEL Process

ข� นตอนน� เป�นการสร�างไฟลW BPEL ส4าหร�บน2ยาม Business Process ท��จะใช�ในโปรเจMค โดยม�ข� นตอนการพ�ฒนาด�งน�

3.1 สร�างไฟลW FileProcess.bpel

1. เล�อกหน�าต)าง Projects แล�วคล2[กขวาท��โหนด FileBPEL จากน� นเล�อกค4าส��ง New > BPEL Process2. ก4าหนด File Name: เป�น FileProcess แล�วกด Finish3. โปรแกรม NetBeans จะสร�างไฟลW FileProcess.bpel และหน�าต)าง Editor จะแสดงไฟลWในโหมด

designer

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 55: SOA Using GlassFishESB and NetBeans [in Thai]

25

3.2 การเพ2�ม partner link

1. ในไฟลW FileProcess.bpel เล�อกแทป Design แล�วลากไอคอน DataIO.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางซ�ายม�อภายใต�หน�าต)าง design

2. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น DataIOPartnerLink3. ลากไอคอน FileResult.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต)าง design 4. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น FilePartnerLink

3.3 การเพ2�มธ6รกรรม Receive

1. ในไฟลW FileProcess.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต)าง Palette มาไว�ตรงบลMอกธ6รกรรมว)างเปล)า

2. โปรแกรมจะก4าหนดธ6รกรรม Receive ท��ช��อ Receive1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Receive1

3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ให�ก4าหนด Name: เป�น start และเล�อก Partner Link: เป�น DataIOPartnerLink

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น inData แล�วกด OK

3.4 การเพ2�มธ6รกรรม Reply

1. ในไฟลW FileProcess.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)างธ6รกรรม start ก�บธ6รกรรม Process End

2. โปรแกรมจะก4าหนดธ6รกรรม Reply ท��ช��อ Reply1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Reply13. ในไดอะลMอก Reply1 [Reply] - – Property Editor ให�ก4าหนด Name: เป�น end และเล�อก Partner

Link: เป�น DataIOPartnerLink4. ในช)อง Output Variable: กดป6zม Create เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด

Name: เป�น outData แล�วกด OK

3.5 การเพ2�มธ6รกรรม Invoke ส4าหร�บ write

1. ในไฟลW FileProcess.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง start ก�บธ6รกรรม end

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 56: SOA Using GlassFishESB and NetBeans [in Thai]

26

2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Invoke1

3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น invokeWriteToFile และเล�อก Partner Link: เป�น FilePartnerLink และ Operation: เป�น write

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น inFile แล�วกด OK

3.6 การเพ2�มธ6รกรรม Assign

1. ในไฟลW FileProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม start ก�บธ6รกรรม invokeWriteToFile

2. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign1 ในหน�าต)าง BPEL Mapper ท4าการเช��อมโยงข�อม(ลในโหนด inData ทางด�านซ�ายม�อ โดยเล�อก String > Concat จากน� นเช��อมโยง

1. firstName เข�าเป�น String ช)องท�� 12. ‘ ‘ เป�น String ช)องท�� 23. lastName เข�าเป�น String ช)องท�� 34. ‘ => ‘ เป�น String ช)องท�� 45. salary เข�าเป�น String ช)องท�� 56. จากน� นเช��อมโยง return String ไปย�ง part1 ใน inFile ทางด�านขวาม�อ ด�งแสดงในร(ปท�� 5

ร5ปท�� 5 แสดง Business Rule ระหว)าง start และ invokeWriteToFile

3. ในไฟลW FileProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม invokeWriteToFile ก�บธ6รกรรม end

4. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign2 ในหน�าต)าง BPEL Mapper เล�อก String > String Literal แล�วก4าหนดค)าเป�น Success เช��อมโยงฟ~ลดWระหว)าง string literal ก�บ result ท��อย()ใน outData ด�งแสดงในร(ปท�� 6

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 57: SOA Using GlassFishESB and NetBeans [in Thai]

27

ร5ปท�� 6 แสดง Business Rule ระหว)าง invokeWriteToFile และ end

5. เราจะได�โปรแกรม BPEL ด�งแสดงในร(ปท�� 7

ร5ปท�� 7 แสดง BPEL Process ของท� งระบบ

6. Clean and Build โปรเจMค

4. การพ#ฒนาโปรเจ̀ค Composite Application

ข� นตอนน� เป�นการสร�าง Composite Application เพ��อท��ร�น FileBPEL บน BPEL Engine ท��ใช�มาตรฐาน JBI โดยม�ข� นตอนด�งน�

1. เล�อกเมน( File > New Project

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 58: SOA Using GlassFishESB and NetBeans [in Thai]

28

2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น Composite Application แล�วกด Next

3. ก4าหนด Project Name เป�น FileCompositeApp แล�วกด Finish4. ในหน�าต)าง Project เล�อกโหนด FileCompositeApp แล�วคล2[กขวาเล�อก Add JBI Module..5. ให�เล�อกโปรเจMค FileBPEL แล�วกดป6zม Add Project JAR Files6. โปรแรม NetBeans จะเพ2�มโหนด FileBPEL.jar ภายใต� FileCompositeApp > JBI Module7. คล2[กขวาท�� FileCompositeApp เล�อก Clean and Build 8. คล2[กท�� Service Assembly จะเหMนผลล�พธWด�งแสดงในร(ปท�� 8

ร5ปท�� 8 แสดง Service Assembly ของ FileCompositeApp

5. การทดสอบโปรแกรมผlาน TestCase

9. ท4าการ Deploy โปรเจMค FileCompositeApp10. ในหน�าต)าง Project เล�อกโหนด FileCompositeApp > Test แล�วคล2[กขวาเล�อก New Test Case11. ในไดอะลMอก New Test Case ให�ก4าหนด Test Case Name: เป�น TestCase1 แล�วกด Next12. หน�าถ�ดไปใน FileBPEL ให�เล�อกไฟลW WSDL เป�น DataIO.wsdl แล�วกด Next13. ในหน�าถ�ดไปให�เล�อก DataIOOperation แล�วกด Finish14. หน�าต)าง Editor จะแสดงไฟลW Input.xml ให�แก� source code ด�งน�

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

15. กดป6zม Save เล�อกโหนด TestCase1 แล�วคล2[กขวาเล�อก Run16. จะเหMนผลล�พธWปรากฎในไฟลW Output.xml ด�งแสดงในร(ปท�� 9

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 59: SOA Using GlassFishESB and NetBeans [in Thai]

29

ร5ปท�� 9 แสดงผลล�พธWท��ได�จากการร�น TestCase1

17. และจะได�ไฟลW result.txt ในไดเรMกทอร�� c:\SOA\_output ซ-�งม�ข�อม(ลด�งน� Somjai Jaidee => 38000

6. การพ#ฒนาโปรแกรมผlาน Web Application

ท4าการค�นหาต4าแหน)ง url ของ soap:address ตามข� นตอนด�งน�

1. คล2[กท�� Service Assembly ใน FileCompisiteApp และคล2[กท�� DataIOPort 2. ในหน�าต)าง properties ให�ท4าการ copy ค)าของ soap:address 3. ทดสอบโดยเป~ด Web Browser แล�ว paste ค)าท�� copy ไว� จากน� นให�ท4าการเปล��ยนค)าของ URL ให�เป�น

ด�งน� http://localhost:9080/DataIOService/DataIOPort?WSDL

พ�ฒนาโปรแกรม Web Application เพ��อให�ผ(�ใช�ปsอนค)าข�อม(ลต)างๆ จากน� นโปรแกรมจะท4าการเข�ยนข�อม(ลลงไฟลW โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Web และ Web Application แล�วกด Next3. ก4าหนด Project Name เป�น FileBPUI แล�วเล�อก Project Location เป�น folder ท��เราต�องการจะเกMบ

ไฟลWไว� 4. จากน� นเล�อก Server เป�น GlassFish V2 ก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด Finish5. ในช)อง Frameworks ให�เล�อก Visual Web JavaServer Faces จากน� นกด Finish6. คล2[กขวาท��โหนด FileBPUI จากน� นเล�อกค4าส��ง New > Other… ให�เล�อก Categories เป�น Web

Services และ Web Service Client แล�วกด Next7. ในไดอะลMอก New Web Service Client ให�เล�อก WSDL URL: แล�วใส) URL เป�น

http://localhost:9080/DataIOService/DataIOPort?WSDL แล�วกด Finish

8. เล�อกไปท�� Page1.jsp ท4าการออกแบบ Page Layout ด�งแสดงในร(ปท�� 10

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 60: SOA Using GlassFishESB and NetBeans [in Thai]

30

ร5ปท�� 10 แสดงการออกแบบหน�า Page1.jsp

9. ก4าหนดค)าค6ณสมบ�ต2ของออปเจMคต)างๆ ใน Page Layout น� ด�งในตารางท�� 1

ตารางท�� 1 แสดงการก4าหนดค)า properties ให�ก�บออปเจ�คต)างๆ id text

lbID ID:

inputID

lbFirstName FirstName:

inputFirstName

lbLastName LastName:

inputLastName

lbSalary Salary:

inputSalary

BtnSubmit Submit

resultText10. กดป6zม Save11. ท4าการคล2[กขวาท�� inputID แล�วเล�อก Add Binding Attribute ด�งแสดงในร(ปท�� 11

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 61: SOA Using GlassFishESB and NetBeans [in Thai]

31

ร5ปท�� 11 แสดงการ Add Binding Attribute

12. ท4าการ Add Binding Attribute ท�� inputFirstName, inputLastName และ inputSalary13. ด�บเบ2 ลคล2[กท��ป6zม Submit หน�าต)าง Editor จะแสดงแทบ Java และแสดง source code ท4าการคล2[กขวา

ในเมธอด btnSubmit_action แล�วเล�อก Web Service Client Resources > Call Web Service Operation เล�อกไปท�� DataIOOperation ให�แก�ไข source code ด�งน� public String btnSubmit_action() { try { // Call Web Service Operation org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port =

service.getDataIOPort(); java.lang.String id = (String) inputID.getText(); java.lang.String firstName = (String)

inputFirstName.getText(); java.lang.String lastName = (String) inputLastName.getText(); String tmp = (String) inputSalary.getText(); int salary = Integer.parseInt(tmp); // TODO process result here java.lang.String result = port.dataIOOperation(id, firstName,

lastName, salary); resultText.setText("Result = " + result); } catch (Exception ex) {

resultText.setText(ex); } return null; }

14. Clean and Build และ Run โปรเจMค

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 62: SOA Using GlassFishESB and NetBeans [in Thai]

32

ร5ปท�� 12 แสดงผลล�พธWหน�า Page1.jsp

15. และไฟลW result.txt ในไดเรMกทอร�� c:\SOA\_output จะม�ข�อม(ลด�งน� Somjai Jaidee => 38000Nipa Jinjai => 738000

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 63: SOA Using GlassFishESB and NetBeans [in Thai]

33

Exercise 8: BPEL for Writing to Database

แบบฝ�กห�ดน� เป�นการสร�าง Business Process เพ��อเข�ยนข�อม(ลลงในฐานข�อม(ล โดยใช�โปรแกรม Business Process ท��พ�ฒนาโดยใช� GlassFish Open ESB ผ)าน Database Binding Component

ข��นตอนในการพ�ฒนาโปรแกรม1. สร�าง Table, Connection Pool และ JDBC Resources2. พ�ฒนาโปรเจMค DBBPEL3. พ�ฒนาไฟลW WSDL ส4าหร�บ DatabaseBinding4. พ�ฒนาไฟลW WSDL ส4าหร�บ SOAPBinding5. พ�ฒนา BPEL Process6. พ�ฒนาโปรเจMค Composite Application7. ทดสอบโปรแกรมผ)าน TestCase8. ทดสอบโปรแกรมผ)าน Web Application

1. สรMาง Table, Connection Pool และ JDBC DataSource

ข� นตอนน� เป�นการสร�าง table ในฐานข�อม(ลเพ��อใช�เกMบข�อม(ลพน�กงานของบร2ษ�ท และท4าการ config GlassFish v2 Application Server เพ��อให�สามารถต)อก�บฐานข�อม(ลได�โดยใช� JDBC Resource

1. ใช�โปรแกรม NetBeans หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ Employee ในฐานข�อม(ล MySQL ท��ช��อ soa โดยก4าหนดให�ม� column ต)างๆ ด�งน�

id VARCHAR(10) Primary KeyfirstName VARCHAR(30)lastName VARCHAR(30)salary DOUBLE

หร�อร�นไฟลW employee.sqlDROP TABLE IF EXISTS soa.employee;CREATE TABLE soa.employee ( id varchar(10) NOT NULL, firstName varchar(30) NOT NULL, lastName varchar(30) NOT NULL, salary double NOT NULL, PRIMARY KEY (id) )

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 64: SOA Using GlassFishESB and NetBeans [in Thai]

34

2. ในโปรแกรม NetBeans เล�อกไปท��แทบ Services คล2[กขวาท�� Servers > GlassFish V2 เล�อก View Admin Console

3. โปรแกรม Web Browser จะถ(กเป~ดข- นและแสดงหน�าจอ Admin Console ให�ปsอน User Name: เป�น admin และ Password: เป�น adminadmin

4. ทางหน�าต)างด�านซ�ายม�อของ Admin Console ให�คล2[กท�� Resources > JDBC > Connection Pools โปรแกรมจะแสดงรายช��อ Connection Pool ท��ม�อย() จากน� นให�กด New และใส)ข�อม(ลด�งแสดงในร(ปท�� 1

ร5ปท�� 1 แสดงการสร�าง Connection Pool ท��ช��อ MySQLPool

5. กด Next จากน� นให�ก4าหนดค)าต)างๆ ด�งน� 1. DatabaseName soa2. Password admin3. PortNumber 33064. ServerName localhost5. User root

6. กด Finish แล�วกด Save 7. เล�อก MySQLPool และให�ทดสอบโดยการกดป6zม Ping ถ�าข- น Ping Succeeded แสดงว)าเช��อมต)อได�

ด�งแสดงในร(ปท�� 2

ร5ปท�� 2 แสดงการเช��อมต)อของ MySQLPool ไปย�งฐานข�อม(ล soa

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 65: SOA Using GlassFishESB and NetBeans [in Thai]

35

8. คล2[กท�� Resources > JDBC > JDBC Resources จากน� นให�กด New และใส)ข�อม(ลด�งแสดงในร(ปท�� 3

ร5ปท�� 3 แสดงการสร�าง JDBC Resource ท��ช��อ jdbc/soa

9. กด OK10. ใช� NetBeans เพ��อเช��อมต)อก�บ Database ได�โดยเล�อกท��แทบ Services จะเหMน MySQL Driver ท��ม�มา

ให�แล�ว ซ-�งถ�าขยายแทบ Databases > Drivers จะเหMน Driver ท��ช��อ MySQL ให�ท4าการคล2[กขวา แล�วเล�อก Connect Using ด�งแสดงในร(ปท�� 4

ร5ปท�� 4 แสดง MySQL ท��อย()ใน Drivers

11. ให�ท4าการระบ6ค)าของ Database URL: เป�น jdbc:mysql://localhost:3306/soa12. ส4าหร�บ User Name: และ Password: ให�ใส)ค)าตามท��ก4าหนดไว�ในตอนต2ดต� งโปรแกรม MySQL ซ-�งในท��

น� จะม�ค)าเป�น root และ admin ด�งแสดงในร(ปท�� 5 กด OK 2 คร� ง

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 66: SOA Using GlassFishESB and NetBeans [in Thai]

36

ร5ปท�� 5 แสดงการก4าหนดค)าให�ก�บ Database Connection

13. จากน� นถ�าขยายแทบ Database จะเหMน Connection ใหม)ด�งแสดงในร(ปท�� 6 (ถ�าย�งไม) Connect ให�ท4าการคล2[กขวาแล�วเล�อก Connect)

ร5ปท�� 6 แสดง Connection ไปย�ง soa Database

2. การพ#ฒนาโปรเจ̀ค DBBPEL

แบบฝ�กห�ดน� จะท4าการสร�างโปรเจMคส4าหร�บ Service Oriented Architecture ข- นมาใหม) โดยจะม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น BPEL Module แล�ว

กด Next3. ก4าหนด Project Name เป�น DBBPEL แล�วกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 67: SOA Using GlassFishESB and NetBeans [in Thai]

37

3. การพ#ฒนาไฟลe WSDL สSาหร#บ DatabaseBinding

ข� นตอนถ�ดไปเป�นการก4าหนดไฟลW WSDL ท��ม� Binding เป�น Database ส4าหร�บเข�ยนลงในฐานข�อม(ล โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด DBBPEL ให�เล�อก New > WSDL Document ..2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น EmployeeDB ก4าหนด WSDL Type:

เป�น Concrete WSDL Document และก4าหนด Binding เป�น DATABASE และ Types เป�น Table จากน� นกด Next

3. ในหน�าถ�ดไป ก4าหนดค)า URL: เป�น jdbc:mysql://localhost:3306/soa กด Next4. เล�อก Table: Employee จาก Available Tables: ไปย�ง Selected Tables: และกด Next5. กด Next แล�วก4าหนดค)า JNDI Name เป�น jdbc/soa กด Finish6. โปรแกรมจะสร�างไฟลWข- นมาสองไฟลWค�อ EmployeeDB.wsdl ส4าหร�บอธ2บาย service ต)างๆ ของ Table

และ employee.xsd ส4าหร�บอธ2บาย XML Schema ของ Table

เราสามารถตรวจสอบด(ค4าส��งต)างๆ ในไฟลW EmployeeDB.wsdl อาท2เช)น insert operation ของ table ได�โดยเล�อกไฟลWน� หน�าต)าง Editor จะแสดง Design View ของไฟลW ให�ขยายแทป Bindings > binding > insert > inputInsert ด�งแสดงในร(ปท�� 7 แล�วด(ท�� properties ของ jdbc:input จะเหMนค4าส��ง sql เป�น

insert into employee (firstName,id,salary,lastName) values (?,?,?,?)

ร5ปท�� 7 แสดง Design View ของไฟลW Employee.wsdl

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 68: SOA Using GlassFishESB and NetBeans [in Thai]

38

4. การพ#ฒนาไฟลe WSDL สSาหร#บ SOAPBinding

ข� นตอนน� เป�นการสร�างไฟลW WSDL ส4าหร�บ SOAPBinding ส4าหร�บน2ยาม Business Process ท��จะพ�ฒนาข- น เพ��อให�สามารถเร�ยกใช�เป�นเวMบเซอรWว2สได� โดยในท��น� จะก4าหนด inputData ให�เป�น XML ตาม DataType ท��น2ยามใน Employee.xsd และ result ให�เป�น String โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด DBBPEL ให�เล�อก New > WSDL Document ..2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น DatabaseWSDL ก4าหนด WSDL

Type: เป�น Concrete WSDL Document และก4าหนด Binding เป�น SOAP และ Types เป�น RPC Literal แล�วกด Next

3. ในหน�าถ�ดไป ส4าหร�บส)วนของ Input: ก4าหนด Message Part Name เป�น inputData แล�วก4าหนด Element Or Type เป�น employee ด�งแสดงในร(ปท�� 8 และส4าหร�บส)วนของ Output: ก4าหนด Message Part Name เป�น result จากน� นกด Next แล�วกด Finish

ร5ปท�� 8 แสดงการเล�อก Element ของ inputData

5. การพ#ฒนา BPEL Process

ข� นตอนน� เป�นการสร�างไฟลW BPEL ส4าหร�บน2ยาม Business Process ท��จะใช�ในโปรเจMค โดยม�ข� นตอนการพ�ฒนาด�งน�

5.1 สร�างไฟลW DBProcess.bpel

1. เล�อกหน�าต)าง Projects แล�วคล2[กขวาท��โหนด DBBPEL จากน� นเล�อกค4าส��ง New > BPEL Process2. ก4าหนด File Name: เป�น DBProcess แล�วกด Finish3. โปรแกรม NetBeans จะสร�างไฟลW DBProcess.bpel และหน�าต)าง Editor จะแสดงไฟลWในโหมด

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 69: SOA Using GlassFishESB and NetBeans [in Thai]

39

designer

5.2 การเพ2�ม partner link

1. ในไฟลW DBProcess.bpel เล�อกแทป Design แล�วลากไอคอน DatabaseWSDL.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางซ�ายม�อภายใต�หน�าต)าง design

2. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น DatabaseWSDLPartnerLink3. ลากไอคอน EmployeeDB.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต)าง

design 4. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น DBPartnerLink

5.3 การเพ2�มธ6รกรรม Receive

1. ในไฟลW DBProcess.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต)าง Palette มาไว�ตรงบลMอกธ6รกรรมว)างเปล)า

2. โปรแกรมจะก4าหนดธ6รกรรม Receive ท��ช��อ Receive1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Receive1

3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ให�ก4าหนด Name: เป�น start และเล�อก Partner Link: เป�น DatabaseWSDLPartnerLink

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น inData แล�วกด OK

5.4 การเพ2�มธ6รกรรม Reply

1. ในไฟลW DBProcess.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)างธ6รกรรม start ก�บธ6รกรรม Process End

2. โปรแกรมจะก4าหนดธ6รกรรม Reply ท��ช��อ Reply1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Reply13. ในไดอะลMอก Reply1 [Reply] - – Property Editor ให�ก4าหนด Name: เป�น end และเล�อก Partner

Link: เป�น DatabaseWSDLPartnerLink4. ในช)อง Output Variable: กดป6zม Create เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด

Name: เป�น outData แล�วกด OK

5.5 การเพ2�มธ6รกรรม Invoke ส4าหร�บ write

1. ในไฟลW DBProcess.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ใน

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 70: SOA Using GlassFishESB and NetBeans [in Thai]

40

หน�าต)าง design ระหว)าง start ก�บธ6รกรรม end2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม

Invoke13. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น invokeWriteToDB และ

เล�อก Partner Link: เป�น DBPartnerLink และเล�อก Operation: เป�น insert4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด

Name: เป�น InsertIn 5. ในช)อง Output Variable: กดป6zม Create เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด

Name: เป�น InsertOut แล�วกด OK

5.6 การเพ2�มธ6รกรรม Assign

1. ในไฟลW DBProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม start ก�บธ6รกรรม invokeWriteToDB

2. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign1 ในหน�าต)าง BPEL Mapper ท4าการเช��อมโยงข�อม(ลในโหนด inData > inputData > employee_Record ทางด�านซ�ายม�อ ไปย�ง InsertIn > part > employee_Record ด�งแสดงในร(ปท�� 9 โดยเช��อมโยง field ต)างๆเหล)าน�

1. id > id 2. firstName > firstName3. lastName > lastName4. salary > salary

ร5ปท�� 9 แสดง Business Rule ระหว)าง start และ invokeWriteToDB

3. ในไฟลW DBProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม invokeWriteToDB ก�บธ6รกรรม end

4. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign2 ในหน�าต)าง BPEL Mapper เล�อก String > String Literal แล�วก4าหนดค)าเป�น Success เช��อมโยงฟ~ลดWระหว)าง string literal ก�บ result ท��อย()ใน outData ด�ง

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 71: SOA Using GlassFishESB and NetBeans [in Thai]

41

แสดงในร(ปท�� 10

ร5ปท�� 10 แสดง Business Rule ระหว)าง invokeWriteToDB และ end

5. เราจะได�โปรแกรม BPEL ด�งแสดงในร(ปท�� 11

ร5ปท�� 11 แสดง BPEL Process ของท� งระบบ

6. Clean and Build โปรเจMค

6. การพ#ฒนาโปรเจ̀ค Composite Application

ข� นตอนน� เป�นการสร�าง Composite Application เพ��อท��ร�น DBBPEL บน BPEL Engine ท��ใช�มาตรฐาน JBI โดยม�ข� นตอนด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 72: SOA Using GlassFishESB and NetBeans [in Thai]

42

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น Composite

Application แล�วกด Next3. ก4าหนด Project Name เป�น DBCompositeApp แล�วกด Finish4. ในหน�าต)าง Project เล�อกโหนด DBCompositeApp แล�วคล2[กขวาเล�อก Add JBI Module5. ให�เล�อกโปรเจMค DBBPEL แล�วกดป6zม Add Project JAR Files6. โปรแรม NetBeans จะเพ2�มโหนด DBBPEL.jar ภายใต� DBCompositeApp > JBI Module7. คล2[กขวาท�� DBCompositeApp เล�อก Clean and Build 8. คล2[กท�� Service Assembly จะเหMนผลล�พธWด�งแสดงในร(ปท�� 12

ร5ปท�� 12 แสดง Service Assembly ของ DBCompositeApp

7. การทดสอบโปรแกรมผlาน TestCase

1. ท4าการ Deploy โปรเจMค DBCompositeApp2. ในหน�าต)าง Project เล�อกโหนด DBCompositeApp > Test แล�วคล2[กขวาเล�อก New Test Case3. ในไดอะลMอก New Test Case ให�ก4าหนด Test Case Name: เป�น TestCase1 แล�วกด Next4. หน�าถ�ดไปใน DBBPEL ให�เล�อกไฟลW WSDL เป�น DatabaseWSDL.wsdl แล�วกด Next5. ในหน�าถ�ดไปให�เล�อก DatabaseWSDLOperation แล�วกด Finish6. หน�าต)าง Editor จะแสดงไฟลW Input.xml ให�แก� source code ด�งน�

<tab:employee_Record> <tab:id>1234</tab:id> <tab:lastName>Jaidee</tab:lastName> <tab:salary>38000</tab:salary>

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 73: SOA Using GlassFishESB and NetBeans [in Thai]

43

<tab:firstName>Somjai</tab:firstName> </tab:employee_Record>

7. กดป6zม Save เล�อกโหนด TestCase1 แล�วคล2[กขวาเล�อก Run8. จะเหMนผลล�พธWปรากฎในไฟลW Output.xml ด�งแสดงในร(ปท�� 13

ร5ปท�� 13 แสดงผลล�พธWท��ได�จากการร�น TestCase1

9. และได�ข�อม(ลซ-�งเข�าไปอย()ในฐานข�อม(ลด�งแสดงในร(ปท�� 14

ร5ปท�� 14 แสดงข�อม(ลท��อย()ในตาราง Employee ในฐานข�อม(ล soa

8. การทดสอบโปรแกรมผlาน Web Application

ท4าการค�นหาต4าแหน)ง URL ของ soap:address ตามข� นตอนด�งน�

1. คล2[กท�� Service Assembly ใน DBCompositeApp และคล2[กท�� DatabaseWSDLPort 2. ในหน�าต)าง properties ให�ท4าการ copy ค)าของ soap:address3. ทดสอบโดยเป~ด Web Browser แล�ว paste ค)าท�� copy ไว� จากน� นให�ท4าการเปล��ยนค)าของ URL ให�เป�น

ด�งน� http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL

พ�ฒนาโปรแกรม Web Application เพ��อให�ผ(�ใช�ปsอนค)าข�อม(ลต)างๆ จากน� นโปรแกรมจะท4าการเข�ยนข�อม(ลลงฐานข�อม(ล โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Web และ Web Application แล�วกด Next3. ก4าหนด Project Name เป�น DBBPUI แล�วเล�อก Project Location เป�น folder ท��เราต�องการจะเกMบ

ไฟลWไว�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 74: SOA Using GlassFishESB and NetBeans [in Thai]

44

4. จากน� นเล�อก Server เป�น GlassFish V2 ก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด Finish5. ในช)อง Frameworks ให�เล�อก Visual Web JavaServer Faces จากน� นกด Finish6. คล2[กขวาท��โหนด DBBPUI จากน� นเล�อกค4าส��ง New > Other… ให�เล�อก Categories เป�น Web

Services และ Web Service Client แล�วกด Next7. ในไดอะลMอก New Web Service Client ให�เล�อก WSDL URL: แล�วใส) URL เป�น

http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL แล�วกด Finish8. เล�อกไปท�� Page1.jsp ท4าการออกแบบ Page Layout ด�งแสดงในร(ปท�� 15

ร5ปท�� 15 แสดงการออกแบบหน�า Page1.jsp

9. ก4าหนดค)าค6ณสมบ�ต2ของออปเจMคต)างๆ ใน Page Layout น� ด�งในตารางท�� 1

ตารางท�� 1 แสดงการก4าหนดค)า properties ให�ก�บออปเจ�คต)างๆ Object Type

id text

Label lbID ID:

Text Field inputID

Label lbFirstName FirstName:

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 75: SOA Using GlassFishESB and NetBeans [in Thai]

45

Object Type

id text

Text Field inputFirstName

Label lbLastName LastName:

Text Field inputLastName

Label lbSalary Salary:

Text Field inputSalary

Button BtnSubmit Submit

Static Text resultText

10. กดป6zม Save11. ท4าการคล2[กขวาท�� inputID แล�วเล�อก Add Binding Attribute ด�งแสดงในร(ปท�� 16

ร5ปท�� 16 แสดงการ Add Binding Attribute

12. ท4าการ Add Binding Attribute ท�� inputFirstName, inputLastName และ inputSalary13. ด�บเบ2 ลคล2[กท��ป6zม Submit หน�าต+าง Editor จะแสดงแทบ Java และแสดง source code ท4าการคล2[กขวา

ในเมธอด btnSubmit_action แล�วเล�อก Web Service Client Resources > Call Web Service Operation เล�อกไปท�� DatabaseWSDLOperation ให�แก�ไข source code ด�งน �public String btnSubmit_action() { try { // Get port org.netbeans.j2ee.wsdl.dbbpel.databasewsdl.DatabaseWSDLPort-

Type port = service_1.getDatabaseWSDLPort(); // Retrieve values in text fields on UI

java.lang.String id = (String) inputID.getText(); java.lang.String firstName = (String)

inputFirstName.getText(); java.lang.String lastName = (String) inputLastName.getText(); String temp = (String) inputSalary.getText();

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 76: SOA Using GlassFishESB and NetBeans [in Thai]

46

int salary = Integer.parseInt(temp); org.netbeans.j2ee.xsd.tableschema.Employee inputData =

new org.netbeans.j2ee.xsd.tableschema.Employee();

// Set input valuesEmployeeRecord emp = new EmployeeRecord();emp.setId(id);

emp.setFirstName(firstName); emp.setLastName(lastName);

emp.setSalary(salary);inputData.getEmployeeRecord().add(emp);

// Call Web Servicejava.lang.String result =

port.databaseWSDLOperation(inputData); resultText.setText("Result = " + result); } catch (Exception ex) {

resultText.setText(ex); }

return null; }

Clean and Build และ Run โปรเจMค

ร5ปท�� 17 แสดงผลล�พธWหน�า Page1.jsp

และได�ข�อม(ลซ-�งเข�าไปอย()ในฐานข�อม(ลด�งแสดงในร(ปท�� 18

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 77: SOA Using GlassFishESB and NetBeans [in Thai]

47

ร5ปท�� 18 แสดงข�อม(ลท��อย()ในตาราง Employee ในฐานข�อม(ล soa

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 78: SOA Using GlassFishESB and NetBeans [in Thai]

48

Exercise 9: BPEL for Sending Message to a JMS Queue

แบบฝ�กห�ดน� เป�นการสร�าง Business Process เพ��อส)งข�อความไปย�ง JMS Queue โดยการใช� JMS Binding Component ท��อย() OpenESB และจะใช�โปรแกรม HermesJMS เพ��อเร�ยกด(ข�อความท��อย()ใน Queue

ข��นตอนในการพ�ฒนาโปรแกรม1. ต2ดต� งโปรแกรม HermesJMS2. ต2ดต� งและครวจสอบ JMS Binding Components3. พ�ฒนาโปรเจMค JMSBPEL4. พ�ฒนาไฟลW WSDL ส4าหร�บ JMSBinding5. พ�ฒนาไฟลW WSDL ส4าหร�บ SOAPBinding6. พ�ฒนา BPEL Process7. พ�ฒนาโปรเจMค Composite Application8. ทดสอบโปรแกรมผ)าน TestCase

1. ตrดต#sงโปรแกรม HermesJMS

โปรแกรม HermesJMS เป�นโปรแกรม Open Source ท��สามารถใช�ในการจ�ดการ Meessage Queues ของ Messaging Server ได� แบบฝ�กห�ดน� จะเล�อกใช�โปรแกรมน� ในการตรวจสอบข�อความท��ส)งมาย�ง JMS Queue เราสามารถท��จะ download โปรแกรมน� ได�ท�� http://www.hermesjms.com/confluence/display/HJMS/Home โดยการเล�อกไฟลW hetmesJMS version 1.13 แล�วต2ดต� งไฟลWแบบ jar โดยการเร�ยกใช�ค4าส��ง

เม��อต2ดต� งโปรแกรมเร�ยบร�อยแล�ว เราสามารถท4าการ config โปรแกรมน� ได�ตามข� นตอนด�งน�

1. เป~ดโปรแกรม HermesJMS แล�วคล2[กขวาท�� sessions และเล�อกค4าส��ง New / NewSession

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 79: SOA Using GlassFishESB and NetBeans [in Thai]

49

2. ในไดอะลMอก Preference ให�เปล��ยนข�อความจาก <new> เป�น JavaMQ ด�งร(ป แล�วเล�อกแทป Provider ท��อย()ด�านล)างของไดอะลMอก

3. คล2[กขวาท��ไดอะลMอกในแทป Provider แล�วเล�อกค4าส��ง Add Group4. ก4าหนดค)า Classpath group name เป�น JavaMQClasspathGroup แล�วกด OK5. ขยายโหนด JavaMQClasspathGroup แล�วคล2[กขวาท�� Library และเล�อกค4าส��ง Add JAR(s)6. เล�อกไฟลWแบบ jar ต)อไปน� ท��อย()ในไดเรMกทอร��ของ GlassFish ESB ท��ช��อ imq/lib

4. fscontext.jar5. imq.jar6. imqadmin.jar7. imqbroker.jar8. imqjmx.jar9. imqutil.jar10. imqxm.jar11. jaxm-api.jar12. jhall.jar13. jms.jar

7. โปรแกรมจะได�ไดอะลMอกด�งร(ป แล�วกดป6zม Apply แล�วกด OK เพ��อป~ดไดอะลMอก Preference

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 80: SOA Using GlassFishESB and NetBeans [in Thai]

50

8. ขยายโหนด sessions แล�วคล2[กขวาท�� JavaMQ แล�วเล�อกค4าส��ง Edit.. ด�งร(ป

9. ในไดอะลMอก Preference เล�อกแทป Session แล�วเล�อก JavaMQClasspathGroup ส4าหร�บ Loader และ com.sun.messaging.QueueConnectionFactory ส4าหร�บ Class ด�งร(ป

10. กดป6zม Apply ตามด�วย OK เพ��อป~ดไดอะลMอก

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 81: SOA Using GlassFishESB and NetBeans [in Thai]

51

11. ขยายโหนด sessions แล�วคล2[กท��โหนด JavaMQ แล�วเล�อกค4าส��ง New > Add queue..12. ในไดอะลMอก Destination Properties ก4าหนด Name: เป�น TestQueue ก4าหนดค)า UserName เป�น

admin และ Password เป�น admin แล�วกด OK จะได�ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 82: SOA Using GlassFishESB and NetBeans [in Thai]

52

2. การตrดต#sง และตรวจสอบ JMS Binding Component

แบบฝ�กห�ดน� ต�องการใช� JMS Binding Component ท��ต2ดต� งอย()ใน OpenESB เราสามารถตรวจสอบ Service Engines และ Binding Components ท��ต2ดต� งอย()ใน Open ESB ของ GlassFish V2 ได�โดยการเป~ดโปรแกรม NetBeans แล�วเล�อกหน�าต)าง Services แล�วขยายโหนด Servers > GlassFish V2 > JBI เราจะเหMนโมด(ลต)างๆ ด�งต�วอย)างในร(ป

ถ�า GlassFish V2 ไม)ม� sun-jms-binding อย()ให�ไปท4าการ download โมด(ลน� ได�ท�� https://open-esb.dev.java.net/Components.html จากน� นท4าการต2ดต� งได�โดยคล2[กขวาท��โหนด Binding Components แล�วเล�อกค4าส��ง Install and Start.. โดยเล�อกต2ดต� งไฟลWท�� download มา

3. การพ#ฒนาโปรเจ̀ค JMSBPEL

แบบฝ�กห�ดน� จะท4าการสร�างโปรเจMคส4าหร�บ Service Oriented Architecture ข- นมาใหม) โดยจะม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 83: SOA Using GlassFishESB and NetBeans [in Thai]

53

2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น BPEL Module แล�วกด Next

3. ก4าหนด Project Name เป�น JMSBPEL แล�วกด Finish

4. การพ#ฒนาไฟลe WSDL สSาหร#บ JMS Binding

ข� นตอนถ�ดไปเป�นการก4าหนดไฟลW WSDL ท��ม� Binding เป�น JMS ส4าหร�บการส)งข�อความ โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด JMSBPEL ให�เล�อก New > WSDL Document ..2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น TestQueueWSDL ก4าหนด WSDL

Type: เป�น Concrete WSDL Document และก4าหนด Binding เป�น JMS และ Types เป�น Send จากน� นกด Next

3. ในหน�าถ�ดไป ก4าหนดค)า Connection URL: เป�น mq://localhost:7676 กค)า User Name เป�น admin และ Password เป�น admin ด�งร(ป แล�วกด Next

4. ในหน�าถ�ดไป ก4าหนดค)า Destination เป�น TestQueue ส)วนค)าอ��นให�คงตามท��ก4าหนดมา แล�วกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 84: SOA Using GlassFishESB and NetBeans [in Thai]

54

5. การพ#ฒนาไฟลe WSDL สSาหร#บ SOAPBinding

ข� นตอนน� เป�นการสร�างไฟลW WSDL ส4าหร�บ SOAPBinding ส4าหร�บน2ยาม Business Process ท��จะพ�ฒนาข- น เพ��อให�สามารถเร�ยกใช�เป�นเวMบเซอรWว2สได� โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด JMSBPEL ให�เล�อก New > WSDL Document ..2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น JMSWSDL ก4าหนด WSDL Type:

เป�น Concrete WSDL Document และก4าหนด Binding เป�น SOAP และ Types เป�น RPC Literal แล�วกด Next

3. ในหน�าถ�ดไป ส4าหร�บส)วนของ Input: ก4าหนด Message Part Name เป�น inData แล�วก4าหนด Element Or Type เป�น xsd:String และส4าหร�บส)วนของ Output: ก4าหนด Message Part Name เป�น outData แล�วก4าหนด Element Or Type เป�น xsd:String จากน� นกด Next แล�วกด Finish

6. การพ#ฒนา BPEL Process

ข� นตอนน� เป�นการสร�างไฟลW BPEL ส4าหร�บน2ยาม Business Process ท��จะใช�ในโปรเจMค โดยม�ข� นตอนการพ�ฒนาด�งน�

6.1 สร�างไฟลW JMSProcess.bpel

1. เล�อกหน�าต)าง Projects แล�วคล2[กขวาท��โหนด JMSBPEL จากน� นเล�อกค4าส��ง New > BPEL Process2. ก4าหนด File Name: เป�น JMSProcess แล�วกด Finish3. โปรแกรม NetBeans จะสร�างไฟลW JMSProcess.bpel และหน�าต)าง Editor จะแสดงไฟลWในโหมด

designer

6.2 การเพ2�ม partner link

1. ในไฟลW JMSProcess.bpel เล�อกแทป Design แล�วลากไอคอน JMSWSDL.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางซ�ายม�อภายใต�หน�าต)าง design

2. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น JMSWSDLPartnerLink3. ลากไอคอน TestQueue.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต)าง

design 4. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น TestQueuepartnerLink

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 85: SOA Using GlassFishESB and NetBeans [in Thai]

55

6.3 การเพ2�มธ6รกรรม Receive

1. ในไฟลW JMSProcess.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต)าง Palette มาไว�ตรงบลMอกธ6รกรรมว)างเปล)า

2. โปรแกรมจะก4าหนดธ6รกรรม Receive ท��ช��อ Receive1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Receive1

3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ให�ก4าหนด Name: เป�น start และเล�อก Partner Link: เป�น JMSWSDLPartnerLink

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น JMSinData แล�วกด OK

6.4 การเพ2�มธ6รกรรม Reply

1. ในไฟลW JMSProcess.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)างธ6รกรรม start ก�บธ6รกรรม Process End

2. โปรแกรมจะก4าหนดธ6รกรรม Reply ท��ช��อ Reply1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Reply13. ในไดอะลMอก Reply1 [Reply] - – Property Editor ให�ก4าหนด Name: เป�น end และเล�อก Partner

Link: เป�น JMSWSDLPartnerLink4. ในช)อง Output Variable: กดป6zม Create เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด

Name: เป�น JMSoutData แล�วกด OK

6.5 การเพ2�มธ6รกรรม Invoke ส4าหร�บ write

1. ในไฟลW JMSProcess.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง start ก�บธ6รกรรม end

2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Invoke1

3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น sendToQueue และเล�อก Partner Link: เป�น TestQueuePartnerLink และเล�อก Operation: เป�น JMSOutOperation

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น JMSOutOperationIn

6.6 การเพ2�มธ6รกรรม Assign

1. ในไฟลW JMSProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ใน

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 86: SOA Using GlassFishESB and NetBeans [in Thai]

56

หน�าต)าง design ระหว)าง ธ6รกรรม start ก�บธ6รกรรม sendToQueue2. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign1 ในหน�าต)าง BPEL Mapper ท4าการเช��อมโยงข�อม(ลในโหนด

inData > JMSinData ทางด�านซ�ายม�อ ไปย�ง part ๅ > JMSOutOperationIn ด�งแสดงในร(ป

3. ในไฟลW JMSProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม isendToQue ก�บธ6รกรรม end

4. ในหน�าต)าง Editor เล�อกธ6รกรรม Assign2 ในหน�าต)าง BPEL Mapper เล�อก String > String Literal แล�วก4าหนดค)าเป�น Success เช��อมโยงฟ~ลดWระหว)าง string literal ก�บ outData ท��อย()ใน JMSoutData ด�งแสดงในร(ป

5. เราจะได�โปรแกรม BPEL ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 87: SOA Using GlassFishESB and NetBeans [in Thai]

57

6. Clean and Build โปรเจMค

7. การพ#ฒนาโปรเจ̀ค Composite Application

ข� นตอนน� เป�นการสร�าง Composite Application เพ��อท��ร�น JMSBPEL บน BPEL Engine ท��ใช�มาตรฐาน JBI โดยม�ข� นตอนด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น Composite

Application แล�วกด Next3. ก4าหนด Project Name เป�น JMSCompositeApp แล�วกด Finish4. ในหน�าต)าง Project เล�อกโหนด JMSCompositeApp แล�วคล2[กขวาเล�อก Add JBI Module5. ให�เล�อกโปรเจMค JMSBPEL แล�วกดป6zม Add Project JAR Files6. โปรแรม NetBeans จะเพ2�มโหนด JMSBPEL.jar ภายใต� JMSCompositeApp > JBI Module7. คล2[กขวาท�� JMSCompositeApp เล�อก Clean and Build 8. คล2[กท�� Service Assembly จะเหMนผลล�พธWด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 88: SOA Using GlassFishESB and NetBeans [in Thai]

58

8. การทดสอบโปรแกรมผlาน TestCase

1. ท4าการ Deploy โปรเจMค JMSCompositeApp2. ในหน�าต)าง Project เล�อกโหนด JMSCompositeApp > Test แล�วคล2[กขวาเล�อก New Test Case3. ในไดอะลMอก New Test Case ให�ก4าหนด Test Case Name: เป�น TestCase1 แล�วกด Next4. หน�าถ�ดไปใน JMSBPEL ให�เล�อกไฟลW WSDL เป�น JMSWSDL.wsdl แล�วกด Next5. ในหน�าถ�ดไปให�เล�อก JMSWSDLOperation แล�วกด Finish6. หน�าต)าง Editor จะแสดงไฟลW Input.xml ให�แก� source code ด�งน�

<soapenv:Body> <jms:JMSWSDLOperation> <inData>This is a test message</inData> </jms:JMSWSDLOperation> </soapenv:Body>

7. กดป6zม Save เล�อกโหนด TestCase1 แล�วคล2[กขวาเล�อก Run8. เป~ดโปรแกรม HermesJMS แล�วคล2[กท�� TestQueue จะได�ผลล�พธWด�งต�วอย)างในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 89: SOA Using GlassFishESB and NetBeans [in Thai]

59

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 90: SOA Using GlassFishESB and NetBeans [in Thai]

60

Exercise 10: BPEL Invoking Web Services

แบบฝ�กห�ดน� เป�นการเข�ยน Business Process ท��เร�ยกใช� Web Service ท��พ�ฒนาข- นมาโดยใช�ค4าส��ง Invoke แบบฝ�กห�ดน� จะพ�ฒนา Web Services ข- นม�สองช6ดค�อ DetermineRoomRate และ CalculateBookingPayment โปรแกรม Business Process ท��จะพ�ฒนาข- นจะอ)านข�อม(ลการจองท��พ�กมา แล�วเร�ยกใช�เวMบเซอรWว2ส DetermineRoomRate เพ��อหาอ�ตราค)าท��พ�ก จากน� นจะเร�ยกใช�เวMบเซอรWว2ส CalculateBookingPayment เพ��อค4านวณค)าท��พ�กท� งหมด จากน� นจะเกMบข�อม(ลการจองท��พ�กลงฐานข�อม(ล ซ-�ง Business Process ใหม)น� สามารถประกาศเป�น Web Service โดยใช� WSDL และเราจะท4าการพ�ฒนาโปรแกรม Web Application เพ��อเร�ยกใช� Business Process น� ผ)าน WSDL ด�งกล)าว

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนา Determine Room Rate Web Services2. พ�ฒนา Calculate Booking Payment Web Services3. พ�ฒนาโปรเจMค RoomBooking4. พ�ฒนา XML Schema 5. พ�ฒนาไฟลW WSDL6. Import ไฟลW WSDL และ XML Schema 7. พ�ฒนา Business Process8. พ�ฒนาโปรเจMค Composite Application9. ทดสอบโปรแกรมผ)าน TestCase10. เพ2�ม Business Process ส4าหร�บเกMบข�อม(ลลงฐานข�อม(ล11. พ�ฒนาโปรแกรม Web Application เพ��อเร�ยกใช� Business Process

1. การพ#ฒนา Determine Room Rate Web Services

ข� นตอนน� จะเป�นการพ�ฒนา Web Service ท��พ�ฒนาจาก EJB Module ท��ม� Business Logic ในการแจ�งราคาท��พ�กต)อค�น ท� งน� จะก4าหนดให� Web Service น� ม�ช��อเมธอดและ argument ด�งน�

double getRate(String roomType)

1.1 การสร�าง EJB Project เราจะก4าหนดโปรเจMคให�เป�น EJB Project ท� งน� เน��องจากแบบฝ�กห�ดน� จะพ�ฒนา Web Services จาก

Session Bean ซ-�งม�ข� นตอนการสร�างโปรเจMคด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 91: SOA Using GlassFishESB and NetBeans [in Thai]

61

1. เล�อกเมน( File => New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Java EE และเล�อก Project เป�น EJBModule

แล�วกด Next

3. ก4าหนด Project Name เป�น DetermineRoomRate แล�วเล�อก Project Location เป�น folder ท��เราต�องการจะเกMบ project ไว� กด Next

4. จากน� นเล�อก Server เป�น GlassFish V2 โดยก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด Finish

1.2 การพ�ฒนา Web Service

หล�กการพ�ฒนา Web Services ท��ด�น� น ควรจะน2ยาม interface ก)อนท��จะพ�ฒนาโปรแกรม implementation กล)าวค�อต�องก4าหนด XML Schema Definition (XSD) ก)อน แล�วน2ยามไฟลW WSDL ก)อนท��จะพ�ฒนาโปรแกรมในการ implement น2ยาม WSDL ด�งกล)าว แต)ในโปรเจMคน� เราจะใช�ว2ธ�อย)างง)ายในการสร�าง Web Service โดยการพ�ฒนาโปรแกรม implementation ข- นมาก)อน แล�วใช�โปรแกรม NetBeans สร�าง Interface (WSDL และ XSD) ท�หล�ง

ข� นตอนการสร�าง Web Service ม�ด�งน�

1. เล�อกหน�าต)าง Projects แล�วคล2[กขวาท��โหนด DetermineRoomRate จากน� นเล�อกค4าส��ง New > Oth-er...

2. ในไดอะลMอก New File ให�เล�อก Categories ท��ช��อ Web Services เล�อก File Types: เป�น Web Ser-vice แล�วกด Next

3. ก4าหนดค)า Web Service Name เป�น DetermineRateService และค)า Package เป�น ws ส)วนค)าอ��นๆเป�นด�งท��ต� งไว� ด�งร(ปแล�วกด Finish

4. โปรแกรมจะประกาศ Web Services ท��ช��อ DetermineRateService ในโหนด Web Services ของหน�าต)าง Project และหน�าต)าง Editor จะแสดงไฟลWท��ช��อ DetermineRateService .java โดยจะแสดงแทป Design

5. ในหน�าต)าง Editor ของไฟลW DetermineRateService.java เล�อกแทป Design กดป6zม Add Operation…

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 92: SOA Using GlassFishESB and NetBeans [in Thai]

62

6. ในไดอะลMอก Add Operation ก4าหนด Method เป�น getRate ชน2ดของ Return Type เป�น double และ เพ2�ม Input parameter ช��อ roomType ชน2ด String ด�งร(ปแล�วกด OK

7. คล2[กท��แทป Source ของ DetermineRoomRate.java และปร�บปร6งเมธอด processBooking ด�งน�

@WebMethod(operationName = "getRate") public double getRate(@WebParam(name = "roomType") String roomType) { if (roomType.equals("Deluxe")) { return 4000.0; } else if (roomType.equals("Superior")) { return 3000.0; } else { return 2000.0; } }

8. คล2[กขวาท��โหนด DetermineRoomRate จากน� นเล�อกค4าส��ง Clean and Build จากน� นคล2[กขวาท��โหนด DetermineRoomRate อ�กคร� ง แล�วเล�อก Deploy

2. การพ#ฒนา Calculating Booking Payment Web Services

ข� นตอนท��ผ)านมาเป�นการพ�ฒนา Web Service จาก EJB Module ในข� นตอนน� จะเป�นการพ�ฒนา Web Service อ�กว2ธ�หน-�ง โดยการพ�ฒนาจาก Web Application โดยม� Business Logic ในการค4านวณราคาค)าท��พ�กท��ต�องช4าระ ท� งน� จะก4าหนดให� Web Service น� ม�ช��อเมธอดท��ช��อ getPayment ซ-�งจะส)งข�อม(ลชน2ด double กล�บมาและม� argument ท��ช��อ dayLength ชน2ด int และ roomRate ชน2ด double นอกจากน� ข� นตอนน� จะสาธ2ตการใช� NetBeans ในการสร�างไฟลW XSD และ WSDL XML document ข- นมา

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 93: SOA Using GlassFishESB and NetBeans [in Thai]

63

2.1 การสร�าง Web Application Project เราจะก4าหนดโปรเจMคให�เป�น EJB Project ท� งน� เน��องจากแบบฝ�กห�ดน� จะพ�ฒนา Web Services จาก

Session Bean ซ-�งม�ข� นตอนการสร�างโปรเจMคด�งน�

1. เล�อกเมน( File => New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Java Web และเล�อก Projects เป�น Web Ap-

plication แล�วกด Next

3. ก4าหนด Project Name เป�น CalculatePayment แล�วเล�อก Project Location เป�น folder ท��เราต�องการจะเกMบ project ไว� กด Next

4. จากน� นเล�อก Server เป�น GlassFish V2 โดยก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด Finish

2.2 การพ�ฒนา Web Service

ข� นตอนการสร�าง Web Service จะเป�นเช)นเด�ยวก�บการพ�ฒนาในข� นตอนท�� 1.2 โดยจะก4าหนด Web Services ให�ม�ช��อว)า CalculateBookingPayment อย()ใน Package ท��ช��อ payment และม� operation ท��ช��อ getPayment ซ-�งม� source code ด�งน�

@WebMethod(operationName = "getPayment") public double getPayment(@WebParam(name = "dayLength") int dayLength, @WebParam(name = "roomRate") double roomRate) { return roomRate * dayLength; }

2.3 การตรวจด(ไฟลW XSD และ WSDL

โปรแกรม NetBeans จะสร�าง XML ไฟลWท��เป�น XSD เพ��อก4าหนด Schema ของ Datatype ของ Web Service ท��สร�างข- น และสร�างไฟลW WSDL เพ��อน2ยาม Web Service ท��สร�างข- น โดยเราสามารถท��จะเร�ยกด(ไฟลWเหล)าน� ได�ตามข� นตอนด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 94: SOA Using GlassFishESB and NetBeans [in Thai]

64

1. เล�อกหน�าต)าง Projects แล�วขยายแทป CalculatePayment > Web Services2. คล2[กขวาท��โหนด CalculateBookingPayment เล�อก Properties จะเหMนไดอะลMอกแสดงข- น แม�จะไม)ม�

Property ใดๆแสดงอย() แต)ท��ใต�ไดอะลMอกจะแสดงต4าแหน)ง url ของ WSDL ด�งน� 3. เป~ดโปรแกรม Web Browser และเร�ยก url ด�งกล)าวจะได� WSDL ด�งน�

−<definitions targetNamespace="http://ws/" name="CalculateBookingPaymentService">−<types>−<xsd:schema> <xsd:import namespace="http://ws/" schemaLocation="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/> </xsd:schema></types>−<message name="getPayment"> <part name="parameters" element="tns:getPayment"/></message>−<message name="getPaymentResponse"> <part name="parameters" element="tns:getPaymentResponse"/></message>−<portType name="CalculateBookingPayment">−<operation name="getPayment"> <input message="tns:getPayment"/> <output message="tns:getPaymentResponse"/></operation></portType>−<binding name="CalculateBookingPaymentPortBinding" type="tns:CalculateBookingPayment"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>−<operation name="getPayment"> <soap:operation soapAction=""/>−<input> <soap:body use="literal"/></input>−<output> <soap:body use="literal"/></output></operation></binding>−<service name="CalculateBookingPaymentService">−<port name="CalculateBookingPaymentPort" binding="tns:CalculateBookingPaymentPortBinding"> <soap:address location="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService"/></port></service></definitions>

4. เราจะเหMนบรรท�ดท��แสดงการเร�ยกใช� XML Schema ด�งน�

−<xsd:schema> <xsd:import namespace="http://ws/" schemaLocation="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/> </xsd:schema>

5. เราสามารถท��จะเร�ยก url ของ XSD ด�งกล)าว จากโปรแกรม Web Browser ซ-�งเราจะได� Web Service

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 95: SOA Using GlassFishESB and NetBeans [in Thai]

65

datatype definition ด�งน�

−<xs:schema version="1.0" targetNamespace="http://ws/"><xs:element name="getPayment" type="tns:getPayment"/><xs:element name="getPaymentResponse" type="tns:getPaymentResponse"/>

−<xs:complexType name="getPayment">−<xs:sequence>

<xs:element name="dayLength" type="xs:int"/><xs:element name="roomRate" type="xs:double"/>

</xs:sequence></xs:complexType>−<xs:complexType name="getPaymentResponse">−<xs:sequence>

<xs:element name="return" type="xs:double"/></xs:sequence></xs:complexType></xs:schema>

3 การพ#ฒนาโปรเจ̀ค RoomBooking

การพ�ฒนา Business Process ในแบบฝ�กห�ดน� จะต�องท4าการสร�างโปรเจMคข- นมาใหม) ซ-�งภายในโปรเจMคน� จะม�ไฟลW BPEL, XSD และ WSDL ท��เก��ยวข�องอย() โดยจะม�ข� นตอนสร�างโปรเจMคด�งน�

1. เล�อกเมน( File => New Project..2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น BPEL Module แล�วกด

Next3. ก4าหนด Project Name เป�น RoomBooking แล�วกด Finish

4 การพ#ฒนา XML Schema

ข� นตอนถ�ดไปเป�นการสร�างไฟลW XML Schema เพ��อก4าหนดร(ปแบบของ XML Datatype ท��จะใช�เป�น input argument ของ Business Process ท��จะพ�ฒนาข- น ซ-�งโปรแกรม NetBeans จะม� Wizard ในการสร�าง XML Schema อ�ตโนม�ต2 โดยม�ข� นตอนการพ�ฒนาด�งน�

4.1) สร�างไฟลW RoomBookingSchema.xsd

1. เล�อกหน�าต)าง Projects ขยายโหนด RoomBooking แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > Other..

2. ในไดอะลMอก New File เล�อก Categories: เป�น XML และ File Types: เป�น XML Schema แล�วกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 96: SOA Using GlassFishESB and NetBeans [in Thai]

66

3. ก4าหนด File Name: เป�น RoomBookingSchema แล�วกด Finish 4. หน�าต)าง Editor จะแสดงไฟลW RoomBookingSchema.xsd

4.2) สร�าง Complex Type ส4าหร�บ XML schema

7. ในไฟลW RoomBookingSchema.xsd เล�อกแทป Design แล�วลากไอคอน Complex Type ในหน�าต)าง Palette มาไว�ภายใต�โหนด Complex Type

8. โปรแกรม NetBeans จะเพ2�ม complex type ใหม)ท��ช��อ newComplexType ให�ก4าหนดช��อใหม)เป�น RoomBookingInput [อ�กว2ธ�ในการท��จะเพ2�ม Complex Type ค�อการคล2[กขวาท��โหนด Complex Types แล�วเล�อกค4าส��ง Add > Complex Type ]

9. ลากไอคอน Element ในหน�าต)าง Palette มาไว�ภายใต�โหนด RoomBookingInput โปรแกรม NetBeans จะเพ2�มโหนดใหม)ช��อ newElement [อ�กว2ธ�ในการท��จะเพ2�ม Element ค�อการคล2[กขวาท��โหนด RoomBookingInput แล�วเล�อกค4าส��ง Add > Element]

10. คล2[กขวาท��โหนด newElement แล�วเล�อก Properties11. ในไดอะลMอก newElement ก4าหนดค)า Name: เป�น firstName และเล�อกป6zม ellipse (...) ท��ค)า

Definition แล�วขยายโหนด Built-in Types ใน List แล�วเล�อกโหนด string โดยแล�วกดป6zม Close 12. ท4าซ 4าเพ��อเพ2�ม element ภายใต� RoomBookingInput ด�งน�

◦ lastName(Built-In Types/ string)◦ phone(Built-In Types/ string)◦ checkinDate(Built-In Types/ string)◦ lengthOfStay(Built-In Types/ int)◦ roomType(Built-In Types/ string)โดยจะได�หน�า Design ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 97: SOA Using GlassFishESB and NetBeans [in Thai]

67

13. จากน� นให�ใช�ว2ธ�เด�ยวก�นเพ��อสร�าง complex Type ท��ช��อ RoomBookingOutput ซ-�งจะม� element ด�งน� ◦ result(Built-In Types/ string)โดยจะได�หน�า Design ด�งร(ป

14. แล�วลากไอคอน Element ในหน�าต)าง Palette มาไว�ภายใต�โหนด Element โปรแกรม NetBeans จะเพ2�มโหนดใหม)ช��อ newElement ภายใต�โหนด Element

15. คล2[กขวาท��โหนด newElement แล�วเล�อก Properties16. ในไดอะลMอก newElement ก4าหนดค)า Name: เป�น RoomBookingRequest และเล�อกป6zม ellipse (...)

ท��ค)า Definition แล�วขยายโหนด Complex Types ใน List แล�วเล�อกโหนด RoomBookingInput ด�งร(ป

17. ท4าซ 4าเพ��อก4าหนด Element ท��ช��อ RoomBookingResponse ท��ม� datatype เป�น RoomBookingOutput โดยจะได�หน�า Design ด�งร(ป แล�วท4าการ Save

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 98: SOA Using GlassFishESB and NetBeans [in Thai]

68

18. เปล��ยนไปแทป Source จะเหMนรายละเอ�ยดของ XSD ด�งน�

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/RoomBookingSchema" xmlns:tns="http://xml.netbeans.org/schema/RoomBookingSchema" elementFormDefault="qualified"> <xsd:complexType name="RoomBookingInput"> <xsd:sequence> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> <xsd:element name="phone" type="xsd:string"/> <xsd:element name="checkInDate" type="xsd:string"/> <xsd:element name="lengthOfStay" type="xsd:int"/> <xsd:element name="roomType" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="RoomBookingOutput"> <xsd:sequence> <xsd:element name="result" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="RoomBookingRequest" type="tns:RoomBookingInput"/> <xsd:element name="RoomBookingResponse" type="tns:RoomBookingOutput"/></xsd:schema>

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 99: SOA Using GlassFishESB and NetBeans [in Thai]

69

5. การพ#ฒนาไฟลe WSDL

ข� นตอนถ�ดไปเป�นการสร�างไฟลW WSDL ส4าหร�บน2ยาม Business Process ท��จะพ�ฒนาข- น เพ��อให�สามารถเร�ยกใช�เป�นเวMบเซอรWว2สได� โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects ขยายโหนด RoomBooking แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > WSDL Document

2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น RoomBookingWSDL ก4าหนด WSDL Type: เป�น Concrete WSDL Document และก4าหนด Binding เป�น SOAP และ Types เป�น Document Literal แล�วกด Next

3. ในหน�าถ�ดไป ส4าหร�บส)วนของ Input: ก4าหนด Message Part Name เป�น inputData (เม��อใส)ค)าเสรMจแล�ว ต�องกดป6zม Enter ด�วยเสมอ ม2ฉะน� นค)าจะกล�บไปเป�น part1 เหม�อนเด2ม)

4. เล�อก Element or Type โดยเล�อกป6zม ellipse (...) แล�วเล�อก RoomBookingRequest ใต�โหนด Element ด�งร(ป

5. และส4าหร�บส)วนของ Output: ก4าหนด Message Part Name เป�น outputData และ Element or Type เป�น RoomBookingResponse โดยจะได�ไดอะลMอกด�งร(ป แล�วกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 100: SOA Using GlassFishESB and NetBeans [in Thai]

70

6. ในหน�าถ�ดไปให�คงค)าเด2มไว� แล�วกด Finish

6 การ Import ไฟลe XML Schema และ WSDL

ข� นตอนน� เป�นการ Import ไฟลW WSDL และ XML Schema ท��อย()ในโปรเจMค DetermineRoomRate และ CalculatePayment มาไว�ในโปรเจMค RoomBooking โดยม�ข� นตอนด�งน�

1. เล�อกหน�าต)าง Projects ขยายโหนด DetermineRoomRate > Webservices2. แล�วคล2[กขวาท��โหนด DetermineRateService แล�วเล�อกค4าส��ง Generate and Copy WSDL ..3. ในไดอะลMอก Generate and Copy WSDL ให�เล�อกไดเรMกทอร�� src ภายใต� RoomBooking ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 101: SOA Using GlassFishESB and NetBeans [in Thai]

71

4. ท4าข� นตอนข�างต�นซ 4าก�บ Web Service ท��ช��อ CalculateBookingPayment ในโปรเจMค CalculatePayment

7. การพ#ฒนา Business Process

ข� นตอนน� เป�นการสร�างไฟลW BPEL ส4าหร�บน2ยาม Business Process ท��จะใช�ในโปรเจMค โดยม�ข� นตอนการพ�ฒนาด�งน�

6 7.1 สร�างไฟลW RoomBookingProcess.bpel

1. เล�อกหน�าต)าง Projects ขยายโหนด BPEL แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > BPEL Process

2. ก4าหนด File Name: เป�น RoomBookingProcess แล�วกด Finish3. โปรแกรม NetBeans จะสร�างไฟลW RoomBookingProcess.bpel และหน�าต)าง Editor จะแสดงไฟลWใน

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 102: SOA Using GlassFishESB and NetBeans [in Thai]

72

โหมด designer

7.2 การเพ2�ม partner link

ข� นตอนน� จะท4าการก4าหนด partner link ส4าหร�บ Web Services สามช6ดค�อ DetermineRateService, BooksFacade และ RoomBookingWSDL โดยม�ข� นตอนด�งน�

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน RoomBookingWSDL.wsdl ในหน�าต)าง Project มาไว�ภายใต�หน�าต)าง design ทางด�านซ�ายม�อ (โดยให�ลากไปท��แทบเทาๆ และใส)

ใน )2. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ให�ก4าหนดค)า Name:

เป�น RoomBookingPartnerLink โดยการกดด�บเบ2 ลคล2[กท��ช��อ PartnerLink1 เด2มแล�วกด OK3. ลากไอคอน DetermineRateServiceService.wsdl ท��อย()ในหน�าต)าง Project ภายใต�โหนด

RoomBooking มาไว�ภายใต�หน�าต)าง design ทางด�านขวาม�อ [เราต�องท4าการ deploy โปรเจMคน� ก)อนท��จะสามารถก4าหนด partner link ได�]

4. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ให�ก4าหนดค)า Name: เป�น DetermineRatePartnerLink แล�วกด OK

5. ลากไอคอน CalculateBookingPaymentService.wsdl ท��อย()ในหน�าต)าง Project ภายใต�โหนด RoomBooking ,าไว�ภายใต�หน�าต)าง design [เราต�องท4าการ deploy โปรเจMคน� ก)อนท��จะสามารถก4าหนด partner link ได�]

6. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ให�ก4าหนดค)า Name: เป�น CalculatePaymentPartnerLink แล�วกด OK

เราจะได� BPEL Process ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 103: SOA Using GlassFishESB and NetBeans [in Thai]

73

7.3 การเพ2�มธ6รกรรม Receive

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต)าง Palette มาไว�ตรงบลMอกธ6รกรรมว)างเปล)า

2. โปรแกรมจะก4าหนดธ6รกรรม Receive ท��ช��อ Receive1 ด�งร(ป ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Receive1

3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ให�ก4าหนด Name: เป�น start และเล�อก Partner Link: เป�น RoomBookingPartnerLink

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 104: SOA Using GlassFishESB and NetBeans [in Thai]

74

Name: เป�น inData ด�งร(ป แล�วกด OK

6 7.4 การเพ2�มธ6รกรรม Reply

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)างธ6รกรรม start ก�บธ6รกรรม Process End

2. โปรแกรมจะก4าหนดธ6รกรรม Reply ท��ช��อ Reply1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Reply13. ในไดอะลMอก Reply1 [Reply] - – Property Editor ให�ก4าหนด Name: เป�น end และเล�อก Partner

Link: เป�น RoomBookingPartnerLink4. ในช)อง Output Variable: กดป6zม Create เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด

Name: เป�น outData แล�วกด OK

เราจะได� BPEL Process ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 105: SOA Using GlassFishESB and NetBeans [in Thai]

75

7.5 การเพ2�มธ6รกรรม Invoke ส4าหร�บ getRate

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง start ก�บธ6รกรรม end

2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Invoke1

3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น DetermineRate และเล�อก Partner Link: เป�น DetermineRatePartnerLink

4. ในช)อง operation: เล�อก getRate5. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด

Name: เป�น GetRateIn แล�วกด OK 6. ในช)อง Output Variable: กดป6zม Create เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด

Name: เป�น GetRateOut แล�วกด OK จะได� BPEL Process ด�งแสดงในร(ปท��

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 106: SOA Using GlassFishESB and NetBeans [in Thai]

76

7.6 การเพ2�มธ6รกรรม Invoke ส4าหร�บ getPayment

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม DetermineRate ก�บธ6รกรรม end

2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Invoke1

3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น CalculatePayment และเล�อก Partner Link: เป�น CalculatePaymentPartnerLink

4. ในช)อง Input Variable: กดป6zม Create.. เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น GetPaymentIn แล�วกด OK

5. ในช)อง Output Variable: กดป6zม Create.. เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด Name: เป�น GetPaymentOut แล�วกด OK จะได� BPEL Process ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 107: SOA Using GlassFishESB and NetBeans [in Thai]

77

7.7 การเพ2�มธ6รกรรม Assign

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม start ก�บธ6รกรรม DetermineRate

2. ก4าหนดช��อธ6รกรรม Assign1 เป�น AssignDetermineRateInput3. ในหน�าต)าง Editor เล�อกธ6รกรรม AssignDetermineRateInput ในหน�าต)าง BPEL Mapper ท4าการโยง

โหนด roomType ในส)วน inputData ทางด�านซ�ายเข�าก�บโหนด roomType ในส)วน outData ทางด�านขวา ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 108: SOA Using GlassFishESB and NetBeans [in Thai]

78

4. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม DetermineRate ก�บธ6รกรรม CalculatePayment

5. ก4าหนดช��อธ6รกรรม Assign1 เป�น AssignCalculatePaymentInput6. ในหน�าต)าง Editor เล�อกธ6รกรรม AssignCalculatePaymentInput ในหน�าต)าง BPEL Mapper ท4าการ

โยงโหนด return ในส)วน GetRateOut ในหน�าต)างด�านซ�ายเข�าก�บโหนด roomRate ในส)วน GetPaymentIn ในหน�าต)างด�านขวา และโยงโหนด lengthOfStay ในส)วน inData ในหน�าต)างด�านซ�ายเข�าก�บโหนด dayLength ในส)วน GetPaymentIn ด�งแสดงในร(ป

7. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม CalculatePayment ก�บธ6รกรรม end

8. ก4าหนดช��อธ6รกรรม Assign1 เป�น AssignResult9. ในหน�าต)าง Editor เล�อกธ6รกรรม AssignResult ในหน�าต)าง BPEL Mapper คล2[กท��โหนด result ใน

ส)วน outData โปรแกรมจะ highlight ส�น 4าเง2นในโหนดน� นด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 109: SOA Using GlassFishESB and NetBeans [in Thai]

79

10. เล�อก Concat operation จากเมน( String ท��อย()ส)วนบนของ BPELMapper ด�งร(ป

11. Mapper Canvas จะเพ2�มโหนด Concat ให�เพ2�มข�อความ 'your payment is ' ในช)อง String แรก และเช��อมโยงโหนด return ในส)วน GetPaymentOut ในหน�าต)างด�านซ�ายเข�าก�บช)อง String ท��สองของโหนด Concat และเช��อมโยงส)วน output String ของโหนด Concat เข�าก�บโหนด result ในส)วน outData ในหน�าต)างด�านซ�าย ด�งร(ป

12. เราจะได�โปรแกรม BPEL ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 110: SOA Using GlassFishESB and NetBeans [in Thai]

80

13. กดป6zม Save และ Clean and Build

8. การพ#ฒนาโปรเจ̀ค Composite Application

ข� นตอนน� เป�นการสร�าง Composite Application เพ��อท��ร�น RoomBookingProcess.bpel บน Open ESB โดยใช� BPEL SE ท��ใช�มาตรฐาน JBI โดยม�ข� นตอนด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น Composite

Application แล�วกด Next3. ก4าหนด Project Name เป�น RoomBookingCompositeApp แล�วกด Finish4. ในหน�าต)าง Project เล�อกโหนด RoomBookingCompositeApp แล�วคล2[กขวาเล�อก Add JBI Module5. ให�เล�อกโปรเจMค RoomBooking แล�วกดป6zม Add Project JAR Files6. โปรแรม NetBeans จะเพ2�มโหนด RoomBooking.jar ภายใต� RoomBookingCompositeApp > JBI

Module

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 111: SOA Using GlassFishESB and NetBeans [in Thai]

81

7. ท4าการ Clean and Build โปรเจMค RoomBookingCompositeApp8. หน�าต)าง CASA Editor จะแสดงด�งร(ป เราจะเหMนว)า RoomBooking ท��เป�น BPEL module จะถ(กเร�ยก

โดย SOAP request แต)ไม)เหMนว)า DetermineRatePartnerLink และ CalculatePaymentPartnerLink เร�ยกใช� Web Service ใด

9. เพ��อระบ6 Web Service ท��จะเร�ยกใช�ให�ลากไอคอน soap ท��อย()ใน palette มาไว�ในส)วน WSDL Ports ของ CASA Editor สองคร� ง และท4าการเช��อมโยงด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 112: SOA Using GlassFishESB and NetBeans [in Thai]

82

10. ระบ6 endpoint ของ WSDL port โดยการคล2[กขวาท�� casaPort1 แล�วเล�อก Properties แล�วก4าหนดค)า Location เป�น http://localhost:8080/DetermineRateServiceService/DetermineRateService และ Endpoint Name เป�น DetermineRate

11. คล2[กขวาท�� casaPort2 แล�วเล�อก Properties แล�วก4าหนดค)า Location เป�น http://localhost:8080/CalculatePayment/CalculateBookingPaymentService และ Endpoint Name เป�น CalculatePayment

12. ท4าการ Deploy โปรเจMค RoomBookingCompositeApp

9. การทดสอบโปรแกรมผlาน TestCase

โปรแกรม NetBeans จะม�เคร��องม�อท��ช)วยในการทดสอบ Composite Application ท��พ�ฒนาข- น โดยการร�นผ)าน TestCase ซ-�งม�ข� นตอนด�งน�

1. ในหน�าต)าง Project เล�อกโหนด RoomBookingCompositeApp > Test แล�วคล2[กขวาเล�อก New Test Case

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 113: SOA Using GlassFishESB and NetBeans [in Thai]

83

2. ในไดอะลMอก New Test Case ให�ก4าหนด Test Case Name: เป�น TestCase1 แล�วกด Next3. หน�าถ�ดไปใน RoomBooking ให�เล�อกไฟลW WSDL เป�น RoomBookingWSDL.wsdl แล�วกด Next4. ในหน�าถ�ดไปให�เล�อก RoomBookingWSDLOperation แล�วกด Finish5. หน�าต)าง Editor จะแสดงไฟลW Input.xml ให�แก� source code ส)วน inputData ด�งน�

<soapenv:Body> <room:RoomBookingRequest> <room:firstName>Thanachart</room:firstName> <room:lastName>Numnonda</room:lastName> <room:phone>027777777</room:phone> <room:checkInDate>21/05/2009</room:checkInDate> <room:lengthOfStay>3</room:lengthOfStay> <room:roomType>Deluxe</room:roomType> </room:RoomBookingRequest> </soapenv:Body>

6. กดป6zม Save เล�อกโหนด TestCase1 แล�วคล2[กขวาเล�อก Run7. จะเหMนผลล�พธWปรากฎในไฟลW Output.xml ด�งน�

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <ns1:RoomBookingResponse xmlns:msgns="http://j2ee.netbeans.org/wsdl/RoomBooking/RoomBookingWSDL" xmlns:ns1="http://xml.netbeans.org/schema/RoomBookinglSchema"> <ns1:result>Your payment is 12000.0</ns1:result> </ns1:RoomBookingResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

10. การพ#ฒนา Business Process เพv�อใหMเก`บขMอม5ลลงฐานขMอม5ล

ข� นตอนน� เป�นการพ�ฒนา Business Process เพ��อให�เกMบข�อม(ลการจองลง Table ท��ช��อ RoomBooking โดยม�ข� นตอนด�งน�

10.1 การสร�าง Table

ข� นตอนน� เป�นการสร�าง table ในฐานข�อม(ลเพ��อใช�เกMบข�อม(ลการจองท��พ�ก โดยใช�โปรแกรม NetBeans หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ RoomBooking ในฐานข�อม(ล MySQL ท��ช��อ test โดยก4าหนดให�ม� column ต)างๆ ด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 114: SOA Using GlassFishESB and NetBeans [in Thai]

84

id int Primary Key Auto IncreasefirstName VARCHAR(30)lastName VARCHAR(30)phone VARCHAR(10)payment double

หร�อร�น script file ด�งน� CREATE TABLE `test`.`roombooking` ( `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `firstName` VARCHAR(30) NOT NULL, `lastName` VARCHAR(30) NOT NULL, `phone` VARCHAR(10) NOT NULL, `payment` DOUBLE NOT NULL, PRIMARY KEY(`id`))

10.2 การพ�ฒนาไฟลW WSDL ส4าหร�บ DatabaseBinding

ข� นตอนถ�ดไปเป�นการก4าหนดไฟลW WSDL ท��ม� Binding เป�น Database ส4าหร�บเข�ยนลงในฐานข�อม(ล โดยม�ข� นตอนการพ�ฒนาด�งน�

8. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด RoomBooking ให�เล�อก New > WSDL Document ..9. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น RoomBookingDB ก4าหนด WSDL

Type: เป�น Concrete WSDL Document และก4าหนด Binding เป�น DATABASE และ Types เป�น Table จากน� นกด Next

10. ในหน�าถ�ดไป ก4าหนดค)า URL: เป�น jdbc:mysql://localhost:3306/test กด Next11. เล�อก Table: roombooking จาก Available Tables: ไปย�ง Selected Tables: และกด Next12. กด Next แล�วก4าหนดค)า JNDI Name เป�น jdbc/test กด Finish13. โปรแกรมจะสร�างไฟลWข- นมาสองไฟลWค�อ RoomBookingDB.wsdl ส4าหร�บอธ2บาย service ต)างๆ ของ

Table และ roombooking.xsd ส4าหร�บอธ2บาย XML Schema ของ Table14. เน��องจาก column ท��ช��อ id จะเป�น auto increment ด�งน� นเราจะแก�ไข insert operation โดยเล�อกไฟลW

RoomBookingDB.wsdl หน�าต)าง Editor จะแสดง Design View ของไฟลW ให�ขยายแทป Bindings > binding > insert > inputInsert ด�งแสดงในร(ป แล�วด(ท�� properties ของ jdbc:input จะเหMนค4าส��ง sql เป�น insert into roombooking (phone,payment,firstName,id,lastName) values (?,?,?,?,?)

ให�แก�ไขเป�น

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 115: SOA Using GlassFishESB and NetBeans [in Thai]

85

insert into roombooking (phone,payment,firstName,lastName) values (?,?,?,?)

และให�แก�ไข paramOrder จากphone,payment,firstName,id,lastName

เป�นphone,payment,firstName,lastName

10.3 การปร�บปร6ง Business Process

ข� นตอนถ�ดไปจะเป�นการปร�บปร6งไฟลW RoomBookingProcess.bpel โดยม�ข� นตอนด�งน�

10.3.1 การเพ2�ม partner link

1. เป~ดไฟลW RoomBookingProcess.bpel แล�วเล�อกแทป Design2. ลากไอคอน RoomBookingDB.wsdl ในหน�าต)าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต)าง

design

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 116: SOA Using GlassFishESB and NetBeans [in Thai]

86

3. ด�บเบ2 ลคล2[กตรงข�อความ PartnerLink1 และเปล��ยนช��อเป�น DBPartnerLink

10.3.2 การเพ2�มธ6รกรรม Invoke ส4าหร�บ storeBooking

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม AssignResult ก�บธ6รกรรม end

2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Invoke1

3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น StoreBooking และเล�อก Partner Link: เป�น DBPartnerLink

4. ในช)อง Input Variable: กดป6zม Create.. เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น InsertIn แล�วกด OK

5. ในช)อง Output Variable: กดป6zม Create.. เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด Name: เป�น InsertOut แล�วกด OK

10.3.3 การเพ2�มธ6รกรรม Assign

1. ในไฟลW RoomBookingProcess.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม AssignResult ก�บธ6รกรรม StoreBooking

2. ก4าหนดช��อธ6รกรรม Assign1 เป�น AssignDBInput3. ในหน�าต)าง Editor เล�อกธ6รกรรม AssignDBInput ในหน�าต)าง BPEL Mapper ท4าการโยงโหนดต)างๆ

ด�งน� • return ในส)วน GetPaymentOut เข�าก�บโหนด payment ในส)วน InsertIn• firstName ในส)วน inData เข�าก�บโหนด firstName ในส)วน InsertIn

• lastName ในส)วน inData เข�าก�บโหนด lastName ในส)วน InsertIn

• phone ในส)วน inData เข�าก�บโหนด phone ในส)วน InsertIn

ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 117: SOA Using GlassFishESB and NetBeans [in Thai]

87

4. เราจะได�โปรแกรม BPEL ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 118: SOA Using GlassFishESB and NetBeans [in Thai]

88

10.4 ท4าการ Deploy โปรเจMค

1. ท4าการ Clean and Build โปรเจMค RoomBooking ใหม)2. ท4าการ Clean and Build โปรเจMค RoomBookingCompositeApp ใหม) จะได� CASA Editor ด�งร(ป

3. ท4าการ Deploy โปรเจMค RoomBookingCompositeApp ใหม)4. ร�น TestCase1 อ�กคร� ง แล�วตรวจสอบข�อม(ลใน Table ท��ช��อ RoomBooking เราจะเหMนข�อม(ลด�งน�

11. พ#ฒนาโปรแกรม Web Application สSาหร#บ User Interface

โปรแกรม Business Process ท��พ�ฒนาข- นจะเป�น Web Services ท��ร�นอย()ใน GlassFish Application Server ซ-�งเราสามารถท��จะพ�ฒนาโปรแกรม Web Application เพ��อเป�นส)วน User Interface (Presentation) ในการเร�ยกใช� Business Process

11.1 การหาต4าแหน)ง URL ของ WSDL ส4าหร�บ Business Process

ข� นตอนน� จะเป�นการเร�ยกด( url ของ WSDL ส4าหร�บ Business Process ท��พ�ฒนาข- นด�งน�

1. เล�อกหน�าต)าง Projects ขยายโหนด RoomBookingCompositeApp แล�วด�บเบ2 ลคล2[ก Service Assembly โปรแกรมจะแสดง CASA Editor

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 119: SOA Using GlassFishESB and NetBeans [in Thai]

89

2. คล2[กท�� RoomBookingWSDLPort 3. ในหน�าต)าง properties ให�ท4าการ copy ค)าของ soap:address 4. ทดสอบโดยเป~ด Web Browser แล�ว paste ค)าท�� copy ไว� จากน� นให�ท4าการเปล��ยนค)าของ URL ให�เป�น

ด�งน� http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL

11.2 การพ�ฒนาโปรเจMค Web Application

ข� นตอนน� เป�นการพ�ฒนาโปรเจMค Web Application เพ��อให�ผ(�ใช�ปsอนข�อม(ลในการจองท��พ�ก ในหน�าเวMบ roomlBooking.html แล�วโปรแกรมจะเร�ยกโปรแกรม Servlet ท��ช��อ RoomBookingBP.java เพ��อแสดงผลล�พธWออกมา โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น Web และ Web Application แล�วกด Next3. ก4าหนด Project Name เป�น RoomBookingUI แล�วเล�อก Project Location เป�น folder ท��เราต�องการ

จะเกMบไฟลWไว� 4. จากน� นเล�อก Server เป�น GlassFish V2 ก4าหนด Jave EE Version: เป�น Java EE 5 แล�วกด Finish5. คล2[กขวาท��โหนด RoomBookingUI จากน� นเล�อกค4าส��ง New > Other… ให�เล�อก Categories เป�น

Web Services และ Web Service Client แล�วกด Next6. ในไดอะลMอก New Web Service Client ให�เล�อก WSDL URL: แล�วใส) URL เป�น

http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL ด�งแสดงในร(ป แล�วกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 120: SOA Using GlassFishESB and NetBeans [in Thai]

90

11.3 การพ�ฒนาโปรแกรม roomBooking.html

โปรแกรม roomBookingP.html เป�นเวMบเพจท��ใช�แสดงฟอรWมส4าหร�บให�ผ(�ใช�ปsอนข�อม(ลการจองท��พ�ก โดยม�ข� นตอนการพ�ฒนาด�งน�

1. ในไดอะลMอก New File ให�เล�อก Categories ท��ช��อ Web เล�อก File Types: เป�น HTML แล�วกด Next

2. ก4าหนด HTML File Name: เป�น roomBooking แล�วกด Finish

3. เข�ยน source code ของไฟลW roomBooking.html ตาม Listing ท�� 1

Listing 1 โปรแกรม roomBooking.html

<body> <form action="RoomBookingBP" method="POST"> First Name: <input name="firstName" /> <br>

Last Name: <input name="lastName" /> <br> Phone: <input name="phone" /> <br> Check in Date: <input name="checkInDate" /> <br> Length of stay: <input name="lengthOfStay" /> <br> Room type: <select name="roomType">

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 121: SOA Using GlassFishESB and NetBeans [in Thai]

91

<option value="Deluxe">Deluxe</option> <option value="Superior">Superior</option> <option value="Standard">Standard</option> </select> <br> <input type="submit" value="Book Room" /> </form> </body>

10.4 การพ�ฒนาโปรแกรม RoomBookingBP.java

โปรแกรม RoomBookingBP.java เป�นโปรแกรม Java Servlet ท��จะอ)านข�อม(ลการจองท��พ�ก ท��ผ(�ใช�ปsอนมาจากหน�า roomBooking.html และจะเร�ยก Web Process เพ��อแสดงผลล�พธW โดยม�ข� นตอนการพ�ฒนาโปรแกรมด�งน�

1. เล�อกหน�าต)าง Projects แล�วคล2[กขวาท��โหนด RoomBookingPUI จากน� นเล�อกค4าส��ง New > Other...2. ในไดอะลMอก New File ให�เล�อก Categories ท��ช��อ Web เล�อก File Types: เป�น Servlet แล�วกด Next

3. ก4าหนด File Name: เป�น RoomBookingBP และ Package: เป�น servlets กด Next แล�วกด Finish

4. ในหน�าต)าง Editor ให�คล2[กขวาภายในเมธอด processRequest แล�วเล�อก Web Service Client Re-sources > Call Web Service Operation เล�อกไปท�� RoomBookingWSDLOperation

5. ให�ปร�บปร6ง Source code ในเมธอด processRequest ด�งน�

protected void processRequest(HttpServletRequest request, HttpServletRe-sponse 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 RoomBooking</title>"); out.println("</head>"); out.println("<body>");

try { // Call Web Service Operation org.netbeans.j2ee.wsdl.roombooking.roombookingwsdl.RoomBook-

ingWSDLPortType port = service.getRoomBookingWSDLPort(); org.netbeans.xml.schema.roombookinglschema.RoomBookingInput

inputData = new org.netbeans.xml.schema.roombookinglschema.RoomBookingInput();

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 122: SOA Using GlassFishESB and NetBeans [in Thai]

92

String firstName = request.getParameter("firstName"); String lastName = request.getParameter("lastName"); String phone = request.getParameter("phone"); String checkInDate = request.getParameter("checkInDate"); String lengthOfStay = request.getParameter("lengthOfStay"); String roomType = request.getParameter("roomType"); int dayLength = Integer.parseInt(lengthOfStay); inputData.setFirstName(firstName); inputData.setLastName(lastName); inputData.setPhone(phone); inputData.setLengthOfStay(dayLength); inputData.setRoomType(roomType); org.netbeans.xml.schema.roombookinglschema.RoomBookingOutput

result = port.roomBookingWSDLOperation(inputData); out.println("Booking is done: " + result.getResult()); } catch (Exception ex) { } out.println("</body>"); out.println("</html>");

out.close();

}

6. Run ไฟลW roomBooking.html เพ��อทดสอบโปรแกรม

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 123: SOA Using GlassFishESB and NetBeans [in Thai]

93

Exercise 11: BPEL : Structured Activities

แบบฝ�กห�ดน� เป�นการเข�ยน BPEL 2.0 โดยเร�ยกใช� Structured Activities เช)น ForEach โดยจะสร�าง Business Process ข- นมาเพ��ออ)านข�อม(ลการส��งส2นค�า (PO) ซ-�งอาจม�รายการส2นค�าอย()หลายรายการและจะท4าการบ�นท-กรายการเหล)าน� นลงฐานข�อม(ล

ข��นตอนในการพ�ฒนาโปรแกรม

1. พ�ฒนาโปรเจMค BPELStructure2. พ�ฒนา XML Schema 3. พ�ฒนาไฟลW WSDL4. การพ�ฒนา WSDL เพ��อให�เกMบข�อม(ลลงฐานข�อม(ล 5. พ�ฒนา Business Process ส4าหร�บ ForEach 6. พ�ฒนาโปรเจMค Composite Application7. ทดสอบโปรแกรมผ)าน TestCase

1 การพ#ฒนาโปรเจ̀ค BPELStructure

การพ�ฒนา Business Process ในแบบฝ�กห�ดน� จะต�องท4าการสร�างโปรเจMคข- นมาใหม) ซ-�งภายในโปรเจMคน� จะม�ไฟลW BPEL, XSD และ WSDL ท��เก��ยวข�องอย() โดยจะม�ข� นตอนสร�างโปรเจMคด�งน�

1. เล�อกเมน( File => New Project..2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น BPEL Module แล�วกด

Next3. ก4าหนด Project Name เป�น BPELStructure แล�วกด Finish

2 การพ#ฒนา XML Schema

ข� นตอนถ�ดไปเป�นการสร�างไฟลW XML Schema เพ��อก4าหนดร(ปแบบของ XML Datatype ท��จะใช�เป�น input argument ของ Business Process ท��จะพ�ฒนาข- น โดยในท��น� จะก4าหนดเป�น PO.xsd ซ-�งโปรแกรม NetBeans จะม� Wizard ในการสร�าง XML Schema อ�ตโนม�ต2 โดยม�ข� นตอนการพ�ฒนาด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 124: SOA Using GlassFishESB and NetBeans [in Thai]

94

2.1) สร�างไฟลW PO.xsd

1. เล�อกหน�าต)าง Projects ขยายโหนด BPELStructure แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > Other..

2. ในไดอะลMอก New File เล�อก Categories: เป�น XML และ File Types: เป�น XML Schema แล�วกด Next

3. ก4าหนด File Name: เป�น PO แล�วกด Finish 4. หน�าต)าง Editor จะแสดงไฟลW PO.xsd

2.2) สร�าง Complex Type ส4าหร�บ XML schema

1. ในไฟลW PO.xsd เล�อกแทป Design แล�วลากไอคอน Element ในหน�าต)าง Palette มาไว�ภายใต�โหนด Elements

2. โปรแกรม NetBeans จะเพ2�ม element ใหม)ท��ช��อ newElement ให�ก4าหนดช��อใหม)เป�น PO 3. ลากไอคอน Sequence ในหน�าต)าง Palette มาไว�ภายใต�โหนด PO4. ลากไอคอน Element ในหน�าต)าง Palette มาไว�ภายใต�โหนด PO5. คล2[กขวาท��โหนด newElement แล�วเล�อก Properties6. ในไดอะลMอก newElement ก4าหนดค)า Name: เป�น PONumber และเล�อกป6zม ellipse (...) ท��ค)า

Definition แล�วขยายโหนด Built-in Types ใน List แล�วเล�อกโหนด integer โดยแล�วกดป6zม Close 7. ท4าซ 4าเพ��อเพ2�ม element ภายใต� POt ด�งน�

1. PODate(Built-In Types/ string)2. Items [ไม)ต�องระบ6 Data Type]

8. ลากไอคอน Sequence ในหน�าต)าง Palette มาไว�ภายใต�โหนด Items9. ลากไอคอน Element ในหน�าต)าง Palette สองช6ดมาไว�ภายใต�โหนด Items แล�วก4าหนดค)า เป�น Item 10. ลากไอคอน Sequence ในหน�าต)าง Palette มาไว�ภายใต�โหนด Item [ไม)ต�องระบ6 Data Type]11. คล2[กขวาท��โหนด Item แล�วเล�อก Properties แล�วก4าหนดค)า Max Occurs เป�น unbounded ด�งร(ป เพ��อ

ระบ6ว)า Item ม�ได�ไม)จ4าก�ดจ4านวน

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 125: SOA Using GlassFishESB and NetBeans [in Thai]

95

12. ลากไอคอน Element ในหน�าต)าง Palette สองช6ดมาไว�ภายใต�โหนด Item แล�วก4าหนดค)าด�งน� 3. ItemNumber(Built-In Types/ string)4. ItemQuantity(Built-In Types/ int)โดยจะได�หน�า Design ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 126: SOA Using GlassFishESB and NetBeans [in Thai]

96

3. การพ#ฒนาไฟลe WSDL

ข� นตอนถ�ดไปเป�นการสร�างไฟลW WSDL ส4าหร�บน2ยาม Business Process ท��จะพ�ฒนาข- น เพ��อให�สามารถเร�ยกใช�เป�นเวMบเซอรWว2สได� โดยม�ข� นตอนการพ�ฒนาด�งน�

1. เล�อกหน�าต)าง Projects ขยายโหนด BPELStructure แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > WSDL Document

2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น BPELStructureWSDL1 ก4าหนด WSDL Type: เป�น Concrete WSDL Document และก4าหนด Binding เป�น SOAP และ Types เป�น Document Literal แล�วกด Next

3. ในหน�าถ�ดไป ก4าหนด Operation Type เป�น One-Way Operation ส4าหร�บส)วนของ Input: ก4าหนด Message Part Name เป�น inputData

4. เล�อก Element or Type โดยเล�อกป6zม ellipse (...) แล�วเล�อก PO ใต�โหนด Element แล�วกด Next 5. ในหน�าถ�ดไปให�คงค)าเด2มไว� แล�วกด Finish

4. การพ#ฒนา WSDL เพv�อใหMเก`บขMอม5ลลงฐานขMอม5ล

ข� นตอนน� เป�นการก4าหนด WSDL ส4าหร�บการจ�ดการ Table ท��ช��อ purchasingorder โดยม�ข� นตอนด�งน�

4.1 การสร�าง Table

ข� นตอนน� เป�นการสร�าง table ในฐานข�อม(ลเพ��อใช�เกMบข�อม(ลการจองท��พ�ก โดยใช�โปรแกรม NetBeans หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ purchasingorder ในฐานข�อม(ล MySQL ท��ช��อ test โดยก4าหนดให�ม� column ต)างๆ ด�งน�

orderNumber int Primary Key Auto IncreasePONumber intitemNumber VARCHAR(45)itemQuantity int

4.2 การพ�ฒนาไฟลW WSDL ส4าหร�บ DatabaseBinding

ข� นตอนถ�ดไปเป�นการก4าหนดไฟลW WSDL ท��ม� Binding เป�น Database ส4าหร�บเข�ยนลงในฐานข�อม(ล โดยม�ข� นตอนการพ�ฒนาด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 127: SOA Using GlassFishESB and NetBeans [in Thai]

97

1. เล�อกหน�าต)าง Projects คล2[กขวาท��โหนด BPELStructure ให�เล�อก New > WSDL Document ..2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เป�น PurchasingOrderDB ก4าหนด

WSDL Type: เป�น Concrete WSDL Document และก4าหนด Binding เป�น DATABASE และ Types เป�น Table จากน� นกด Next

3. ในหน�าถ�ดไป ก4าหนดค)า URL: เป�น jdbc:mysql://localhost:3306/test กด Next4. เล�อก Table: purchasingorder จาก Available Tables: ไปย�ง Selected Tables: และกด Next5. กด Next แล�วก4าหนดค)า JNDI Name เป�น jdbc/test กด Finish6. โปรแกรมจะสร�างไฟลWข- นมาสองไฟลWค�อ PurchasingOrderDB.wsdl ส4าหร�บอธ2บาย service ต)างๆ ของ

Table และ purchasingorder.xsd ส4าหร�บอธ2บาย XML Schema ของ Table7. เน��องจาก column ท��ช��อ orderNumber จะเป�น auto increment ด�งน� นเราจะแก�ไข insert operation

โดยเล�อกไฟลW PurchasingOrder.wsdl หน�าต)าง Editor จะแสดง Design View ของไฟลW ให�ขยายแทป Bindings > binding > insert > inputInsert แล�วด(ท�� properties ของ jdbc:input จะเหMนค4าส��ง sql เป�น

insert into purchasingorder (itemNumber,PONumber,orderNumber,itemQuantity) values (?,?,?,?)

ให�แก�ไขเป�นinsert into purchasingorder (itemNumber,PONumber,itemQuantity) values (?,?,?)

และให�แก�ไข paramOrder จากitemNumber,PONumber,orderNumber,itemQuantity

เป�นitemNumber,PONumber,itemQuantity

5. การพ#ฒนา Business Process สSาหร#บ ForEach

ข� นตอนน� เป�นการสร�างไฟลW BPEL ส4าหร�บน2ยาม Business Process ส4าหร�บการสาธ2ตการใช�ค4าส��ง ForEach โดยม�ข� นตอนการพ�ฒนาด�งน�

6 5.1 สร�างไฟลW BPELStructureProcess1.bpel

1. เล�อกหน�าต)าง Projects ขยายโหนด BPEL แล�วคล2[กขวาท��โหนด Process Files จากน� นเล�อกค4าส��ง New > BPEL Process

2. ก4าหนด File Name: เป�น BPELStructureProcess1 แล�วกด Finish3. โปรแกรม NetBeans จะสร�างไฟลW BPELStructureProcess1.bpel และหน�าต)าง Editor จะแสดงไฟลWใน

โหมด designer

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 128: SOA Using GlassFishESB and NetBeans [in Thai]

98

5.2 การเพ2�ม partner link

1. ในไฟลW BPELStructureProcess1.bpel เล�อกแทป Design แล�วลากไอคอน BPELStructureWSDL1.wsdl ในหน�าต)าง Project มาไว�ภายใต�หน�าต)าง design ทางด�านซ�ายม�อ (

โดยให�ลากไปท��แทบเทาๆ และใส)ใน )2. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ให�ก4าหนดค)า Name:

เป�น BPELStructurePartnerLink โดยการกดด�บเบ2 ลคล2[กท��ช��อ PartnerLink1 เด2มแล�วกด OK3. ลากไอคอน PurchasingOrderDB.wsdl ท��อย()ในหน�าต)าง Project ภายใต�โหนด BPELStructure มา

ไว�ภายใต�หน�าต)าง design ทางด�านขวาม�อ [เราต�องท4าการ deploy โปรเจMคน� ก)อนท��จะสามารถก4าหนด partner link ได�]

4. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ให�ก4าหนดค)า Name: เป�น DBPartnerLink แล�วกด OK

5.3 การเพ2�มธ6รกรรม Receive

1. ในไฟลW BPELStructureProcess1.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต)าง Palette มาไว�ตรงบลMอกธ6รกรรมว)างเปล)า

2. โปรแกรมจะก4าหนดธ6รกรรม Receive ท��ช��อ Receive1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Receive1

3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ให�ก4าหนด Name: เป�น start และเล�อก Partner Link: เป�น BPELStructurePartnerLink

4. ในช)อง Input Variable: กดป6zม Create เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น inData แล�วกด OK

5.4 การเพ2�มธ6รกรรม ForEach

1. ในไฟลW BPELStructureProcess1.bpel เล�อกแทป Design แล�วลากไอคอน ForEach ในหน�าต)าง Palette มาไว�ในหน�าต)าง design ระหว)าง ธ6รกรรม start ก�บธ6รกรรม Process end

2. โปรแกรมจะก4าหนดธ6รกรรม ForEach ท��ช��อ ForEach1 จะส�งเกต6เหMนว)าโปรแกรมแสดง Error เก2ดข- นเน��องจากเราย�งไม)ได�ก4าหนด parameters ใน ForEach

3. ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม ForEach1 โปรแกรมจะแสดง BPEL Mapper คล2[กท��โหนด

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 129: SOA Using GlassFishESB and NetBeans [in Thai]

99

Start Value ในส)วน For Each โปรแกรมจะ highlight ส�น 4าเง2นในโหนดน� น4. เล�อก Number Literal จากเมน( Number ท��อย()ส)วนบนของ BPELMapper แล�วเปล��ยนค)าเป�น 1 และ

เช��อมโยงไปย�ง Start Value ด�งร(ป

5. คล2[กท��โหนด Final Value ในส)วน For Each เล�อก Count จากเมน( Node ท��อย()ส)วนบนของ BPELMapper แล�วท4าการโยงโหนด item ในส)วน items > inputData > inData ทางด�านซ�ายเข�าก�บโหนด NodeSet ของ Count และโยงโหนด Number ของ Count ก�บโหนด Final Value ในส)วน For Each ทางด�านขวา ด�งแสดงในร(ป

6. กด Save

5.5 การเพ2�มธ6รกรรม Invoke ส4าหร�บ storePO

1. ในไฟลW BPELStructureProcess1.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต)าง Palette มาไว�ในธ6รกรรม ForEach1

2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต)าง Design ให�ด�บเบ2 ลคล2[กธ6รกรรม Invoke1

3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ให�ก4าหนด Name: เป�น storePO และเล�อก Partner Link: เป�น DBPartnerLink

4. ในช)อง Input Variable: กดป6zม Create.. เม��อไดอะลMอก New Input Variable แสดงข- น ให�ก4าหนด Name: เป�น InsertIn แล�วกด OK

5. ในช)อง Output Variable: กดป6zม Create.. เม��อไดอะลMอก New Output Variable แสดงข- น ให�ก4าหนด Name: เป�น InsertOut แล�วกด OK

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 130: SOA Using GlassFishESB and NetBeans [in Thai]

100

5.6 การเพ2�มธ6รกรรม Assign และก4าหนด Predicate

1. ในไฟลW BPELStructureProcess1.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต)าง Palette มาไว�ในภายในธ6รกรรม ForEach1 ก)อนหน�าธ6รกรรม storePO ด�งร(ป

2. ด�บเบ2 ลคล2[กธ6รกรรม Assign1 เราจะก4าหนดค)าจาก Items ในการปsอนข�อม(ลลงฐานข�อม(ล ในการน� เราจะต�องน2ยาม predicate เพ��อสร�าง index list ของ Item ท��จะท4าให�เราเข�ยนการวนรอบได�

3. ในหน�าต)าง BPELMapper ขยายโหนด inData > inputData > Items แล�วคล2[กขวาท��โหนด Item เล�อกค4าส��ง Add Predicate... ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 131: SOA Using GlassFishESB and NetBeans [in Thai]

101

4. ในไดอะลMอก Predicate Editor เช��อมโยงโหนด ForEach1Counter ในส)วน ForEach1 ทางด�านซ�ายม�อก�บโหนด Predicate ทางด�านขวาม�อด�งร(ป แล�วกด OK

5. ในหน�าต)าง BPELMapper ท4าการโยงโหนดต)างๆด�งน� 5. PONumber ในส)วน inputData เข�าก�บโหนด PONumber ในส)วน InsertIn6. ItemNumber ในส)วน Item[$ForEach1Counter] เข�าก�บโหนด itemNumber ในส)วน

InsertIn

7. ItemQuantity ในส)วน Item[$ForEach1Counter] เข�าก�บโหนด itemQuantity ในส)วน InsertIn

ด�งแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 132: SOA Using GlassFishESB and NetBeans [in Thai]

102

6. เราจะได�โปรแกรม BPEL ด�งแสดงในร(ป

7. กดป6zม Save และ Clean and Build

6. การพ#ฒนาโปรเจ̀ค Composite Application

ข� นตอนน� เป�นการสร�าง Composite Application เพ��อท��ร�น BPELStructureProcess1.bpel บน Open ESB โดยใช� BPEL SE ท��ใช�มาตรฐาน JBI โดยม�ข� นตอนด�งน�

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 133: SOA Using GlassFishESB and NetBeans [in Thai]

103

1. เล�อกเมน( File > New Project2. ในไดอะลMอก New Project ให�เล�อก Categories เป�น SOA และ Projects เป�น Composite

Application แล�วกด Next3. ก4าหนด Project Name เป�น BPELStructureCompositeApp แล�วกด Finish4. ในหน�าต)าง Project เล�อกโหนด BPELStructureCompositeApp แล�วคล2[กขวาเล�อก Add JBI Module5. ให�เล�อกโปรเจMค BPELStructure แล�วกดป6zม Add Project JAR Files6. โปรแรม NetBeans จะเพ2�มโหนด BPELStructure.jar ภายใต� RoomBookingCompositeApp > JBI

Module7. ท4าการ Clean and Build โปรเจMค BPELStructureCompositeApp8. หน�าต)าง CASA Editor จะแสดงด�งร(ป

9. ท4าการ Deploy โปรเจMค BPELStructureCompositeApp

7. การทดสอบโปรแกรมผlาน TestCase

โปรแกรม NetBeans จะม�เคร��องม�อท��ช)วยในการทดสอบ Composite Application ท��พ�ฒนาข- น โดยการร�นผ)าน TestCase ซ-�งม�ข� นตอนด�งน�

1. ในหน�าต)าง Project เล�อกโหนด BPELStructureCompositeApp > Test แล�วคล2[กขวาเล�อก New Test Case

2. ในไดอะลMอก New Test Case ให�ก4าหนด Test Case Name: เป�น TestCase1 แล�วกด Next

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

Page 134: SOA Using GlassFishESB and NetBeans [in Thai]

104

3. หน�าถ�ดไปใน BPELStructure ให�เล�อกไฟลW WSDL เป�น BPELStructureWSDL1.wsdl แล�วกด Next

4. ในหน�าถ�ดไปให�เล�อก BPELStructureWSDL1Operation แล�วกด Finish5. หน�าต)าง Editor จะแสดงไฟลW Input.xml ให�แก� source code ส)วน inputData ด�งน�

<soapenv:Body> <po:PO> <po:PONumber>1234</po:PONumber> <po:PODate>2009-5-5T12:12:13.123456</po:PODate> <po:Items> <!--1 or more repetitions:--> <po:Item> <po:ItemNumber>101</po:ItemNumber> <po:ItemQuantity>3</po:ItemQuantity> </po:Item> <po:Item> <po:ItemNumber>102</po:ItemNumber> <po:ItemQuantity>2</po:ItemQuantity> </po:Item> <po:Item> <po:ItemNumber>201</po:ItemNumber> <po:ItemQuantity>5</po:ItemQuantity> </po:Item> </po:Items> </po:PO> </soapenv:Body>

6. กดป6zม Save เล�อกโหนด TestCase1 แล�วคล2[กขวาเล�อก Run7. เราสามารถด(ผลล�พธWจาก Table ท��ช��อ purchasingorder ได�ด�งร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan