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

SOA Web Services

Embed Size (px)

Citation preview

Page 1: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

49

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

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

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

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

Page 50: SOA Web Services

50

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

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

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

Page 51: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

69

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

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

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

Page 70: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

74

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

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

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

Page 75: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

103

9. และได�ข�อม"ลซ/�งเข�าไปอย":ในฐานข�อม"ลด�งแสดงในร"ปท�� 13.8

ร�ปท 13.8 แสดงข�อม�ลทอย��ในตาราง Employee ในฐานข�อม�ล test

BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan

Page 104: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

114

ร�ปท 14.12 แสดงต�วอย�างผลล�พธ*ใน TestQueue

BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan

Page 115: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

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: SOA Web Services

176

ร�ปท 17.8 แสดงผลล�พธ*ทได�ในตาราง purchasingorder

BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan