Download as pdf or txt
Download as pdf or txt
You are on page 1of 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
2

Exercises

Exercise 1: Calling External Web Services


Exercise 2: Java Web Service
Exercise 3: RESTful Web Services
Exercise 4: Twitter Web Services and Google
Calendar API
Exercise 5: Google Map Web Services
Exercise 6: Developing a Simple Synchronous BPEL
program
Exercise 7: BPEL for writing to file
Exercise 8: BPEL for Writing to Database
Exercise 9: BPEL for Sending Message to a JMS
Queue
Exercise 10: BPEL Invoking Web Services
Exercise 11: BPEL : Structured Activities

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน Java Web และ Web Application แลวกด
Next
3. ก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
4

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

3. ในหนาต)าง Projects จะม Folder ทชอ Web Service References ข-นมา


4. คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน PTTServlet และ
Package: เปน servlets แลวกด Finish
5. คล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
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
6

การทดลองท 2

1. คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Web Service Client แลวกด Next
2. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน
http://www.webservicex.com/CurrencyConvertor.asmx?wsdl
3. คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน CurrencyServlet และ
Package: เปน servlets แลวกด Finish
4. คล2[กขวาภายในเมธอด processRequest ในไฟลW CurrencyServlet.java แลวเลอก Web Service
Client Resources > Call Web Service Operation เลอก ConversionRate แลวกด OK
5. แกไขไฟล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 แลวกด Next
2. ในไดอะล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
7

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

6. Run ไฟลW
7. ทดสอบโปรแกรมโดยใส) ?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
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 > Plugins


2. ในไดอะล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 Project


2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Web Services Testing Project
แลวกด Next
3. ก4าหนด Project Name เปน CurrencyExcangeWSTestProject แลวเลอก Project Location เปน
folder ทเราตองการจะเกMบไฟลWไว

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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 Servlet
2. 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 Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน Java Web และ Projects เปน Web
Application แลวกด Next
3. ก4าหนด Project Name เปน TaxWSDemo แลวเลอก Project Location เปน folder ทเราตองการจะ
เกMบไฟลWไว
4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish
5. คล2[กขวาทโหนด TaxWSDemo จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web
Services และ Web Service แลวกด Next
6. ในไดอะลMอก New Web Service ก4าหนด Web Service Name: เปน TaxServices และ Package:
เปน ws แลวกด Finish
7. โปรแกรมจะประกาศ Web Services ทชอ TaxServices ในโหนด Web Services ของหนาต)าง
Project และหนาต)าง Editor จะแสดงไฟลWทชอ TaxServices.java

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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;
}
}

TaxWSDemo จากนนเลอกค4าสง Clean and Build จากนนคล2[กขวาทโหนด


11. คล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
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
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
5

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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
8

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

5. กดป)*ม Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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
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
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
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
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 editor.
username=thananum@yahoo.com
password=xxxxxxxx

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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
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
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
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
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
12

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 Key


name VARCHAR(60)
address VARCHAR(100)
city VARCHAR(30)
zipcode VARCHAR(5)

หรอรนไฟลW bkk_hospital.sql
CREATE TABLE `test`.`bkk_hospital` (
`hospital_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(60) NOT NULL,
`address` VARCHAR(100) NOT NULL,
`city` VARCHAR(30) NOT NULL,
`zipcode` VARCHAR(5) NOT NULL,
PRIMARY KEY(`hospital_id`)
)
ENGINE = InnoDB;

ขนตอนต)อมาใหใส)ขอม(ลรายละเอยดทอย()ของโรงพยาบาลใน 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
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
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
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
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
6

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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ค HelloBPEL
2. พฒนา XML Schema
3. พฒนาไฟลW WSDL
4. พฒนา BPEL Process
5. พฒนาโปรเจMค Composite Application

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

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


การพฒนาดงน

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


2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลวกด
Next
3. ก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
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
9

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

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


ใตโหนด simpleProcess โปรแกรม NetBeans จะเพ2มโหนดใหม)ชอ newElement
2. คล2[กขวาทโหนด newElement แลวเลอก Properties
3. ในไดอะล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 แลวเลอก Properties
3. ในไดอะล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
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
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
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
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 แลวกด Finish
3. โปรแกรม NetBeans จะสรางไฟลW HelloProcess.bpel และหนาต)าง Editor จะแสดงไฟลWในโหมด
designer ดงร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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
16

4. ในช)อง Output Variable: กดป6มz 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
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
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
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
20

Exercise 7: BPEL for Writing to File

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


BPEL

ขนตอนในการพฒนาโปรแกรม
12. พฒนาโปรเจMค FileBPEL
13. พฒนาไฟลW WSDL ส4าหรบ SOAPBinding
14. พฒนาไฟลW WSDL ส4าหรบ FileBinding
15. พฒนา BPEL Process
16. พฒนาโปรเจMค Composite Application
17. ทดสอบโปรแกรมผ)าน TestCase
18. ทดสอบโปรแกรมผ)าน Web Application

1. การพ#ฒนาโปรเจ`ค FileBPEL
แบบฝกหดนจะท4าการสรางโปรเจMคส4าหรบ Service Oriented Architecture ข-นมาใหม) โดยจะมขนตอน
การพฒนาดงน
6. เลอกเมน( File > New Project
7. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลว
กด Next
8. ก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
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
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
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
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 Process


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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
25

3.2 การเพ2ม partner link

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


ในแทบเทาทางซายมอภายใตหนาต)าง design
2. ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน DataIOPartnerLink
3. ลากไอคอน 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รกรรม Reply1
3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner
Link: เปน DataIOPartnerLink
4. ในช)อง 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
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 ช)องท 1
2. ‘ ‘ เปน String ช)องท 2
3. lastName เขาเปน String ช)องท 3
4. ‘ => ‘ เปน String ช)องท 4
5. salary เขาเปน String ช)องท 5
6. จากนนเชอมโยง 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
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
28

2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite
Application แลวกด Next
3. ก4าหนด Project Name เปน FileCompositeApp แลวกด Finish
4. ในหนาต)าง Project เลอกโหนด FileCompositeApp แลวคล2[กขวาเลอก Add JBI Module..
5. ใหเลอกโปรเจMค FileBPEL แลวกดป6zม Add Project JAR Files
6. โปรแรม NetBeans จะเพ2มโหนด FileBPEL.jar ภายใต FileCompositeApp > JBI Module
7. คล2[กขวาท FileCompositeApp เลอก Clean and Build
8. คล2[กท Service Assembly จะเหMนผลลพธWดงแสดงในร(ปท 8

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

5. การทดสอบโปรแกรมผlาน TestCase
9. ท4าการ Deploy โปรเจMค FileCompositeApp
10. ในหนาต)าง Project เลอกโหนด FileCompositeApp > Test แลวคล2[กขวาเลอก New Test Case
11. ในไดอะลMอก New Test Case ใหก4าหนด Test Case Name: เปน TestCase1 แลวกด Next
12. หนาถดไปใน FileBPEL ใหเลอกไฟลW WSDL เปน DataIO.wsdl แลวกด Next
13. ในหนาถดไปใหเลอก DataIOOperation แลวกด Finish
14. หนาต)าง Editor จะแสดงไฟลW Input.xml ใหแก source code ดงน
<id>1234</id>
<firstName>Somjai</firstName>
<lastName>Jaidee</lastName>
<salary>38000</salary>
15. กดป6zม Save เลอกโหนด TestCase1 แลวคล2[กขวาเลอก Run
16. จะเหMนผลลพธWปรากฎในไฟลW Output.xml ดงแสดงในร(ปท 9

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน Web และ Web Application แลวกด Next
3. ก4าหนด Project Name เปน FileBPUI แลวเลอก Project Location เปน folder ทเราตองการจะเกMบ
ไฟลWไว
4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish
5. ในช)อง Frameworks ใหเลอก Visual Web JavaServer Faces จากนนกด Finish
6. คล2[กขวาทโหนด FileBPUI จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web
Services และ Web Service Client แลวกด Next
7. ในไดอะล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
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
resultText
10. กดป6zม Save
11. ท4าการคล2[กขวาท inputID แลวเลอก Add Binding Attribute ดงแสดงในร(ปท 11

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
31

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

12. ท4าการAdd Binding Attribute ท inputFirstName, inputLastName และ inputSalary


13. ดบเบ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
32

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

15. และไฟลW result.txt ในไดเรMกทอร c:\SOA\_output จะมขอม(ลดงน


Somjai Jaidee => 38000
Nipa Jinjai => 738000

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
33

Exercise 8: BPEL for Writing to Database

แบบฝกหดนเปนการสราง Business Process เพอเขยนขอม(ลลงในฐานขอม(ล โดยใชโปรแกรม


Business Process ทพฒนาโดยใช GlassFish Open ESB ผ)าน Database Binding Component

ขนตอนในการพฒนาโปรแกรม
1. สราง Table, Connection Pool และ JDBC Resources
2. พฒนาโปรเจMค DBBPEL
3. พฒนาไฟลW WSDL ส4าหรบ DatabaseBinding
4. พฒนาไฟลW WSDL ส4าหรบ SOAPBinding
5. พฒนา BPEL Process
6. พฒนาโปรเจMค Composite Application
7. ทดสอบโปรแกรมผ)าน TestCase
8. ทดสอบโปรแกรมผ)าน 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 Key
firstName VARCHAR(30)
lastName VARCHAR(30)
salary DOUBLE
หรอรนไฟลW employee.sql
DROP 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
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 soa
2. Password admin
3. PortNumber 3306
4. ServerName localhost
5. 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
35

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

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

9. กด OK
10. ใช 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/soa


12. ส4าหรบ User Name: และ Password: ใหใส)ค)าตามทก4าหนดไวในตอนต2ดตงโปรแกรม MySQL ซ-งในท
นจะมค)าเปน root และ admin ดงแสดงในร(ปท 5 กด OK 2 ครง

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลว
กด Next
3. ก4าหนด Project Name เปน DBBPEL แลวกด Finish

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 กด Next
4. เลอก Table: Employee จาก Available Tables: ไปยง Selected Tables: และกด Next
5. กด Next แลวก4าหนดค)า JNDI Name เปน jdbc/soa กด Finish
6. โปรแกรมจะสรางไฟล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
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 Process


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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
39

designer

5.2 การเพ2ม partner link

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


Project มาไวในแทบเทาทางซายมอภายใตหนาต)าง design
2. ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน DatabaseWSDLPartnerLink
3. ลากไอคอน 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รกรรม Reply1
3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner
Link: เปน DatabaseWSDLPartnerLink
4. ในช)อง 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
40

หนาต)าง design ระหว)าง start กบธ6รกรรม end


2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ทชอ Invoke1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม
Invoke1
3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ใหก4าหนด Name: เปน invokeWriteToDB และ
เลอก Partner Link: เปน DBPartnerLink และเลอก Operation: เปน insert
4. ในช)อง 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 > firstName
3. lastName > lastName
4. 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
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
42

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


2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite
Application แลวกด Next
3. ก4าหนด Project Name เปน DBCompositeApp แลวกด Finish
4. ในหนาต)าง Project เลอกโหนด DBCompositeApp แลวคล2[กขวาเลอก Add JBI Module
5. ใหเลอกโปรเจMค DBBPEL แลวกดป6zม Add Project JAR Files
6. โปรแรม NetBeans จะเพ2มโหนด DBBPEL.jar ภายใต DBCompositeApp > JBI Module
7. คล2[กขวาท DBCompositeApp เลอก Clean and Build
8. คล2[กท Service Assembly จะเหMนผลลพธWดงแสดงในร(ปท 12

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

7. การทดสอบโปรแกรมผlาน TestCase
1. ท4าการ Deploy โปรเจMค DBCompositeApp
2. ในหนาต)าง Project เลอกโหนด DBCompositeApp > Test แลวคล2[กขวาเลอก New Test Case
3. ในไดอะลMอก New Test Case ใหก4าหนด Test Case Name: เปน TestCase1 แลวกด Next
4. หนาถดไปใน DBBPEL ใหเลอกไฟลW WSDL เปน DatabaseWSDL.wsdl แลวกด Next
5. ในหนาถดไปใหเลอก DatabaseWSDLOperation แลวกด Finish
6. หนาต)าง 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
43

<tab:firstName>Somjai</tab:firstName>
</tab:employee_Record>
7. กดป6zม Save เลอกโหนด TestCase1 แลวคล2[กขวาเลอก Run
8. จะเห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:address
3. ทดสอบโดยเป~ด Web Browser แลว paste ค)าท copy ไว จากนนใหท4าการเปลยนค)าของ URL ใหเปน
ดงน http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL

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


ขอม(ลลงฐานขอม(ล โดยมขนตอนการพฒนาดงน
1. เลอกเมน( File > New Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน Web และ Web Application แลวกด Next
3. ก4าหนด Project Name เปน DBBPUI แลวเลอก Project Location เปน folder ทเราตองการจะเกMบ
ไฟลWไว

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
44

4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish
5. ในช)อง Frameworks ใหเลอก Visual Web JavaServer Faces จากนนกด Finish
6. คล2[กขวาทโหนด DBBPUI จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web
Services และ Web Service Client แลวกด Next
7. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน
http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL แลวกด Finish
8. เลอกไปท Page1.jsp ท4าการออกแบบ Page Layout ดงแสดงในร(ปท 15

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

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

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


Object id text
Type
Label lbID ID:
Text Field inputID
Label lbFirstName FirstName:

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
45

Object id text
Type
Text Field inputFirstName
Label lbLastName LastName:
Text Field inputLastName
Label lbSalary Salary:
Text Field inputSalary
Button BtnSubmit Submit
Static Text resultText

10. กดป6zม Save


11. ท4าการคล2[กขวาท inputID แลวเลอก Add Binding Attribute ดงแสดงในร(ปท 16

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

12. ท4าการAdd Binding Attribute ท inputFirstName, inputLastName และ inputSalary


13. ดบเบ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
46

int salary = Integer.parseInt(temp);


org.netbeans.j2ee.xsd.tableschema.Employee inputData =
new
org.netbeans.j2ee.xsd.tableschema.Employee();
// Set input values
EmployeeRecord emp = new EmployeeRecord();
emp.setId(id);
emp.setFirstName(firstName);
emp.setLastName(lastName);
emp.setSalary(salary);
inputData.getEmployeeRecord().add(emp);
// Call Web Service
java.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
47

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
48

Exercise 9: BPEL for Sending Message to


a JMS Queue

แบบฝกหดนเปนการสราง Business Process เพอส)งขอความไปยง JMS Queue โดยการใช JMS


Binding Component ทอย() OpenESB และจะใชโปรแกรม HermesJMS เพอเรยกด(ขอความทอย()ใน Queue

ขนตอนในการพฒนาโปรแกรม
1. ต2ดตงโปรแกรม HermesJMS
2. ต2ดตงและครวจสอบ JMS Binding Components
3. พฒนาโปรเจMค JMSBPEL
4. พฒนาไฟลW WSDL ส4าหรบ JMSBinding
5. พฒนาไฟลW WSDL ส4าหรบ SOAPBinding
6. พฒนา BPEL Process
7. พฒนาโปรเจMค Composite Application
8. ทดสอบโปรแกรมผ)าน 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
49

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


ทอย()ดานล)างของไดอะลMอก

3. คล2[กขวาทไดอะลMอกในแทป Provider แลวเลอกค4าสง Add Group


4. ก4าหนดค)า Classpath group name เปน JavaMQClasspathGroup แลวกด OK
5. ขยายโหนด JavaMQClasspathGroup แลวคล2[กขวาท Library และเลอกค4าสง Add JAR(s)
6. เลอกไฟลWแบบ jar ต)อไปนทอย()ในไดเรMกทอรของ GlassFish ESB ทชอ imq/lib
4. fscontext.jar
5. imq.jar
6. imqadmin.jar
7. imqbroker.jar
8. imqjmx.jar
9. imqutil.jar
10. imqxm.jar
11. jaxm-api.jar
12. jhall.jar
13. jms.jar

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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
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
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
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 Process


2. ก4าหนด File Name: เปน JMSProcess แลวกด Finish
3. โปรแกรม 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 และเปลยนชอเปน JMSWSDLPartnerLink
3. ลากไอคอน TestQueue.wsdl ในหนาต)าง Project มาไวในแทบเทาทางขวามอภายใตหนาต)าง
design
4. ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน TestQueuepartnerLink

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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รกรรม Reply1
3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner
Link: เปน JMSWSDLPartnerLink
4. ในช)อง 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
56

หนาต)าง design ระหว)าง ธ6รกรรม start กบธ6รกรรม sendToQueue


2. ในหนาต)าง 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
57

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

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


ขนตอนนเปนการสราง Composite Application เพอทรน JMSBPEL บน BPEL Engine ทใช
มาตรฐาน JBI โดยมขนตอนดงน
1. เลอกเมน( File > New Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite
Application แลวกด Next
3. ก4าหนด Project Name เปน JMSCompositeApp แลวกด Finish
4. ในหนาต)าง Project เลอกโหนด JMSCompositeApp แลวคล2[กขวาเลอก Add JBI Module
5. ใหเลอกโปรเจMค JMSBPEL แลวกดป6zม Add Project JAR Files
6. โปรแรม NetBeans จะเพ2มโหนด JMSBPEL.jar ภายใต JMSCompositeApp > JBI Module
7. คล2[กขวาท JMSCompositeApp เลอก Clean and Build
8. คล2[กท Service Assembly จะเหMนผลลพธWดงแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
58

8. การทดสอบโปรแกรมผlาน TestCase
1. ท4าการ Deploy โปรเจMค JMSCompositeApp
2. ในหนาต)าง Project เลอกโหนด JMSCompositeApp > Test แลวคล2[กขวาเลอก New Test Case
3. ในไดอะลMอก New Test Case ใหก4าหนด Test Case Name: เปน TestCase1 แลวกด Next
4. หนาถดไปใน JMSBPEL ใหเลอกไฟลW WSDL เปน JMSWSDL.wsdl แลวกด Next
5. ในหนาถดไปใหเลอก JMSWSDLOperation แลวกด Finish
6. หนาต)าง 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[กขวาเลอก Run


8. เป~ดโปรแกรม HermesJMS แลวคล2[กท TestQueue จะไดผลลพธWดงตวอย)างในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
59

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 Services
2. พฒนา Calculate Booking Payment Web Services
3. พฒนาโปรเจMค RoomBooking
4. พฒนา XML Schema
5. พฒนาไฟลW WSDL
6. Import ไฟลW WSDL และ XML Schema
7. พฒนา Business Process
8. พฒนาโปรเจMค Composite Application
9. ทดสอบโปรแกรมผ)าน TestCase
10. เพ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
61

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


2. ในไดอะล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
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
63

2.1 การสราง Web Application Project


เราจะก4าหนดโปรเจMคใหเปน EJB Project ทงนเนองจากแบบฝกหดนจะพฒนา Web Services จาก
Session Bean ซ-งมขนตอนการสรางโปรเจMคดงน

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


2. ในไดอะล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
64

1. เลอกหนาต)าง Projects แลวขยายแทป CalculatePayment > Web Services


2. คล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
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 แลวกด
Next
3. ก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
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 แลวเลอก Properties
11. ในไดอะล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
67

13. จากนนใหใชว2ธเดยวกนเพอสราง complex Type ทชอ RoomBookingOutput ซ-งจะม element ดงน


◦ result(Built-In Types/ string)
โดยจะไดหนา Design ดงร(ป

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


เพ2มโหนดใหม)ชอ newElement ภายใตโหนด Element
15. คล2[กขวาทโหนด newElement แลวเลอก Properties
16. ในไดอะล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
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
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
70

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

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

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


และ CalculatePayment มาไวในโปรเจMค RoomBooking โดยมขนตอนดงน

1. เลอกหนาต)าง Projects ขยายโหนด DetermineRoomRate > Webservices


2. แลวคล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
71

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


CalculatePayment

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

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


การพฒนาดงน

67.1 สรางไฟลW RoomBookingProcess.bpel

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


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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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มแลวกด OK
3. ลากไอคอน 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 ภายใตโหนด Ro
omBooking ,าไวภายใตหนาต)าง 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
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
74

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

67.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รกรรม Reply1
3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner
Link: เปน RoomBookingPartnerLink
4. ในช)อง Output Variable: กดป6zม Create เมอไดอะลMอก New Output Variable แสดงข-น ใหก4าหนด
Name: เปน outData แลวกด OK

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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: เลอก getRate
5. ในช)อง 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
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
77

7.7 การเพ2มธ6รกรรม Assign


1. ในไฟลW RoomBookingProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง Palette
มาไวในหนาต)าง design ระหว)าง ธ6รกรรม start กบธ6รกรรม DetermineRate
2. ก4าหนดชอธ6รกรรม Assign1 เปน AssignDetermineRateInput
3. ในหนาต)าง Editor เลอกธ6รกรรม AssignDetermineRateInput ในหนาต)าง BPEL Mapper ท4าการโยง
โหนด roomType ในส)วน inputData ทางดานซายเขากบโหนด roomType ในส)วน outData ทาง
ดานขวา ดงแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
78

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


มาไวในหนาต)าง design ระหว)าง ธ6รกรรม DetermineRate กบธ6รกรรม CalculatePayment
5. ก4าหนดชอธ6รกรรม Assign1 เปน AssignCalculatePaymentInput
6. ในหนาต)าง 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 เปน AssignResult
9. ในหนาต)าง Editor เลอกธ6รกรรม AssignResult ในหนาต)าง BPEL Mapper คล2[กทโหนด result ใน
ส)วน outData โปรแกรมจะ highlight สน4าเง2นในโหนดนนดงร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
80

13. กดป6zม Save และ Clean and Build

8. การพ#ฒนาโปรเจ`ค Composite Application


ขนตอนนเปนการสราง Composite Application เพอทรน RoomBookingProcess.bpel บน Open
ESB โดยใช BPEL SE ทใชมาตรฐาน JBI โดยมขนตอนดงน
1. เลอกเมน( File > New Project
2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite
Application แลวกด Next
3. ก4าหนด Project Name เปน RoomBookingCompositeApp แลวกด Finish
4. ในหนาต)าง Project เลอกโหนด RoomBookingCompositeApp แลวคล2[กขวาเลอก Add JBI Module
5. ใหเลอกโปรเจMค RoomBooking แลวกดป6zม Add Project JAR Files
6. โปรแรม NetBeans จะเพ2มโหนด RoomBooking.jar ภายใต RoomBookingCompositeApp > JBI
Module

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
81

7. ท4าการ Clean and Build โปรเจMค RoomBookingCompositeApp


8. หนาต)าง 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
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
83

2. ในไดอะลMอก New Test Case ใหก4าหนด Test Case Name: เปน TestCase1 แลวกด Next
3. หนาถดไปใน RoomBooking ใหเลอกไฟลW WSDL เปน RoomBookingWSDL.wsdl แลวกด Next
4. ในหนาถดไปใหเลอก RoomBookingWSDLOperation แลวกด Finish
5. หนาต)าง 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[กขวาเลอก Run


7. จะเห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
84

id int Primary Key Auto Increase


firstName 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 กด Next
11. เลอก Table: roombooking จาก Available Tables: ไปยง Selected Tables: และกด Next
12. กด Next แลวก4าหนดค)า JNDI Name เปน jdbc/test กด Finish
13. โปรแกรมจะสรางไฟลWข-นมาสองไฟลWคอ RoomBookingDB.wsdl ส4าหรบอธ2บาย service ต)างๆ ของ
Table และ roombooking.xsd ส4าหรบอธ2บาย XML Schema ของ Table
14. เนองจาก 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
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 แลวเลอกแทป Design


2. ลากไอคอน RoomBookingDB.wsdl ในหนาต)าง Project มาไวในแทบเทาทางขวามอภายใตหนาต)าง
design

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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 เปน AssignDBInput
3. ในหนาต)าง 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
87

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

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
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 Project


2. ในไดอะลMอก New Project ใหเลอก Categories เปน Web และ Web Application แลวกด Next
3. ก4าหนด Project Name เปน RoomBookingUI แลวเลอก Project Location เปน folder ทเราตองการ
จะเกMบไฟลWไว
4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish
5. คล2[กขวาทโหนด RoomBookingUI จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน
Web Services และ Web Service Client แลวกด Next
6. ในไดอะล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
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
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
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
93

Exercise 11: BPEL : Structured Activities

แบบฝกหดนเปนการเขยน BPEL 2.0 โดยเรยกใช Structured Activities เช)น ForEach โดยจะสราง


Business Process ข-นมาเพออ)านขอม(ลการสงส2นคา (PO) ซ-งอาจมรายการส2นคาอย()หลายรายการและจะ
ท4าการบนท-กรายการเหล)านนลงฐานขอม(ล

ขนตอนในการพฒนาโปรแกรม

1. พฒนาโปรเจMค BPELStructure
2. พฒนา XML Schema
3. พฒนาไฟลW WSDL
4. การพฒนา WSDL เพอใหเกMบขอม(ลลงฐานขอม(ล
5. พฒนา Business Process ส4าหรบ ForEach
6. พฒนาโปรเจMค Composite Application
7. ทดสอบโปรแกรมผ)าน 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 แลวกด
Next
3. ก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
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 มาไวภายใตโหนด PO
4. ลากไอคอน Element ในหนาต)าง Palette มาไวภายใตโหนด PO
5. คล2[กขวาทโหนด newElement แลวเลอก Properties
6. ในไดอะล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 มาไวภายใตโหนด Items
9. ลากไอคอน 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
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
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 Increase
PONumber int
itemNumber 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
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 กด Next
4. เลอก Table: purchasingorder จาก Available Tables: ไปยง Selected Tables: และกด Next
5. กด Next แลวก4าหนดค)า JNDI Name เปน jdbc/test กด Finish
6. โปรแกรมจะสรางไฟลWข-นมาสองไฟลWคอ PurchasingOrderDB.wsdl ส4าหรบอธ2บาย service ต)างๆ ของ
Table และ purchasingorder.xsd ส4าหรบอธ2บาย XML Schema ของ Table
7. เนองจาก 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 โดยมขนตอนการพฒนาดงน

65.1 สรางไฟลW BPELStructureProcess1.bpel

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


New > BPEL Process
2. ก4าหนด File Name: เปน BPELStructureProcess1 แลวกด Finish
3. โปรแกรม NetBeans จะสรางไฟลW BPELStructureProcess1.bpel และหนาต)าง Editor จะแสดงไฟลWใน
โหมด designer

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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มแลวกด OK
3. ลากไอคอน 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
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
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
101

4. ในไดอะลMอก Predicate Editor เชอมโยงโหนด ForEach1Counter ในส)วน ForEach1 ทางดานซาย


มอกบโหนด Predicate ทางดานขวามอดงร(ป แลวกด OK

5. ในหนาต)าง BPELMapper ท4าการโยงโหนดต)างๆดงน


5. PONumber ในส)วน inputData เขากบโหนด PONumber ในส)วน InsertIn
6. ItemNumber ในส)วน Item[$ForEach1Counter] เขากบโหนด itemNumber ในส)วน
InsertIn
7. ItemQuantity ในส)วน Item[$ForEach1Counter] เขากบโหนด itemQuantity ในส)วน
InsertIn

ดงแสดงในร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
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
103

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


2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite
Application แลวกด Next
3. ก4าหนด Project Name เปน BPELStructureCompositeApp แลวกด Finish
4. ในหนาต)าง Project เลอกโหนด BPELStructureCompositeApp แลวคล2[กขวาเลอก Add JBI Module
5. ใหเลอกโปรเจMค BPELStructure แลวกดป6zม Add Project JAR Files
6. โปรแรม NetBeans จะเพ2มโหนด BPELStructure.jar ภายใต RoomBookingCompositeApp > JBI
Module
7. ท4าการ Clean and Build โปรเจMค BPELStructureCompositeApp
8. หนาต)าง 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
104

3. หนาถดไปใน BPELStructure ใหเลอกไฟลW WSDL เปน BPELStructureWSDL1.wsdl แลวกด


Next
4. ในหนาถดไปใหเลอก BPELStructureWSDL1Operation แลวกด Finish
5. หนาต)าง 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[กขวาเลอก Run


7. เราสามารถด(ผลลพธWจาก Table ทชอ purchasingorder ไดดงร(ป

Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan

You might also like