SlideShare a Scribd company logo
1




            Hand-on
            Exercises

       Java Web Services
               and
  Service Oriented Architecture
      Using GlassFish ESB
          and NetBeans



Assoc.Prof.Dr.Thanachart Numnonda
               and
 Asst Prof.Thanisa Kruawaisayawan
             August 2010




                      Thanachart Numnonda / Thanisa Kruawaisayawan
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

                                                                  thananum@gmail.com
                                                                   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 ทชอ findDBook จาก 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
                  @Stateless
                  public 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 ชอ findDBook


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
           Services
      2.   โปรแกรม 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 API
                                   Thanachart 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 API
                                   Thanachart 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 API
                                   Thanachart 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 API
                                   Thanachart 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 API
                                   Thanachart 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 editor.
                 username=thananum@yahoo.com
                 password=xxxxxxxx

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




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




การพฒนาโปรแกรมเรยกใช Twitter Web Services และ Google Calendar API
                                   Thanachart 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 API
                                   Thanachart 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 API
                                   Thanachart 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$]gdatajavalib ดงน

                •   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$]gdatajavasrc

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

     2.   ก5าหนด Javadoc เป2น [$gdata-director$]gdatajavadoc
     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 API
                                   Thanachart 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 API
                                   Thanachart 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 API
                                   Thanachart 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 API
                                   Thanachart 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 Key
                         name                     VARCHAR(60)
                         address                  VARCHAR(100)
                         city                     VARCHAR(30)
                         zipcode                  VARCHAR(5)
        หรอรนไฟล` bkk_hospital.sql
                         CREATE TABLE `test`.`bkk_hospital` (
                           `hospital_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
                           `name` VARCHAR(60) NOT NULL,
                           `address` VARCHAR(100) NOT NULL,
                           `city` VARCHAR(30) NOT NULL,
                           `zipcode` VARCHAR(5) NOT NULL,
                           PRIMARY KEY(`hospital_id`)
                         )
                         ENGINE = InnoDB;

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


การพฒนาโปรแกรมเพอเรยกใช 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 > Other
     2. ในไดอะล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 FilesNetBeans 6.7.1 (ส5าหรบ Netbeans 6.7.1) และ
     •   GlassFish Installation Folder: C:SunAppServer (ส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:SunAppServeraddonsjbi-components แลวเลอก encoderlib.jar และ
             wsdlextlib.jar
          3. คล=กขวาท Service Engines แลวเลอก Install and Start
          4.   ไปท C:SunAppServeraddonsjbi-components แลวเลอก bpelserviceengine.jar
          5.   คล=กขวาท Binding Components แลวเลอก Install and Start
          6.   ไปท C:SunAppServeraddonsjbi-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 => 38000
                Nipa 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 Key
                     firstName 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 > firstName
                lastName > lastName
                salary > 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/CalculateBookingPaymentServi
            ce?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
Ad

Recommended

Java Web Services and SOA Exercises [in Thai]
Java Web Services and SOA Exercises [in Thai]
IMC Institute
 
Java Web programming Using NetBeans
Java Web programming Using NetBeans
Software Park Thailand
 
สร้าง Soap web services ง่ายๆ
สร้าง Soap web services ง่ายๆ
Utain Wongpreaw
 
็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
IMC Institute
 
Java Web programming Using Eclipse
Java Web programming Using Eclipse
Software Park Thailand
 
Hand-on Exercise Java Web Programming
Hand-on Exercise Java Web Programming
IMC Institute
 
Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5
Thanachart Numnonda
 
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
Thanachart Numnonda
 
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
IMC Institute
 
EJB Programming Using Eclipse & JBoss
EJB Programming Using Eclipse & JBoss
Software Park Thailand
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
Thanachart Numnonda
 
Eclipse
Eclipse
gzxc
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine
IMC Institute
 
Google App Engine Using Eclipse
Google App Engine Using Eclipse
Software Park Thailand
 
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
IMC Institute
 
webprogramming eclipse-jsp
webprogramming eclipse-jsp
Weerasak Sriwongyang
 
Java Programming [1/12] : Introduction
Java Programming [1/12] : Introduction
IMC Institute
 
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
IMC Institute
 
Lab Computer Programming 1
Lab Computer Programming 1
Saranyu Srisrontong
 
1.Introduction to java
1.Introduction to java
UsableLabs
 
Workshop of mobile application development and design android
Workshop of mobile application development and design android
Worawith Sangkatip
 
Midterm
Midterm
Sirirat Mahawan
 
Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)
Thanachart Numnonda
 
Smart industry Vol.33/2561
Smart industry Vol.33/2561
Software Park Thailand
 
Softwarepark news Vol.7/2561
Softwarepark news Vol.7/2561
Software Park Thailand
 

More Related Content

Similar to Java Web Services and SOA Using GlassFish openESB and NetBeans (20)

SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
Thanachart Numnonda
 
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
IMC Institute
 
EJB Programming Using Eclipse & JBoss
EJB Programming Using Eclipse & JBoss
Software Park Thailand
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
Thanachart Numnonda
 
Eclipse
Eclipse
gzxc
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine
IMC Institute
 
Google App Engine Using Eclipse
Google App Engine Using Eclipse
Software Park Thailand
 
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
IMC Institute
 
webprogramming eclipse-jsp
webprogramming eclipse-jsp
Weerasak Sriwongyang
 
Java Programming [1/12] : Introduction
Java Programming [1/12] : Introduction
IMC Institute
 
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
IMC Institute
 
Lab Computer Programming 1
Lab Computer Programming 1
Saranyu Srisrontong
 
1.Introduction to java
1.Introduction to java
UsableLabs
 
Workshop of mobile application development and design android
Workshop of mobile application development and design android
Worawith Sangkatip
 
Midterm
Midterm
Sirirat Mahawan
 
Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)
Thanachart Numnonda
 
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
Thanachart Numnonda
 
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
IMC Institute
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
Thanachart Numnonda
 
Eclipse
Eclipse
gzxc
 
๋Java Web Programming on Cloud Computing using Google App Engine
๋Java Web Programming on Cloud Computing using Google App Engine
IMC Institute
 
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
IMC Institute
 
Java Programming [1/12] : Introduction
Java Programming [1/12] : Introduction
IMC Institute
 
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
IMC Institute
 
1.Introduction to java
1.Introduction to java
UsableLabs
 
Workshop of mobile application development and design android
Workshop of mobile application development and design android
Worawith Sangkatip
 
Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)
Thanachart Numnonda
 

More from Software Park Thailand (20)

Smart industry Vol.33/2561
Smart industry Vol.33/2561
Software Park Thailand
 
Softwarepark news Vol.7/2561
Softwarepark news Vol.7/2561
Software Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand
 
Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561
Software Park Thailand
 
Smart Industry Vol.23
Smart Industry Vol.23
Software Park Thailand
 
Solfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng Version
Software Park Thailand
 
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand
 
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Software Park Thailand
 
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Software Park Thailand
 
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Thailand
 
Software Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English Version
Software Park Thailand
 
Thai IT Delegation to Japan 2012
Thai IT Delegation to Japan 2012
Software Park Thailand
 
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Software Park Thailand
 
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Software Park Thailand
 
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Software Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand
 
Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561
Software Park Thailand
 
Solfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng Version
Software Park Thailand
 
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand
 
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Software Park Thailand
 
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Software Park Thailand
 
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Thailand
 
Software Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English Version
Software Park Thailand
 
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Software Park Thailand
 
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Software Park Thailand
 
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Software Park Thailand
 
Ad

Java Web Services and SOA Using GlassFish openESB and NetBeans

  • 1. 1 Hand-on Exercises Java Web Services and Service Oriented Architecture Using GlassFish ESB and NetBeans Assoc.Prof.Dr.Thanachart Numnonda and Asst Prof.Thanisa Kruawaisayawan August 2010 Thanachart Numnonda / Thanisa Kruawaisayawan
  • 2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 25 7. ท5าการ Build/Deploy แลว Run ไฟล, CurrencyServlet.java โปรแกรมจะแสดงอตราแลกเปลยนเงน ตรา ดงแสดงในร"ปท 3.9 รปท 3.9 แสดงผลลพธ*ทไดจากการเรยกใช Web Service Operation: ConversionRate การพฒนาโปรแกรม Web Services Client Thanachart Numnonda / Thanisa Kruawaisayawan
  • 26. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 ทชอ findDBook จาก 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 @Stateless public 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. 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 ชอ findDBook Java Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan
  • 39. 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. 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. 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. 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. 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. 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. 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. 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. 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 Services 2. โปรแกรม 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. 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. 49 รปท 8.6 ผลลพธ*ทไดจากการเรยกใชเมธอด PUT รปท 8.7 การรนโปรแกรมทดสอบ RESTful Web Service โดยใชเมธอด DELETE รปท 8.8 ผลลพธ*ทไดจากการเรยกใชเมธอด DELETE การพฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 50. 50 รปท 8.9 การรนโปรแกรมทดสอบ RESTful Web Service โดยใชเมธอด POST ร"ปท 8.10 ผลลพธ,ทไดจากการเรยกใชเมธอด POST การพฒนาโปรแกรม RESTful Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 51. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 52. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 53. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 54. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 55. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 56. 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 editor. [email protected] password=xxxxxxxx เราสามารถทดสอบรนโปรแกรมนแลวทดลองปBอนขอความดงร"ปท 9.6 จากนนเราสามารถทจะเรยกด"ผล ขอการส:งขอความไปยง Twitter ไดจากเว4บ Twitter ดงร"ปท 9.7 รปท 9.6 การทดสอบโปรแกรม TwitterJSF ทพฒนาขน การพฒนาโปรแกรมเรยกใช Twitter Web Services และ Google Calendar API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 57. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 58. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 59. 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$]gdatajavalib ดงน • 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$]gdatajavasrc การพฒนาโปรแกรมเรยกใช Twitter Web Services และ Google Calendar API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 60. 60 2. ก5าหนด Javadoc เป2น [$gdata-director$]gdatajavadoc 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 61. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 62. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 63. 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 API Thanachart Numnonda / Thanisa Kruawaisayawan
  • 64. 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 Key name VARCHAR(60) address VARCHAR(100) city VARCHAR(30) zipcode VARCHAR(5) หรอรนไฟล` bkk_hospital.sql CREATE TABLE `test`.`bkk_hospital` ( `hospital_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(60) NOT NULL, `address` VARCHAR(100) NOT NULL, `city` VARCHAR(30) NOT NULL, `zipcode` VARCHAR(5) NOT NULL, PRIMARY KEY(`hospital_id`) ) ENGINE = InnoDB; ขนตอนต)อมาใหใส)ขอม(ลรายละเอยดทอย()ของโรงพยาบาลใน table ทสรางข-น โดยการรน Store Procedure ดงน การพฒนาโปรแกรมเพอเรยกใช Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 65. 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. 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 > Other 2. ในไดอะล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. 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. 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. 69 รปท 10.1 โปรแกรมเว/บเพอใหผใชเลอกโรงพยาบาล รปท 10.2 ผลลพธ*ในการแสดงต#าแหนงของโรงพยาบาลผาน Google Map การพฒนาโปรแกรมเพอเรยกใช Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 70. 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 FilesNetBeans 6.7.1 (ส5าหรบ Netbeans 6.7.1) และ • GlassFish Installation Folder: C:SunAppServer (ส5าหรบ GlassFish V2.1) ดงแสดงในร"ปท 11.1 การพฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan
  • 71. 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. 72 2. ไปท C:SunAppServeraddonsjbi-components แลวเลอก encoderlib.jar และ wsdlextlib.jar 3. คล=กขวาท Service Engines แลวเลอก Install and Start 4. ไปท C:SunAppServeraddonsjbi-components แลวเลอก bpelserviceengine.jar 5. คล=กขวาท Binding Components แลวเลอก Install and Start 6. ไปท C:SunAppServeraddonsjbi-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. 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. 74 รปท 11.5 แสดงผลลพธ*ทไดจากการก#าหนดคาใหกบ WSDL Document 4. กด Next > แลวกด Finish จะไดไฟล, HelloSample.wsdl ดงร"ปท 11.6 การพฒนาโปรแกรม Hello BPEL Thanachart Numnonda / Thanisa Kruawaisayawan
  • 75. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 94 รปท 12.12 แสดงผลลพธ*หนา Page1.jsp 20. และไฟล, result.txt ในไดเร4กทอร c:SOA_output จะมขอม"ลดงน Somjai Jaidee => 38000 Nipa Jinjai => 738000 BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan
  • 95. 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 Key firstName 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. 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. 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. 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. 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 > firstName lastName > lastName salary > salary BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan
  • 100. 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. 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. 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. 103 9. และไดขอม"ลซ/งเขาไปอย":ในฐานขอม"ลดงแสดงในร"ปท 13.8 รปท 13.8 แสดงขอมลทอยในตาราง Employee ในฐานขอมล test BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan
  • 104. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 114 รปท 14.12 แสดงตวอยางผลลพธ*ใน TestQueue BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan
  • 115. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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/CalculateBookingPaymentServi ce?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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 176 รปท 17.8 แสดงผลลพธ*ทไดในตาราง purchasingorder BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan