Upload
software-park-thailand
View
2.878
Download
12
Embed Size (px)
DESCRIPTION
เอกสาร Lab ประกอบการสอนหลักสูตร Mini Master of Java Technology ของ KMITL และ Sofyware Oark
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
25
7. ท5าการ Build/Deploy แล�ว Run ไฟล, CurrencyServlet.java โปรแกรมจะแสดงอ�ตราแลกเปล��ยนเง�นตรา ด�งแสดงในร"ปท�� 3.9
ร�ปท 3.9 แสดงผลล�พธ*ทได�จากการเรยกใช� Web Service Operation: ConversionRate
การพ�ฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
49
ร�ปท 8.6 ผลล�พธ*ทได�จากการเรยกใช�เมธอด PUT
ร�ปท 8.7 การร�นโปรแกรมทดสอบ RESTful Web Service โดยใช�เมธอด DELETE
ร�ปท 8.8 ผลล�พธ*ทได�จากการเรยกใช�เมธอด DELETE
การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
50
ร�ปท 8.9 การร�นโปรแกรมทดสอบ RESTful Web Service โดยใช�เมธอด POST
ร"ปท�� 8.10 ผลล�พธ,ท��ได�จากการเร�ยกใช�เมธอด POST
การพ�ฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
69
ร�ปท 10.1 โปรแกรมเว/บเพ�อให�ผ��ใช�เล�อกโรงพยาบาล
ร�ปท 10.2 ผลล�พธ*ในการแสดงต#าแหน�งของโรงพยาบาลผ�าน Google Map
การพ�ฒนาโปรแกรมเพ��อเร�ยกใช� Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
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
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
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
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
74
ร�ปท 11.5 แสดงผลล�พธ*ทได�จากการก#าหนดค�าให�ก�บ WSDL Document
4. กด Next > แล�วกด Finish จะได�ไฟล, HelloSample.wsdl ด�งร"ปท�� 11.6
การพ�ฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
103
9. และได�ข�อม"ลซ/�งเข�าไปอย":ในฐานข�อม"ลด�งแสดงในร"ปท�� 13.8
ร�ปท 13.8 แสดงข�อม�ลทอย��ในตาราง Employee ในฐานข�อม�ล test
BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan
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
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
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
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
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
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
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
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
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
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
114
ร�ปท 14.12 แสดงต�วอย�างผลล�พธ*ใน TestQueue
BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
176
ร�ปท 17.8 แสดงผลล�พธ*ทได�ในตาราง purchasingorder
BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan