176
1 Hand-on Exercises Java Web Services and Service Oriented Architecture Using GlassFish ESB and NetBeans Assoc.Prof.Dr.Thanachart Numnonda and Asst Prof.Thanisa Kruawaisayawan August 2010 Thanachart Numnonda / Thanisa Kruawaisayawan

Java Web Services and SOA Using GlassFish openESB and NetBeans

Embed Size (px)

DESCRIPTION

เอกสาร Lab ประกอบการสอนหลักสูตร Mini Master of Java Technology ของ KMITL และ Sofyware Oark

Citation preview

Page 1: Java Web Services and SOA Using GlassFish openESB and NetBeans

1

Hand-onExercises

Java Web Servicesand

Service Oriented ArchitectureUsing GlassFish ESB

and NetBeans

Assoc.Prof.Dr.Thanachart Numnondaand

Asst Prof.Thanisa Kruawaisayawan

August 2010

Thanachart Numnonda / Thanisa Kruawaisayawan

Page 2: Java Web Services and SOA Using GlassFish openESB and NetBeans

2

สารบ�ญExercise 1 �Java RMI...........................................................................................................................4

Exercise 2 Web Services Using JAX-RPC ........................................................................................8

Exercise 3 การพ�ฒนาโปรแกรม Web Services Client...........................................................................17

Exercise 4 การพ�ฒนาโปรแกรม Web Services Provider.......................................................................26

Exercise 5 Axis2 Web Services.........................................................................................................31

Exercise 6 Java Web Services from Entity Class .............................................................................36

Exercise 7 การพ�ฒนาโปรแกรมโดยใช� JAXP .......................................................................................40

Exercise 8 การพ�ฒนาโปรแกรม RESTful Web Services .....................................................................45

Exercise 9 การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar API....................51

Exercise 10 การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services .............................................64

Exercise 11 การพ�ฒนาโปรแกรม Hello BPEL......................................................................................70

Exercise 12 BPEL for Writing to File...............................................................................................82

Exercise 13 BPEL for Writing to Database.......................................................................................96

Exercise 14 BPEL for Sending Message to a JMS Queue ............................................................105

Exercise 15 Simple BPEL Invoking Web Services ........................................................................116

Exercise 16 Advance BPEL Invoking Web Services .....................................................................134

Exercise 17 BPEL : Structured Activities.......................................................................................167

Thanachart Numnonda / Thanisa Kruawaisayawan

Page 3: Java Web Services and SOA Using GlassFish openESB and NetBeans

3

บทนา

เอกสารน��ใช�ในการประกอบการสอนว�ชา Java 401 : Java Web Services and SOA ของหล�กส"ตร Mini Master of Java Technology คณะเทคโนโลย�สารสนเทศ สถาบ�นพระจอมเกล�าเจ�าค+ณทหารลาดกระบ�ง โดยม�จ+ดประสงค,เพ��อให�ผ"�เร�ยนได�เข�าใจถ/งการพ�ฒนา Service Oriented Archtecture ท��งน��แบบฝ1กห�ดน��อ�างอ�งก�บเคร��องม�อพ�ฒนาโปรแกรมจาวา NetBeans 6.7.1 และ โปรแกรม GlassFish v2.1 Application Server

[email protected] twitter.com/thanachart

www.facebook.com/thanachart www.thaijavadev.com

Thanachart Numnonda / Thanisa Kruawaisayawan

Page 4: Java Web Services and SOA Using GlassFish openESB and NetBeans

4

Exercise 1 Java RMI

แบบฝ1กห�ดในบทน��เป2นการพ�ฒนาโปรแกรมแบบกระจาย (Distributed) โดยใช� Java RMI ในการเคล��อนย�าย Object ซ/�งม�ข��นตอนในการพ�ฒนาโปรแกรมด�งน��

1. สร�าง Java Project

2. พ�ฒนาโปรแกรม Server Interface

3. พ�ฒนาโปรแกรม Server Implementation

4. พ�ฒนาโปรแกรม Server Application

5. พ�ฒนาโปรแกรม Client Application

1.1 การสร�าง Java Project

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

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

แล�วกด Next

3. ก5าหนด Project Name เป2น RMIDemo แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว� จากน��นเล�อกตรง Create Main Class ออก แล�วกด Finish

1.2 การพ�ฒนาโปรแกรม Server Interface

ในข��นตอนน��จะเป2นการสร�าง Server Interface เพ��อประกาศเมธอดท��ต�องการให�บร�การ โดย Server

Interface น��จะต�อง extends Interface ท��ช��อ Remote และท+กๆ เมธอดจะต�อง throws ข�อผ�ดพลาดประเภท RemoteException ซ/�งต�องม�ไฟล,น��อย":ท��งในฝ;<ง Server และฝ;<ง Client ข��นตอนการพ�ฒนาเป2นด�งน��

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

2. ในไดอะล4อก New File ให�เล�อก Categories ท��ช��อ Java เล�อก File Types: เป2น Java Interface แล�วกด Next

3. ก5าหนด Class Name: เป2น Hello และ Package: เป2น rmi แล�วกด Finish

4. เข�ยน source code ของไฟล, Hello.java ตาม Listing ท�� 1.1

Listing ท�� 1.1 โปรแกรม Hello.java

Java RMI Thanachart Numnonda / Thanisa Kruawaisayawan

Page 5: Java Web Services and SOA Using GlassFish openESB and NetBeans

5

package rmi;

import java.rmi.Remote;import java.rmi.RemoteException;

public interface Hello extends Remote { String sayHello() throws RemoteException;}

1.3 การพ�ฒนาโปรแกรม Server Implementation

ในข��นตอนน��จะเป2นการสร�าง Server Implementation โดยคลาสน��จะต�อง extends คลาสท��ช��อ UnicastRemoteObject และ implements Server Interface (Hello) เพ��อเข�ยนค5าส��งในเมธอดท��ประกาศไว�ใน Server Interface และต�องม�การเพ��ม constructor ท�� throws RemoteException ด�วย ซ/�งม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด RMIDemo จากน��นเล�อกค5าส��ง New > Java Class แล�วกด Next

2. ก5าหนด Class Name: เป2น HelloImpl จากน��นเล�อก Package: เป2น rmi แล�วกด Finish

3. เข�ยน source code ของไฟล, HelloImpl.java ตาม Listing ท�� 1.2

Listing 1.2 โปรแกรม HelloImpl.java

package rmi;

import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class HelloImpl extends UnicastRemoteObject implements Hello {

public HelloImpl() throws RemoteException { }

public String sayHello() throws RemoteException { return "Hello from xxx"; // ให�ใส�ช��อของผ �พ�ฒนาแทนท�� xxx }}1.4 การพ�ฒนาโปรแกรม Server Application

ในข��นตอนน��จะเป2นการสร�าง Server Application เพ��อ start rmiregistry และลงทะเบ�ยนช��อ Object ท��

Java RMI Thanachart Numnonda / Thanisa Kruawaisayawan

Page 6: Java Web Services and SOA Using GlassFish openESB and NetBeans

6

จะให�บร�การเมธอดต:างๆ ซ/�งม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด RMIDemo จากน��นเล�อกค5าส��ง New > Java Main

Class แล�วกด Next

2. ก5าหนด Class Name: เป2น HelloServer จากน��นเล�อก Package: เป2น rmi แล�วกด Finish

3. เข�ยน source code ของไฟล, HelloServer.java ตาม Listing ท�� 1.3

Listing ท�� 1.3 โปรแกรม HelloServer.java

package rmi;import java.rmi.Naming;import java.rmi.registry.LocateRegistry;

public class HelloServer {

public static void main(String[] args) { try { LocateRegistry.createRegistry(1099); // start rmiregistry HelloImpl obj = new HelloImpl(); Naming.rebind("hello",obj); // ลงทะเบ�ยน Object ช��อ hello } catch (Exception ex) { ex.printStackTrace(); } }}

1.5 การพ�ฒนาโปรแกรม Client Application

ในข��นตอนน��จะเป2นการสร�าง Client Application เพ��อค�นหา Object ท��ให�บร�การใน rmiregistry จากน��นจ/งท5าการเร�ยกใช�เมธอดท��ต�องการ ซ/�งม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด RMIDemo จากน��นเล�อกค5าส��ง New > Java Main

Class แล�วกด Next

2. ก5าหนด Class Name: เป2น HelloClient จากน��นเล�อก Package: เป2น rmi แล�วกด Finish

3. เข�ยน source code ของไฟล, HelloClient.java ตาม Listing ท�� 1.4

Java RMI Thanachart Numnonda / Thanisa Kruawaisayawan

Page 7: Java Web Services and SOA Using GlassFish openESB and NetBeans

7

Listing ท�� 1.4 โปรแกรม HelloClient.java package rmi;

import java.rmi.Naming;

public class HelloClient {

public static void main(String[] args) { try { Hello obj = (Hello) Naming.lookup("rmi://localhost/hello"); System.out.println(obj.sayHello()); } catch (Exception ex) { ex.printStackTrace(); } }}

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

1. คล�=กขวาตรง RMIDemo เพ��อท5าการ Clean and Build

2. Run โปรแกรม HelloServer.java

3. Run โปรแกรม HelloClient.java

4. จะได�ผลล�พธ,เป2นข�อความ Hello from xxx กล�บมาจาก Server

5. ทดลองเปล��ยนจาก localhost เป2น IP Address ของเคร��องอ��นๆ

Java RMI Thanachart Numnonda / Thanisa Kruawaisayawan

Page 8: Java Web Services and SOA Using GlassFish openESB and NetBeans

8

Exercise 2 Web Services Using JAX-RPC

เน��อหาทต�องศ�กษาก�อน Entity Bean Using EJB 2.1

แบบฝ1กห�ดในบทน��เป2นการพ�ฒนาโปรแกรม Web Services ส5าหร�บ J2EE 1.4 โดยใช�ช+ดค5าส��ง JAX-

RPC (JSR 101) โดยจะเป2นการพ�ฒนาบน Server ท��ร�นบน J2EE 1.4 การพ�ฒนา Web Services Provider

สามารถท5าได�สองว�ธ�ค�อ• Web Services ท��ร�นบน Web Server โดยใช� Java Servlet

• Web Services ท��ร�นบน Application Server โดยใช� Session Bean

การพ�ฒนาบน Application Server จะท5าให�รองร�บจ5านวนผ"�ใช�ได�มากกว:า และเหมาะก�บการท5า Web

Service ในทางปฏ�บ�ต�ท��ต�องการท5า Web Service เพ��อขยายโอกาสทางธ+รก�จและคาดว:าน:าจะม�ผ"�เข�ามาใช� Service

จ5านวนมากข/�น ท5าให� Web Server อาจไม:เหมาะสมก�บการรองร�บจ5านวนผ"�ใช�จ5านวนมาก ด�งน��นผ"�พ�ฒนา Java

Web Services จ/งควรท��จะม�ความร"�ในการพ�ฒนา Application Server โดยใช� EJB

แบบฝ1กห�ดจะแสดงข��นตอนการใช� NetBeans สร�าง Web Services ท��ช��อ calculateTax โดยใช� Servlet

และสร�าง Web Services ท��ช��อ findBook ซ/�งเร�ยกใช� Session Bean ท��สร�างข/�นในแบบฝ1กห�ด Entity Bean

Using EJB 2.1 โดย Service น��จะเป2นการค�นหาหน�งส�อจาก table ท��ช��อ book ในฐานข�อม"ล MySql

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนา calculateTax Web Service

2. พ�ฒนา Desktop Web Service Client

3. พ�ฒนา findBook Web Service

4. พ�ฒนา Web Application เพ��อเร�ยกใช� Web Service

2.1 การพ�ฒนา calculateTax Web Service

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

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

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

แล�วกด Next

3. ก5าหนด Project Name เป2น WSApp แล�วเล�อก Project Location เป2น Director ท��เราต�องการจะเก4บไฟล,ไว� จากน��นเล�อก Server เป2น Sun Java System Application Server 9 ก5าหนด Jave EE

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 9: Java Web Services and SOA Using GlassFish openESB and NetBeans

9

Version: เป2น J2EE 1.4 และไม:เล�อกช:อง Set Source Level to 1.4 แล�วกด Finish

โปรแกรม NetBeans จะม� Wizard เพ��อสร�าง Web Service โดยม�ข��นตอนด�งน��

1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด WSApp จากน��นเล�อกค5าส��ง New > File/Folder

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

Service แล�วกด Next

3. ในไดอะล4อก New Web Service ก5าหนด Web Service Name: เป2น TaxServices และ Packgae:

เป2น ws แล�วกด Finish

4. โปรแกรมจะประกาศ Web Services ท��ช��อ TaxServices ในโหนด Web Services ของหน�าต:าง Project และหน�าต:าง Editor จะแสดงไฟล,ท��ช��อ TaxServicesImpl.java

5. ในหน�าต:าง Projects ขยายโหนด WSApp > Web Services แล�วคล�=กขวาท��โหนด TaxServices เล�อกค5าส��ง Add Operation..

6. ในไดอะล4อก Add Operation ก5าหนด Method เป2น caluclateTax ชน�ดของ Return Type เป2น double และ เพ��ม Input parameter หน/�งต�วค�อ income ชน�ด double ด�งร"ปท�� 2.1

ร�ปท 2.1 การเพ�ม Operation

7. โปรแกรมจะเพ��มเมธอด calculateTax ใน source code ของไฟล, TaxServicesImpl.java ให�ปร�บปร+ง source code ด�งน��

public double calculateTax(double income) throws java.rmi.RemoteException { if (income < 70000) {

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 10: Java Web Services and SOA Using GlassFish openESB and NetBeans

10

return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 10000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } }

8. กดป+@ม Save แล�วท5าการ Deploy Project

9. Web Service จะถ"กต�ดต��งบน Sun Java Application Server และสามารถเร�ยกด"ได�การใช� System

Admin Console โดยการเปAด Web Browser และเร�ยก url ท�� http://localhost:4848 โดยก5าหนด user

เป2น admin และ password เป2น adminadmin

10. โปรแกรมจะแสดง Applications และ Web Services ด�งร"ปท�� 2.2

ร�ปท 2.2 Admin Console ของ GlassFish ทแสดง Web Services

2.2 การพ�ฒนา Desktop Web Service Client

เราจะสร�าง Java Desktop Application เพ��อท��จะเร�ยกใช� Web Service ท��ช��อ calculateTax โดยจะม�ข��นตอนการพ�ฒนาด�งน��

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น General และ Projects เป2น Java Application

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 11: Java Web Services and SOA Using GlassFish openESB and NetBeans

11

แล�วกด Next

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

4. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด WSDesktop จากน��นเล�อกค5าส��ง New => File/Folder.

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

Service Client แล�วกด Next

6. ในไดอะล4อก New Web Service Client เล�อก WSDL URL: โดยก5าหนดเป2น http://localhost:2160/WSApp/TaxServices?WSDL และ Package เป2น ws ด�งแสดงในร"ปท�� 2.3

ร�ปท 2.3 การก#าหนด WSDL ของ Web Service Client

7. กด Finish โปรแกรมจะแสดง Web Service Reference โดยม� Service ช��อ calculateTax ด�งร"ปท�� 2.4

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 12: Java Web Services and SOA Using GlassFish openESB and NetBeans

12

ร�ปท 2.4 ผลทได�จากการอ�างอ�ง Web Service Client

8. ในหน�าต:าง Projects ลากโหนด calculateTax ลงในไฟล, Main.java ของหน�าต:าง Editor โปรแกรมจะเพ��ม source code ให�อ�ตโนม�ต� ให�แก�ไขค:า double1 เป2น 350000

9. ทดลองร�นโปรแกรมจะเห4นค:าผลล�พธ,เป2น Result = 37500.0

2.3 การพ�ฒนาโปรแกรม findBook Web Service

ข��นตอนน��จะสร�าง Web Service ท��ช��อ findBook จาก Stateless Session Bean ท��ช��อ BooksFacade.java ท��พ�ฒนาจากแบบฝ1กห�ด Entity Bean Using EJB 2.1 โโดยจะม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด EJBBookApp-ejb จากน��นเล�อกค5าส��ง New > File/Folder

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

Service แล�วกด Next

3. ในไดอะล4อก New Web Service ก5าหนด Web Service Name: เป2น BookServices เล�อก Package:

เป2น ws และเล�อก Delegated to Existing Session Enterprise Bean แล�วเล�อก BooksFacadeSB ด�งร"ปท�� 2.5

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 13: Java Web Services and SOA Using GlassFish openESB and NetBeans

13

ร�ปท 2.5 การก#าหนดค�า Web Service

4. กด Finish โปรแกรมจะประกาศ Web Services ท��ช��อ BookServices ในโหนด Web Services ของหน�าต:าง Project และหน�าต:าง Editor จะแสดงไฟล,ท��ช��อ BookServicesBean.java

5. โปรแกรม NetBeans จะก5าหนดให� Web Services ท��สร�างข/�นเป2น documentliteral ในกรณ�เราต�องการให�เปBน RPC ด�งน��นต�องท5าการแก�ไขค+ณสมบ�ต� โดยการคล�=กขวาท��โหนด EJBBookApp-ejb เล�อก properties

6. ในไดอะล4อก Project Properties เล�อก JAX-RPC Web Services แล�วยกเล�กการเล�อกช:อง documentliteral, strict และ useonewayoperations ด�งร"ปท�� 2.6

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 14: Java Web Services and SOA Using GlassFish openESB and NetBeans

14

ร�ปท 2.6 การก#าหนด Property ของ Web Service

7. ในหน�าต:าง Projects ขยายโหนด WSApp > Web Services แล�วคล�=กขวาท��โหนด DBBookServices

เล�อกค5าส��ง Add Operation..

8. ในไดอะล4อก Add Operation ก5าหนด Method เป2น findBook ชน�ดของ Return Type เป2น model.Book และ เพ��ม Input parameter หน/�งต�วค�อ isbn ชน�ด String

9. โปรแกรมจะเพ��มเมธอด findBook ใน source code ของไฟล, DBBookServicesBean.java ให�ปร�บปร+ง source code ด�งน��

public Book findBook(String isbn) throws java.rmi.RemoteException { BooksFacadeLocal bk = lookupBooksFacadeBean(); return bk.find(isbn); }

10. กดป+@ม Save แล�วท5าการ Deploy Project

2.4 การพ�ฒนาโปรแกรม Web Application เพ��อเร�ยกใช� Web Service

ข��นตอนน��จะเป2นการพ�ฒนา Web Application บน Sun Java Application Server 9 เพ��อเร�ยกใช� Web

Service ท��ช��อ findBook โดยม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกเมน" File => New Project..ในไดอะล4อก New Project ให�เล�อก Categories เป2น Web และ Projects เป2น WebApplication แล�วกด Next

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 15: Java Web Services and SOA Using GlassFish openESB and NetBeans

15

2. ก5าหนด Project Name เป2น WSClient จากน��นเล�อก Server เป2น Sun Java System Application

Server 9 ก5าหนด Jave EE Version: เป2น J2EE 1.4 และไม:เล�อกช:อง Set Source Level to 1.4 แล�วกด Finish

3. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด WSClient จากน��นเล�อกค5าส��ง New => File/Folder.

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

Service Client แล�วกด Next

5. ในไดอะล4อก New Web Service Client เล�อก Project: โดยก5าหนดเป2น EJBBookApp-EJB >

BookServices และ Package เป2น ws

6. กด Finish โปรแกรมจะแสดง Web Service Reference โดยม� Service ช��อ findBook

7. ในหน�าต:าง Projects เล�อกโหนด WSClient แล�วเล�อก New Servlet

8. ก5าหนด Servlet Name: เป2น WSClientServlet แล�วกด 9. ในหน�าต:าง Editor ของไฟล, WSClientServlet.java เล�อกเมธอด processRequest แล�วคล�=กขวาเล�อก

Web Service Client Resources > Call Web Service Operation แล�วเล�อก findBook

10. โปรแกรม NetBeans จะเพ��ม source code ในการเร�ยก Web Services โดยอ�ตโนม�ต� ให�ปร�บปร+ง 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>Test EJB Web Service</title>"); out.println("</head>"); out.println("<body>"); try { // This code block invokes the find operation on web service String isbn = request.getParameter("isbn"); Book book = getBKServicesSEIPort().findBook(isbn); out.println("ISBN: " + isbn + "<br>"); out.println("Title: " + book.getTitle() + "<br>"); out.println("Author: " + book.getAuthor() + "<br>"); out.println("Price: " + book.getPrice() + "<br>"); } catch(java.rmi.RemoteException ex) { out.println(ex); } catch(Exception ex) { out.println(ex); }

11. กดป+@ม Save

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

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 16: Java Web Services and SOA Using GlassFish openESB and NetBeans

16

1. ท5าการ Build และ Deploy โปรเจ4ค EJBBookApp และ WsClient

2. Run โปรแกรม WSClientServlet

3. เล�อก URL ของ Web Browser เป2น http://localhost:8080/EJBBookApp-war/WSClientServlet ?

isbn=123 โดยท�� 123 ค�อหมายเลข isbn ท�ม�อย":ในฐานข�อม"ล4. โปรแกรมจะแสดงผลเป2นรายละเอ�ยดของหน�งส�อในฐานข�อม"ล

หมายเหต

โปรแกรม JAX-RPC จะไม:สามารถท5างานใน JDK 6 หากต�องการพ�ฒนา Web Services ส5าหร�บ JDK

6 ให�เล�อกใช� JAX-WS API ท��จะกล:าวถ/งในแบบฝ1กห�ดถ�ดไป

Web Services Using JAX-RPC Thanachart Numnonda / Thanisa Kruawaisayawan

Page 17: Java Web Services and SOA Using GlassFish openESB and NetBeans

17

Exercise 3 การพ�ฒนาโปรแกรม Web Services Client

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

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

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

3.1 การทดสอบ Web Services โดยใช� soapUI โปรแกรม soapUI เป2นโปรแกรม Open Source ท��สามารถใช�เป2นเคร��องม�อในการทดสอบเว4บเซอร,ว�สท��

น�ยมใช�ก�นอย:างกว�างขวาง เราสามารถท��จะไปดาวน,โหลดโปรแกรมน��ได�ท�� www.soapui.org โดยเม��อต�ดต��งแล�ว ให�ท5าการทดสอบเร�ยกใช�เว4บเซอร,ว�สในการทดลองท��งสองข�างต�น ตามข��นตอนด�งน��

1. ในโปรแกรม soapUI เล�อกเมน" File > New WSDL Project ในช:อง Project Name ให�ใส: PTT

ส:วนในช:อง Initial WSDL ให�ใส: http://www.pttplc.com/pttinfo.asmx?wsdl จะได�ไดอะล4อกด�งร"ปท�� 3.1

ร�ปท 3.1 การสร�าง WSDL Project ใน soapUI

2. โปรแกรมจะสร�างโปรเจ4คน��ข/�นมา ขยายโหนด PTTInfoSoap แล�วเล�อกโอเปอร,เรช�น

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 18: Java Web Services and SOA Using GlassFish openESB and NetBeans

18

CurrentOilPrice แล�วด�บเบ��ลคล�=กท�� Request1

3. หน�าต:าง Editor จะแสดงค:าของ SOAP Request ท��จะส:งไป ให�ใส:ค:าด�งน�� <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:ptt="http://www.pttplc.com/ptt_webservice/"> <soapenv:Header/> <soapenv:Body> <ptt:CurrentOilPrice> <!--Optional:--> <ptt:Language>TH</ptt:Language> </ptt:CurrentOilPrice> </soapenv:Body></soapenv:Envelope>

4. กดป+@ม submit request (เคร��องหมายส�เข�ยว) โปรแกรมจะได� SOAP Response กล�บมา โดยโปรแกรม soapUI จะแสดงด�งร"ปท�� 3.2

ร�ปท 3.2 แสดงผลล�พธ*ทได�ใน soapUI

นอกจากน��เราย�งสามารถต�ดต��งโปรแกรม soapUI ภายใน NetBeans ได�โดยการดาวน,โหลด SoupUI

NetBeans Plugin (ไฟล, com-eviware-soapui-netbeans-module-3.0.nbm) และท5าการต�ดต��งตามข��นตอนด�งน��

1. ในโปรแกรม NetBeans เล�อกเมน" Tools > Plugins

2. ในไดอะล4อก Plugins เล�อกแทป Downloaded แล�วกดป+@ม Add Plugins..แล�วเล�อกไฟล, com-

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 19: Java Web Services and SOA Using GlassFish openESB and NetBeans

19

eviware-soapui-netbeans-module-3.0.nbm ซ/�งท5าการดาวน,โหลดมาก:อนหน�าน�� จะได�ไดอะล4อกด�งร"ปท�� 3.3

ร�ปท 3.3 การเพ�มปล�+กอ�นโมด�ลใน NetBeans

3. กดป+@ม Install แล�วกดป+@ม Next จนท5าการต�ดต��งเสร4จแล�ว ให�เล�อก Restart โปรแกรม NetBeans ข/�นมาใหม:

เราสามารถทดสอบการใช�งาน soupUI ท��ต�ดต��งข/�นมาใน NetBeans เพ��อทดสอบเว4บเซอร,ว�สด"อ�ตราแลก เปล��ยนตามข��นตอนด�งน��

4. เล�อกเมน" File > New Project

5. ในไดอะล4อก New Project ให�เล�อก Categories เป2น SOA และ Web Services Testing Project

แล�วกด Next

6. ก5าหนด Project Name เป2น CurrencyExcangeWSTestProject แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว�

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

8. โปรแกรมจะสร�างโปรเจ4คน��ข/�นมา และม� WSDL ของเว4บเซอร,ว�สแสดงข/�นมา ให�ทดลองเล�อกโหนด

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 20: Java Web Services and SOA Using GlassFish openESB and NetBeans

20

CurrencyConvertorSoap จะเห4นรายละเอ�ยดของ WSDL ด�งต�วอย:างในร"ปท�� 3.4

ร�ปท 3.4 การแสดงรายละเอยด Web Service ใน soapUI

9. ขยายโหนด CurrencyConvertorSoap แล�วเล�อกโอเปอร,เรช�น ConversionRate แล�วคล�=กขวาเล�อก ค5าส��ง New Request

10. ในไดอะล4อก New Request ก5าหนดค:าเป2น Request1

11. หน�าต:าง Editor จะแสดงค:าของ SOAP Request ท��จะส:งไปให�ปร�บเปล��ยนค:าเป2น

<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>

12. กดป+@ม submit request (เคร��องหมายส�เข�ยว) โปรแกรมจะได� SOAP Response กล�บมาด�งน�� โดยโปรแกรม soapUI จะแสดงด�งร"ปท�� 3.5

<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>33.51</ConversionRateResult> </ConversionRateResponse> </soap:Body></soap:Envelope>

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 21: Java Web Services and SOA Using GlassFish openESB and NetBeans

21

ร�ปท 3.5 ต�วอย�างผลล�พธ*การร�น SoapUI

3.2 การพ%ฒนา Web Service Client

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

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Java Web และ Web Application แล�วกด Next

3. ก5าหนด Project Name เป2น ExternalWSDemo แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว�

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

3.3 การเร�ยกใช� Web Services เพ��อด!ราคาน#าม�น

ข��นตอนน��เป2นการพ�ฒนาโปรแกรม Web Service Client เพ��อทดสอบเร�ยกใช� Web Services ของปตท.เพ��อเร�ยกด"ราคาน�5าม�นล:าส+ด โดยม�ข��นตอนด�งน��

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

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

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 22: Java Web Services and SOA Using GlassFish openESB and NetBeans

22

ร�ปท 3.6 แสดงไดอะล/อก New Web Service Client

3. ในหน�าต:าง Projects จะม� Folder ท��ช��อ Web Service References ข/�นมา ซ/�งเม��อขยายโหนดด�งกล:าวจะเห4นรายช��อเซอร,ว�สต:างๆ ของ PTTInfo

4. คล�=กขวาท�� ExternalWSDemo แล�วเล�อก Servlet... จากน��นให�ก5าหนดช��อเป2น PTTServlet และ Package: เป2น servlets แล�วกด Finish

5. คล�=กขวาภายในเมธอด processRequest ในไฟล, PTTServlet.java แล�วเล�อก Insert Code... > Call Web Service Operation

6. เล�อก ExternalWSDemo > pttinfo > PTTInfo > PTTInfoSoap > CurrentOilPrice ด�งแสดงในร"ปท�� 3.7 แล�วกด OK

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 23: Java Web Services and SOA Using GlassFish openESB and NetBeans

23

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

7. ภายในไฟล, PTTServlet.java ให�ใส: language เป2น TH โดยจะได� source code ด�ง Listing ท�� 3.1

8. ท5าการ Build/Deploy แล�ว Run ไฟล, จะแสดงราคาน�5าม�นล:าส+ด ด�งแสดงในร"ปท�� 3.8

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

Listing ท�� 3.1 เมธอด processRequest ของโปรแกรม PTTServlet.java

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 24: Java Web Services and SOA Using GlassFish openESB and NetBeans

24

response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet PTTServlet</title>"); out.println("</head>"); out.println("<body>"); try { // Call Web Service Operation com.pttplc.ptt_webservice.PTTInfoSoap port = service.getPTTInfoSoap(); // TODO initialize WS operation arguments here java.lang.String language = "TH"; // TODO process result here java.lang.String result = port.currentOilPrice(language); out.println("Result = " + result); } catch (Exception ex) { // TODO handle custom exceptions here } out.println("</body>"); out.println("</html>");

} finally { out.close(); } }

3.4 การ เร�ยกใช� Web Services เพ��อด!อ�ตราแลกเปล��ยน

ข��นตอนน��เป2นการพ�ฒนาโปรแกรม Web Service Client เพ��อทดสอบเร�ยกใช� Web Services เพ��อเร�ยกด"อ�ตราแลกเปล��ยนเง�นตรา โดยม�ข��นตอนด�งน��

1. คล�=กขวาท��โหนด ExternalWSDemo จากน��นเล�อกค5าส��ง New > Web Service Client แล�วกด Next

2. ในไดอะล4อก New Web Service Client ให�เล�อก WSDL URL: แล�วใส: URL เป2น http://www.webservicex.com/CurrencyConvertor.asmx?wsdl

3. คล�=กขวาท�� ExternalWSDemo แล�วเล�อก Servlet... จากน��นให�ก5าหนดช��อเป2น CurrencyServlet และ Package: เป2น servlets แล�วกด Finish

4. คล�=กขวาภายในเมธอด processRequest ในไฟล, CurrencyServlet.java แล�วเล�อก Insert Code .. > Call Web Service Operation

5. เล�อก ExternalWSDemo > CurrencyConvertor > CurrencyConvertor >

CurrencyConvertorSoap > ConversionRate แล�วกด OK

6. แก�ไขไฟล, CurrencyServlet.java ด�งน�� net.webservicex.Currency fromCurrency = net.webservicex.Currency.USD; net.webservicex.Currency toCurrency = net.webservicex.Currency.THB;

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 25: Java Web Services and SOA Using GlassFish openESB and NetBeans

25

7. ท5าการ Build/Deploy แล�ว Run ไฟล, CurrencyServlet.java โปรแกรมจะแสดงอ�ตราแลกเปล��ยนเง�นตรา ด�งแสดงในร"ปท�� 3.9

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

การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan

Page 26: Java Web Services and SOA Using GlassFish openESB and NetBeans

26

Exercise 4 การพ�ฒนาโปรแกรม Web Services Provider

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

การพ�ฒนา Web Services จะแบ:งเป2นสองส:วนค�อ Web Service Provider (Server) และ Web

Service Requester (Client) แบบฝ1กห�ดน��จะเป2นการพ�ฒนา Web Service Provider ซ/�งสามารถเล�อกพ�ฒนาได�2 ร"ปแบบค�อ

1. Web Services ท��ร�นบน Web Server โดยใช� Java Servlet

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

แบบฝ1กห�ดน��จะเล�อกพ�ฒนาโดยใช� Java Servlet โดยจะแสดงข��นตอนการใช� NetBeans ในการสร�าง Web Service ท��ช��อ calculateTax ซ/�งจะร�นอย":บน GlassFish V2.1 Server

4.1 การพ�ฒนา calculateTax Web Service

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

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

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

Application แล�วกด Next

3. ก5าหนด Project Name เป2น TaxWSDemo แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว�

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

5. คล�=กขวาท��โหนด TaxWSDemo จากน��นเล�อกค5าส��ง New > Other… ให�เล�อก Categories เป2น Web

Services และ Web Service แล�วกด Next

6. ในไดอะล4อก New Web Service ก5าหนด Web Service Name: เป2น TaxServices และ Package:

เป2น ws แล�วกด Finish

7. โปรแกรมจะประกาศ Web Services ท��ช��อ TaxServices ในโหนด Web Services ของหน�าต:าง Project

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

การพ�ฒนาโปรแกรม Web Services Provider Thanachart Numnonda / Thanisa Kruawaisayawan

Page 27: Java Web Services and SOA Using GlassFish openESB and NetBeans

27

8. ในหน�าต:าง Projects ขยายโหนด TaxWSDemo > Web Services แล�วคล�=กขวาท��โหนด TaxServices

เล�อกค5าส��ง Add Operation…

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

10. คล�=กท��แทป Source ของ TaxServices.java และปร�บปร+งเมธอด calculateTax ด�งน��

import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;

@WebService()public class TaxServices { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } } }

11. คล�=กขวาท��โหนด TaxWSDemo จากน��นเล�อกค5าส��ง Clean and Build จากน��นคล�=กขวาท��โหนด TaxWSDemo อ�กคร��ง แล�วเล�อก Deploy

4.2 การทดสอบ Web Service

โปรแกรม Web Service จะถ"กต�ดต��งบน GlassFish V2.1 และสามารถเร�ยกด"ได�การใช� System

Admin Console โดยการเปAด Web Browser และเร�ยก url ท�� http://localhost:4848 โดยก5าหนด user เป2น admin และ password เป2น adminadmin

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

การพ�ฒนาโปรแกรม Web Services Provider Thanachart Numnonda / Thanisa Kruawaisayawan

Page 28: Java Web Services and SOA Using GlassFish openESB and NetBeans

28

ร�ปท 4.1 แสดงรายละเอยดใน GlassFish V2.1

2. เราสามารถท��จะทดสอบ Web Service น��ผ:านทาง Admin Console ได�โดยกดป+@ม Test หร�อทดสอบจาก Netbeans โดยคล�=กขวาท�� TaxServices ใน Web Services ด�งแสดงในร"ปท�� 4.2

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

3. โปรแกรมจะแสดงหน�าจอเพ��อให�เราปBอนข�อม"ลอ�นพ+ต ซ/�งค�อจ5านวนเง�นท��ต�องการค5านวณภาษ� ในท��น��จะใส:ต�วเลขเป2น 73000 ด�งแสดงในร"ปท�� 4.3

การพ�ฒนาโปรแกรม Web Services Provider Thanachart Numnonda / Thanisa Kruawaisayawan

Page 29: Java Web Services and SOA Using GlassFish openESB and NetBeans

29

ร�ปท 4.3 แสดงหน�าต�างส#าหร�บให�ทดสอบเรยก Web Service

4. แล�วกดป+@ม calculateTax โปรแกรมจะเร�ยกใช� Web Services และจะแสดงผลล�พธ,ท��ได� พร�อมท��งแสดงค:า SOAP Request ด�งแสดงในร"ปท�� 4.4

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

การพ�ฒนาโปรแกรม Web Services Provider Thanachart Numnonda / Thanisa Kruawaisayawan

Page 30: Java Web Services and SOA Using GlassFish openESB and NetBeans

30

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

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

การพ�ฒนาโปรแกรม Web Services Provider Thanachart Numnonda / Thanisa Kruawaisayawan

Page 31: Java Web Services and SOA Using GlassFish openESB and NetBeans

31

Exercise 5 Axis2 Web Services

แบบฝ1กห�ดน��เป2นการต�ดต��ง Axis2 Web Services บน Tomcat Web Server แล�วทดลองพ�ฒนา Web

Service โดยใช�โปรแกรม NetBeans

5.1 การต%ดต�#ง Axis2 บน Tomcat

ข��นตอนน��จะเป2นการต�ดต��งโมด"ล Axis2 เพ��อท5าให� Tomcat เป2น Web Service Provider ท��ท5างานภายใต� Axis2 Framework โดยม�ข��นตอนด�งน��

1. ท5าการดาวน,โฟล, Axis2.war จาก http://ws.apache.org/axis2/

2. ท5าการ unzip ไฟล,ต:างๆของ Axis2.war ภายใต�ในไดเร4กทอร��ท��ช��อ webapps ท��อย":ใน CATALINA_BASE ของ Tomcat

3. กรณ�ท��ไม:ทราบไดเร4กทอร��ของ Catalina Base เราสามารถค�นหาได�โดยเปAดโปรแกรม NetBeans

เล�อกหน�าต:าง Services ขยายโหนด Servers แล�วคล�=กขวาเล�อกค5าส��ง Properties ของ Apache Tomcat

ไดอะล4อก Server จะแสดงไดเร4กทอร��ของ Catalina Base ด�งร"ปท�� 5.1

ร�ปท 5.1 การหาต#าแหน�งไดเร/กทอรของ Catalina Base

4. ซ/�งเม��อท5าการ unzip เสร4จแล�วจะได�ไดเร4กทอร��ภายใต� webapps ด�งร"ปท�� 5.2

Axis2 Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 32: Java Web Services and SOA Using GlassFish openESB and NetBeans

32

ร�ปท 5.2 โครงสร�างไดเร/กทอรของ webapps ภายหล�งจากต�ดต��ง Axis2

5. ท5าการ Restart Tomcat แล�วทดสอบ Axis2 โดยการเล�อก url ท��ช��อ http://localhost:8084/axis2/ จะได�ผลล�พธ,ด�งร"ปท�� 5.3 โดยม�เว4บเซอร,ว�สต�วอย:างช��อ Version ร�นอย":

6. เราสามารถท��จะทดสอบเว4บเซอร,ว�สน��โดยใช�โปรแกรมเช:น Soap UI โดยอ�างอ�งถ/ง WSDL ท�� http://localhost:8084/axis2/services/Version?wsdl

ร�ปท 5.3 หน�าจอของ Tomcat Axis2

5.2 การต%ดต�#ง Axis2 Plugin สาหร�บ NetBeans

ข��นตอนน��จะเป2นการต�ดต��ง Axis2 Plugin เพ��อท5าให� NetBeans สามารถพ�ฒนา Axis2 Web Services

ได�โดยม�ข��นตอนด�งน��

Axis2 Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 33: Java Web Services and SOA Using GlassFish openESB and NetBeans

33

1. ในโปรแกรม NetBeans เล�อกค5าส��ง Tools > Plugin

2. ในไดอะล4อก Plugin เล�อกแทป Available Plugins และเล�อกช:อง Axis2 Support แล�วกดป+@ม Install

ด�งร"ปท�� 5.4

ร�ปท 5.4 การต�ดต��ง Axis2 Support Plugin

3. จากน��นจะต�องท5าการ Config Tomcat เพ��อให�สามารถ deploy Axis2 Web Service ได�โดยอ�ตโนม�ต� โดยให�เล�อกค5าส��ง Tools > Options

4. ในไดอะล4อก Options เล�อกแทป Axis2 แล�วก5าหนดค:า Axis2 .aar file เป2นต5าแหน:งท��เราต�ดต��ง axis2.war ลงไป และก5าหนดค:า Axis URL พร�อมท��ง username และ password ของ Tomcat

Manager ให�ถ"กต�อง ด�งต�วอย:างในร"ปท�� 5.5 แล�วกดป+@ม OK [ข�อม"ลของ Tomcat Users สามารถค�นหาได�จากไฟล, CATALINA_BASE/conf/tomcat-users.xml]

Axis2 Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 34: Java Web Services and SOA Using GlassFish openESB and NetBeans

34

ร�ปท 5.5 การ Config ค�าส#าหร�บ Tomcat Axis2

5.3 การพ�ฒนา Axis2 Web Service

ข��นตอนน��จะเป2นการพ�ฒนา Axis2 Web Service F ดยม�ข��นตอนการพ�ฒนาด�งน��

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Java และ Java Application แล�วกด Next

3. ก5าหนด Project Name เป2น Axis2Demo แล�วเล�อก Project Location เป2น Director ท��เราต�องการจะเก4บไฟล,ไว� แล�วกด Finish

4. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด Axis2Demo จากน��นเล�อกค5าส��ง New > Other

5. ในไดอะล4อก New File ให�เล�อก Categories เป2น Web Services และ Axis2 Service from Java

แล�วกด Next

6. เล�อกช:อง Create Empty Web Service แล�วกด Next

7. ในไดอะล4อกถ�ดไป ก5าหนดช��อ Class Name เป2น TaxServices และ Package เป2น ws แล�วกด Finish

8. ปร�บปร+ง source code เพ��อเพ��มเมธอดท��ช��อ calculateTax ด�ง Listing ท�� 9. ท5าการ Deploy Web Services โดยการคล�=กขวาท��โหนด Axis Web Server ท��อย":ภายใต�โหนด

Axis2 Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 35: Java Web Services and SOA Using GlassFish openESB and NetBeans

35

Axis2Demo แล�วเล�อกค5าส��ง Deploy to Server

10. ทดสอบเว4บเซอร,ว�สได� ร�นโปรแกรม Browser และการเล�อก url ท��ช��อ http://localhost:8084/axis2/

แล�วคล�=ก Services จะเห4นเว4บเซอร,ว�สท��ช��อ TaxServices อย":

Listing ท�� 5.1 โปรแกรม TaxServices.java

package ws;

public class TaxServices {

public double calculateTax(double income) { return 0.1 * income; }

}

Axis2 Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 36: Java Web Services and SOA Using GlassFish openESB and NetBeans

36

Exercise 6 Java Web Services from Entity Class

แบบฝ1กห�ดในบทน��เป2นการพ�ฒนาโปรแกรม Web Services ส5าหร�บ Java EE โซ/�งจะเป2นการพ�ฒนาบน Server ท��ร�นบน Java EE โดยช+ดค5าส��ง JAX-WS ซ/�งในกรณ�น��จะแสดงข��นตอนการใช� NetBeans สร�าง Web

Services ท��ช��อ findBook ซ/�งเร�ยกใช� Session Bean ท��สร�างข/�นในแบบฝ1กห�ด Enterprise Java Bean โดย Service น��จะเป2นการค�นหาหน�งส�อจาก table ท��ช��อ book ในฐานข�อม"ล MySQL

6.1 การสร�าง Enterprise Application Project

เราจะก5าหนดให�โปรแกรมน��เป2นโปรแกม Enterprise Application ซ/�งม�ท��ง EJB Module และ Web

Module ข��นตอนแรกจะเป2นการสร�าง Project ใหม:ข/�นมาใน NetBeans ซ/�งม�ข��นตอนด�งน��

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Java EE และเล�อก Enterprise เป2น Enterprise Application แล�วกด Next

3. ก5าหนด Project Name เป2น BookAppWS แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว� แล�วกด Next

4. เล�อก Server เป2น GlassFish V2.1 ก5าหนด Jave EE Version: เป2น และให�เล�อกช:อง Create

EJB Module: และ Create Web Application Module: ด�งแสดงในร"ป แล�วกด Finish

ร�ปท 6.1 การ Config ค�าส#าหร�บ Tomcat Axis2

Java Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan

Page 37: Java Web Services and SOA Using GlassFish openESB and NetBeans

37

6.2 การพ�ฒนา Entity Class และ Session Bean

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

Class ท��ช��อ Books และ Session Bean ท��ช��อ BooksFacade ซ/�งม�เมธอด findBook ด�งร"ปท��

ร�ปท 6.2 แสดงไฟล*ของโปรแกม BookAppWS-ejb ทถ�กสร�างข��น

6.3 การพ�ฒนา findBook ' Web Service

ข��นตอนน��จะสร�าง Web Service ท��ช��อ find DBook จาก Stateless Session Bean ท��ช��อ BooksFacade.java ท��พ�ฒนาจากแบบฝ1กห�ด Enterprise Java Bean โดย Services น��จะใช�ในการค�นหาหน�งส�อจากฐานข�อม"ลจากหมายเลข isbn ท��ปBอนเข�า และม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกไฟล, BooksFacade.java แล�วเปล��ยน source code โดยเพ��มค5าส��ง annotation เพ��อประกาศให� session bean น��เป2น Web Service และเมธอด find เป2น Web Service โดยม�ค5าส��งด�งน��

@WebService@Statelesspublic class BooksFacade implements BooksFacadeLocal {

... @WebMethod(operationName=”findBook”)

public Books find(Object pk) { return (Books) em.find(Books.class, pk);

}...

}

2. กด Alt-Shift-F เพ��อท5าการ import class ท��เก��ยวข�องแล�วกดป+@ม Save

3. ท5าการ Deploy Project

Java Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan

Page 38: Java Web Services and SOA Using GlassFish openESB and NetBeans

38

6.4 การพ�ฒนาโปรแกรม Web Application เพ��อเร�ยกใช� Web Service

ข��นตอนน��จะเป2นการพ�ฒนา Web Application บน GlassFishV2 เพ��อเร�ยกใช� Web Service ท��ช��อ findBook โดยม�ข��นตอนการพ�ฒนาด�งน��

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

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

แล�วกด Next

3. ก5าหนด Project Name เป2น WSServletClient จากน��นเล�อก Server เป2น GlassFish V2 ก5าหนด Jave EE Version: เป2น Java EE 5 แล�วกด Finish

4. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด WSServletClient จากน��นเล�อกค5าส��ง New => Other..

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

Service Client แล�วกด Next

6. ในไดอะล4อก New Web Service Client เล�อก Project โดยก5าหนด BooksFacadeService โปรแกรมจะแสดงค:า wsdl ด�งร"ปท��

ร�ปท 6.3 การก#าหนดค�า WSDL

7. กด Finish โปรแกรมจะแสดง Web Service Reference โดยม� Service ช��อ find DBook

Java Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan

Page 39: Java Web Services and SOA Using GlassFish openESB and NetBeans

39

8. ในหน�าต:าง Projects เล�อกโหนด WSServletClient แล�วเล�อก New > Servlet..

9. ก5าหนด Servlet Name: เป2น BookServlet แล�วกด Finish

10. ในหน�าต:าง Projects ลากโหนด findBook ลงในไฟล, BookServlet.java ของหน�าต:าง Editor

โปรแกรมจะเพ��ม source code ให�อ�ตโนม�ต� ให�ปร�บปร+ง source code ในส:วนท��เร�ยกใช� Web

Service ด�งน��

try { // Call Web Service Operation entity.BooksFacade port = service.getBooksFacadePort(); java.lang.Object arg0 = request.getParameter("isbn"); entity.Books book = port.find(arg0); out.println("Title = "+ book.getTitle() + "<br>"); out.println("Author = "+ book.getAuthor() + "<br>"); out.println("Price = "+ book.getPrice() + "<br>"); } catch (Exception ex) { // TODO handle custom exceptions here }

11. กดป+@ม Save

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

1. ท5าการ Build และ Deploy โปรเจ4ค WSServletClient

2. Run โปรแกรม WSServletClient

3. เล�อก URL ของ Web Browser เป2น http://localhost:8080/WSServletClient/BookServlet?

isbn=123 โดยท�� 123 ค�อหมายเลข isbn ท�ม�อย":ในฐานข�อม"ล4. โปรแกรมจะแสดงผลเป2นรายละเอ�ยดของหน�งส�อในฐานข�อม"ล

Java Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan

Page 40: Java Web Services and SOA Using GlassFish openESB and NetBeans

40

Exercise 7 การพ�ฒนาโปรแกรมโดยใช� JAXP

แบบฝ1กห�ดในบทน��เป2นการพ�ฒนาโปรแกรมท��เก��ยวข�องก�บไฟล,ประเภท XML โดยใช�ช+ดค5าส��ง JAX-P

(Java API for XML Processing) ซ/�งเป2นช+ดค5าส��งภาษาจาวาเพ��อด/งข�อม"ลจากไฟล,ประเภท XML

ข��นตอนในการพ�ฒนาโปรแกรม1. สร�าง Java Project

2. สร�าง XML Document

3. พ�ฒนาโปรแกรม XML Parser โดยใช� JAXP

7.1 การสร�าง Java Project

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Java และ Java Application แล�วกด Next

3. ก5าหนด Project Name เป2น JAXPB แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว� จากน��นเล�อกตรง Create Main Class ออก แล�วกด Finish

7.2 การสร�าง XML Document

1. คล�=กขวาท��โหนด JAXPB จากน��นเล�อก New > Other...

2. ในหน�าต:าง New File ให�เล�อก Categories ท��ช��อ XML เล�อก File Types: เป2น XML Document

แล�วกด Next

3. ในหน�าต:าง New XML Document ให�ต��งช��อ File Name: เป2น Books และเล�อก Folder:ไปท�� src

แล�วกด Next

4. ให�เล�อก Select Document Type เป2นแบบ Well-formed Document แล�วกด Finish

5. ให�ค�ดลอกข�อม"ลของ XML Document ใน Listing ท�� 7.1 ไปใส:ในไฟล, Books.xml

Listing ท�� 7.1 ข�อม"ลส5าหร�บไฟล, Books.xml

<?xml version='1.0' encoding='UTF-8'?><books> <book> <isbn>111</isbn> <title>SOA</title> <author>Bill</author> <price>2000.0</price> </book> <book> <isbn>222</isbn>

การพ�ฒนาโปรแกรมโดยใช� JAXP Thanachart Numnonda / Thanisa Kruawaisayawan

Page 41: Java Web Services and SOA Using GlassFish openESB and NetBeans

41

<title>Web Services</title> <author>Jane</author> <price>1800.0</price> </book></books>

7.3 การพ�ฒนาโปรแกรม XML Parser

ในข��นตอนน��จะเป2นการพ�ฒนาโปรแกรมจาวาเพ��อท5าหน�าท��เป2น XML Parser ด/งข�อม"ลออกมาจาก SOAP

Response ซ/�งม�ข��นอตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด JAXPB จากน��นเล�อกค5าส��ง New > Java Main Class

แล�วกด Next

2. ก5าหนด Class Name: เป2น JAXPDemo จากน��นใส: Package: เป2น demo แล�วกด Finish

3. ในไฟล, JAXPDemo ให�ท5าการประกาศคลาสท��ช��อ XMLHandler โดยให�ส�บทอดคลาสท��ช��อ XMLFilterImpl ด�งแสดงใน Listing ท�� 7.2

Listing ท�� 7.2 โปรแกรม JAXPDemo.java

package demo;

class XMLHandler extends XMLFilterImpl {

}public class JAXPDemo { public static void main(String[] args) { }}

4. คล�=กขวาในหน�า Editor เพ��อท5าการ Fix Imports

5. จากน��นให�ท5าการคล�=กขวาในคลาส XMLHandler แล�วเล�อก Insert Code.... > Override Methods...

เล�อกเมธอด characters, endDocument, endElement, startDocument และ startElement ด�งแสดงในร"ปท�� 7.1

การพ�ฒนาโปรแกรมโดยใช� JAXP Thanachart Numnonda / Thanisa Kruawaisayawan

Page 42: Java Web Services and SOA Using GlassFish openESB and NetBeans

42

ร�ปท 7.1 แสดงการเล�อก Override Methods ของ XMLFilterImpl

6. กดป+@ม Generate แล�วเพ��มค5าส��งในเมธอดต:างๆ ของคลาส XMLHandler ด�งแสดงใน Listing ท�� 7.3

Listing ท�� 7.3 คลาส XMLHandler

class XMLHandler extends XMLFilterImpl { @Override

การพ�ฒนาโปรแกรมโดยใช� JAXP Thanachart Numnonda / Thanisa Kruawaisayawan

Page 43: Java Web Services and SOA Using GlassFish openESB and NetBeans

43

public void characters(char[] ch, int start, int length) throws SAXException { String content = new String(ch,start,length); if (!content.trim().equals("")) { System.out.println("characters: ("+content+")"); } }

@Override public void endDocument() throws SAXException { System.out.println("End Document"); }

@Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("End Element: "+localName); }

@Override public void startDocument() throws SAXException { System.out.println("Start Document"); }

@Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { System.out.println("Start Element: "+localName); } }

7. จากน��นให�ท5าการเพ��มเต�ม source code ในเมธอด main ของคลาส JAXPDemo ด�ง Listing ท�� 7.4

Listing ท�� 7.4 คลาส JAXPDemo

public class JAXPDemo { public static void main(String[] args) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); SAXParser saxParser = factory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader();

การพ�ฒนาโปรแกรมโดยใช� JAXP Thanachart Numnonda / Thanisa Kruawaisayawan

Page 44: Java Web Services and SOA Using GlassFish openESB and NetBeans

44

xmlReader.setContentHandler(new XMLHandler()); InputSource is = new InputSource(new FileInputStream("Books.xml")); xmlReader.parse(is); } catch (Exception ex) { System.out.println(ex); } }}

8. คล�=กขวาในหน�า Editor เพ��อท5าการ Fix Imports

9. จากน��นให�คล�=กขวาท��โหนด JAXPB แล�วเล�อก Properties ตรง Categories ให�เล�อก Run จากน��นตรง Working Directory ให� Browse เล�อกไปท�� folder src กด Open และกด OK

10. Run โปรแกรม JAXPDemo.java

การพ�ฒนาโปรแกรมโดยใช� JAXP Thanachart Numnonda / Thanisa Kruawaisayawan

Page 45: Java Web Services and SOA Using GlassFish openESB and NetBeans

45

Exercise 8 การพ�ฒนาโปรแกรม RESTful Web Services

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

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

ข��นตอนในการพ�ฒนาโปรแกรม1. สร�าง Web Application Project

2. พ�ฒนา Entity Class

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

4. ทดสอบ RESTful Web Service

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

8.1 การสร�าง Web Application Project

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

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

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

Application แล�วกด Next

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

4. จากน��นเล�อก Server เป2น GlassFishV2.1 และ Java EE 5 แล�วกด Finish

8.2 การพ�ฒนา Entity Class

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

ท5าการแก�ไขเพ��อเพ��ม property ของ ไฟล, 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"

การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 46: Java Web Services and SOA Using GlassFish openESB and NetBeans

46

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="adminadmin" /> </properties> </persistence-unit></persistence>

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

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

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

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

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

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

3. ในไดอะล4อก New RESTful Web Services from Entity Class ให�เล�อก Books (entity Books) ด�งร"ปท�� 8.1 กด Add > แล�วกด Next

ร�ปท 8.1 การเล�อก Entity Class ส#าหร�บ RESTful Web Service

4. โปรแกรม NetBeans จะสร�าง class ต:างๆ ด�งร"ปท�� 8.2

การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 47: Java Web Services and SOA Using GlassFish openESB and NetBeans

47

ร�ปท 8.2 การก#าหนดค�า Entity Class

5. กดป+@ม Finish

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

ข��นตอนน��จะเป2นการทดสอบ RESTful Web Services ท��พ�ฒนาข/�นโดยจะม�ข��นตอนด�งน��1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด RestfulWS จากน��นเล�อกค5าส��ง Test RESTful Web

Services2. โปรแกรม Browser จะแสดง uri ของ RESTful Web Services ให�เล�อกโหนด bookss และคล�=กท��

{isbn} ใส:ค:า isbn ของหน�งส�อท��ต�องการด"รายละเอ�ยด จากน��นกด Test ด�งร"ปท�� 8.3 ซ/�งจะได�ผลล�พธ,ด�งแสดงในร"ปท�� 8.4

ร�ปท 8.3 การร�นโปรแกรมทดสอบ RESTful Web Service โดยใช�เมธอด GET

การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 48: Java Web Services and SOA Using GlassFish openESB and NetBeans

48

ร�ปท 8.4 ผลล�พธ*ทได�จากการเรยกใช�เมธอด GET

3. ทดลองเปล��ยน method เป2น PUT, DELETE และ POST (ต�องกดเล�อกไปท��โหนด bookss) เพ��อท5าการแก�ไข ลบ และเพ��มข�อม"ลในตาราง books ด�งแสดงในร"ปท�� 8.5, 8.7 และ 8.9 ซ/�งจะได�ผลล�พธ,ด�งแสดงในร"ปท�� 8.6, 8.8 และ 8.10 ตามล5าด�บ

ร�ปท 8.5 การร�นโปรแกรมทดสอบ RESTful Web Service โดยใช�เมธอด PUT

การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 49: Java Web Services and SOA Using GlassFish openESB and NetBeans

49

ร�ปท 8.6 ผลล�พธ*ทได�จากการเรยกใช�เมธอด PUT

ร�ปท 8.7 การร�นโปรแกรมทดสอบ RESTful Web Service โดยใช�เมธอด DELETE

ร�ปท 8.8 ผลล�พธ*ทได�จากการเรยกใช�เมธอด DELETE

การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 50: Java Web Services and SOA Using GlassFish openESB and NetBeans

50

ร�ปท 8.9 การร�นโปรแกรมทดสอบ RESTful Web Service โดยใช�เมธอด POST

ร"ปท�� 8.10 ผลล�พธ,ท��ได�จากการเร�ยกใช�เมธอด POST

การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 51: Java Web Services and SOA Using GlassFish openESB and NetBeans

51

Exercise 9การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google

Calendar API

แบบฝ1กห�ดในบทน��เป2นต�วอย:างการใช� Web Services ท��ม�อย":ใน Social Networks โดยจะใช� Web

Services ของ Twitter เพ��อเข�ยนโปรแกรม update status ของ Twitter ส:วนต�ว จาก Web Application ท��พ�ฒนาข/�น จากน��นจะเข�ยนโปรแกรมต�ดต:อก�บ Google Calendar โดยใช� Java API ของ Google เพ��อเร�ยกด" ก5าหนดน�ดหมายของผ"�ใช�ในว�นป;จจ+บ�น จากน��นจะสามารถเล�อกน�ดหมายท��แสดงข/�นเพ��อส:งผ:านไปย�ง Twitter โดยการเร�ยกใช� Web Services ซ-�งม�ข� นตอนในการพ�ฒนาโปรแกรมด�งน�

1. สร�าง User Account ส5าหร�บ Twitter และ Google Calendar

2. สร�าง JSF Web Application ส5าหร�บ Twitter

3. สร�าง Web Application ส5าหร�บส:งน�ดหมายใน Google Calendar ไปย�ง Twitter

9.1 การสร�าง User Account สาหร�บ Twitter และ Google Calendar

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

• เว4บ Twitter เป2นบร�การส5าหร�บให�เราสามารถท��จะเช��อมต:อก�บ เพ��อน สมาช�กในครอบคร�ว และเพ��อนร:วมงานได�อย":ตลอดเวลา โดยการตอบค5าถามส��นๆ อย:างบ:อยคร��งว:า What are you doing?

เราสามารถท��จะลงทะเบ�ยนเว4บน��ได�ท�� twitter.com และเม��อท5าการล4อกอ�นเข�าไปแล�วจะได� ต�วอย:างเว4บด�งร"ปท�� 9.1

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 52: Java Web Services and SOA Using GlassFish openESB and NetBeans

52

ร�ปท 9.1 ต�วอย�างเว/บ Twitter

• เว4บ Google Calendar เป2นเว4บท��ให�ผ"�ใช�จ�ดการก5าหนดการน�ดหมายต:างๆ ได�โดยสามารถสร�าง แสดง แก�ไข และลบได�ผ:านโปรแกรมเว4บเบราว,เซอร, โดยข�อม"ลการน�ดหมายจะถ"กเก4บไว�ท�� Google ท5าให�ผ"�ใช�สามารถเร�ยกผ:านเว4บจากเคร��องใดๆ ก4ได� เราสามารถท��จะลงทะเบ�ยนเว4บน��ได�ท�� www.google.com/calendar และเม��อท5าการล4อกอ�นเข�าไปแล�วจะได�ต�วอย:างเว4บด�งร"ปท�� 9.2

ร�ปท 9.2 ต�วอย�างเว/บ Google Calendar

• กรณ�ท��ผ"�ใช�ม� account อย":ใน Facebook เราสามารถท��จะให� status update ของ Twitter ถ"กส:ง

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 53: Java Web Services and SOA Using GlassFish openESB and NetBeans

53

ผ:านมาย�งเว4บไซต, Facebook ของเราได�โดยอ�ตโนม�ต�โดยการเล�อก Facebook Application ช��อ http://apps.facebook.com/twitter/ ด�งต�วอย:างในร"ป 9.3

ร�ปท 9.3 การเช�อมโยงระหว�าง Facebook ก�บ Twitter

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

ข��นตอนน��จะเป2นการสร�าง Web Application โดยใช� JSF Visual Web Framework เพ��อท5าการส:ง ข�อความตอบค5าถาม What are you doing? จากโปรแกรมท��พ�ฒนาข/�นไปย�ง Twitter โดยเร�ยกใช� Web

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

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

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

Application แล�วกด Next

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

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

หมายเหต กรณ�ท��ไม:ม� Visual JSF Frameworks ให�ไปท��เมน" Tools > Plugins แล�วเล�อกไปท��แทป Available

Plugins จากน��นกด Install ด�งแสดงในร"ปท�� 9.4 และเม��อเสร4จส��นการต�ดต��งแล�ว ต�อง restart IDE

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 54: Java Web Services and SOA Using GlassFish openESB and NetBeans

54

ร�ปท 9.4 การเพ�ม Visual JSF Frameworks

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

ร�ปท 9.5 ส�วนต�ดต�อก�บผ��ใช�ของโปรแกรม TwitterJSF

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

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 55: Java Web Services and SOA Using GlassFish openESB and NetBeans

55

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

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

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

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

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

เป2น answerTf

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

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

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

ข��นตอนถ�ดมาจะเป2นการเข�ยน Source code เพ��อก5าหนดการท5างานของการกดป+@ม Twitter Notification

โดยม�ข��นตอนการท5างานด�งน��

9. ในแทป Design ให�ด�บเบ��ลคล�=กท��ป+@ม Twitter Notification

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

11. ลากเซอร,ว�ส updateStatus มาไว�ในหน�าต:าง editor ซ/�งแสดง source code ในค5าส��ง action ของป+@ม และให�แก�ไข 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.

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 56: Java Web Services and SOA Using GlassFish openESB and NetBeans

56

twitterresponse.NilClasses.class);

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

เราจะต�องท5าการระบ+ username และ password ของ Twitter โดยการก5าหนดค:า properties ท��อย":ในไฟล, twitterwhatareyoudoingserviceauthenticator.properties ท��อย":ในโหนด TwitterJSF > Source Packages

> org.netbeans.saas.twitter ด�งต�วอย:าง# To change this template, choose Tools | Templates# and open the template in the [email protected] password=xxxxxxxx

เราสามารถทดสอบร�นโปรแกรมน��แล�วทดลองปBอนข�อความด�งร"ปท�� 9.6 จากน��นเราสามารถท��จะเร�ยกด"ผลข�อการส:งข�อความไปย�ง Twitter ได�จากเว4บ Twitter ด�งร"ปท�� 9.7

ร�ปท 9.6 การทดสอบโปรแกรม TwitterJSF ทพ�ฒนาข��น

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 57: Java Web Services and SOA Using GlassFish openESB and NetBeans

57

ร�ปท 9.7 ผลล�พธ*ทแสดงในหน�าเว/บ Twitter

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

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

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

ท��ม�ไฟล,ต:างๆ ค�อ

9.1.1 CalendarTwitter.html

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

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

<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>

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 58: Java Web Services and SOA Using GlassFish openESB and NetBeans

58

<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>

ร�ปท 9.8 เว/บเพจ CalendarTwitter.html

9.1.2 CalendarServlet.java

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

ร�ปท 9.9 ต�วอย�างการแสดงน�ดหมายของว�นท 10/8/2009

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 59: Java Web Services and SOA Using GlassFish openESB and NetBeans

59

โปรแกรม Servlet น��จะเร�ยกใช� Google API ซ/�งผ"�ใช�จะต�องท5าการดาวน,โหลดไฟล, gdata-src.java-1.39.0.zip มาจาก http://code.google.com/p/gdata-java-client/downloads/list และต�องดาวน,โหลดไฟล, google-collect-1.0-rc3.zip มาจาก http://code.google.com/p/google-collections/downloads/list จากน��นให�ท5าการ unzip และจะต�องท5าการต�ดต��ง Library น��ใน NetBeans โดยม�ข��นตอนด�งน��

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

2. ในไดอะล4อก Library Manager ให�เล�อก New Library.. แล�วก5าหนด Library Name เป2น GData

3. ก5าหนด Classpath ของ GData เป2น ด�งร"ปท�� 9.10 โดยม�ไฟล,ต:างๆ ใน folder

[$gdata-director$]\gdata\java\lib ด�งน��

• 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

ร�ปท 9.10 การเพ�มไฟล*ของ Library ทช�อ Gdata

1. ก5าหนด Sources เป2น [$gdata-director$]\gdata\java\src

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 60: Java Web Services and SOA Using GlassFish openESB and NetBeans

60

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

3. จากน��นสร�าง Library ท��ช��อ GoogleCollection โดยให�ก5าหนด Classpath เป2น

• google-collect-1.0-rc3.jar

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

โปรแกรม CalendarServlet จะม�เมธอดในการ Authentication ของ Twitter เพ��อก5าหนด 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) { ex.printStackTrace(); } }

และม�เมธอดในการเร�ยกน�ดหมายท��งหมดใน Google Calendar โดยจะเร�ยกเมธอด Calendar.getInstance() เพ��อเอาว�นเวลาป;จจ+บ�นมา จากน��นจะต�องแปลงว�นเวลาให�อย":ในร"ปแบบด�งน�� dd-mm-yyyyThh:mm:ss เพ��อส:งเป2นพาราม�เตอร,ของ Google Calendar ในการหาการน�ดหมายในช:วงว�นเวลาระหว:างต�วแปร startTime ถ/งต�วแปร 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; }

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 61: Java Web Services and SOA Using GlassFish openESB and NetBeans

61

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);

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

ส5าหร�บเมธอด 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);

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 62: Java Web Services and SOA Using GlassFish openESB and NetBeans

62

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(); }

9.1.3 TwitterUpdate.java

โปรแกรม Calendar Servlet จะเร�ยกใช� Twitter Update ซ/�งม�การเร�ยกใช�เว4บเซอร,ว�สท��ช��อ updateStatus โดยการเข�ยน source code สามารถท5าได�โดยการลากเซอร,ว�สด�งกล:าวมาไว�ในหน�าต:าง 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 Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 63: Java Web Services and SOA Using GlassFish openESB and NetBeans

63

twitter.whatareyoudoingservice.twitterresponse.NilClasses resultObj = result.getDataAsObject(twitter.

whatareyoudoingservice.twitterresponse.NilClasses.class);

}

} catch (Exception ex) { ex.printStackTrace(); }

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

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

1. ท5าการ Build และ Deploy โปรแกรม TwitterTester

2. Run โปรแกรม TwitterTester โดยเล�อก URL ของ Web Browser เป2น http://localhost:8080/TwitterTester/CalendarTwitter.html

3. เราสามารถท��จะทดลองร�นโปรแกรมน�� แล�วทดลองเล�อกน�ดหมายเพ��อส:งข�อความผ:าน Twitter แล�วตรวจสอบผลล�พธ,จากการเปล��ยนแปลงในเว4บ Twitter ด�งต�วอย:างในร"ปท�� 9.11

ร�ปท 9.11 ต�วอย�างผลล�พธ*การร�นโปรแกรม

การพ�ฒนาโปรแกรมเร�ยกใช� Twitter Web Services และ Google Calendar APIThanachart Numnonda / Thanisa Kruawaisayawan

Page 64: Java Web Services and SOA Using GlassFish openESB and NetBeans

64

Exercise 10 การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services

แบบฝ1กห�ดน��เป2นต�วอย:างการใช� Google Map Web Services โดยเข�ยนเป2น Web Application เพ��อแสดงต5าแหน:งของโรงพยาบาลพร�อมรายละเอ�ยดท��ถ"กจ�ดเก4บอย":ในฐานข�อม"ล ซ-�งม�ข� นตอนในการพ�ฒนาโปรแกรมด�งน�

1. สร�างฐานข�อม"ลโรงพยาบาล2. สร�าง Enterprise Application Project

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

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

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

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

10.1 การสร�างฐานข�อม!ลโรงพยาบาล

ข��นตอนแรกจะเป2นการสร�าง table และเตร�ยมข�อม"ลเพ��อใช�ในแบบฝ1กห�ด โดยใช�โปรแกรม NetBeans

หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ bkk_hospital ในฐานข�อม"ล MySQL ท��ช��อ test โดยก5าหนดให�ม� column ต:างๆ ด�งน��

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

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

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

การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 65: Java Web Services and SOA Using GlassFish openESB and NetBeans

65

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital', '2 Prannok road Siriraj Bangkoknoi', 'Bangkok', '10700');

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital', '51/3 Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900');

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital', 'Phaya Thai Road, Phaya Thai', 'Bangkok', '10400');

10.2 การสร�าง Enterprise Application Project

แบบฝ1กห�ดน��จะสร�าง Project ท��เป2น Enterprise Application โดยม� Entity Class ท��ช��อ BkkHospital เพ��อท5า ORM (Object Relational Mapping) ก�บ table ท��ช��อ bkk_hospital และม�โปรแกรม Java Servlet ในการแสดงรายช��อโรงพยาบาลท��อย":ในฐานข�อม"ลให�ผ"�ใช�เล�อกแล�วเร�ยกใช�โปรแกรม Java Servlet

อ�กโปรแกรมในการแสดงต5าแหน:งของโรงพยาบาลจาก Google Map โดยม�ข��นตอนการสร�างโปรเจ4คด�งน��

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

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

Application แล�วกด Next

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

ท��เราต�องการจะเก4บไฟล,ไว� จากน��นเล�อก Server เป2น GlassFish V2.1 แล�วกด Finish

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

ข��นตอนน��จะเป2นการสร�าง Entity Class จาก table ท��ช��อ bkk_hospital ท��สร�างไว�ในห�วข�อ 5.1 โดยม�ข��นตอนการพ�ฒนาโปรแกรมด�งน��

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

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

Classes from Database แล�วกด Next

3. ในไดอะล4อก New Entity Classes from Database ให�เล�อก Data Sources: เป2น jdbc/test และ Selected Tables: เป2น bkk_hospital กด Add แล�วกด Next

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

5. กด Create แล�วกด Finish

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

การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 66: Java Web Services and SOA Using GlassFish openESB and NetBeans

66

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

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

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

Beans for Entity Classes แล�วกด Next

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

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

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

โปรแกรม HospitalSelector.java เป2นโปรแกรมจาวา Servlet เพ��อแสดงรายช��อโรงพยาบาลท��ถ"กจ�ดเก4บอย":ในฐานข�อม"ลโดยจะแสดงในร"ปของ radio เพ��อให�ผ"�ใช�เล�อก และเม��อผ"�ใช�เล�อกโรงพยาบาลแล�วโปรแกรมน��จะเร�ยกใช�โปรแกรม Servlet ท��ช��อ DisplayLocation.java เพ��อแสดงต5าแหน:งของโรงพยาบาลโดยใช� Google Map Web Services

เราสามารถท��จะพ�ฒนาโปรแกรม HospitalSelector.java ตามข��นตอนในการพ�ฒนา Java Servlet ด�งน��1. เล�อกหน�าต:าง Projects แล�วคล�=กขวาท��โหนด BkkHospitalGoogleMap-war จากน��นเล�อกค5าส��ง

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

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

4. ในหน�าต:าง Editor คล�=กขวาภายในเมธอด processRequest() แล�วเล�อกค5าส��ง Insert Code.. > Call

Enterprise Bean ...แล�วเล�อก BkkHospitalFacade

5. เพ��มเต�ม source code ให�เป2นด�งน��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 {

การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 67: Java Web Services and SOA Using GlassFish openESB and NetBeans

67

@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();

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("<br><input type='submit' value='Show Location' />"); out.println("</form>"); out.println("</body>"); out.println("</html>"); } ....}

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

โปรแกรม DisplayLocation.java เป2นโปรแกรม Servlet ท��เร�ยกใช�เว4บเซอร,ว�สของ Google Map เพ��อแสดงแผนท��ของโรงพยาบาลท��เล�อกจาก HospitalSelector.java โดยม�ข��นตอนการพ�ฒนาโปรแกรมด�งน��

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

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

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

4. ในหน�าต:าง Editor คล�=กขวาภายในเมธอด processRequest() แล�วเล�อกค5าส��ง Insert Code.. > Call

Enterprise Bean ...แล�วเล�อก BkkHospitalFacade

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

6. ลากเซอร,ว�ส getGoogleMap มาใส:ไว�ในหน�าต:าง Editor ท��แสดง source code ของไฟล, DisplayLocation.java แล�วแก�ไข source code ในเมธอด processRequest() ด�งน��

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 68: Java Web Services and SOA Using GlassFish openESB and NetBeans

68

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

8. ท5าการก4อบปEFค:า API Key ท��ได�ไปใส:ในไพล,ท��ช��อ googlemapservices.properties ท��อย":ภายในโหนด BkkHospitalGoogleMap-war > Source Packages > org.netbeans.saas.google ด�งต�วอย:างเช:นapi_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg

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

1. คล�=กขวาท�� BkkHospitalGoogleMap เพ��อท5าการ Build และ Deploy

2. คล�=กขวาท�� BkkHospitalGoogleMap เพ��อท5าการ Run

3. เล�อก URL ของ Web Browser เป2น http://localhost:8080/BkkHospitalGoogleMap-

war/HospitalSelector จะได�ผลล�พธ,ในการร�นโปรแกรมด�งต�วอย:างในร"ปท�� 10.1 และ 10.2

การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 69: Java Web Services and SOA Using GlassFish openESB and NetBeans

69

ร�ปท 10.1 โปรแกรมเว/บเพ�อให�ผ��ใช�เล�อกโรงพยาบาล

ร�ปท 10.2 ผลล�พธ*ในการแสดงต#าแหน�งของโรงพยาบาลผ�าน Google Map

การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 70: Java Web Services and SOA Using GlassFish openESB and NetBeans

70

Exercise 11 การพ�ฒนาโปรแกรม Hello BPEL

แบบฝ1กห�ดน��เป2นการพ�ฒนาโปรแกรม BPEL เพ��อแสดงต�วอย:างการเข�ยน Business Process แบบ Synchronous แบบฝ1กห�ดน��จะอธ�บายการใช� NetBeans เพ��อสร�างไฟล, XML Schema, ไฟล, WSDL และไฟล, BPEL โปรแรม BPEL Process ท��จะพ�ฒนาข/�นเป2นธ+รกรรมเพ��อท5าการค�ดลอกข�อความ ซ/�งม�ข��นตอนในการพ�ฒนาโปรแกรมด�งน��

1. ต�ดต��ง Component ของ Open ESB เพ��มเข�าไปใน GlassFish V2.1

2. พ�ฒนาโปรเจ4ค HelloBPEL

3. พ�ฒนาไฟล, WSDL

4. พ�ฒนา BPEL Process

5. พ�ฒนาโปรเจ4ค Composite Application

11.1 การต%ดต�#ง Component ของ Open ESB เพ%�มเข�าไปใน GlassFish V2.1

เน��องจาก GlassFish V2.1 ท��มาพร�อมก�บ Netbeans 6.7.1 ไม:ม� Component ของ Open ESB มาด�วย ด�งน��นให�ไปท5าการ download ไฟล, glassfishesb-v2.1-installer-windows.exe จากเว4บไซต, https://open-esb.dev.java.net/Downloads.html โดยเล�อก download ท�� v2.1 for NetBeans 6.7

ในระหว:างต�ดต��งให�ก5าหนด path ด�งน��

• Netbeans Installation Folder: C:\Program Files\NetBeans 6.7.1 (ส5าหร�บ Netbeans 6.7.1) และ• GlassFish Installation Folder: C:\Sun\AppServer (ส5าหร�บ GlassFish V2.1) ด�งแสดงในร"ปท��

11.1

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 71: Java Web Services and SOA Using GlassFish openESB and NetBeans

71

ร�ปท 11.1 การก#าหนดรายละเอยดของ GlassFish V2.1

จากน��นเม��อต�ดต��งเสร4จส��นแล�ว ให�ท5าตามข��นตอนด�งน��

1 ไปท�� Netbeans แล�วเล�อกแทป Services ไปท�� Server > GlassFish V2.1 > JBI คล�=กขวาท��Shared Libraries แล�วเล�อก Install ด�งร"ปท�� 11.2

ร�ปท 11.2 การเพ�ม Shared Libraries ใน GlassFish V2.1

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 72: Java Web Services and SOA Using GlassFish openESB and NetBeans

72

2. ไปท�� C:\Sun\AppServer\addons\jbi-components แล�วเล�อก encoderlib.jar และ wsdlextlib.jar

3. คล�=กขวาท�� Service Engines แล�วเล�อก Install and Start

4. ไปท�� C:\Sun\AppServer\addons\jbi-components แล�วเล�อก bpelserviceengine.jar

5. คล�=กขวาท�� Binding Components แล�วเล�อก Install and Start

6. ไปท�� C:\Sun\AppServer\addons\jbi-components แล�วเล�อก databasebc.jar (Cluster

Database JNDI Name: jdbc/test), filebc.jar และ jmsbc.jar จะได�ผลล�พธ,ด�งแสดงในร"ปท�� 11.3

ร�ปท 11.3 ผลล�พธ*ของการเพ�ม JBI Components ต�างๆ เข�าไปใน GlassFish V2.1

11.2 การพ�ฒนาโปรเจ-ค HelloBPEL

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

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

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

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

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 73: Java Web Services and SOA Using GlassFish openESB and NetBeans

73

11.3 การพ�ฒนาไฟล/ WSDL

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

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

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น HelloSample เล�อก WSDL

Types: เป2น Concrete WSDL Document และเล�อก Type: เป2น RPC Literal ด�งแสดงในร"ปท�� 11.4 กด Next เพ��อไปหน�าถ�ดไป

ร�ปท 11.4 แสดงการสร�าง WSDL Document เป6นแบบ SOAP

3. ก5าหนดค:า Input: Message Part Name เป2น inputData ท�ม� Element or Type เป2น xsd:string

แล Output: Message Part Name เป2น result ท�ม� Element or Type เป2น xsd:string ร"ปท�� 11.5

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 74: Java Web Services and SOA Using GlassFish openESB and NetBeans

74

ร�ปท 11.5 แสดงผลล�พธ*ทได�จากการก#าหนดค�าให�ก�บ WSDL Document

4. กด Next > แล�วกด Finish จะได�ไฟล, HelloSample.wsdl ด�งร"ปท�� 11.6

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 75: Java Web Services and SOA Using GlassFish openESB and NetBeans

75

ร�ปท 11.6 แสดงรายละเอยดของไฟล* HelloSample.wsdl

11.4 การพ�ฒนา BPEL Process

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

11.4.1 สร�างไฟล, HelloProcess.bpel

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

2. ก5าหนด File Name: เป2น HelloProcess แล�วกด Finish

3. ให�ลบ helloBPEL.bpel ท��ง4. โปรแกรม NetBeans จะสร�างไฟล, HelloProcess.bpel และหน�าต:าง Editor จะแสดงไฟล,ในโหมด

designer ด�งร"ปท�� 11.7

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 76: Java Web Services and SOA Using GlassFish openESB and NetBeans

76

ร�ปท 11.7 แสดงหน�า Design ของไฟล* HelloProcess.bpel

11.4.2 การเพ��ม partner link

1. ในไฟล, HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน HelloSample.wsdl ในหน�าต:าง Project มาไว�ภายใต�หน�าต:าง design ด�งร"ปท�� 11.8

ร�ปท 11.8 แสดงการเพ�ม PartnerLink เข�าไปใน HelloProcess.bpel

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 77: Java Web Services and SOA Using GlassFish openESB and NetBeans

77

11.4.3 การเพ��มธ+รกรรม Receive

1. ในไฟล, HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�คล�=กท��ไอคอน Edit

ต5าแหน:งบนธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create.. เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inputVar แล�วกด OK จะได�ไดอะล4อกด�งร"ปท�� 11.9

ร�ปท 11.9 แสดงการก#าหนดค�าให�ก�บธ7รกรรม Receive

5. กด OK จะได� HelloProcess.bpel ด�งร"ปท�� 11.10

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 78: Java Web Services and SOA Using GlassFish openESB and NetBeans

78

ร�ปท 11.10 แสดงการร�บค�าเข�ามาจาก PartnerLink1

11.4.4 การเพ��มธ+รกรรม Reply

1. ในไฟล, HelloProcess.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง บล4อกธ+รกรรม start ก�บธ+รกรรม Process End

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�คล�=กไอคอน Edit ของธ+รกรรม Reply1

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

Link: เป2น PartnerLink1

4. ในช:อง Output Variable: กดป+@ม Create.. เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น outputVar แล�วกด OK

11.4.5 การเพ��มธ+รกรรม Assign

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

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 79: Java Web Services and SOA Using GlassFish openESB and NetBeans

79

2. ในหน�าต:าง Editor ด�บเบ��ลคล�=กท��ธ+รกรรม Assign1 เพ��อไปย�งแทป Mapper จากน��นให�ท5าการโยงโหนด inputData ในส:วน inputVar ในหน�าต:างด�านซ�ายเข�าก�บโหนด result ในส:วน outputVar ในหน�าต:างด�านขวา (เป2นการก4อปปEFค:าจากอ�นพ+ตไปย�งเอาท,พ+ต) ด�งร"ปท�� 11.11

ร�ปท 11.11 แสดงการก#าหนดค�าของ inputData ไปย�ง result

3. จะได� BPEL Process ด�งร"ปท�� 11.12

ร�ปท 11.12 แสดง BPEL Process ของ HelloProcess.pbel

4. กดป+@ม Save

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

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

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 80: Java Web Services and SOA Using GlassFish openESB and NetBeans

80

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

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

Application แล�วกด Next

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

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

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

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

7. คล�=กขวาท��โปรเจ4ค HelloApplication เพ��อท5าการ Clean and Build และ Deploy ถ�าคล�=กท�� Service

Assembly จะได�ด�งร"ปท�� 11.13

ร�ปท 11.13 แสดง Service Assembly ของ HelloApplication

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

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

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

3. ในหน�าถ�ดไปให�เล�อกไฟล, WSDL เป2น HelloSample.wsdl แล�วกด Next

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

5. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ส:วน inputData ด�งน�� <<inputData>>Hello Thana</<inputData>>

6. เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

7. จะเห4นผลล�พธ,ปรากฎในไฟล, Output.xml ด�ง Listing ท�� 11.1 [หมายเหต+การแสดงผลเป2น Failed

เน��องจากเป2นการร�นคร��งแรก จ/งย�งไม:ม�ข�อม"ลใน Output.xml ให�เปร�ยบเท�ยบ แต:ถ�าเราเล�อก Run ในคร��งถ�ดไป โดยท��ไม:ได�เปล��ยนค:าใน Input.xml จะท5าให�ได�ผลล�พธ,ตรงก�บข�อม"ลใน Output.xml ก4จะไม:แสดงผลเป2น Failed อ�กต:อไปด�งแสดงในร"ปท�� 11.14]

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 81: Java Web Services and SOA Using GlassFish openESB and NetBeans

81

ร�ปท 11.14 แสดงผลล�พธ*ทได�จากการร�น TestCase1

Listing ท�� 11.1 ผลล�พธ,จากการร�น 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" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:HelloSampleOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/HelloBPEL/HelloSample"> <result xmlns="">Hello Thana</result> </m:HelloSampleOperationResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

11.7 การทดสอบโดยใช� SoapUI

เราสามารถท��จะทดสอบ Business Process (HelloBPEL) ท��พ�ฒนาข/�นโดยใช�โปรแกรม Soap Testing

อย:าง Soap UI เพราะ Business Process ก4ค�อเว4บเซอร,ว�สท�� Deploy ไว�บน GlassFish V2.1 โดยจะม� wdsl

ของเซอร,ว�ส ท��สามารถหาจากต5าแหน:ง url ของ soap:address ตามข��นตอนด�งน��

1. คล�=กท�� Service Assembly ใน HelloApplication และคล�=กท�� HelloSamplePort

2. เล�อกค5าส��ง Clone WSDL Port to edit..แล�วกด OK

3. คล�=กท�� HelloSamplePort เล�อกค5าส��ง Properties ในหน�าต:าง properties ให�ท5าการ copy ค:าของ soap:address ซ/�งอาจได�ค:าเป2น http://localhost:${HttpDefaultPort}/HelloSampleService/HelloSamplePort โดยค:า ${HttpDefaultPort}ค�อ 9080

4. ทดสอบ wsdl โดยเปAด Web Browser แล�วก5าหนดค:า url ให�เป2นด�งน�� http://localhost:9080/HelloSampleService/HelloSamplePort?WSDL

5. จากน��นน5าค:า url น��มาใช�ทดสอบ Business Process โดยใช�โปรแกรม SoapUI ต:อไป

การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan

Page 82: Java Web Services and SOA Using GlassFish openESB and NetBeans

82

Exercise 12 BPEL for Writing to File

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

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนาโปรเจ4ค FileBPEL

2. พ�ฒนาไฟล, WSDL ส5าหร�บ SOAPBinding

3. พ�ฒนาไฟล, WSDL ส5าหร�บ FileBinding

4. พ�ฒนา BPEL Process

5. พ�ฒนาโปรเจ4ค Composite Application

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

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

12.1 การพ�ฒนาโปรเจ-ค FileBPEL

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

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

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

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

12.2 การพ�ฒนาไฟล/ WSDL สาหร�บ SOAPBinding

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

1. เล�อกหน�าต:าง Projects คล�=กขวาท��โหนด FileBPEL ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น DataIO ก5าหนด WSDL Type:

เป2น Concrete WSDL Document และก5าหนด Binding เป2น SOAP และ Types เป2น RPC

Literal ด�งแสดงในร"ปท�� 12.1 แล�วกด Next

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 83: Java Web Services and SOA Using GlassFish openESB and NetBeans

83

ร�ปท 12.1 แสดงการก#าหนดค�า WSDL Document

3. ในหน�าถ�ดไป ส5าหร�บส:วนของ Input: ก5าหนด Message Part Name เป2น id กด Add แล�วเพ��ม input

ส5าหร�บ firstName, lastName, salary (int) และส5าหร�บส:วนของ Output: ก5าหนด Message Part

Name เป2น result ด�งแสดงในร"ปท�� 12.2 จากน��นกด Finish

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 84: Java Web Services and SOA Using GlassFish openESB and NetBeans

84

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

12.3 การพ�ฒนาไฟล/ WSDL สาหร�บ FileBinding

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

1. เล�อกหน�าต:าง Projects คล�=กขวาท��โหนด FileBPEL ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น FileResult ให�เล�อก WSDL Type:

เป2น Concrete WSDL Document และก5าหนด Binding เป2น FILE และ Types เป2น Write ด�งแสดงในร"ปท�� 12.3 จากน��นกด Next

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 85: Java Web Services and SOA Using GlassFish openESB and NetBeans

85

ร�ปท 12.3 แสดงการใส�ค�าส#าหร�บ New WSDL Document

3. ในหน�าถ�ดไป ก5าหนดค:า File Name: เป2น result.txt ส5าหร�บ Path: ให� กด Browse… เพ��อเล�อก Path:

ไปท�� C:\SOA\_output (กรณ�ท��ย�งไม:ม� folder จะต�องท5าการสร�างข/�นมา) และเล�อก File Exists: เป2น Append to Existing File ด�งแสดงในร"ปท�� 12.4 จากน��นกด Finish

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 86: Java Web Services and SOA Using GlassFish openESB and NetBeans

86

ร�ปท 12.4 แสดงการก#าหนดค�าส#าหร�บการเขยนไฟล*

12.4 การพ�ฒนา BPEL Process

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

12.4.1 การเพ��ม partner link

1. ด�บเบ��ลคล�=กท��ไฟล, fileBPEL.bpel เล�อกแทป Design แล�วลากไอคอน DataIO.wsdl ในหน�าต:าง Project มาไว�ในแทบเทาทางซ�ายม�อภายใต�หน�าต:าง design

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

3. ลากไอคอน FileResult.wsdl ในหน�าต:าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต:าง design

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

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 87: Java Web Services and SOA Using GlassFish openESB and NetBeans

87

12.4.2 การเพ��มธ+รกรรม Receive

1. ในไฟล, fileBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inData แล�วกด OK

12.4.3 การเพ��มธ+รกรรม Reply

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

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Reply1

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

Link: เป2น DataIOPartnerLink

3. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น outData แล�วกด OK

12.4.4 การเพ��มธ+รกรรม Invoke ส5าหร�บ write

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

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

3. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น invokeWriteToFile

และเล�อก Partner Link: เป2น FilePartnerLink และ Operation: เป2น write

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inFile แล�วกด OK

12.4.5 การเพ��มธ+รกรรม Assign

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

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 88: Java Web Services and SOA Using GlassFish openESB and NetBeans

88

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

◦ firstName เข�าเป2น String ช:องท�� 1◦ ‘ ‘ เป2น String ช:องท�� 2◦ lastName เข�าเป2น String ช:องท�� 3◦ ‘ => ‘ เป2น String ช:องท�� 4◦ salary เข�าเป2น String ช:องท�� 5◦ จากน��นเช��อมโยง return String ไปย�ง part1 ใน inFile ทางด�านขวาม�อ ด�งแสดงในร"ปท��

12.5

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

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

4. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign2 ในหน�าต:าง BPEL Mapper เล�อก String > String Literal

แล�วก5าหนดค:าเป2น Success เช��อมโยงฟAลด,ระหว:าง string literal ก�บ result ท��อย":ใน outData ด�งแสดงในร"ปท�� 12.6

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

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

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 89: Java Web Services and SOA Using GlassFish openESB and NetBeans

89

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

6. ท5าการ Clean และ Build โปรเจ4ค

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

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

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค FileBPEL แล�วกดป+@ม Add Project JAR Files

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

7. คล�=กขวาท�� FileCompositeApp เล�อก Clean and Build

8. คล�=กท�� Service Assembly จะเห4นผลล�พธ,ด�งแสดงในร"ปท�� 12.8

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 90: Java Web Services and SOA Using GlassFish openESB and NetBeans

90

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

12.6 การทดสอบโปรแกรมผ)าน TestCase

1. ท5าการ Deploy โปรเจ4ค FileCompositeApp

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

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

4. หน�าถ�ดไปใน FileBPEL ให�เล�อกไฟล, WSDL เป2น DataIO.wsdl แล�วกด Next

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

6. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ด�งน��

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

7. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

8. จะเห4นผลล�พธ,ปรากฎในไฟล, Output.xml ด�งแสดงในร"ปท�� 12.9

ร�ปท 12.9 แสดงผลล�พธ*ทได�จากการร�น TestCase1

9. และจะได�ไฟล, result.txt ในไดเร4กทอร�� c:\SOA\_output ซ/�งม�ข�อม"ลด�งน��Somjai Jaidee => 38000

12.7 การพ�ฒนาโปรแกรมผ)าน Web Application

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 91: Java Web Services and SOA Using GlassFish openESB and NetBeans

91

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

1. คล�=กท�� Service Assembly ใน FileCompositeApp และคล�=กขวาท�� DataIOPort เล�อก Clone WSDL

to edit… จากน��นให�คล�=กขวาท�� DataIOPort อ�กคร��งแล�วเล�อก Properties

2. ในหน�าต:าง Properties ให�ท5าการ copy ค:าของ Location ใน soap:address

3. ทดสอบโดยเปAด Web Browser แล�ว paste ค:าท�� copy ไว� จากน��นให�ท5าการเปล��ยนค:าของ URL ให�เป2นด�งน�� http://localhost:9080/DataIOService/DataIOPort?WSDL

พ�ฒนาโปรแกรม Web Application เพ��อให�ผ"�ใช�ปBอนค:าข�อม"ลต:างๆ จากน��นโปรแกรมจะท5าการเข�ยนข�อม"ลลงไฟล, โดยม�ข��นตอนการพ�ฒนาด�งน��

6. เล�อกเมน" File > New Project

7. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Web และ Web Application แล�วกด Next

8. ก5าหนด Project Name เป2น FileBPUI แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว�

9. จากน��นเล�อก Server เป2น GlassFish V2.1 ก5าหนด Jave EE Version: เป2น Java EE 5 แล�วกด Next

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

11. คล�=กขวาท��โหนด FileBPUI จากน��นเล�อกค5าส��ง New > Other… ให�เล�อก Categories เป2น Web

Services และ Web Service Client แล�วกด Next

12. ในไดอะล4อก New Web Service Client ให�เล�อก WSDL URL: แล�วใส: URL เป2น http://localhost:9080/DataIOService/DataIOPort?WSDL แล�วกด Finish

13. เล�อกไปท�� Page1.jsp ท5าการออกแบบ Page Layout ด�งแสดงในร"ปท�� 12.10

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 92: Java Web Services and SOA Using GlassFish openESB and NetBeans

92

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

14. ก5าหนดค:าค+ณสมบ�ต�ของออปเจ4คต:างๆ ใน Page Layout น�� ด�งในตารางท�� 12.1

ตารางท�� 12.1 แสดงการก5าหนดค:า properties ให�ก�บออปเจHคต:างๆ

Object Type id text

Label lbID ID:

Text Field inputID

Label lbFirstName FirstName:

Text Field inputFirstName

Label lbLastName LastName:

Text Field inputLastName

Label lbSalary Salary:

Text Field inputSalary

Button BtnSubmit Submit

Static Text resultText

15. กดป+@ม Save

16. ท5าการคล�=กขวาท�� inputID แล�วเล�อก Add Binding Attribute ด�งแสดงในร"ปท�� 12.11

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 93: Java Web Services and SOA Using GlassFish openESB and NetBeans

93

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

17. ท5าการ Add Binding Attribute ท�� inputFirstName, inputLastName, inputSalary และ resultText

18. ด�บเบ��ลคล�=กท��ป+@ม Submit หน�าต:าง Editor จะแสดงแทบ Java และแสดง source code ท5าการคล�=กขวาในเมธอด btnSubmit_action แล�วเล�อก Insert Code... > 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; }

19. Clean and Build และ Run โปรเจ4ค หล�งจากใส:ข�อม"ล จะได�ผลล�พธ,ด�งแสดงในร"ปท�� 12.12

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 94: Java Web Services and SOA Using GlassFish openESB and NetBeans

94

ร�ปท 12.12 แสดงผลล�พธ*หน�า Page1.jsp

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

BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan

Page 95: Java Web Services and SOA Using GlassFish openESB and NetBeans

95

Exercise 13 BPEL for Writing to Database

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

ข��นตอนในการพ�ฒนาโปรแกรม1. สร�าง Table

2. พ�ฒนาโปรเจ4ค DBBPEL

3. พ�ฒนาไฟล, WSDL ส5าหร�บ DatabaseBinding

4. พ�ฒนาไฟล, WSDL ส5าหร�บ SOAPBinding

5. พ�ฒนา BPEL Process

6. พ�ฒนาโปรเจ4ค Composite Application

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

13.1 สร�าง Table

ข��นตอนน��เป2นการสร�าง table ในฐานข�อม"ลเพ��อใช�เก4บข�อม"ลพน�กงานของบร�ษ�ท

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

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

หร�อร�นไฟล, employee.sql

DROP TABLE IF EXISTS test.employee;CREATE TABLE test.employee ( id varchar(10) NOT NULL, firstName varchar(30) NOT NULL, lastName varchar(30) NOT NULL, salary double NOT NULL, PRIMARY KEY (id))

13.2 การพ�ฒนาโปรเจ-ค DBBPEL

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 96: Java Web Services and SOA Using GlassFish openESB and NetBeans

96

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

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

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

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

13.3 การพ�ฒนาไฟล/ WSDL สาหร�บ DatabaseBinding

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

1. เล�อกหน�าต:าง Projects คล�=กขวาท��โหนด DBBPEL ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น EmployeeDB ก5าหนด WSDL

Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น DATABASE และ Types

เป2น Table จากน��นกด Next

3. ในหน�าถ�ดไป ก5าหนดค:า URL: เป2น jdbc:mysql://localhost:3306/test กด Next

4. เล�อก Table: Employee จาก Available Tables: ไปย�ง Selected Tables: และกด Next จากน��นให�ใส: jdbc/test ส5าหร�บ JNDI Name แล�วกด Finish

5. โปรแกรมจะสร�างไฟล,ข/�นมาสองไฟล,ค�อ EmployeeDB.wsdl ส5าหร�บอธ�บาย service ต:างๆ ของ Table

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

หมายเหต กรณ�ท��ไม:ม�ช:องให�ใส: JNDI Name ให�ท5าการเล�อกแทป Source จากน��นค�นหาค5าว:า jdbc/__defaultDS แล�วแทนท��ด�วย jdbc/test

เราสามารถตรวจสอบด"ค5าส��งต:างๆ ในไฟล, EmployeeDB.wsdl อาท�เช:น insert operation ของ table

ได�โดยเล�อกไฟล,น�� หน�าต:าง Editor จะแสดง Design View ของไฟล, ให�ขยายแทป Bindings > binding >

insert > inputInsert ด�งแสดงในร"ปท�� 13.1 แล�วด"ท�� properties ของ jdbc:input จะเห4นค5าส��ง sql เป2น insert into employee (firstName,id,salary,lastName) values (?,?,?,?)

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 97: Java Web Services and SOA Using GlassFish openESB and NetBeans

97

ร�ปท 13.1 แสดง Design View ของไฟล* Employee.wsdl

13.4 การพ�ฒนาไฟล/ WSDL สาหร�บ SOAPBinding

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

1. เล�อกหน�าต:าง Projects คล�=กขวาท��โหนด DBBPEL ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น DatabaseWSDL ก5าหนด WSDL

Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น SOAP และ Types เป2น RPC

Literal แล�วกด Next

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

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 98: Java Web Services and SOA Using GlassFish openESB and NetBeans

98

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

13.5 การพ�ฒนา BPEL Process

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

13.5.1 การเพ��ม partner link

1. ด�บเบ��ลคล�=กท��ไฟล, DBBPEL.bpel เล�อกแทป Design แล�วลากไอคอน DatabaseWSDL.wsdl ในหน�าต:าง Project มาไว�ในแทบเทาทางซ�ายม�อภายใต�หน�าต:าง design

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

3. ลากไอคอน EmployeeDB.wsdl ในหน�าต:าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต:าง design

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

13.5.2 การเพ��มธ+รกรรม Receive

1. ในไฟล, DBBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inData แล�วกด OK

13.5.3 การเพ��มธ+รกรรม Reply

1. ในไฟล, DBBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Reply ในหน�าต:าง Palette มาไว�ใน

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 99: Java Web Services and SOA Using GlassFish openESB and NetBeans

99

หน�าต:าง design ระหว:างธ+รกรรม start ก�บธ+รกรรม Process End

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Reply1

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

Link: เป2น DatabaseWSDLPartnerLink

4. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น outData แล�วกด OK

13.5.4 การเพ��มธ+รกรรม Invoke ส5าหร�บ write

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

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

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

และเล�อก Partner Link: เป2น DBPartnerLink และเล�อก Operation: เป2น insert

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น InsertIn

5. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น InsertOut แล�วกด OK

13.5.5 การเพ��มธ+รกรรม Assign

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

2. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign1 ในหน�าต:าง BPEL Mapper ท5าการเช��อมโยงข�อม"ลในโหนด inData > inputData > employee_Record ทางด�านซ�ายม�อ ไปย�ง InsertIn > part >

employee_Record ด�งแสดงในร"ปท�� 13.3 โดยเช��อมโยง field ต:างๆ เหล:าน��id > id firstName > firstNamelastName > lastNamesalary > salary

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 100: Java Web Services and SOA Using GlassFish openESB and NetBeans

100

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

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

4. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign2 ในหน�าต:าง BPEL Mapper เล�อก String > String Literal

แล�วก5าหนดค:าเป2น Success เช��อมโยงฟAลด,ระหว:าง string literal ก�บ result ท��อย":ใน outData ด�งแสดงในร"ปท�� 13.4

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

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

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 101: Java Web Services and SOA Using GlassFish openESB and NetBeans

101

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

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

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

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

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค DBBPEL แล�วกดป+@ม Add Project JAR Files

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

7. คล�=กขวาท�� DBCompositeApp เล�อก Clean and Build

8. คล�=กท�� Service Assembly จะเห4นผลล�พธ,ด�งแสดงในร"ปท�� 13.6

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 102: Java Web Services and SOA Using GlassFish openESB and NetBeans

102

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

13.7 การทดสอบโปรแกรมผ)าน TestCase

1. ท5าการ Deploy โปรเจ4ค DBCompositeApp

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

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

4. หน�าถ�ดไปใน DBBPEL ให�เล�อกไฟล, WSDL เป2น DatabaseWSDL.wsdl แล�วกด Next

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

6. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ด�งน�� <tab:employee_Record> <tab:id>1234</tab:id> <tab:lastName>Jaidee</tab:lastName> <tab:salary>38000</tab:salary> <tab:firstName>Somjai</tab:firstName> </tab:employee_Record>

7. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

8. จะเห4นผลล�พธ,ปรากฎในไฟล, Output.xml ด�งแสดงในร"ปท�� 13.7

ร�ปท 13.7 แสดงผลล�พธ*ทได�จากการร�น TestCase1

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 103: Java Web Services and SOA Using GlassFish openESB and NetBeans

103

9. และได�ข�อม"ลซ/�งเข�าไปอย":ในฐานข�อม"ลด�งแสดงในร"ปท�� 13.8

ร�ปท 13.8 แสดงข�อม�ลทอย��ในตาราง Employee ในฐานข�อม�ล test

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 104: Java Web Services and SOA Using GlassFish openESB and NetBeans

104

Exercise 14 BPEL for Sending Message to a JMS Queue

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

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

ข��นตอนในการพ�ฒนาโปรแกรม1. ต�ดต��งโปรแกรม HermesJMS

2. ต�ดต��งและครวจสอบ JMS Binding Components

3. พ�ฒนาโปรเจ4ค JMSBPEL

4. พ�ฒนาไฟล, WSDL ส5าหร�บ SOAPBinding

5. พ�ฒนาไฟล, WSDL ส5าหร�บ JMSBinding

6. พ�ฒนา BPEL Process

7. พ�ฒนาโปรเจ4ค Composite Application

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

14.1 ต%ดต�#งโปรแกรม HermesJMS

โปรแกรม HermesJMS เป2นโปรแกรม Open Source ท��สามารถใช�ในการจ�ดการ Meessage Queues

ของ Messaging Server ได� แบบฝ1กห�ดน��จะเล�อกใช�โปรแกรมน��ในการตรวจสอบข�อความท��ส:งมาย�ง JMS Queue

เราสามารถท��จะ download โปรแกรมน��ได�ท�� http://www.hermesjms.com/confluence/display/HJMS/Home โดยการเล�อกไฟล, hetmesJMS version

1.13 แล�วต�ดต��งไฟล,แบบ jar โดยการเร�ยกใช�ค5าส��ง

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

1. เปAดโปรแกรม HermesJMS แล�วคล�=กขวาท�� sessions และเล�อกค5าส��ง New / New session... ด�งแสดงในร"ปท�� 14.1

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 105: Java Web Services and SOA Using GlassFish openESB and NetBeans

105

ร�ปท 14.1 แสดงการสร�าง Session ข��นมาใหม�

2. ในไดอะล4อก Preferences ให�เปล��ยนข�อความจาก <new> เป2น JavaMQ ด�งร"ปท�� 14.2

ร�ปท 14.2 แสดงการระบ7 Session

3. เล�อกแทป Providers ท��อย":ด�านล:างของไดอะล4อก จากน��นให�คล�=กขวาตรงพ��นท��ว:างด�านในของแทป Providers แล�วเล�อกค5าส��ง Add Group

4. ก5าหนดค:า Classpath group name เป2น JavaMQClasspathGroup แล�วกด OK

5. ขยายโหนด JavaMQClasspathGroup แล�วคล�=กขวาท�� Library และเล�อกค5าส��ง Add JAR(s)

6. เล�อกไฟล,แบบ jar ต:อไปน��ท��อย":ในไดเร4กทอร��ของ GlassFish ESB ท��ช��อ imq/lib fscontext.jar

imq.jar

imqadmin.jar

imqbroker.jar

imqjmx.jar

imqutil.jar

imqxm.jar

jaxm-api.jar

jms.jar

7. โปรแกรมจะได�ไดอะล4อกด�งร"ปท�� 14.3 จากน��นให�กดป+@ม Apply

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 106: Java Web Services and SOA Using GlassFish openESB and NetBeans

106

ร�ปท 14.3 แสดง Classpath Group ส#าหร�บ JavaMQ

8. เล�อกแทป Session แล�วเล�อก JavaMQClasspathGroup ส5าหร�บ Loader และ com.sun.messaging.QueueConnectionFactory ส5าหร�บ Class ด�งแสดงในร"ปท�� 14.4

ร�ปท 14.4 แสดงการก#าหนด Loader และ Class ให�ก�บ JavaMQClasspathGroup

9. กดป+@ม Apply ตามด�วย OK เพ��อปAดไดอะล4อก10. ขยายโหนด sessions แล�วคล�=กท��โหนด JavaMQ แล�วเล�อกค5าส��ง New > Add queue...

11. ในไดอะล4อก Destination Properties ก5าหนด Name: เป2น TestQueue ก5าหนดค:า UserName เป2น admin และ Password เป2น admin แล�วกด OK จะได�ด�งร"ปท�� 14.5

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 107: Java Web Services and SOA Using GlassFish openESB and NetBeans

107

ร�ปท 14.5 แสดงการเพ�ม Queue เข�าไปใน JavaMQ

14.2 การต%ดต�#ง และตรวจสอบ JMS Binding Component

แบบฝ1กห�ดน��ต�องการใช� JMS Binding Component ท��ต�ดต��งอย":ใน OpenESB เราสามารถตรวจสอบ Service Engines และ Binding Components ท��ต�ดต��งอย":ใน Open ESB ของ GlassFish V2.1 ได�โดยการเปAดโปรแกรม NetBeans แล�วเล�อกหน�าต:าง Services แล�วขยายโหนด Servers > GlassFish V2.1 > JBI เราจะเห4นโมด"ลต:างๆ ด�งต�วอย:างในร"ปท�� 14.6

ร�ปท 14.6 แสดง Service Engines และ Binding Components ใน GlassFish V2.1

ถ�า GlassFish V2 ไม:ม� sun-jms-binding อย":ให�ไปท5าการ download โมด"ลน��ได�ท�� https://open-esb.dev.java.net/Components.html จากน��นท5าการต�ดต��งได�โดยคล�=กขวาท��โหนด Binding Components

แล�วเล�อกค5าส��ง Install and Start.. โดยเล�อกต�ดต��งไฟล,ท�� download มา

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 108: Java Web Services and SOA Using GlassFish openESB and NetBeans

108

14.3 การพ�ฒนาโปรเจ-ค JMSBPEL

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

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

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

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

14.4 การพ�ฒนาไฟล/ WSDL สาหร�บ SOAPBinding

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

1. เล�อกหน�าต:าง Projects คล�=กขวาท��โหนด JMSBPEL ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น JMSWSDL ก5าหนด WSDL

Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น SOAP และ Types เป2น RPC

Literal แล�วกด Next

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

14.5 การพ�ฒนาไฟล/ WSDL สาหร�บ JMS Binding

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

1. เล�อกหน�าต:าง Projects ขยายโหนด JMSBPEL คล�=กขวาท�� Process Files เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น TestQueueWSDL ก5าหนด WSDL Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น JMS และ Types เป2น Send จากน��นกด Next

3. ในหน�าถ�ดไป ก5าหนดค:า Connection URL: เป2น mq://localhost:7676 User Name เป2น admin

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 109: Java Web Services and SOA Using GlassFish openESB and NetBeans

109

และ Password เป2น admin ด�งร"ปท�� 14.7 แล�วกด Next

ร�ปท 14.7 แสดงการก#าหนดค�าให�ก�บ JMS Connection

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

14.6 การพ�ฒนา BPEL Process

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

1. ในไฟล, JMSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน JMSWSDL.wsdl ในหน�าต:าง Project

มาไว�ในแทบเทาทางซ�ายม�อภายใต�หน�าต:าง design

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

3. ลากไอคอน TestQueueWSDL.wsdl ในหน�าต:าง Project มาไว�ในแทบเทาทางขวาม�อภายใต�หน�าต:าง design

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 110: Java Web Services and SOA Using GlassFish openESB and NetBeans

110

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

14.6.2 การเพ��มธ+รกรรม Receive

1. ในไฟล, JMSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น JMSinData แล�วกด OK

14.6.3 การเพ��มธ+รกรรม Reply

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

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Reply1

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

Link: เป2น JMSWSDLPartnerLink

4. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น JMSoutData แล�วกด OK

14.6.4 การเพ��มธ+รกรรม Invoke ส5าหร�บ send

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

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 111: Java Web Services and SOA Using GlassFish openESB and NetBeans

111

Name: เป2น JMSOutOperationIn

14.6.5 การเพ��มธ+รกรรม Assign

1. ในไฟล, JMSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:างธ+รกรรม start ก�บธ+รกรรม sendToQueue

2. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign1 ในหน�าต:าง BPEL Mapper ท5าการเช��อมโยงข�อม"ลในโหนด inData > JMSinData ทางด�านซ�ายม�อ ไปย�ง part1 > JMSOutOperationIn ด�งแสดงในร"ปท�� 14.8

ร�ปท 14.8 แสดง Business Rule ระหว�าง start และ sendToQueue

3. ในไฟล, JMSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ใน หน�าต:าง design ระหว:างธ+รกรรม sendToQueue ก�บธ+รกรรม end

4. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign2 ในหน�าต:าง BPEL Mapper เล�อก String > String Literal

แล�วก5าหนดค:าเป2น Success เช��อมโยงฟAลด,ระหว:าง string literal ก�บ outData ท��อย":ใน JMSoutData

ด�งแสดงในร"ปท�� 14.9

ร�ปท 14.9 แสดง Business Rule ระหว�าง sendToQueue และ end

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

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 112: Java Web Services and SOA Using GlassFish openESB and NetBeans

112

ร�ปท 14.10 แสดง Business Process ของท��งระบบ

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

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

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

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค JMSBPEL แล�วกดป+@ม Add Project JAR Files

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

7. คล�=กขวาท�� JMSCompositeApp เล�อก Clean and Build

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 113: Java Web Services and SOA Using GlassFish openESB and NetBeans

113

8. คล�=กท�� Service Assembly จะเห4นผลล�พธ,ด�งแสดงในร"ปท�� 14.11

ร�ปท 14.11 แสดง CASA Editor ส#าหร�บ JMSBPEL

14.8 การทดสอบโปรแกรมผ)าน TestCase

1. ท5าการ Deploy โปรเจ4ค JMSCompositeApp

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

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

4. หน�าถ�ดไปใน JMSBPEL ให�เล�อกไฟล, WSDL เป2น JMSWSDL.wsdl แล�วกด Next

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

6. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ด�งน��<soapenv:Body>

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

</soapenv:Body>

7. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

8. เปAดโปรแกรม HermesJMS แล�วคล�=กท�� TestQueue จะได�ผลล�พธ,ด�งต�วอย:างในร"ปท�� 14.12

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 114: Java Web Services and SOA Using GlassFish openESB and NetBeans

114

ร�ปท 14.12 แสดงต�วอย�างผลล�พธ*ใน TestQueue

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 115: Java Web Services and SOA Using GlassFish openESB and NetBeans

115

Exercise 15 Simple BPEL Invoking Web Services

แบบฝ1กห�ดน��เป2นการเข�ยน Business Process เพ��อเร�ยกใช� Internal Web Service ท��พ�ฒนาข/�นมาเอง และ External Web Service ของท��อ��นๆท��ม�อย": โปรแกรม Web Service ท��จะพ�ฒนาข/�นค�อ TaxService ท��ม�โอเปอร,เรช�นท��ช��อ calculateTax และ External Web Service ค�อเซอร,ว�สค5านวณอ�ตราแลกเปล��ยนท��อย":ท�� http://www.webservicex.com/CurrencyConvertor.asmx?wsdl

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนา Web Services

2. พ�ฒนาโปรเจ4ค WSBPEL

3. พ�ฒนาไฟล, WSDL

4. พ�ฒนา Business Process ส5าหร�บเร�ยก Web Service

5. พ�ฒนาโปรเจ4ค Composite Application

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

7. ก5าหนด External WSDL Document

8. พ�ฒนาไฟล, Client WSDL ใหม:9. พ�ฒนา Business Process ใหม:เพ��อเร�ยก External Web Service

10. พ�ฒนาโปรแจ4ค Composite Application ส5าหร�บเร�ยก Business Process ใหม: และท5าการทดสอบ

15.1 การพ�ฒนา Web Services

ข��นตอนการพ�ฒนา Web Service น��จะเป2นการพ�ฒนา calculateTax Web Service เช:นเด�ยวก�บในแบบฝ1กห�ดท�� โดยม� source code ด�งน��

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) { return 0.1 * income; }}

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 116: Java Web Services and SOA Using GlassFish openESB and NetBeans

116

15.2 การพ�ฒนาโปรเจ-ค WSBPEL

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

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

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

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

15.3 การพ�ฒนาไฟล/ WSDL

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

1. เล�อกหน�าต:าง Projects ขยายโหนด WSBPEL แล�วคล�=กขวาท��โหนด Process Files จากน��นเล�อกค5าส��ง New > WSDL Document

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น WebProcessWSDL ก5าหนด WSDL Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น SOAP และ Types

เป2น RPC Literal แล�วกด Next

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

15.4 การพ�ฒนา Business Process

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

15.4.1 การเพ��ม partner link

ข��นตอนน��จะท5าการก5าหนด partner link ส5าหร�บ Web Services สองช+ดค�อ TaxServicesService และ WebProcessWSDL โดยม�ข��นตอนด�งน��

1. ด�บเบ��ลคล�=กท��ไฟล, WSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน WebProcessWSDL.wsdl ใน

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 117: Java Web Services and SOA Using GlassFish openESB and NetBeans

117

หน�าต:าง Projects มาไว�ภายใต�หน�าต:าง design (โดยให�ลากไปท��แทบเทาๆ และใส:ใน )

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

เป2น ClientPartnerLink แล�วกด OK

2. ในหน�าต:าง Projects ขยายโหนด TaxWSDemo > Webservices แล�วคล�=กขวาท��โหนด TaxServices แล�วเล�อกค5าส��ง Generate and Copy WSDL ...

3. ในไดอะล4อก Generate and Copy WSDL ให�เล�อกไดเร4กทอร�� src ภายใต� WSBPEL ด�งแสดงในร"ปท�� 15.1 จากน��นกด OK

v

ร�ปท 15.1 แสดงไดอะล/อก Generate and Copy WSDL

4. ลาก TaxServicesService.wsdl ไปไว�ทางด�านขวาของหน�าต:าง design โดยก5าหนด Name: เป2น TaxPartnerLink ซ/�งจะได�ผลล�พธ,ด�งแสดงในร"ปท�� 15.2

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 118: Java Web Services and SOA Using GlassFish openESB and NetBeans

118

ร�ปท 15.2 แสดง PartnerLink ท��งหมดของ webBPEL

15.4.2 การเพ��มธ+รกรรม Receive

1. ในไฟล, WSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inData แล�วกด OK

15.4.3 การเพ��มธ+รกรรม Reply

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

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Reply1

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

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 119: Java Web Services and SOA Using GlassFish openESB and NetBeans

119

Link: เป2น ClientPartnerLink

4. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น outData แล�วกด OK

15.4.4 การเพ��มธ+รกรรม Invoke ส5าหร�บ calcualteTax

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

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

3. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น invokeWS และเล�อก Partner Link: เป2น TaxPartnerLink

4. ในช:อง Operation: เล�อก calculateTax

5. ในช:อง Input Variable: กดป+@ม Create.. เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น TaxIn แล�วกด OK

6. ในช:อง Output Variable: กดป+@ม Create.. เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น TaxOut แล�วกด OK จะได� BPEL Process ด�งแสดงในร"ปท�� 15.3

ร�ปท 15.3 แสดง BPEL Process ในการเรยกโอเปอร*เรช�น calculateTax

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 120: Java Web Services and SOA Using GlassFish openESB and NetBeans

120

15.4.5 การเพ��มธ+รกรรม Assign

1. ในไฟล, WSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม start ก�บธ+รกรรม invokeWS

2. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign1 ในหน�าต:าง BPEL Mapper ท5าการโยงโหนด inputData ในส:วน inData ทางด�านซ�ายเข�าก�บโหนด income ในส:วน TaxIn ทางด�านขวา ด�งแสดงในร"ปท�� 15.4

ร�ปท 15.4 แสดง Business Rule ระหว�าง start และ invokeWS

3. ในไฟล, WSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม invokeWS ก�บธ+รกรรม end

4. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign2 ในหน�าต:าง BPEL Mapper ท5าการโยงโหนด return ในส:วน TaxOut ในหน�าต:างด�านซ�ายเข�าก�บโหนด outputData ในส:วน outData ในหน�าต:างด�านขวา ด�งแสดงในร"ปท�� 15.5

ร�ปท 15.5 แสดง Business Rule ระหว�าง invokeWS และ end

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

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 121: Java Web Services and SOA Using GlassFish openESB and NetBeans

121

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

6. กดป+@ม Save และ Clean and Build

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

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

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค WSBPEL แล�วกดป+@ม Add Project JAR Files

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

7. ท5าการ Clean and Build โปรเจ4ค WSCompositeApp

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 122: Java Web Services and SOA Using GlassFish openESB and NetBeans

122

8. ด�บเบ��ลคล�=กท�� Service Assembly จะเห4น CASA Editor ด�งแสดงในร"ปท�� 15.7 ซ/�ง WSBPEL ท��เป2น BPEL module จะถ"กเร�ยกโดย SOAP request แต:ไม:เห4น TaxPartnerLink เร�ยกใช� Web Service ใด

ร�ปท 15.7 แสดง CASA Editor ของ WSBPEL

9. เพ��อระบ+ Web Service ท��จะเร�ยกใช�ให�ลากไอคอน soap ท��อย":ใน palette มาไว�ในส:วน WSDL Ports

ของ CASA Editor และท5าการเช��อมโยงด�งแสดงในร"ปท�� 15.8

ร�ปท 15.8 แสดงการเช�อมโยงจาก WSBPEL ไปย�ง SOAP

10. ระบ+ endpoint ของ WSDL port โดยการคล�=กขวาท�� casaPort1 แล�วเล�อก Properties แล�วก5าหนดค:า Location เป2น http://localhost:8080/TaxWSDemo/TaxServicesService และ Endpoint

Name เป2น TaxService

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 123: Java Web Services and SOA Using GlassFish openESB and NetBeans

123

15.6 การทดสอบโปรแกรมผ)าน TestCase

1. ท5าการ Deploy โปรเจ4ค WSCompositeApp

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

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

4. หน�าถ�ดไปใน WSBPEL ให�เล�อกไฟล, WSDL เป2น WebProcessWSDL.wsdl แล�วกด Next

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

6. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ส:วน inputData ด�งน�� <inputData>40000</inputData>

7. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

8. จะเห4นผลล�พธ,ปรากฎในไฟล, Output.xml ด�งน��

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:WebProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/WebProcessWSDL"> <outputData xmlns="">4000.0</outputData> </m:WebProcessWSDLOperationResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

15.7 การพ�ฒนา External WSDL

ข��นตอนต:อไปจะเป2นการทดลองเร�ยกใช� External Web Service ส5าหร�บการค5านวณอ�ตราแลกเปล��ยน โดยข��นตอนแรกจะต�องระบ+ WSDL ของ External Web Service ด�งกล:าว โดยม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects ขยายโหนด WSBPEL แล�วคล�=กขวาท��โหนด Process Files จากน��นเล�อกค5าส��ง New > Other..

2. ในไดอะล4อก New File ให�เล�อก Categories เป2น XML และ Projects เป2น External WSDL

Document(s) แล�วกด Next

3. ในหน�าถ�ดไป เล�อก Form URL: แล�วก5าหนดค:าเป2น http://www.webservicex.com/CurrencyConvertor.asmx?wsdl แล�วกด Finish

4. ท5าการ Clean and Build โปรเจ4ค WSBPEL โหนดท�แสดง CurrencyConvertor.asmx.wsdl จะแสดงข/�น

5. External WSDL ท��เร�ยกมาจะม�โครงสร�างด�งร"ปท�� 15.9 แต:เน��องจาก WSDL น��จะไม:สามารถท��จะ

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 124: Java Web Services and SOA Using GlassFish openESB and NetBeans

124

compile ใน NetBeans 6.7.1 น��ได� เน��องจากม� Port Types, Bindings และ Services ท��เป2น HttpGet

และ HttpPost อย": ให�การลบส:วนเหล:าน��นออกโดยคล�=กขวาท��โหนดท��เก��ยวข�องแล�วเล�อกค5าส��ง Delete จนเหล�อโครงสร�างของ WSDL ด�งร"ปท�� 15.10

ร�ปท 15.9 WSDL ทท#าการเรยกมา

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 125: Java Web Services and SOA Using GlassFish openESB and NetBeans

125

ร�ปท 15.10 WSDL ทถ�กต�อง

15.8 การพ�ฒนาไฟล/ Client WSDL ใหม)

ข��นตอนถ�ดไปเป2นการสร�างไฟล, WSDL ส5าหร�บน�ยาม Business Process ท��จะพ�ฒนาข/�น มาใหม:เพ��อให�สามารถเร�ยกใช�เป2นเว4บเซอร,ว�สได� โดยในกรณ�จะก5าหนดให�ม� input parameter สองต�วค�อ fromCurrency และ toCurrency โดยม� output parameter ค�อ result โดยม�ข��นตอนการพ�ฒนาด�งน��

1. เล�อกหน�าต:าง Projects ขยายโหนด WSBPEL แล�วคล�=กขวาท��โหนด Process Files จากน��นเล�อกค5าส��ง New > WSDL Document

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น ExternalWSProcessWSDL

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

3. ในหน�าถ�ดไป ส5าหร�บส:วนของ Input: ก5าหนด Message Part Name เป2น fromCurrency ให�เป2นชน�ด xsd:String และ toCurrency ให�เป2นชน�ด xsd:String และส5าหร�บส:วนของ Output: ก5าหนด Message Part Name เป2น result ให�เป2นชน�ด xsd:String ด�งร"ปท�� 15.11 กด Next แล�วกด Finish

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 126: Java Web Services and SOA Using GlassFish openESB and NetBeans

126

ร�ปท 15.11 การก#าหนดค�า WSDL Document

15.9 การพ�ฒนา Business Process ใหม)เพ��อเร�ยก External Web Service

ข��นตอนน��เป2นการสร�างไฟล, BPEL ส5าหร�บน�ยาม Business Process ใหม:ท��จะใช�ในการเร�ยก External

Web Service โดยม�ข��นตอนการพ�ฒนาด�งน��

15.9.1 การสร�าง BPEL Process

1. คล�=กขวาท��โหนด WSBPEL จากน��นเล�อกค5าส��ง New > BPEL Process..

2. ในไดอะล4อก New BPEL Process ก5าหนด Project Name เป2น ExternalWSBPEL แล�วกด Finish

15.9.2 การเพ��ม partner link

ข��นตอนน��จะท5าการก5าหนด partner link ส5าหร�บ Web Services สองช+ดค�อ CurrencyConvertor และ WebProcessWSDL โดยม�ข��นตอนด�งน��

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 127: Java Web Services and SOA Using GlassFish openESB and NetBeans

127

1. ด�บเบ��ลคล�=กท��ไฟล, ExternalWSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน ExternalWSProcessWSDL.wsdl ในหน�าต:าง Projects มาไว�ภายใต�หน�าต:าง design โปรแกรมจะแสดงไดอะล4อก PartnerLink1 [Partner Link] – Property Editor ให�ก5าหนดค:า Name: เป2น ClientPartnerLink แล�วกด OK

2. ลาก CurrencyConvertor.asmx.wsdl ในหน�าต:าง Projects ไปไว�ทางด�านขวาของหน�าต:าง design

โดยก5าหนด Name: เป2น ExternalWSPartnerLink

15.9.3 การเพ��มธ+รกรรม Receive

1. ในไฟล, ExternalWSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inData แล�วกด OK

15.9.4 การเพ��มธ+รกรรม Reply

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

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Reply1

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

Link: เป2น ClientPartnerLink

4. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น outData แล�วกด OK

15.9.5 การเพ��มธ+รกรรม Invoke ส5าหร�บ calcualteTax

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

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 128: Java Web Services and SOA Using GlassFish openESB and NetBeans

128

3. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น invokeWS และเล�อก Partner Link: เป2น ExternalWSPartnerLink

4. ในช:อง Operation: เล�อก conversionRate

5. ในช:อง Input Variable: กดป+@ม Create.. เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น ConversionRateIn แล�วกด OK

6. ในช:อง Output Variable: กดป+@ม Create.. เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น ConversionRateOut แล�วกด OK

15.9.6 การเพ��มธ+รกรรม Assign

1. ในไฟล, ExternalWSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม start ก�บธ+รกรรม invokeWS

2. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign1 ในหน�าต:าง BPEL Mapper ท5าการโยงโหนด fromCurrency ในส:วน inData ทางด�านซ�ายเข�าก�บโหนด FromCurrency ในส:วน ConversionRateIn

ทางด�านขวา และ toCurrency ในส:วน inData ทางด�านซ�ายเข�าก�บโหนด ToCurrency ในส:วน ConversionRateIn ทางด�านขวา ด�งแสดงในร"ปท�� 15.12

ร�ปท 15.12 แสดง Business Rule ระหว�าง start และ invokeWS

3. ในไฟล, ExtrenalWSBPEL.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม invokeWS ก�บธ+รกรรม end

4. ในหน�าต:าง Editor เล�อกธ+รกรรม Assign2 ในหน�าต:าง BPEL Mapper ท5าการโยงโหนด ConversionRateResilt ในส:วน ConversionRateOut ในหน�าต:างด�านซ�ายเข�าก�บโหนด result ในส:วน outData ในหน�าต:างด�านขวา ด�งแสดงในร"ปท�� 15.13

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 129: Java Web Services and SOA Using GlassFish openESB and NetBeans

129

ร�ปท 15.13 แสดง Business Rule ระหว�าง invokeWS และ end

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

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

6. กดป+@ม Save และ Clean and Build

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 130: Java Web Services and SOA Using GlassFish openESB and NetBeans

130

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

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

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค WSBPEL แล�วกดป+@ม Add Project JAR Files

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

7. ท5าการ Clean and Build โปรเจ4ค WSCompositeApp

8. ด�บเบ��ลคล�=กท�� Service Assembly จะเห4น CASA Editor ด�งแสดงในร"ปท�� 15.15 ซ/�ง WSBPEL ท��เป2น BPEL module จะถ"กเร�ยกโดย SOAP request แต:ไม:เห4น TaxPartnerLink เร�ยกใช� Web Service ใด

ร�ปท 15.15 แสดง CASA Editor ของ WSBPEL

9. เพ��อระบ+ Web Service ท��จะเร�ยกใช�ให�ลากไอคอน soap ท��อย":ใน palette มาไว�ในส:วน WSDL Ports

ของ CASA Editor จากน��นลากไอคอน soap12 ท��อย":ใน palette มาไว�ในส:วน WSDL Ports ของ CASA Editor และท5าการเช��อมโยงด�งแสดงในร"ปท�� 15.16

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 131: Java Web Services and SOA Using GlassFish openESB and NetBeans

131

ร�ปท 15.16 แสดงการเช�อมโยงจาก WSBPEL ไปย�ง SOAP

10. ระบ+ endpoint ของ WSDL port โดยการคล�=กขวาท�� casaPort1 แล�วเล�อก Properties แล�วก5าหนดค:า Location เป2น http://localhost:8080/TaxWSDemo/TaxServicesService และ Endpoint

Name เป2น TaxService

11. ระบ+ endpoint ของ WSDL port โดยการคล�=กขวาท�� casaPort1 แล�วเล�อก Properties แล�วก5าหนดค:า Location เป2น http://www.webservicex.com/CurrencyConvertor.asmx และ Endpoint

Name เป2น CurrencyService

15.11 การทดสอบโปรแกรมผ)าน TestCase

1. ท5าการ Deploy โปรเจ4ค ExternalWSCompositeApp

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

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

4. หน�าถ�ดไปใน WSBPEL ให�เล�อกไฟล, WSDL เป2น ExternalWSProcessWSDL.wsdl แล�วกด Next

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

6. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ด�งน�� <fromCurrency>USD</fromCurrency>

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 132: Java Web Services and SOA Using GlassFish openESB and NetBeans

132

<toCurrency>THB</toCurrency>7. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

8. จะเห4นผลล�พธ,ปรากฎในไฟล, Output.xml ด�งน��

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:ExternalWSProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/ExternalWSProcessWSDL"> <result xmlns:msgns="http://www.webserviceX.NET/" xmlns="">31.49</result> </m:ExternalWSProcessWSDLOperationResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 133: Java Web Services and SOA Using GlassFish openESB and NetBeans

133

Exercise 16 Advance BPEL Invoking Web Services

แบบฝ1กห�ดน��เป2นการเข�ยน Business Process ท��เร�ยกใช� Web Service ท��พ�ฒนาข/�นมาโดยใช�ค5าส��ง Invoke แบบฝ1กห�ดน��จะพ�ฒนา Web Services ข/�นม�สองช+ดค�อ DetermineRoomRate และ CalculateBookingPayment โปรแกรม Business Process ท��จะพ�ฒนาข/�นจะอ:านข�อม"ลการจองท��พ�กมา แล�วเร�ยกใช�เว4บเซอร,ว�ส DetermineRoomRate เพ��อหาอ�ตราค:าท��พ�ก จากน��นจะเร�ยกใช�เว4บเซอร,ว�ส CalculateBookingPayment เพ��อค5านวณค:าท��พ�กท��งหมด จากน��นจะเก4บข�อม"ลการจองท��พ�กลงฐานข�อม"ล ซ/�ง Business Process ใหม:น��สามารถประกาศเป2น Web Service โดยใช� WSDL และเราจะท5าการพ�ฒนาโปรแกรม Web Application เพ��อเร�ยกใช� Business Process น��ผ:าน WSDL ด�งกล:าว

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนา Determine Room Rate Web Services

2. พ�ฒนา Calculate Booking Payment Web Services

3. พ�ฒนาโปรเจ4ค RoomBooking

4. พ�ฒนา XML Schema

5. พ�ฒนาไฟล, WSDL

6. Import ไฟล, WSDL และ XML Schema

7. พ�ฒนา Business Process

8. พ�ฒนาโปรเจ4ค Composite Application

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

10. เพ��ม Business Process ส5าหร�บเก4บข�อม"ลลงฐานข�อม"ล11. พ�ฒนาโปรแกรม Web Application เพ��อเร�ยกใช� Business Process

16.1 การพ�ฒนา Determine Room Rate Web Services

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

double getRate(String roomType)

16.1.1 การสร�าง EJB Project

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 134: Java Web Services and SOA Using GlassFish openESB and NetBeans

134

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

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Java EE และเล�อก Project เป2น EJBModule

แล�วกด Next

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

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

16.1.2 การพ�ฒนา Web Service

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

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

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

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

Service แล�วกด Next

3. ก5าหนดค:า Web Service Name เป2น DetermineRateService และค:า Package เป2น ws ส:วนค:าอ��นๆเป2นด�งท��ต��งไว� ด�งร"ปท�� 16.1 แล�วกด Finish

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 135: Java Web Services and SOA Using GlassFish openESB and NetBeans

135

ร�ปท 16.1 การสร�าง Web Service ทช�อ DetermineRateService

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

5. ในหน�าต:าง Editor ของไฟล, DetermineRateService.java เล�อกแทป Design กดป+@ม Add Operation…

6. ในไดอะล4อก Add Operation ก5าหนด Method เป2น getRate ชน�ดของ Return Type เป2น double

และ เพ��ม Input parameter ช��อ roomType ชน�ด String ด�งร"ปท�� 16.2 แล�วกด OK

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 136: Java Web Services and SOA Using GlassFish openESB and NetBeans

136

ร�ปท 16.2 การ add Operation ทช�อ getRate

7. คล�=กท��แทป Source ของ DetermineRoomRate.java และปร�บปร+งเมธอด 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. คล�=กขวาท��โหนด DetermineRoomRate จากน��นเล�อกค5าส��ง Clean and Build จากน��นคล�=กขวาท��โหนด DetermineRoomRate อ�กคร��ง แล�วเล�อก Deploy

9. จากน��นให�ท5าการคล�=กขวาท�� Web Services > DetermineRateService แล�วเล�อก Test Web Service

เพ��อทดสอบ Web Service

16.2 การพ�ฒนา Calculating Booking Payment Web Services

ข��นตอนท��ผ:านมาเป2นการพ�ฒนา Web Service จาก EJB Module ในข��นตอนน��จะเป2นการพ�ฒนา Web

Service อ�กว�ธ�หน/�ง โดยการพ�ฒนาจาก Web Application โดยม� Business Logic ในการค5านวณราคาค:าท��พ�กท��ต�องช5าระ ท��งน��จะก5าหนดให� Web Service น��ม�ช��อเมธอดท��ช��อ getPayment ซ/�งจะส:งข�อม"ลชน�ด double กล�บมาและม� argument ท��ช��อ dayLength ชน�ด int และ roomRate ชน�ด double นอกจากน��ข��นตอนน��จะสาธ�ตการใช� NetBeans ในการสร�างไฟล, XSD และ WSDL XML document ข/�นมา

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 137: Java Web Services and SOA Using GlassFish openESB and NetBeans

137

16.2.1 การสร�าง Web Application Project

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

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

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

Application แล�วกด Next

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

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

16.2.2 การพ�ฒนา Web Service

1. ข��นตอนการสร�าง Web Service จะเป2นเช:นเด�ยวก�บการพ�ฒนาในข��นตอนท�� 1.2 โดยจะก5าหนด 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. จากน��นให�ท5าการคล�=กขวาท�� Web Services > CalculateBookingPayment แล�วเล�อก Test Web

Service เพ��อทดสอบ Web Service

16.2.3 การตรวจด"ไฟล, XSD และ WSDL

โปรแกรม NetBeans จะสร�าง XML ไฟล,ท��เป2น XSD เพ��อก5าหนด Schema ของ Datatype ของ Web

Service ท��สร�างข/�น และสร�างไฟล, WSDL เพ��อน�ยาม Web Service ท��สร�างข/�น ซ/�งจากการทดสอบ Web

Service จะท5าให�สามารถด"รายละเอ�ยดของ WSDL ได�ด�งน��

<definitions targetNamespace="http://payment/" name="CalculateBookingPaymentService">

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 138: Java Web Services and SOA Using GlassFish openESB and NetBeans

138

<types><xsd:schema>

<xsd:import namespace="http://payment/" 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นบรรท�ดท��แสดงการเร�ยกใช� XML Schema ด�งน�� <xsd:schema> <xsd:import namespace="http://payment/"schemaLocation=

"http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/>

</xsd:schema>

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

datatype definition ด�งน�� <xs:schema version="1.0" targetNamespace="http://payment/">

<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"/>

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 139: Java Web Services and SOA Using GlassFish openESB and NetBeans

139

<xs:element name="roomRate" type="xs:double"/> </xs:sequence></xs:complexType><xs:complexType name="getPaymentResponse"> <xs:sequence>

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

</xs:schema>

16.3 การพ�ฒนาโปรเจ-ค RoomBooking

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

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

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

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

16.4 การพ�ฒนา XML Schema

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

16.4.1 สร�างไฟล, RoomBookingSchema.xsd

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

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

3. ก5าหนด File Name: เป2น RoomBookingSchema แล�วกด Finish

4. หน�าต:าง Editor จะแสดงไฟล, RoomBookingSchema.xsd

16.4.2 สร�าง Complex Type ส5าหร�บ XML schema

1. ในไฟล, RoomBookingSchema.xsd เล�อกแทป Design แล�วลากไอคอน Complex Type ในหน�าต:าง

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 140: Java Web Services and SOA Using GlassFish openESB and NetBeans

140

Palette มาไว�ภายใต�โหนด Complex Type

2. โปรแกรม NetBeans จะเพ��ม complex type ใหม:ท��ช��อ newComplexType ให�ก5าหนดช��อใหม:เป2น RoomBookingInput [อ�กว�ธ�ในการท��จะเพ��ม Complex Type ค�อการคล�=กขวาท��โหนด Complex

Types แล�วเล�อกค5าส��ง Add > Complex Type]

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

4. คล�=กขวาท��โหนด newElement แล�วเล�อก Properties

5. ในไดอะล4อก newElement ก5าหนดค:า Name: เป2น firstName และเล�อกป+@ม ellipse (...) ท��ค:า Definition แล�วขยายโหนด Built-in Types ใน List แล�วเล�อกโหนด string โดยแล�วกดป+@ม Close

6. ท5าซ�5าเพ��อเพ��ม 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 ด�งร"ปท�� 16.3

ร�ปท 16.3 แสดงรายละเอยดของชน�ด RoomBookingInput

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 141: Java Web Services and SOA Using GlassFish openESB and NetBeans

141

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

โดยจะได�หน�า Design ด�งร"ปท�� 16.4

ร�ปท 16.4 แสดงรายละเอยดของชน�ด RoomBookingOutput

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

9. คล�=กขวาท��โหนด newElement แล�วเล�อก Properties

10. ในไดอะล4อก newElement ก5าหนดค:า Name: เป2น RoomBookingRequest และเล�อกป+@ม ellipse

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

ร�ปท 16.5 แสดงการก#าหนดชน�ดข�อม�ล RoomBookingInput ให�ก�บ RoomBookingRequest

11. ท5าซ�5าเพ��อก5าหนด Element ท��ช��อ RoomBookingResponse ท��ม� datatype เป2น RoomBookingOutput โดยจะได�หน�า Design ด�งร"ปท�� 16.6 แล�วท5าการ Save

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 142: Java Web Services and SOA Using GlassFish openESB and NetBeans

142

ร�ปท 16.6 แสดงชน�ดข�อม�ลของ RoomBookingRequest และ RoomBookingResponse

12. เปล��ยนไปแทป Source จะเห4นรายละเอ�ยดของ 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>

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 143: Java Web Services and SOA Using GlassFish openESB and NetBeans

143

16.5 การพ�ฒนาไฟล/ WSDL

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

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

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

เป2น Document Literal แล�วกด Next

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

4. เล�อก Element or Type โดยเล�อกป+@ม ellipse (...) แล�วเล�อก RoomBookingRequest ใต�โหนด Element ด�งร"ปท�� 16.7

ร�ปท 16.7 แสดงการเล�อกชน�ดข�อม�ลส#าหร�บ inputData

5. และส5าหร�บส:วนของ Output: ก5าหนด Message Part Name เป2น outputData และ Element or

Type เป2น RoomBookingResponse โดย จะได�ไดอะล4อกด�งร"ปท�� 16.8 แล�วกด Next

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 144: Java Web Services and SOA Using GlassFish openESB and NetBeans

144

ร�ปท 16.8 แสดงชน�ดข�อม�ลของ inputData และ outputData

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

16.6 การ Import ไฟล/ XML Schema และ WSDL

ข��นตอนน��เป2นการ Import ไฟล, WSDL และ XML Schema ท��อย":ในโปรเจ4ค DetermineRoomRate

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

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

2. แล�วคล�=กขวาท��โหนด DetermineRateService แล�วเล�อกค5าส��ง Generate and Copy WSDL ...

3. ในไดอะล4อก Generate and Copy WSDL ให�เล�อกไดเร4กทอร�� src ภายใต� RoomBooking ด�งแสดงในร"ปท�� 16.9

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 145: Java Web Services and SOA Using GlassFish openESB and NetBeans

145

ร�ปท 16.9 แสดงการเล�อกต#าแหน�งส#าหร�บเก/บไฟล* DetermineRateServiceService.wsdl

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

16.7 การพ�ฒนา Business Process

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

16.7.1 การเพ��ม partner link

ข��นตอนน��จะท5าการก5าหนด partner link ส5าหร�บ Web Services สามช+ดค�อ RoomBookingWSDL,

DetermineRateService และ CalculateBookingPayment โดยม�ข��นตอนด�งน��

1. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน RoomBookingWSDL.wsdl ใน

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 146: Java Web Services and SOA Using GlassFish openESB and NetBeans

146

หน�าต:าง Project มาไว�ภายใต�หน�าต:าง design ทางด�านซ�ายม�อ (โดยให�ลากไปท��แทบเทาๆ และใส:ใน

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

เป2น RoomBookingPartnerLink โดยการกดด�บเบ��ลคล�=กท��ช��อ PartnerLink1 เด�มแล�วกด OK

3. ลากไอคอน DetermineRateServiceService.wsdl ท��อย":ในหน�าต:าง Project ภายใต�โหนด RoomBooking มาไว�ภายใต�หน�าต:าง design ทางด�านขวาม�อ [เราต�องท5าการ deploy โปรเจ4คน��ก:อนท��จะสามารถก5าหนด partner link ได�]

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

เป2น DetermineRatePartnerLink แล�วกด OK

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

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

เป2น CalculatePaymentPartnerLink แล�วกด OK

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

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 147: Java Web Services and SOA Using GlassFish openESB and NetBeans

147

ร�ปท 16.10 แสดง PartnerLink ท��งหมดของ roomBooking

16.7.2 การเพ��มธ+รกรรม Receive

1. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inData ด�งร"ปท�� 16.11 แล�วกด OK

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 148: Java Web Services and SOA Using GlassFish openESB and NetBeans

148

ร�ปท 16.11 แสดงการก#าหนดค�าให�ก�บธ7รกรรม Receive

16.7.3 การเพ��มธ+รกรรม Reply

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

2. โปรแกรมจะก5าหนดธ+รกรรม Reply ท��ช��อ Reply1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Reply1

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

Link: เป2น RoomBookingPartnerLink

4. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น outData แล�วกด OK เราจะได� BPEL Process ด�งแสดงในร"ปท�� 16.12

ร�ปท 16.12 แสดงธ7รกรรม start และ end

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 149: Java Web Services and SOA Using GlassFish openESB and NetBeans

149

16.7.4 การเพ��มธ+รกรรม Invoke ส5าหร�บ getRate

5. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง start ก�บธ+รกรรม end

6. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

7. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น DetermineRate และเล�อก Partner Link: เป2น DetermineRatePartnerLink

8. ในช:อง operation: เล�อก getRate

9. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น GetRateIn แล�วกด OK

10. ในช:อง Output Variable: กดป+@ม Create เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น GetRateOut แล�วกด OK จะได� BPEL Process ด�งแสดงในร"ปท�� 16.13

ร�ปท 16.13 แสดงธ7รกรรม DetermineRate

16.7.5 การเพ��มธ+รกรรม Invoke ส5าหร�บ getPayment

1. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม DetermineRate ก�บธ+รกรรม end

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 150: Java Web Services and SOA Using GlassFish openESB and NetBeans

150

3. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น CalculatePayment

และเล�อก Partner Link: เป2น CalculatePaymentPartnerLink

4. ในช:อง Input Variable: กดป+@ม Create.. เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น GetPaymentIn แล�วกด OK

5. ในช:อง Output Variable: กดป+@ม Create.. เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น GetPaymentOut แล�วกด OK จะได� BPEL Process ด�งแสดงในร"ปท�� 16.14

ร�ปท 16.14 แสดงธ7รกรรม CalcuatePayment

16.7.6 การเพ��มธ+รกรรม Assign

1. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม start ก�บธ+รกรรม DetermineRate

2. ก5าหนดช��อธ+รกรรม Assign1 เป2น AssignDetermineRateInput

3. ในหน�าต:าง Editor เล�อกธ+รกรรม AssignDetermineRateInput ในหน�าต:าง BPEL Mapper ท5าการโยงโหนด roomType ในส:วน inputData ทางด�านซ�ายเข�าก�บโหนด roomType ในส:วน outData ทางด�านขวา ด�งแสดงในร"ปท�� 16.15

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 151: Java Web Services and SOA Using GlassFish openESB and NetBeans

151

ร�ปท 16.15 แสดง Business Rule ระหว�าง start และ DetermineRate

4. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม DetermineRate ก�บธ+รกรรม CalculatePayment

5. ก5าหนดช��อธ+รกรรม Assign1 เป2น AssignCalculatePaymentInput

6. ในหน�าต:าง Editor เล�อกธ+รกรรม AssignCalculatePaymentInput ในหน�าต:าง BPEL Mapper ท5าการโยงโหนด return ในส:วน GetRateOut ในหน�าต:างด�านซ�ายเข�าก�บโหนด roomRate ในส:วน GetPaymentIn ในหน�าต:างด�านขวา และโยงโหนด lengthOfStay ในส:วน inData ในหน�าต:างด�านซ�ายเข�าก�บโหนด dayLength ในส:วน GetPaymentIn ด�งแสดงในร"ปท�� 16.16

ร�ปท 16.16 แสดง Business Rule ระหว�าง DetermineRate และ CalculatePayment

7. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม CalculatePayment ก�บธ+รกรรม end

8. ก5าหนดช��อธ+รกรรม Assign1 เป2น AssignResult

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 152: Java Web Services and SOA Using GlassFish openESB and NetBeans

152

9. ในหน�าต:าง Editor เล�อกธ+รกรรม AssignResult ในหน�าต:าง BPEL Mapper คล�=กท��โหนด result ในส:วน outData โปรแกรมจะ highlight ส�น�5าเง�นในโหนดน��นด�งร"ปท�� 16.17

ร�ปท 16.17 แสดงการเล�อกต#าแหน�งทจะใส�ผลล�พธ*

10. เล�อก Concat operation จากเมน" String ท��อย":ส:วนบนของ BPELMapper ด�งร"ปท�� 16.18

ร�ปท 16.18 แสดงการเล�อก Concat operation

11. Mapper Canvas จะเพ��มโหนด Concat ให�เพ��มข�อความ 'your payment is ' ในช:อง String แรก และเช��อมโยงโหนด return ในส:วน GetPaymentOut ในหน�าต:างด�านซ�ายเข�าก�บช:อง String ท��สองของโหนด Concat และเช��อมโยงส:วน output String ของโหนด Concat เข�าก�บโหนด result ในส:วน outData ในหน�าต:างด�านซ�าย ด�งแสดงในร"ปท�� 16.19

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 153: Java Web Services and SOA Using GlassFish openESB and NetBeans

153

ร�ปท 16.19 แสดง Business Rule ระหว�าง CalculatePayment และ end

12. เราจะได�โปรแกรม BPEL ด�งแสดงในร"ปท�� 16.20

ร�ปท 16.20 แสดง Business Process ของท��งระบบ

13. กดป+@ม Save และ Clean and Build

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 154: Java Web Services and SOA Using GlassFish openESB and NetBeans

154

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

ข��นตอนน��เป2นการสร�าง Composite Application เพ��อท��ร�น roomBooking.bpel บน Open ESB โดยใช� BPEL SE ท��ใช�มาตรฐาน JBI โดยม�ข��นตอนด�งน��

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค RoomBooking แล�วกดป+@ม Add Project JAR Files

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

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

8. ด�บเบ��ลคล�=กท�� Service Assembly จะเห4น CASA Editor ด�งแสดงในร"ปท�� 16.21 ซ/�ง RoomBooing

ท��เป2น BPEL module จะถ"กเร�ยกโดย SOAP request แต:ไม:เห4น DetermineRatePartnerLink

และ CalculatePaymentPartnerLink เร�ยกใช� Web Service ใด

ร�ปท 16.21 แสดง CASA Editior ของ RoomBooking

9. เพ��อระบ+ Web Service ท��จะเร�ยกใช�ให�ลากไอคอน soap ท��อย":ใน palette มาไว�ในส:วน WSDL

Ports ของ CASA Editor สองคร��ง และท5าการเช��อมโยงด�งร"ปท�� 16.22

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 155: Java Web Services and SOA Using GlassFish openESB and NetBeans

155

ร�ปท 16.22 แสดงการเช�อมโยงจาก RoomBooking ไปย�ง SOAP

10. ระบ+ endpoint ของ WSDL port โดยการคล�=กขวาท�� casaPort1 แล�วเล�อก Properties แล�วก5าหนดค:า Location เป2น http://localhost:8080/DetermineRateServiceService/DetermineRateService และ Endpoint Name เป2น DetermineRate

11. คล�=กขวาท�� casaPort2 แล�วเล�อก Properties แล�วก5าหนดค:า Location เป2น http://localhost:8080/CalculatePayment/CalculateBookingPaymentService และ Endpoint Name เป2น CalculatePayment

12. ท5าการ Deploy โปรเจ4ค RoomBookingCompositeApp

16.9 การทดสอบโปรแกรมผ)าน TestCase

โปรแกรม NetBeans จะม�เคร��องม�อท��ช:วยในการทดสอบ Composite Application ท��พ�ฒนาข/�น โดยการร�นผ:าน TestCase ซ/�งม�ข��นตอนด�งน��

1. ในหน�าต:าง Project เล�อกโหนด RoomBookingCompositeApp > Test แล�วคล�=กขวาเล�อก New Test Case

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

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 156: Java Web Services and SOA Using GlassFish openESB and NetBeans

156

3. หน�าถ�ดไปใน RoomBooking ให�เล�อกไฟล, WSDL เป2น RoomBookingWSDL.wsdl แล�วกด Next

4. ในหน�าถ�ดไปให�เล�อก RoomBookingWSDLOperation แล�วกด Finish

5. หน�าต:าง Editor จะแสดงไฟล, 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. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

7. จะเห4นผลล�พธ,ปรากฎในไฟล, 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>

16.10 การพ�ฒนา Business Process เพ��อให�เก-บข�อม!ลลงฐานข�อม!ล

ข��นตอนน��เป2นการพ�ฒนา Business Process เพ��อให�เก4บข�อม"ลการจองลง Table ท��ช��อ RoomBooking

โดยม�ข��นตอนด�งน��

16.10.1 การสร�าง Table

ข��นตอนน��เป2นการสร�าง table ในฐานข�อม"ลเพ��อใช�เก4บข�อม"ลการจองท��พ�ก โดยใช�โปรแกรม NetBeans

หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ RoomBooking ในฐานข�อม"ล MySQL ท��ช��อ test โดยก5าหนดให�ม� column ต:างๆ ด�งน��

id int Primary Key Auto Increase

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 157: Java Web Services and SOA Using GlassFish openESB and NetBeans

157

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`))

16.10.2 การพ�ฒนาไฟล, WSDL ส5าหร�บ DatabaseBinding

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

1. เล�อกหน�าต:าง Projects ขยายโหนด RoomBooking แล�วคล�=กขวาท��โหนด Process Files ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น RoomBookingDB ก5าหนด WSDL Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น DATABASE และ Types เป2น Table จากน��นกด Next

3. ในหน�าถ�ดไป ก5าหนดค:า URL: เป2น jdbc:mysql://localhost:3306/test กด Next

4. เล�อก Table: roombooking จาก Available Tables: ไปย�ง Selected Tables: และกด Next

5. กด Next แล�วก5าหนดค:า JNDI Name เป2น jdbc/test กด Finish

หมายเหต กรณ�ท��ไม:ม�ช:องให�ใส: JNDI Name ให�ท5าการเล�อกแทป Source จากน��นค�นหาค5าว:า jdbc/__defaultDS แล�วแทนท��ด�วย jdbc/test

6. โปรแกรมจะสร�างไฟล,ข/�นมาสองไฟล,ค�อ RoomBookingDB.wsdl ส5าหร�บอธ�บาย service ต:างๆ ของ Table และ roombooking.xsd ส5าหร�บอธ�บาย XML Schema ของ Table

7. เน��องจาก column ท��ช��อ id จะเป2น auto increment ด�งน��นเราจะแก�ไข insert operation โดยเล�อกไฟล, RoomBookingDB.wsdl หน�าต:าง Editor จะแสดง Design View ของไฟล, ให�ขยายแทป Bindings >

binding > insert > inputInsert ด�งแสดงในร"ปท�� 16.23 แล�วด"ท�� properties ของ jdbc:input จะเห4น ค5าส��ง sql เป2น

insert into roombooking (phone,payment,firstName,id,lastName) values (?,?,?,?,?)

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 158: Java Web Services and SOA Using GlassFish openESB and NetBeans

158

ให�แก�ไขเป3นinsert into roombooking (phone,payment,firstName,lastName) values (?,?,?,?)

และให�แก�ไข paramOrder จาก phone,payment,firstName,id,lastName

เป3นphone,payment,firstName,lastName

ร�ปท 16.23 แสดงการแก�ไข insert operation

16.11 การปร�บปร ง Business Process

ข��นตอนถ�ดไปจะเป2นการปร�บปร+งไฟล, roomBooking.bpel โดยม�ข��นตอนด�งน��

16.11.1 การเพ��ม partner link

1. เปAดไฟล, roomBooking.bpel แล�วเล�อกแทป Design

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

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

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 159: Java Web Services and SOA Using GlassFish openESB and NetBeans

159

16.11.2 การเพ��มธ+รกรรม Invoke ส5าหร�บ storeBooking 1. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต:าง Palette มาไว�ใน

หน�าต:าง design ระหว:าง ธ+รกรรม AssignResult ก�บธ+รกรรม end

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

3. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น StoreBooking และเล�อก Partner Link: เป2น DBPartnerLink

4. ในช:อง Input Variable: กดป+@ม Create.. เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น InsertIn แล�วกด OK

5. ในช:อง Output Variable: กดป+@ม Create.. เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น InsertOut แล�วกด OK

16.11.3 การเพ��มธ+รกรรม Assign

1. ในไฟล, roomBooking.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม AssignResult ก�บธ+รกรรม StoreBooking

2. ก5าหนดช��อธ+รกรรม Assign1 เป2น AssignDBInput

3. ในหน�าต:าง Editor เล�อกธ+รกรรม AssignDBInput ในหน�าต:าง BPEL Mapper ท5าการโยงโหนดต:างๆด�งแสดงในร"ปท�� 16.24

• return ในส)วน GetPaymentOut เข�าก�บโหนด payment ในส)วน InsertIn• firstName ในส)วน inData เข�าก�บโหนด firstName ในส)วน InsertIn

• lastName ในส)วน inData เข�าก�บโหนด lastName ในส)วน InsertIn

• phone ในส)วน inData เข�าก�บโหนด phone ในส)วน InsertIn

ร�ปท 16.24 แสดง Business Rule ระหว�าง AssignResult ก�บ StoreBooking

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 160: Java Web Services and SOA Using GlassFish openESB and NetBeans

160

4. เราจะได�โปรแกรม BPEL ด�งแสดงในร"ปท�� 16.25

ร�ปท 16.25 แสดง Business Process ของท��งระบบ

16.11.4 ท5าการ Deploy โปรเจ4ค

1. ท5าการ Clean and Build โปรเจ4ค RoomBooking ใหม:2. ท5าการ Clean and Build โปรเจ4ค RoomBookingCompositeApp ใหม: จะได� CASA Editor ด�งร"ป

ท�� 16.26

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 161: Java Web Services and SOA Using GlassFish openESB and NetBeans

161

ร�ปท 16.26 แสดง CASA Editor ของ RoomBooking

3. ท5าการ Deploy โปรเจ4ค RoomBookingCompositeApp ใหม:4. ร�น TestCase1 อ�กคร��ง แล�วตรวจสอบข�อม"ลใน Table ท��ช��อ RoomBooking เราจะเห4นข�อม"ลด�งแสดง

ในร"ปท�� 16.27

ร�ปท 16.27 แสดงข�อม�ลในตาราง RoomBooking

16.12 พ�ฒนาโปรแกรม Web Application สาหร�บ User Interface

โปรแกรม Business Process ท��พ�ฒนาข/�นจะเป2น Web Services ท��ร�นอย":ใน GlassFish Application

Server ซ/�งเราสามารถท��จะพ�ฒนาโปรแกรม Web Application เพ��อเป2นส:วน User Interface (Presentation) ในการเร�ยกใช� Business Process

16.12.1 การหาต5าแหน:ง URL ของ WSDL ส5าหร�บ Business Process

ข��นตอนน��จะเป2นการเร�ยกด" url ของ WSDL ส5าหร�บ Business Process ท��พ�ฒนาข/�นด�งน��

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 162: Java Web Services and SOA Using GlassFish openESB and NetBeans

162

1. เล�อกหน�าต:าง Projects ขยายโหนด RoomBookingCompositeApp แล�วด�บเบ��ลคล�=ก Service

Assembly โปรแกรมจะแสดง CASA Editor

2. คล�=กขวาท�� RoomBookingWSDLPort จากน��นเล�อก Clone WSDL Port to edit...

3. คล�=กขวาท�� RoomBookingWSDLPort อ�กคร��ง จากน��นเล�อก properties

4. ในหน�าต:าง properties ให�ท5าการ copy ค:าของ soap:address

5. ทดสอบโดยเปAด Web Browser แล�ว paste ค:าท�� copy ไว� จากน��นให�ท5าการเปล��ยนค:าของ URL ให�เป2นด�งน�� http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL

16.12.2 การพ�ฒนาโปรเจ4ค Web Application

ข��นตอนน��เป2นการพ�ฒนาโปรเจ4ค Web Application เพ��อให�ผ"�ใช�ปBอนข�อม"ลในการจองท��พ�ก ในหน�าเว4บ roomlBooking.html แล�วโปรแกรมจะเร�ยกโปรแกรม Servlet ท��ช��อ RoomBookingBP.java เพ��อแสดงผลล�พธ,ออกมา โดยม�ข��นตอนการพ�ฒนาด�งน��

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

2. ในไดอะล4อก New Project ให�เล�อก Categories เป2น Web และ Web Application แล�วกด Next

3. ก5าหนด Project Name เป2น RoomBookingUI แล�วเล�อก Project Location เป2น folder ท��เราต�องการจะเก4บไฟล,ไว�

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

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

6. ในไดอะล4อก New Web Service Client ให�เล�อก WSDL URL: แล�วใส: URL เป2น http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL ด�งแสดงในร"ปท�� 16.28 แล�วกด Finish

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 163: Java Web Services and SOA Using GlassFish openESB and NetBeans

163

ร�ปท 16.28 แสดงการใส�ค�า WSDL URL ในไดอะล/อก New Web Service Client

16.12.3 การพ�ฒนาโปรแกรม roomBooking.html

โปรแกรม roomBookingP.html เป2นเว4บเพจท��ใช�แสดงฟอร,มส5าหร�บให�ผ"�ใช�ปBอนข�อม"ลการจองท��พ�ก โดยม�ข��นตอนการพ�ฒนาด�งน��

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

2. ก5าหนด HTML File Name: เป2น roomBooking แล�วกด Finish

3. เข�ยน source code ของไฟล, roomBooking.html ตาม Listing ท�� 16.1

Listing 16.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">

<option value="Deluxe">Deluxe</option> <option value="Superior">Superior</option>

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 164: Java Web Services and SOA Using GlassFish openESB and NetBeans

164

<option value="Standard">Standard</option> </select> <br><br> <input type="submit" value="Book Room" /> </form> </body>

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

โปรแกรม RoomBookingBP.java เป2นโปรแกรม Java Servlet ท��จะอ:านข�อม"ลการจองท��พ�ก ท��ผ"�ใช�ปBอนมาจากหน�า roomBooking.html และจะเร�ยก Web Process เพ��อแสดงผลล�พธ, โดยม�ข��นตอนการพ�ฒนาโปรแกรมด�งน��

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

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

3. ก5าหนด File Name: เป2น RoomBookingBP และ Package: เป2น servlets กด Next แล�วกด Finish

4. ในหน�าต:าง Editor ให�คล�=กขวาภายในเมธอด processRequest แล�วเล�อก Insert Code... > Call Web

Service Operation เล�อกไปท�� RoomBookingWSDLOperation

5. ให�ปร�บปร+ง 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();

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(); 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);

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 165: Java Web Services and SOA Using GlassFish openESB and NetBeans

165

org.netbeans.xml.schema.roombookinglschema.RoomBookingOutput result = port.roomBookingWSDLOperation(inputData);

out.println("Booking is done: " + result.getResult()); } catch (Exception ex) { out.print(ex); } out.close(); }

6. Run ไฟล, roomBooking.html จากน��นให�ทดลองปBอนข�อม"ลเพ��อทดสอบโปรแกรม และตรวจสอบข�อม"ลในตาราง RoomBooking เพ��อด"ข�อม"ล ด�งแสดงในร"ปท�� 16.29

ร�ปท 16.29 แสดงการทดลองป9อนข�อม�ล และต�วอย�างผลล�พธ*ทได�ในตาราง RoomBooking

Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan

Page 166: Java Web Services and SOA Using GlassFish openESB and NetBeans

166

Exercise 17 BPEL : Structured Activities

แบบฝ1กห�ดน��เป2นการเข�ยน BPEL 2.0 โดยเร�ยกใช� Structured Activities เช:น ForEach โดยจะสร�าง Business Process ข/�นมาเพ��ออ:านข�อม"ลการส��งส�นค�า (PO) ซ/�งอาจม�รายการส�นค�าอย":หลายรายการและจะท5าการบ�นท/กรายการเหล:าน��นลงฐานข�อม"ล

ข��นตอนในการพ�ฒนาโปรแกรม1. พ�ฒนาโปรเจ4ค BPELStructure

2. พ�ฒนา XML Schema

3. พ�ฒนาไฟล, WSDL

4. การพ�ฒนา WSDL เพ��อให�เก4บข�อม"ลลงฐานข�อม"ล 5. พ�ฒนา Business Process ส5าหร�บ ForEach

6. พ�ฒนาโปรเจ4ค Composite Application

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

17.1 การพ�ฒนาโปรเจ-ค BPELStructure

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

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

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

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

17.2 การพ�ฒนา XML Schema

ข��นตอนถ�ดไปเป2นการสร�างไฟล, XML Schema เพ��อก5าหนดร"ปแบบของ XML Datatype ท��จะใช�เป2น input argument ของ Business Process ท��จะพ�ฒนาข/�น โดยในท��น��จะก5าหนดเป2น PO.xsd ซ/�งโปรแกรม NetBeans จะม� Wizard ในการสร�าง XML Schema อ�ตโนม�ต� โดยม�ข��นตอนการพ�ฒนาด�งน��

17.2.1 สร�างไฟล, PO.xsd

1. เล�อกหน�าต:าง Projects ขยายโหนด BPELStructure แล�วคล�=กขวาท��โหนด Process Files จากน��นเล�อก

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 167: Java Web Services and SOA Using GlassFish openESB and NetBeans

167

ค5าส��ง New > Other..

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

3. ก5าหนด File Name: เป2น PO แล�วกด Finish

4. หน�าต:าง Editor จะแสดงไฟล, PO.xsd

17.2.2 สร�าง Complex Type ส5าหร�บ XML schema

1. ในไฟล, PO.xsd เล�อกแทป Design แล�วลากไอคอน Element ในหน�าต:าง Palette มาไว�ภายใต�โหนด Elements

2. โปรแกรม NetBeans จะเพ��ม element ใหม:ท��ช��อ newElement ให�ก5าหนดช��อใหม:เป2น PO

3. ลากไอคอน Sequence ในหน�าต:าง Palette มาไว�ภายใต�โหนด PO

4. ลากไอคอน Element ในหน�าต:าง Palette มาไว�ภายใต�โหนด PO

5. คล�=กขวาท��โหนด newElement แล�วเล�อก Properties

6. ในไดอะล4อก newElement ก5าหนดค:า Name: เป2น PONumber และเล�อกป+@ม ellipse (...) ท��ค:า Definition แล�วขยายโหนด Built-in Types ใน List แล�วเล�อกโหนด integer โดยแล�วกดป+@ม Close

7. ท5าซ�5าเพ��อเพ��ม element ภายใต� PO ด�งน��• PODate (Built-In Types/ string)• Items [ไม:ต�องระบ+ Data Type]

8. ลากไอคอน Sequence ในหน�าต:าง Palette มาไว�ภายใต�โหนด Items

9. ลากไอคอน Element ในหน�าต:าง Palette มาไว�ภายใต�โหนด Items แล�วก5าหนดช��อเป2น Item

10. ลากไอคอน Sequence ในหน�าต:าง Palette มาไว�ภายใต�โหนด Item [ไม:ต�องระบ+ Data Type] ด�งร"ปท�� 17.1

ร�ปท 17.1 แสดงการออกแบบ PO.xsd

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 168: Java Web Services and SOA Using GlassFish openESB and NetBeans

168

11. คล�=กขวาท��โหนด Item แล�วเล�อก Properties แล�วก5าหนดค:า Max Occurs เป2น unbounded เพ��อระบ+ว:า Item ม�ได�ไม:จ5าก�ดจ5านวน

12. ลากไอคอน Element ในหน�าต:าง Palette สองช+ดมาไว�ภายใต�โหนด Item แล�วก5าหนดค:าด�งน��• ItemNumber (Built-In Types/ string)• ItemQuantity (Built-In Types/ integer)

17.3 การพ�ฒนาไฟล/ WSDL

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

1. เล�อกหน�าต:าง Projects ขยายโหนด BPELStructure แล�วคล�=กขวาท��โหนด Process Files จากน��นเล�อกค5าส��ง New > WSDL Document

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น BPELStructureWSDL1 ก5าหนด WSDL Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น SOAP และ Types

เป2น Document Literal แล�วกด Next

3. ในหน�าถ�ดไป ก5าหนด Operation Type เป2น One-Way Operation ส5าหร�บส:วนของ Input: ก5าหนด Message Part Name เป2น inputData

4. เล�อก Element or Type โดยเล�อกป+@ม ellipse (...) แล�วเล�อก PO ใต�โหนด Elements แล�วกด Next

5. ในหน�าถ�ดไปให�คงค:าเด�มไว� แล�วกด Finish

17.4 การพ�ฒนา WSDL เพ��อให�เก-บข�อม!ลลงฐานข�อม!ล

ข��นตอนน��เป2นการก5าหนด WSDL ส5าหร�บการจ�ดการ Table ท��ช��อ purchasingorder โดยม�ข��นตอนด�งน��

17.4.1 การสร�าง Table

ข��นตอนน��เป2นการสร�าง table ในฐานข�อม"ลเพ��อใช�เก4บข�อม"ลการจองท��พ�ก โดยใช�โปรแกรม NetBeans

หร�อ MySQL Query Browser เพ��อสร�าง Table ท��ช��อ purchasingorder ในฐานข�อม"ล MySQL ท��ช��อ test

โดยก5าหนดให�ม� column ต:างๆ ด�งน��

orderNumber int Primary Key Auto Increase

PONumber int

itemNumber VARCHAR(45)

itemQuantity int

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 169: Java Web Services and SOA Using GlassFish openESB and NetBeans

169

17.4.2 การพ�ฒนาไฟล, WSDL ส5าหร�บ DatabaseBinding

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

1. เล�อกหน�าต:าง Projects คล�=กขวาท��โหนด BPELStructure ให�เล�อก New > WSDL Document ..

2. ในไดอะล4อก New WSDL Document ก5าหนด File Name: เป2น PurchasingOrderDB ก5าหนด WSDL Type: เป2น Concrete WSDL Document และก5าหนด Binding เป2น DATABASE และ Types เป2น Table จากน��นกด Next

3. ในหน�าถ�ดไป ก5าหนดค:า URL: เป2น jdbc:mysql://localhost:3306/test กด Next

4. เล�อก Table: purchasingorder จาก Available Tables: ไปย�ง Selected Tables: กด Next 2 คร��ง แล�วกด Finish

5. โปรแกรมจะสร�างไฟล,ข/�นมาสองไฟล,ค�อ PurchasingOrderDB.wsdl ส5าหร�บอธ�บาย service ต:างๆ ของ Table และ purchasingorder.xsd ส5าหร�บอธ�บาย XML Schema ของ Table

6. ให�ท5าการเล�อกแทป Source จากน��นค�นหาค5าว:า jdbc/__defaultDS แล�วแทนท��ด�วย jdbc/test

7. เน��องจาก column ท��ช��อ orderNumber จะเป2น auto increment ด�งน��นเราจะแก�ไข insert operation

โดยเล�อกไฟล, PurchasingOrderDB.wsdl แล�วเล�อกแทป WSDL

8. ให�ขยายแทป Bindings > binding > insert > inputInsert แล�วด"ท�� properties ของ jdbc:input ให�แก�ไขค5าส��ง sql เป2น

insert into purchasingorder (itemNumber,PONumber,itemQuantity) values (?,?,?)

และให�แก�ไข paramOrder เป2นitemNumber,PONumber,itemQuantity

17.5 การพ�ฒนา Business Process สาหร�บ ForEach

ข��นตอนน��เป2นการสร�างไฟล, BPEL ส5าหร�บน�ยาม Business Process ส5าหร�บการสาธ�ตการใช�ค5าส��ง ForEach โดยม�ข��นตอนการพ�ฒนาด�งน��

17.5.1 การเพ��ม partner link

1. ในไฟล, BPELStructure.bpel เล�อกแทป Design แล�วลากไอคอน BPELStructureWSDL1.wsdl

ในหน�าต:าง Project มาไว�ภายใต�หน�าต:าง design ทางด�านซ�ายม�อ ให�ก5าหนดค:า Name: เป2น BPELStructurePartnerLink

2. ลากไอคอน PurchasingOrderDB.wsdl ท��อย":ในหน�าต:าง Project ภายใต�โหนด BPELStructure มาไว�ภายใต�หน�าต:าง design ทางด�านขวาม�อ ให�ก5าหนดค:า Name: เป2น DBPartnerLink

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 170: Java Web Services and SOA Using GlassFish openESB and NetBeans

170

17.5.2 การเพ��มธ+รกรรม Receive

1. ในไฟล, BPELStructure.bpel เล�อกแทป Design แล�วลากไอคอน Receive ในหน�าต:าง Palette มาไว�ตรงบล4อกธ+รกรรมว:างเปล:า

2. โปรแกรมจะก5าหนดธ+รกรรม Receive ท��ช��อ Receive1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Receive1

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

4. ในช:อง Input Variable: กดป+@ม Create เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น inData แล�วกด OK

17.5.3 การเพ��มธ+รกรรม ForEach

1. ในไฟล, BPELStructure.bpel เล�อกแทป Design แล�วลากไอคอน ForEach ในหน�าต:าง Palette มาไว�ในหน�าต:าง design ระหว:าง ธ+รกรรม start ก�บธ+รกรรม Process end

2. โปรแกรมจะก5าหนดธ+รกรรม ForEach ท��ช��อ ForEach1 จะส�งเกต+เห4นว:าโปรแกรมแสดง Error เก�ดข/�นเน��องจากเราย�งไม:ได�ก5าหนด parameters ใน ForEach

3. ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม ForEach1 โปรแกรมจะแสดง BPEL Mapper คล�=กท��โหนด Start Value ในส:วน For Each โปรแกรมจะ highlight ส�ฟBาในโหนดน��น

4. เล�อก Number Literal จากเมน" Number ท��อย":ส:วนบนของ BPELMapper แล�วเปล��ยนค:าเป2น 1 และเช��อมโยงไปย�ง Start Value ด�งร"ปท�� 17.2

ร�ปท 17.2 แสดงการก#าหนดค�าให�ก�บ Start Value ของ For Each

5. คล�=กท��โหนด Final Value ในส:วน For Each เล�อก Count จากเมน" Node ท��อย":ส:วนบนของ BPELMapper ขยายโหนด inData > inputData > Items แล�วท5าการโยงโหนด Item ทางด�านซ�าย เข�าก�บโหนด NodeSet ของ Count และโยงโหนด Number ของ Count ก�บโหนด Final Value ในส:วน For Each ทางด�านขวา ด�งแสดงในร"ปท�� 17.3

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 171: Java Web Services and SOA Using GlassFish openESB and NetBeans

171

ร�ปท 17.3 แสดงการก#าหนดค�าให�ก�บ Final Value ของ For Each

6. กด Save

17.5.4 การเพ��มธ+รกรรม Invoke ส5าหร�บ storePO

1. ในไฟล, BPELStructure.bpel เล�อกแทป Design แล�วลากไอคอน Invoke ในหน�าต:าง Palette มาไว�ในธ+รกรรม ForEach1

2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ท��ช��อ Invoke1 ในหน�าต:าง Design ให�ด�บเบ��ลคล�=กธ+รกรรม Invoke1

3. ในไดอะล4อก Invoke1 [Invoke] - – Property Editor ให�ก5าหนด Name: เป2น storePO และเล�อก Partner Link: เป2น DBPartnerLink

4. ในช:อง Input Variable: กดป+@ม Create.. เม��อไดอะล4อก New Input Variable แสดงข/�น ให�ก5าหนด Name: เป2น InsertIn แล�วกด OK

5. ในช:อง Output Variable: กดป+@ม Create.. เม��อไดอะล4อก New Output Variable แสดงข/�น ให�ก5าหนด Name: เป2น InsertOut แล�วกด OK

17.5.5 การเพ��มธ+รกรรม Assign และก5าหนด Predicate

1. ในไฟล, BPELStructure.bpel เล�อกแทป Design แล�วลากไอคอน Assign ในหน�าต:าง Palette มาไว�ในภายในธ+รกรรม ForEach1 ก:อนหน�าธ+รกรรม storePO ด�งร"ปท�� 17.4

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 172: Java Web Services and SOA Using GlassFish openESB and NetBeans

172

ร�ปท 17.4 แสดงการเพ�ม Assign เข�าไปใน ForEach1

2. ด�บเบ��ลคล�=กธ+รกรรม Assign1 เราจะก5าหนดค:าจาก Items ในการปBอนข�อม"ลลงฐานข�อม"ล ในการน��เราจะต�องน�ยาม predicate เพ��อสร�าง index list ของ Item ท��จะท5าให�เราเข�ยนการวนรอบได�

3. ในหน�าต:าง BPELMapper ขยายโหนด inData > inputData > Items แล�วคล�=กขวาท��โหนด Item เล�อกค5าส��ง Add Predicate...

4. ในไดอะล4อก Predicate Editor เช��อมโยงโหนด ForEach1Counter ในส:วน ForEach1 ทางด�านซ�ายม�อก�บโหนด Predicate ทางด�านขวาม�อด�งร"ปท�� 17.5 แล�วกด OK

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 173: Java Web Services and SOA Using GlassFish openESB and NetBeans

173

ร�ปท 17.5 แสดงการน�ยาม predicate

5. ในหน�าต:าง BPELMapper ท5าการโยงโหนดต:างๆด�งน��• PONumber ในส)วน inputData เข�าก�บโหนด PONumber ในส)วน InsertIn

• ItemNumber ในส)วน Item[$ForEach1Counter] เข�าก�บโหนด itemNumber ในส)วน InsertIn

• ItemQuantity ในส)วน Item[$ForEach1Counter] เข�าก�บโหนด itemQuantity ในส)วน InsertIn

ด�งแสดงในร"ปท�� 17.6

ร�ปท 17.6 แสดงการเช�อมโยงข�อม�ลระหว�าง inData และ InsertIn

6. Save และ Clean and Build

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 174: Java Web Services and SOA Using GlassFish openESB and NetBeans

174

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

ข��นตอนน��เป2นการสร�าง Composite Application เพ��อท��ร�น BPELStructure.bpel บน Open ESB โดยใช� BPEL SE ท��ใช�มาตรฐาน JBI โดยม�ข��นตอนด�งน��

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

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

Application แล�วกด Next

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

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

5. ให�เล�อกโปรเจ4ค BPELStructure แล�วกดป+@ม Add Project JAR Files

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

Module ท5าการ Clean and Build โปรเจ4ค BPELStructureCompositeApp

7. หน�าต:าง CASA Editor จะแสดงด�งร"ปท�� 17.7

ร�ปท 17.7 แสดงหน�าต�าง CASA Editor ของ BPELStructure

8. ท5าการ Deploy โปรเจ4ค BPELStructureCompositeApp

17.7 การทดสอบโปรแกรมผ)าน TestCase

โปรแกรม NetBeans จะม�เคร��องม�อท��ช:วยในการทดสอบ Composite Application ท��พ�ฒนาข/�น โดยการร�นผ:าน TestCase ซ/�งม�ข��นตอนด�งน��

1. ในหน�าต:าง Project เล�อกโหนด BPELStructureCompositeApp > Test แล�วคล�=กขวาเล�อก New Test Case

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 175: Java Web Services and SOA Using GlassFish openESB and NetBeans

175

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

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

4. ในหน�าถ�ดไปให�เล�อก BPELStructureWSDL1Operation แล�วกด Finish

5. หน�าต:าง Editor จะแสดงไฟล, Input.xml ให�แก� source code ส:วน inputData ด�งน��

<soapenv:Body> <po:PO> <po:PONumber>1234</po:PONumber> <po:PODate>2010-1-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. กดป+@ม Save เล�อกโหนด TestCase1 แล�วคล�=กขวาเล�อก Run

7. เราสามารถด"ผลล�พธ,จาก Table ท��ช��อ purchasingorder ได�ด�งร"ปท�� 17.8

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan

Page 176: Java Web Services and SOA Using GlassFish openESB and NetBeans

176

ร�ปท 17.8 แสดงผลล�พธ*ทได�ในตาราง purchasingorder

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan