Java Web Services and SOA Using GlassFish openESB and NetBeans
Upcoming SlideShare
Loading in...5
×
 

Java Web Services and SOA Using GlassFish openESB and NetBeans

on

  • 2,968 views

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

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

Statistics

Views

Total Views
2,968
Views on SlideShare
2,968
Embed Views
0

Actions

Likes
0
Downloads
351
Comments
2

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java Web Services and SOA Using GlassFish openESB and NetBeans Java Web Services and SOA Using GlassFish openESB and NetBeans Document Transcript

  • 1 Hand-on Exercises Java Web Services and Service Oriented Architecture Using GlassFish ESB and NetBeansAssoc.Prof.Dr.Thanachart Numnonda and Asst Prof.Thanisa Kruawaisayawan August 2010 Thanachart Numnonda / Thanisa Kruawaisayawan
  • 2 สารบญExercise 1 Java RMI...........................................................................................................................4Exercise 2 Web Services Using JAX-RPC ........................................................................................8Exercise 3 การพฒนาโปรแกรม Web Services Client...........................................................................17Exercise 4 การพฒนาโปรแกรม Web Services Provider.......................................................................26Exercise 5 Axis2 Web Services.........................................................................................................31Exercise 6 Java Web Services from Entity Class .............................................................................36Exercise 7 การพฒนาโปรแกรมโดยใช JAXP .......................................................................................40Exercise 8 การพฒนาโปรแกรม RESTful Web Services .....................................................................45Exercise 9 การพฒนาโปรแกรมเรยกใช Twitter Web Services และ Google Calendar API....................51Exercise 10 การพฒนาโปรแกรมเพอเรยกใช Google Map Web Services .............................................64Exercise 11 การพฒนาโปรแกรม Hello BPEL......................................................................................70Exercise 12 BPEL for Writing to File...............................................................................................82Exercise 13 BPEL for Writing to Database.......................................................................................96Exercise 14 BPEL for Sending Message to a JMS Queue ............................................................105Exercise 15 Simple BPEL Invoking Web Services ........................................................................116Exercise 16 Advance BPEL Invoking Web Services .....................................................................134Exercise 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 Application1.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 ออก แลวกด Finish1.2 การพฒนาโปรแกรม Server Interface ในขนตอนนจะเป2นการสราง Server Interface เพอประกาศเมธอดทตองการใหบรการ โดย ServerInterface นจะตอง 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.1Listing ท 1.1 โปรแกรม Hello.javaJava RMI Thanachart Numnonda / Thanisa Kruawaisayawan
  • 5package 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.2Listing 1.2 โปรแกรม HelloImpl.javapackage 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.3Listing ท 1.3 โปรแกรม HelloServer.javapackage 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.4Java RMI Thanachart Numnonda / Thanisa Kruawaisayawan
  • 7Listing ท 1.4 โปรแกรม HelloClient.javapackage 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า WebService ในทางปฏบตทตองการท5า Web Service เพอขยายโอกาสทางธ+รกจและคาดว:าน:าจะมผ"เขามาใช Serviceจ5านวนมากข/น ท5าให Web Server อาจไม:เหมาะสมกบการรองรบจ5านวนผ"ใชจ5านวนมาก ดงนนผ"พฒนา JavaWeb Services จ/งควรทจะมความร"ในการพฒนา Application Server โดยใช EJB แบบฝ1กหดจะแสดงขนตอนการใช NetBeans สราง Web Services ทชอ calculateTax โดยใช Servletและสราง Web Services ทชอ findBook ซ/งเรยกใช Session Bean ทสรางข/นในแบบฝ1กหด Entity BeanUsing 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 Service2.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 EEWeb 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 Services2.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 ApplicationWeb 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.4Web 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.02.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.5Web 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.6Web 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 Project2.4 การพฒนาโปรแกรม Web Application เพอเรยกใช Web Service ขนตอนนจะเป2นการพฒนา Web Application บน Sun Java Application Server 9 เพอเรยกใช WebService ทชอ findBook โดยมขนตอนการพฒนาดงน 1. เลอกเมน" File => New Project..ในไดอะล4อก New Project ใหเลอก Categories เป2น Web และ Projects เป2น WebApplication แลวกด NextWeb 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. กดป+@ม Save2.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าหรบ JDK6 ใหเลอกใช 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 Server3.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 ไดโดยการดาวน,โหลด SoupUINetBeans 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 ตวอยางผลลพธ*การรน SoapUI3.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 แลวกด Finish3.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) และ WebService 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 Server4.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 อกครง แลวเลอก Deploy4.2 การทดสอบ Web Service โปรแกรม Web Service จะถ"กตดตงบน GlassFish V2.1 และสามารถเรยกด"ไดการใช SystemAdmin 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 แลวทดลองพฒนา WebService โดยใชโปรแกรม NetBeans5.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.2Axis2 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 Axis25.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 Axis25.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.javapackage 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 สราง WebServices ทชอ findBook ซ/งเรยกใช Session Bean ทสรางข/นในแบบฝ1กหด Enterprise Java Bean โดยService นจะเป2นการคนหาหนงสอจาก table ทชอ book ในฐานขอม"ล MySQL6.1 การสราง Enterprise Application Project เราจะก5าหนดใหโปรแกรมนเป2นโปรแกม Enterprise Application ซ/งมทง EJB Module และ WebModule ขนตอนแรกจะเป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 Axis2Java Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan
  • 376.2 การพฒนา Entity Class และ Session Bean ขนตอนนจะเป2นการสราง Entity Class และ Session Bean เพอตดต:อกบ table ทชอ books ในMySQL โดยมขนตอนการพฒนาเช:นเดยวกบแบบฝ1กหดการพฒนา Enterprise Java Bean ซ/งเราจะได EntityClass ทชอ 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 ProjectJava Web Services from Entity Class Thanachart Numnonda / Thanisa Kruawaisayawan
  • 386.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 ชอ findDBookJava 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. กดป+@ม Save6.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 โดยใช JAXP7.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 ออก แลวกด Finish7.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.xmlListing ท 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 ด/งขอม"ลออกมาจาก SOAPResponse ซ/งมขนอตอนการพฒนาดงน 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.2Listing ท 7.2 โปรแกรม JAXPDemo.javapackage 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.3Listing ท 7.3 คลาส XMLHandlerclass 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) throwsSAXException { System.out.println("Start Element: "+localName); }} 7. จากนนใหท5าการเพมเตม source code ในเมธอด main ของคลาส JAXPDemo ดง Listing ท 7.4Listing ท 7.4 คลาส JAXPDemopublic 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 Stubs8.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 แลวกด Finish8.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 เพอใหสามารถตดต:อกบฐานขอม"ลโดยผ:าน EntityClass ทพฒนาข/นได โดยจะมขนตอนการพฒนาดงน 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. กดป+@ม Finish8.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 โดยจะใช WebServices ของ 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 ไปยง Twitter9.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 กบ Twitter9.2 การสราง JSF Web Application สาหรบ Twitter ขนตอนนจะเป2นการสราง Web Application โดยใช JSF Visual Web Framework เพอท5าการส:งขอความตอบค5าถาม What are you doing? จากโปรแกรมทพฒนาข/นไปยง Twitter โดยเรยกใช WebServices ซ/งมขนตอนดงน 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 ผลลพธ*ทแสดงในหนาเว/บ Twitter9.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.html9.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.java10.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 ทสรางข-น โดยการรน StoreProcedure ดงนการพฒนาโปรแกรมเพอเรยกใช Google Map Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 65 INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES(Siriraj Hospital, 2 Prannokroad Siriraj Bangkoknoi, Bangkok, 10700); INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES(Vibhavadi Hospital, 51/3Ngamwongwan Road Ladyao Jatujak, Bangkok, 10900); INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES(Rajavithi Hospital, PhayaThai 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 แลวกด Finish10.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 แลวกด Finish10.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นตามทตงไว แลวกด Finish10.5 การพฒนาโปรแกรม HospitalSelector.java โปรแกรม HospitalSelector.java เป2นโปรแกรมจาวา Servlet เพอแสดงรายชอโรงพยาบาลทถ"กจดเก4บอย":ในฐานขอม"ลโดยจะแสดงในร"ปของ radio เพอใหผ"ใชเลอก และเมอผ"ใชเลอกโรงพยาบาลแลวโปรแกรมนจะเรยกใชโปรแกรม Servlet ทชอ DisplayLocation.java เพอแสดงต5าแหน:งของโรงพยาบาลโดยใช Google MapWeb 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, HttpServletResponseresponse)การพฒนาโปรแกรมเพอเรยกใช 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) newInteger(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-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg10.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 Application11.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.111.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
  • 7311.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.wsdl11.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.bpel11.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
  • 7711.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 แสดงการรบคาเขามาจาก PartnerLink111.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 แลวกด OK11.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. กดป+@ม Save11.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 ของ HelloApplication11.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 แสดงผลลพธ*ทไดจากการรน TestCase1Listing ท 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:HelloSampleOperationResponsexmlns: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 Application12.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 แลวกด Finish12.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 แลวกด NextBPEL 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 จากนนกด FinishBPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan
  • 84 รปท 12.2 แสดงการใสคา Input และ Output Messages12.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 จากนนกด NextBPEL 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 จากนนกด FinishBPEL 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น FilePartnerLinkBPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan
  • 8712.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 แลวกด OK12.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 แลวกด OK12.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 แลวกด OK12.4.5 การเพมธ+รกรรม Assign 1. ในไฟล, fileBPEL.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต:าง Palette มาไวใน หนาต:าง design ระหว:าง ธ+รกรรม start กบธ+รกรรม invokeWriteToFileBPEL 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.7BPEL 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.8BPEL for Writing to File Thanachart Numnonda / Thanisa Kruawaisayawan
  • 90 รปท 12.8 แสดง Service Assembly ของ FileCompositeApp12.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 => 3800012.7 การพฒนาโปรแกรมผ)าน Web ApplicationBPEL 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.10BPEL 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.11BPEL 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.12BPEL 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 => 738000BPEL 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. ทดสอบโปรแกรมผ:าน TestCase13.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 การพฒนาโปรเจ-ค DBBPELBPEL 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 แลวกด Finish13.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.wsdl13.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 แลวกด FinishBPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan
  • 98 รปท 13.2 แสดงการเลอก Element ของ inputData13.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น DBPartnerLink13.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 แลวกด OK13.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 แลวกด OK13.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 แลวกด OK13.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 > salaryBPEL 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.5BPEL 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.6BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan
  • 102 รปท 13.6 แสดง Service Assembly ของ DBCompositeApp13.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 แสดงผลลพธ*ทไดจากการรน TestCase1BPEL for Writing to Database Thanachart Numnonda / Thanisa Kruawaisayawan
  • 103 9. และไดขอม"ลซ/งเขาไปอย":ในฐานขอม"ลดงแสดงในร"ปท 13.8 รปท 13.8 แสดงขอมลทอยในตาราง Employee ในฐานขอมล testBPEL 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 โดยการใช JMSBinding 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. ทดสอบโปรแกรมผ:าน TestCase14.1 ต%ดต#งโปรแกรม HermesJMS โปรแกรม HermesJMS เป2นโปรแกรม Open Source ทสามารถใชในการจดการ Meessage Queuesของ Messaging Server ได แบบฝ1กหดนจะเลอกใชโปรแกรมนในการตรวจสอบขอความทส:งมายง JMS Queueเราสามารถทจะ download โปรแกรมนไดทhttp://www.hermesjms.com/confluence/display/HJMS/Home โดยการเลอกไฟล, hetmesJMS version1.13 แลวตดตงไฟล,แบบ jar โดยการเรยกใชค5าสง เมอตดตงโปรแกรมเรยบรอยแลว เราสามารถท5าการ config โปรแกรมนไดตามขนตอนดงน 1. เปAดโปรแกรม HermesJMS แลวคล=กขวาท sessions และเลอกค5าสง New / New session... ดงแสดง ในร"ปท 14.1BPEL 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 จากนนใหกดป+@ม ApplyBPEL 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.5BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan
  • 107 รปท 14.5 แสดงการเพม Queue เขาไปใน JavaMQ14.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
  • 10814.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 แลวกด Finish14.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 แลวกด Finish14.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น adminBPEL 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 ส:วนค:าอนใหคงตามค:าเดมทใหมา แลวกด Finish14.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 มาไวในแทบเทาทางขวามอภายใตหนาต:าง designBPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan
  • 110 4. ดบเบลคล=กตรงขอความ PartnerLink1 และเปลยนชอเป2น TestQueuePartnerLink14.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 แลวกด OK14.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 แลวกด OK14.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น JMSOutOperationIn14.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.10BPEL 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 BuildBPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan
  • 113 8. คล=กท Service Assembly จะเห4นผลลพธ,ดงแสดงในร"ปท 14.11 รปท 14.11 แสดง CASA Editor ส#าหรบ JMSBPEL14.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.12BPEL for Sending Message to a JMS Queue Thanachart Numnonda / Thanisa Kruawaisayawan
  • 114 รปท 14.12 แสดงตวอยางผลลพธ*ใน TestQueueBPEL 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
  • 11615.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 แลวกด Finish15.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 แลวกด Finish15.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.2Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 118 รปท 15.2 แสดง PartnerLink ทงหมดของ webBPEL15.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 แลวกด OK15.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 และเลอก PartnerSimple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 119 Link: เป2น ClientPartnerLink 4. ในช:อง Output Variable: กดป+@ม Create เมอไดอะล4อก New Output Variable แสดงข/น ใหก5าหนด Name: เป2น outData แลวกด OK15.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 ในการเรยกโอเปอร*เรชน calculateTaxSimple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 12015.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.6Simple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 121 รปท 15.6 แสดง BPEL Process ของทงระบบ 6. กดป+@ม Save และ Clean and Build15.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ค WSCompositeAppSimple 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น TaxServiceSimple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 12315.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 แลวกด FinishSimple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 126 รปท 15.11 การก#าหนดคา WSDL Document15.9 การพฒนา Business Process ใหม)เพอเรยก External Web Service ขนตอนนเป2นการสรางไฟล, BPEL ส5าหรบนยาม Business Process ใหม:ทจะใชในการเรยก ExternalWeb Service โดยมขนตอนการพฒนาดงน15.9.1 การสราง BPEL Process 1. คล=กขวาทโหนด WSBPEL จากนนเลอกค5าสง New > BPEL Process.. 2. ในไดอะล4อก New BPEL Process ก5าหนด Project Name เป2น ExternalWSBPEL แลวกด Finish15.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น ExternalWSPartnerLink15.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 แลวกด OK15.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 แลวกด OK15.9.5 การเพมธ+รกรรม Invoke ส5าหรบ calcualteTax 1. ในไฟล, ExternalWSBPEL.bpel เลอกแทป Design แลวลากไอคอน Invoke ในหนาต:าง Palette มา ไวในหนาต:าง design ระหว:าง ธ+รกรรม start กบธ+รกรรม end 2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ทชอ Invoke1 ในหนาต:าง Design ใหดบเบลคล=กธ+รกรรม Invoke1Simple 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 แลวกด OK15.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.13Simple 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 BuildSimple BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 13015.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.16Simple 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น CurrencyService15.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 Process16.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 ProjectAdvance 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 แลวกด Finish16.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 แลวกด FinishAdvance 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 แลวกด OKAdvance 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 Service16.2 การพฒนา Calculating Booking Payment Web Services ขนตอนทผ:านมาเป2นการพฒนา Web Service จาก EJB Module ในขนตอนนจะเป2นการพฒนา WebService อกวธหน/ง โดยการพฒนาจาก 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
  • 13716.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 แลวกด Finish16.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 Service16.2.3 การตรวจด"ไฟล, XSD และ WSDL โปรแกรม NetBeans จะสราง XML ไฟล,ทเป2น XSD เพอก5าหนด Schema ของ Datatype ของ WebService ทสรางข/น และสรางไฟล, WSDL เพอนยาม Web Service ทสรางข/น ซ/งจากการทดสอบ WebService จะท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 แลวกด Finish16.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.xsd16.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 แสดงรายละเอยดของชนด RoomBookingInputAdvance 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าการ SaveAdvance 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
  • 14316.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 แลวกด NextAdvance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 144 รปท 16.8 แสดงชนดขอมลของ inputData และ outputData 6. ในหนาถดไปใหคงค:าเดมไว แลวกด Finish16.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.9Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 145 รปท 16.9 แสดงการเลอกต#าแหนงส#าหรบเก/บไฟล* DetermineRateServiceService.wsdl 4. ท5าขนตอนขางตนซ5ากบ Web Service ทชอ CalculateBookingPayment ในโปรเจ4ค CalculatePayment16.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.10Advance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 147 รปท 16.10 แสดง PartnerLink ทงหมดของ roomBooking16.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 แลวกด OKAdvance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 148 รปท 16.11 แสดงการก#าหนดคาใหกบธ7รกรรม Receive16.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 และ endAdvance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 14916.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รกรรม DetermineRate16.7.5 การเพมธ+รกรรม Invoke ส5าหรบ getPayment 1. ในไฟล, roomBooking.bpel เลอกแทป Design แลวลากไอคอน Invoke ในหนาต:าง Palette มาไวใน หนาต:าง design ระหว:าง ธ+รกรรม DetermineRate กบธ+รกรรม end 2. โปรแกรมจะก5าหนดธ+รกรรม Invoke ทชอ Invoke1 ในหนาต:าง Design ใหดบเบลคล=กธ+รกรรม Invoke1Advance 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รกรรม CalcuatePayment16.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.15Advance 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น AssignResultAdvance 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.19Advance 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 BuildAdvance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 15416.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.22Advance 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ค RoomBookingCompositeApp16.9 การทดสอบโปรแกรมผ)าน TestCase โปรแกรม NetBeans จะมเครองมอทช:วยในการทดสอบ Composite Application ทพฒนาข/น โดยการรนผ:าน TestCase ซ/งมขนตอนดงน 1. ในหนาต:าง Project เลอกโหนด RoomBookingCompositeApp > Test แลวคล=กขวาเลอก New Test Case 2. ในไดอะล4อก New Test Case ใหก5าหนด Test Case Name: เป2น TestCase1 แลวกด NextAdvance 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 IncreaseAdvance 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 operation16.11 การปรบปรง Business Process ขนตอนถดไปจะเป2นการปรบปร+งไฟล, roomBooking.bpel โดยมขนตอนดงน16.11.1 การเพม partner link 1. เปAดไฟล, roomBooking.bpel แลวเลอกแทป Design 2. ลากไอคอน RoomBookingDB.wsdl ในหนาต:าง Project มาไวในแทบเทาทางขวามอภายใตหนาต:าง design 3. ดบเบลคล=กตรงขอความ PartnerLink1 และเปลยนชอเป2น DBPartnerLinkAdvance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 15916.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 แลวกด OK16.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 กบ StoreBookingAdvance 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.26Advance 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 แสดงขอมลในตาราง RoomBooking16.12 พฒนาโปรแกรม Web Application สาหรบ User Interface โปรแกรม Business Process ทพฒนาข/นจะเป2น Web Services ทรนอย":ใน GlassFish ApplicationServer ซ/งเราสามารถทจะพฒนาโปรแกรม Web Application เพอเป2นส:วน User Interface (Presentation) ในการเรยกใช Business Process16.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? WSDL16.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 แลวกด FinishAdvance BPEL Invoking Web Services Thanachart Numnonda / Thanisa Kruawaisayawan
  • 163 รปท 16.28 แสดงการใสคา WSDL URL ในไดอะล/อก New Web Service Client16.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.1Listing 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.RoomBookingInputinputData = 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อนขอมล และตวอยางผลลพธ*ทไดในตาราง RoomBookingAdvance 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. ทดสอบโปรแกรมผ:าน TestCase17.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 แลวกด Finish17.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.xsd17.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.xsdBPEL : 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. ในหนาถดไปใหคงค:าเดมไว แลวกด Finish17.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 intBPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan
  • 16917.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,itemQuantity17.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น DBPartnerLinkBPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan
  • 17017.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 แลวกด OK17.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.3BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan
  • 171 รปท 17.3 แสดงการก#าหนดคาใหกบ Final Value ของ For Each 6. กด Save17.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 แลวกด OK17.5.5 การเพมธ+รกรรม Assign และก5าหนด Predicate 1. ในไฟล, BPELStructure.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต:าง Palette มาไวใน ภายในธ+รกรรม ForEach1 ก:อนหนาธ+รกรรม storePO ดงร"ปท 17.4BPEL : 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 แลวกด OKBPEL : 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 BuildBPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan
  • 17417.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ค BPELStructureCompositeApp17.7 การทดสอบโปรแกรมผ)าน TestCase โปรแกรม NetBeans จะมเครองมอทช:วยในการทดสอบ Composite Application ทพฒนาข/น โดยการรนผ:าน TestCase ซ/งมขนตอนดงน 1. ในหนาต:าง Project เลอกโหนด BPELStructureCompositeApp > Test แลวคล=กขวาเลอก New Test CaseBPEL : 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.8BPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan
  • 176 รปท 17.8 แสดงผลลพธ*ทไดในตาราง purchasingorderBPEL : Structured Activities Thanachart Numnonda / Thanisa Kruawaisayawan