SlideShare une entreprise Scribd logo
1  sur  134
Télécharger pour lire hors ligne
1




                                        Hand-on
                                        Exercises

               Java Web Services
                       and
          Service Oritened Architecture
              Using GlassFish ESB
                and NetBeans 6.5



        Dr.Thanachart Numnonda
                  and
    Asst Prof.Thanisa Kruawaisayawan




Web Services & SOA Using GlassFishESB         Thanachart Numnonda and Thanisa Kruawaisayawan
2




                                            Exercises

    Exercise 1: Calling External Web Services
    Exercise 2: Java Web Service
    Exercise 3: RESTful Web Services
    Exercise 4: Twitter Web Services and Google
    Calendar API
    Exercise 5: Google Map Web Services
    Exercise 6: Developing a Simple Synchronous BPEL
    program
    Exercise 7: BPEL for writing to file
    Exercise 8: BPEL for Writing to Database
    Exercise 9: BPEL for Sending Message to a JMS
        Queue
    Exercise 10: BPEL Invoking Web Services
    Exercise 11: BPEL : Structured Activities




    Web Services & SOA Using GlassFishESB         Thanachart Numnonda and Thanisa Kruawaisayawan
3




                  Exercise 1: Calling External Web Services

       แบบฝกหดในบทนเปนการพฒนาโปรแกรมเพอเรยกใช Web Services ทมอย()แลว ซ-งจะเลอกมา 3
บร2การดงน
          การทดลองท 1 ราคาน4ามนล)าส6ดของ ปตท.
          การทดลองท 2 อตราแลกเปลยนเง2นตราระหว)างประเทศ
          การทดลองท 3 ราคาห6น
        โดยจะใช NetBeans และ GlassFish V2 Server

การพ#ฒนา Web Service Client
      แบบฝกหดนจะสราง Web Application Project ข-นใหม) เพอใชในการเรยก Web Services โดยมขน
ตอนการพฒนาดงน
   1.   เลอกเมน( File > New Project
   2.   ในไดอะลMอก New Project ใหเลอก Categories เปน Java Web และ Web Application แลวกด
        Next
   3.   ก4าหนด Project Name เปน ExternalWSDemo แลวเลอก Project Location เปน folder ทเรา
        ตองการจะเกMบไฟลWไว
   4.   จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด
        Finish

การทดลองท 1

   1.   คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน
        Web Services และ Web Service Client แลวกด Next
   2.   ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน
        http://www.pttplc.com/pttinfo.asmx?wsdl ดงแสดงในร(ปท 1 แลวกด Finish




Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
4




                               ร5ปท 1 แสดงไดอะลMอก New Web Service Client

       3.   ในหนาต)าง Projects จะม Folder ทชอ Web Service References ข-นมา
       4.   คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน PTTServlet และ
            Package: เปน servlets แลวกด Finish
       5.   คล2[กขวาภายในเมธอด processRequest ในไฟลW PTTServlet.java แลวเลอก Web Service Client
            Resources > Call Web Service Operation ดงแสดงในร(ปท 2




                             ร5ปท 2 แสดงการเรยกใช operation ของ Web Service

       6.   เลอก CurrentOilPrice ดงแสดงในร(ปท 3 แลวกด OK




    Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
5




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

   7.   ภายในไฟลW PTTServlet.java ใหใส) language เปน TH แลว Run ไฟลW จะแสดงราคาน4ามนล)าส6ด ดง
        แสดงในร(ปท 4




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



Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
6




    การทดลองท 2

       1.   คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Web Service Client แลวกด Next
       2.   ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน
            http://www.webservicex.com/CurrencyConvertor.asmx?wsdl
       3.   คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน CurrencyServlet และ
            Package: เปน servlets แลวกด Finish
       4.   คล2[กขวาภายในเมธอด processRequest ในไฟลW CurrencyServlet.java แลวเลอก Web Service
            Client Resources > Call Web Service Operation เลอก ConversionRate แลวกด OK
       5.   แกไขไฟลW CurrencyServlet.java ดงน



       6.   Run ไฟลW CurrencyServlet.java จะแสดงอตราแลกเปลยนเง2นตรา ดงแสดงในร(ปท 5




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


    การทดลองท 3
       1.   คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Web Service Client แลวกด Next
       2.   ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน
            http://www.webservicex.com/stockquote.asmx?WSDL
       3.   คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน StockServlet และ
            Package: เปน servlets แลวกด Finish
       4.   คล2[กขวาภายในเมธอด processRequest ในไฟลW StockServlet.java แลวเลอก Web Service Client
            Resources > Call Web Service Operation เลอก GetQuote แลวกด OK



    Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
7



   5.   แกไขไฟลW StockServlet.java โดยใส) symbol เปน request.getParameter("symbol");




   6.   Run ไฟลW
   7.   ทดสอบโปรแกรมโดยใส) ?symbol=java ต)อทาย URL ดงน
        http://localhost:8080/ExternalWSDemo/StockServlet?symbol=java ไดผลลพธWดงแสดงในร(ปท 6




 ร5ปท 6 แสดงผลลพธWทไดจากการเรยกใช Web Service Operation: GetQuote เมอปsอน symbol เปน java

   8.   ทดสอบโปรแกรมโดยใส) ?symbol=goog ต)อทาย URL ดงน
        http://localhost:8080/ExternalWSDemo/StockServlet?symbol=goog ไดผลลพธWดงแสดงในร(ปท 7




 ร5ปท 7 แสดงผลลพธWทไดจากการเรยกใช Web Service Operation: GetQuote เมอปsอน symbol เปน goog


การทดสอบ Web Services โดยใชM SoapUI
       โปรแกรม SoupUI เปนโปรแกรม Open Source ทสามารถใชเปนเครองมอในการทดสอบเวMบเซอรWว2ส
ทน2ยมใชกนอย)างกวางขวาง เราสามารถทจะไปดาวนWโหลดโปรแกรมนไดท www.soupui.org และท4าการ



Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
8



    ทดสอบเวMบเซอรWว2สในการทดลองทงสามขางตน นอกจากนเรายงสามารถต2ดตงโปรแกรม SoapUI ภายใน
    NetBeans ไดโดยการดาวนWโหลด SoupUI NetBeans Plugin (ไฟลW com-eviware-soapui-netbeans-module-
    2.5.1.nbm) และท4าการต2ดตงตามขนตอนดงน

       1.   ในโปรแกรม NetBeans เลอกเมน( Tools > Plugins
       2.   ในไดอะลMอก Plugins เลอกแทป Downloaded แลวกดป6zม Add Plugins..แลวเลอกไฟลW com-eviware-
            soapui-netbeans-module-2.5.1.nbm ซ-งท4าการดาวนWโหลดมาก)อนหนาน จะไดไดอะลMอกดงร(ป




       3.   กดป6zม Install แลวกดป6zม Next จนท4าการต2ดตงเสรMจแลวเลอกให Restart โปรแกรม NetBeans ข-นมา
            ใหม)

          เราสามารถทดสอบการใชงาน SoupUI ทต2ดตงข-นมาใน NetBeans เพอทดสอบเวMบเซอรWว2สด(อตรา
    แลกเปลยนตามขนตอนดงน

       1.   เลอกเมน( File > New Project
       2.   ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Web Services Testing Project
            แลวกด Next
       3.   ก4าหนด Project Name เปน CurrencyExcangeWSTestProject แลวเลอก Project Location เปน
            folder ทเราตองการจะเกMบไฟลWไว


    Web Services & SOA Using GlassFishESB                 Thanachart Numnonda and Thanisa Kruawaisayawan
9



   4.   ก4าหนดค)า Initial WSDL (URL/file) เปน
        http://www.webservicex.com/CurrencyConvertor.asmx?wsdl แลวกด Finish
   5.   โปรแกรมจะสรางโปรเจMคนข-นมา และม WSDL ของเวMบเซอรWว2สแสดงข-นมา หทดลองเลอกโหนด
        CurrencyConvertorSoap จะเหMนรายละเอยดของ WSDL ดงตวอย)างในร(ป




   6.   ขยายโหนด CurrencyConvertorSoap แลวเลอกโอเปอรWเรชน ConversionRate แลวคล2[กขวาเลอก
        ค4าสง New Request
   7.   ในไดอะลMอก New Request ก4าหนดค)าเปน Request1
   8.   หนาต)าง Editor จะแสดงค)าของ SOAP Request ทจะส)งไปใหปรบเปลยนค)าเปน
   <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>

   9.   กดป6zม submit request (เครองหมายสเขยว) โปรแกรมจะได SOAP Response กลบมาดงตวอย)าง
   <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>34.105</ConversionRateResult>
       </ConversionRateResponse>
     </soap:Body>
   </soap:Envelope>




Web Services & SOA Using GlassFishESB                  Thanachart Numnonda and Thanisa Kruawaisayawan
1




                          Exercise 2: Java Web Services

       แบบฝกหดในบทนเปนการพฒนาโปรแกรม Web Services ส4าหรบ Java EE โดยใชช6ดค4าสง
JAX-WS ซ-งจะเปนการพฒนาบน Server ทรนบน Java EE โดยช6ดค4าสง JAX-WS จะช)วยท4าใหการสรางและ
เรยกใช Web Services ดวยภาษา Java เปนไปไดง)ายข-น

       การพฒนา Web Services จะแบ)งเปนสองส)วนคอ Web Service Provider (Server) และ Web
Service Requester (Client) แบบฝกหดนจะเร2มจากการพฒนา Web Service ซ-งสามารถท4าได 2 ว2ธคอ
       1. Web Services ทรนบน Web Server โดยใช Java Servlet
       2. Web Services ทรนบน Application Server โดยใช Session Bean


       แบบฝกหดนจะแสดงขนตอนการใช NetBeans สราง Web Service ทชอ calculateTax โดยใช Servlet
ซ-งจะรนอย()บน GlassFish V2 Server เพอแสดง Web Services การส)ง SOAP message และ WSDL ของ
Services

การพ#ฒนา calculateTax Web Service
     แบบฝกหดนจะสราง Web Application Project ข-นใหม) เพอใชในการเกMบ Web Service โดยมขนตอน
การพฒนาดงน
   1.   เลอกเมน( File > New Project
   2.   ในไดอะลMอก New Project ใหเลอก Categories เปน Java Web และ Projects เปน Web
        Application แลวกด Next
   3.   ก4าหนด Project Name เปน TaxWSDemo แลวเลอก Project Location เปน folder ทเราตองการจะ
        เกMบไฟลWไว
   4.   จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish
   5.   คล2[กขวาทโหนด TaxWSDemo จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web
        Services และ Web Service แลวกด Next
   6.   ในไดอะลMอก New Web Service ก4าหนด Web Service Name: เปน TaxServices และ Package:
        เปน ws แลวกด Finish
   7.   โปรแกรมจะประกาศ Web Services ทชอ TaxServices ในโหนด Web Services ของหนาต)าง
        Project และหนาต)าง Editor จะแสดงไฟลWทชอ TaxServices.java



Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
2



       8.  ในหนาต)าง Projects ขยายโหนด TaxWSDemo > Web Services แลวคล2[กขวาทโหนด TaxServices
           เลอกค4าสง Add Operation…
       9. ในไดอะลMอก Add Operation ก4าหนด Method เปน calculateTax ชน2ดของ Return Type เปน
           double และ เพ2ม Input parameter หน-งตวคอ income ชน2ด double แลวกด OK
       10. คล2[กทแทป Source ของ TaxServices.java และปรบปร6งเมธอด 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;
                    }
                }

            }


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

    การทดสอบ Web Service

             โปรแกรม Web Service จะถ(กต2ดตงบน GlassFish V2 และสามารถเรยกด(ไดการใช System
    Admin Console โดยการเป~ด Web Browser และเรยก url ท http://localhost:4848 โดยก4าหนด user เปน
    admin และ password เปน adminadmin

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




    Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan
3




               ร5ปท 1 แสดงรายละเอยดใน GlassFish V2 (Sun Java Application Server)

   2.   เราสามารถทจะทดสอบ Web Service นผ)านทาง Admin Console ไดโดยกดป6zม Test หรอทดสอบ
        จาก Netbeans โดยคล2[กขวาท TaxServices ใน Web Services ดงแสดงในร(ปท 2




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




Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan
4



       3.   โปรแกรมจะแสดงหนาจอเพอใหเราปsอนขอม(ลอ2นพ6ต ซ-งคอจ4านวนเง2นทตองการค4านวณภาษ ในทนจะ
            ใส)ตวเลขเปน 730000 ดงแสดงในร(ปท 3




                           ร5ปท 3 แสดงหนาต)างส4าหรบใหทดสอบเรยก Web Service

       4.   แลวกดป6zม calculateTax โปรแกรมจะเรยกใช Web Services และจะแสดงผลลพธWทได พรอมทงแสดง
            ค)า SOAP Request ดงแสดงในร(ปท 4




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

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




    Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
5




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




Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
6




                       Exercise 3: RESTful Web Services

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

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

    ขนตอนในการพฒนาโปรแกรม
       1. การต-ดตงโมด&ล RESTful Web Services
       2. สราง Web Application Project
       3. พฒนา Entity Class
       4. พฒนา RESTful Web Service จาก Entity Class
       5. ทดสอบ RESTful Web Service
       6. พฒนา RESTful Web Service Client Stubs



    การตดตงโมดล RESTful Web Services

          ขนตอนนจาเปนเฉพาะโปรแกรม NetBeans เวอร0ชน 6.0 ซ2งไม+ไดต-ดตงโมด&ลนมา แต+สาหรบผ&ใช
    โปรแกรม NetBeans 6.1 ข2นไปสามารถขามขนตอนนไปได สาหรบขนตอนการต-ดตงโมด&ลนมดงน

       1.   เล"อกเมน& Tools => Plugin
       2.   ในไดอะล5อก Plugins เล"อกแทป Available Plugins แลวเล"อกช+อง RESTful Web Services
       3.   กดป6ม Install แลวทาการต-ดตงโดยการกดป6ม OK และยอมรบเง"อนไขของล-ขส-ทธ-8โปรแกรม

    การสราง Web Application Project

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

       1.   เล"อกเมน& File => New Project..
       2.   ในไดอะล5อก New Project ใหเล"อก Categories เปน Java Web และเล"อก Project เปน Web
            Application แลวกด Next




    Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
7




   3.   กาหนด Project Name เปน RestfulWS แลวเล"อก Project Location เปน Director ทเราตองการจะ
        เก5บไฟล0ไว กด Next
   4.   จากนนเล"อก Server เปน GlassFishV2 แลวกด Finish

การพฒนา Entity Class

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

        ทาการแกไขเพ"อเพ-ม property ของ ไฟล0 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"
        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="MySQL_password" />
           </properties>
         </persistence-unit>
        </persistence>



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

       ขนตอนนจะเปนการพฒนา Restful Web Services เพ"อใหสามารถต-ดต+อกบฐานขอม&ลโดยผ+าน Entity
Class ทพฒนาข2นได โดยจะมขนตอนการพฒนาดงน

   1.   เลอกหนาตาง Projects แลวคลกขวาทโหนด RestfulWS จากนนเลอกคาสง New > Other...
   2.   ในไดอะล!อก New File ใหเลอก Categories ทชอ Web Services เลอก File Types: เป$น RESTful
        Web Services from Entity Class แลวกด Next
   3.   ในไดอะล!อก New RESTful Web Services from Entity Class ใหเลอก Books ดงร&ป แลวกด Next




Web Services & SOA Using GlassFishESB                  Thanachart Numnonda and Thanisa Kruawaisayawan
8




       4.   โปรแกรม NetBeans จะสราง class ตางๆ ดงร&ป




       5.   กดป)*ม Finish



    Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
9




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

        ขนตอนนจะเปนการทดสอบ RESTful Web Services ทพฒนาข2นโดยจะมขนตอนดงน

   1.   เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด   RestfulWS จากนนเล"อกคาสง Test Restful Web
        Services
   2.   โปรแกรม Browser จะแสดง uri ของ RESTful Web Services ใหเล"อกโหนด books และคล-:ก isbn
        จะไดผลลพธ0ดงร&ป




   3.   ทดลองป;อนขอม&ล isbn เปน 123 แลวกดป6ม Test จะไดผลลพธ0ตวอย+างดงร&ป




   4.   ทดลองเปลยน method เปน DELETE และ PUT เพ"อทาการลบและเพ-มขอม&ลเขาไปในตาราง books




Web Services & SOA Using GlassFishESB                   Thanachart Numnonda and Thanisa Kruawaisayawan
1




                         Exercise 4:Twitter Web Services
                            and Google Calendar API
       แบบฝกหดในบทนเปนตวอย)างการใช Web Services ทมอย()ใน Social Networks โดยจะใช Web
Services ของ Twitter เพอเขยนโปรแกรม update status ของ Twitter ส)วนตว จาก Web Application ท
พฒนาข-น จากนนจะเขยนโปรแกรมต2ดต)อกบ Google Calendar โดยใช Java API ของ Google เพอเรยกด(
ก4าหนดนดหมายองผ(ใชในวนป€จจ6บน จากนนจะสามารถเลอกนดหมายทแสดงข-นเพอส)งผ)านไปยง Twitter โดย
การเรยกใช Web Services

การสรMาง User Account สSาหร#บ Twitter และ Google Calendar
       แบบฝกหดนจะเรยกใชเวMบไซตWSocial Network สองแห)งคอ Twitter และ Google Calendar

   • เวMบ Twitter เปนบร2การส4าหรบใหเราสามารถทจะเชอมต)อกบ เพอน สมาช2กในครอบครว และเพอน
     ร)วมงานไดอย()ตลอดเวลา โดยการตอบค4าถามสนๆอย)างบ)อยครงว)า What are you doing? เราสามารถ
     ทจะลงทะเบยนเวMบนไดท twitter.com และเมอท4าการลMอกอ2นเขาไปแลวจะไดตวอย)างเวMบดงร(ป




   • เวMบ Google Calendar เปนเวMบทใหผ(ใชจดการก4าหนดการนดหมายต)างๆไดโดยสามารถสราง แสดง
     แกไข และลบไดผ)านโปรแกรมเวMบบราวเซอรW โดยขอม(ลการนดหมายจะถ(กเกMบไวท Google ท4าใหผ(ใช
     สามารถเรยกผ)านเวMบจากเครองใดๆกMได เราสามารถทจะลงทะเบยนเวMบนไดท



Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
2



           www.google.com/calendar และเมอท4าการลMอกอ2นเขาไปแลวจะไดตวอย)างเวMบดงร(ป




       •   กรณทผ(ใชม account อย()ใน Facebook เราสามารถทจะให status update ของ Twitter ถ(กส)งผ)าน
           มายงเวMบไซตW Facebook ของเราไดโดยอตโนมต2โดยการเลอก Facebook Application ชอ
           http://apps.facebook.com/twitter/ ดงตวอย)างในร(ป




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

           ขนตอนนจะเปนกาสราง Web Application โดยใช JSF Visual Web Framework เพ"อทาการส+ง



    Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
3




ขอความตอบคาถาม What are you doing? จากโปรแกรมทพฒนาข2นไปยง Twitter โดยเรยกใช Web
Services ซ2งมขนตอนดงน

   1.   เล"อกเมน& File > New Project..
   2.   ในไดอะล5อก New Project ใหเล"อก Categories เปน Java Web และเล"อก Projects เปน Web
        Application แลวกด Next
   3.   กาหนด Project Name เปน TwitterJSF แลวเล"อก Project Location เปน Director ทเราตองการจะ
        เก5บไฟล0ไว จากนนเล"อก Server เปน GlassFish V2 จากนนกด Next
   4.   ในช+อง Frameworks ใหเล"อก Visual Web JavaServer Faces จากนนกด Finish

       โปรแกรมทจะพฒนาข2นยตองการจะใหมหนาจอส+วนต-ดต+อผ&ใชดงร&ป โดยผ&ใชสามารถป;อนขอความใน
TextField และเม"อกดป6ม Twitter Notification โปรแกรมจะส+งขอความไปยง Twitter โดยมขนตอนการ
พฒนาโปรแกรมดงน




   1.   ในโปรเจ5ค TwitterJSF ใหเล"อกไฟล0 Page1.jsp หนาต+าง Editor จะแสดงไฟล0นในโหมด Design
   2.   ในหนาต+าง Properties ใหกาหนดค+าของ Title เปน Twitter Notification
   3.   ในหนาตาง Palette ลากไอคอน Label ทอย&ภายในโหนด Basic มาไวในหนาตางการออกแบบของ
        Page1.jsp แลวแกไขขอความเป$น What are you doing? แลวกด Enter ในหนาตาง Properties
        สาหรบ Label1 ใหเปลยน Style เพอเลอก Font เป$น Time News Roman ขนาด 18



Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
4




        4.   ลากไอคอน TextField ทอย&ภายในโหนด Basic มาไวในหนาตางการออกแบบของ Page1.jsp ใน
             ตาแหนงดงร&ปทแสดงขางตน
        5.   ในหนาตาง Properties สาหรบ TextField1 ใหเปลยนคา columns เป$น 60 และคา id จาก textField1
             เป$น answerTf
        6.   ใหทาการคลกขวาท answerTf แลวเลอก Add Binding Attribute
        7.   ลากไอคอน Button ทอย&ภายในโหนด Basic มาไวในหนาตางการออกแบบของ Page1.jsp ในตาแหนง
             ดงร&ปทแสดงขางตน แลวแกไขขอความเป$น Twitter Notification
        8.   ในหนาตาง Properties สาหรบ Button ใหเปลยนคา id จาก button1 เป$น sendButton

    ขนตอนถดมาจะเปนการเขยน Source code เพ"อกาหนดการทางานของการกดป6ม Twitter Notification โดยม
    ขนตอนการทางานดงน

        9.  ในหนาต+าง editor ใหกลบมาเล"อกแทป Design แลวกดดบเบ-ลคล-:กทป6ม Twitter Notification
        10. เล"อกแทป Services แลวขยายโหนด Web Services > Twitter > What are you doing service >
            statuses > [update.{format}]
        11. ลากเซอร0ว-ส updateStatus มาไวในหนาต+าง editor ซ2งแสดง source code ในคาสง action ของป6ม และ
             ใหแกไข 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.twitterresponse.NilClasses.class);
            }
         //TODO - Uncomment the print Statement below to print result.
         //System.out.println("The SaasService returned: "+result.getDataAsString());
         } catch (Exception ex) {
            ex.printStackTrace();
         }
         return null;
       }




    Web Services & SOA Using GlassFishESB                       Thanachart Numnonda and Thanisa Kruawaisayawan
5




      เราจะตองท4าการระบ6 username และ password ของ Twitter โดยการก4าหนดค)า properties ทอย()ใน
ไฟลW 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

       เราสามารถทดสอบรนโปรแกรมนแลวทดลองปsอนขอความดงร(ป จากนนเราสามารถทจะเรยกด(ผลขอ
การส)งขอความไปยง Twitter ไดจากเวMบ Twitter หรอกรณทเราเชอมโยง Twitter ไปยง Facebook เราจะ
สามารถเหMนการอปเดตเวMบ




Web Services & SOA Using GlassFishESB                 Thanachart Numnonda and Thanisa Kruawaisayawan
6




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

           ขนตอนนจะเปนกาสราง Web Application โดยใชเพ"อทาการแสดงนดหมายจาก Google Calendar
    แลวเล"อกนดหมายเพ"อส+งไปยง Twitter โปรแกรมจะถ&กกาหนดใหอย&+ภายใน Web Project ทช"อ TwitterTester
    ทมไฟล0ต+างๆค"อ
    1. CalendarTwitter.html

           เปนการแสดง Web Page เพ"อใหผ&ใชป;อนขอม&ล account ของทง Google Calendar และ Twitter ดง
    ร&ป โดยม source code ดงน
    <html>
      <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      </head>
      <body>
        <form action="CalendarServlet" method="POST">




    Web Services & SOA Using GlassFishESB                   Thanachart Numnonda and Thanisa Kruawaisayawan
7



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

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




2. CalendarServlet.java

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




     โปรแกรม Servlet นจะเรยกใช Google API ซ2งผ&ใชจะตองทาการดาวน0โหลดไฟล0
java/lib/gdata-calendar-1.0.jar และ java/lib/gdataclient-1.0.jar มาจาก
http://code.google.com/p/gdata-java-client/downloads/list และตอง




Web Services & SOA Using GlassFishESB                    Thanachart Numnonda and Thanisa Kruawaisayawan
8




    ดาวน0โหลดไฟล0 google-collect-1.0-rc1.zip มาจาก http://code.google.com/p/
    google-collections/downloads/list

            จากนนจะตองทาการต-ดตง Library นใน NetBeans โดยมขนตอนดงน

       1.   เล"อกเมน& Tool > Library..
       2.   ในไดอะล5อก Library Manager ใหเล"อก New Library.. แลวกาหนด Library Name เปน G ฏ ata
       3.   กาหนด Classpath ของ GData เปน ไฟล0ต+างๆดงน
                •   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




       4.   กาหนด Sources เปน [$gdata-director$]gdatajavasrc
       5.   กาหนด Javadoc เปน [$gdata-director$]gdatajavadoc
       6.   จากนนสราง Libray ทช"อ GoogleCollection โดยใหกาหนด Classpath เปน
            •   google-collect-1.0-rc1.jar
            •   google-collect-testfw-1.0-rc1.jar

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



    Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan
9




       โปรแกรม CalendarServlet จะมเมธอดในการ Authentication ของ Twitter เพ"อกาหนด 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) {
         Logger.getLogger(TwitterWhatAreYouDoingServiceAuthenticator.class.getName()).log(Level.SEVERE, null, ex);
      }
  }


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




Web Services & SOA Using GlassFishESB                             Thanachart Numnonda and Thanisa Kruawaisayawan
10



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


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

     3. TwitterUpdate.java

                 โปรแกรม Calendar Servlet จะเรยกใช Twitter Update ซ2งมการเรยกใชเว5บเซอร0ว-สทช"อ



     Web Services & SOA Using GlassFishESB                                   Thanachart Numnonda and Thanisa Kruawaisayawan
11




updateStatus โดยการเขยน source code สามารถทาไดโดยการลากเซอร0ว-สดงกล+าวมาไวในหนาต+าง 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.whatareyoudoingservice.twitterresponse.NilClasses resultObj =
result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.NilClasses.class);
             }
          //TODO - Uncomment the print Statement below to print result.
          //out.println("The SaasService returned: "+result.getDataAsString());
          } catch (Exception ex) {
             ex.printStackTrace();
          }

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

      } finally {
          out.close();
      }
  }


      เราสามารถทจะทดลองรนโปรแกรมน แลวตรวจสอบผลลพธ0จากการอฟเดตใน Twitter ดงร&ป




Web Services & SOA Using GlassFishESB                              Thanachart Numnonda and Thanisa Kruawaisayawan
12




     Web Services & SOA Using GlassFishESB   Thanachart Numnonda and Thanisa Kruawaisayawan
1




                    Exercise 5: Google Map Web Services

       แบบฝกหดในบทนเปนตวอย)างการใช Google Map Web Services เพอเขยน Web Application เพอ
แสดงต4าแหน)งของโรงพยาบาลทเกMบรายละเอยดทอย()ในฐานขอม(ล

การสรMางฐานขMอม5ลโรงพยาบาล
       ขนตอนแรกจะเปนการสราง table และเตรยมขอม(ลเพอใชในแบบฝกหด โดยใชโปรแกรม NetBeans
หรอ MySQL Query Browser เพอสราง Table ทชอ bkk_hospital ในฐานขอม(ล MySQL ทชอ test โดย
ก4าหนดใหม column ต)างๆ ดงน

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

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


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

INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital', '2 Prannok road
Siriraj Bangkoknoi', 'Bangkok', '10700')
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital', '51/3
Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900')
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital', 'Phaya Thai


Web Services & SOA Using GlassFishESB                  Thanachart Numnonda and Thanisa Kruawaisayawan
2



    Road, Phaya Thai', 'Bangkok', '10400')

    การสราง Enterprise Application Project

            แบบฝกหดนจะสราง Project ทเปน Enterprise Application โดยม Entity Class ทช"อ BkkHospital
    เพ"อทา ORM (Obeject Relational Mapping) กบ table ทช"อ bkk_hospital และมโปนแกรม Java Servlet
    ในการแสดงรายช"อโรงพยาบาลทอย&+ในฐานขอม&ลใหผ&ใชเล"อกแลวเรยกใชโปรแกรม Java Servlet อกโปรแกรม
    ในการแสดงตาแหน+งของโรงพยาบาลจาก Google Map โดยมขนตอนการสรางโปรเจ5คดงน

       1.   เล"อกเมน& File > New Project..
       2.   ในไดอะล5อก New Project ใหเล"อก Categories เปน Java EE และเล"อก Projects เปน Enterprise
            Application แลวกด Next
       3.   กาหนด Project Name: เปน BkkHospitalGoogleMap แลวเล"อก Project Location: เปน Director
            ทเราตองการจะเก5บไฟล0ไว จากนนเล"อก Server เปน GlassFish V2 แลวกด Finish

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

         ขนตอนนจะเปนการสราง Entity Class จาก table ทช"อ bkk_hospital ซ1งมการสรางมากอนแลว โดยม
    ขนตอนการพฒนาโปรแกรมนมดงน

       1.   เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด   BkkHospitalGoogleMap-ejb จากนนเล"อกคาสง New >
            Other..
       2.   ในไดอะล5อก New File ใหเล"อก Categories ทช"อ Persistence เล"อก File Types: เปน Entity Classes
            from Database แลวกด Next
       3.   ในไดอะล5อก New Entity Classes from Database ใหเล"อก Data Sources: เปน
            jdbc:mysql//localhost:3306/test และ Selected Tables: เปน bkk_hospital ดแลวกด Next
       4.   ในไดอะล5อกถดไปใหระบ Package: เปน entity แลวกดป6ม Create Persistence Unit...
       5.   ในไดอะล5อก Create Persistence Unit... กาหนด Persistence Unit Name: เปน
            HospitalGoogleMapPU และค+า Presistence Libray เปน TopLink แลวกด Create
       6.   กด Finish




    Web Services & SOA Using GlassFishESB                  Thanachart Numnonda and Thanisa Kruawaisayawan
3




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

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

    1.   เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด   BkkHospitalGoogleMap-ejb จากนนเล"อกคาสง New >
         Other...
    2.   ในไดอะล5อก New File ใหเล"อก Categories ทช"อ Persistence เล"อก File Types: เปน Session Beans
         for Entity Classes แลวกด Next
    3.   ในไดอะล5อก New Session Beans for Entity Classes ใหเล"อก Selected Entity Classes: เปน
         entity.BkkHospital แลวกด Next
    4.   ในไดอะล5อกถดไปใหระบ Package: เปน entity ส+วนค+าอ"นๆ เปนตามทตงไว แลวกด Finish


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

       โปรแกรม HospitalSelector.java เปนโปแกรมจาวา Servlet เพ"อแสดงรายช"อโรงพยาบาลทเก5บในฐาน
ขอม&ลโดยจะแสดงใน Drop-down List และเม"อผ&ใชเล"อกโรงพยาบาลโปรแกรมจะส+งต+อไปยงโปรแกรม Servlet
ทช"อ DisplayLocation.java เราสามารถทจะพฒนาโปรแกรม HospitalSelector.java ตามขนตอนในการ
พฒนา Java Servlet ทอธ-บายไวในแบบฝกหดทผ+านมา โดยม source code ดงน
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 {
  @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();




Web Services & SOA Using GlassFishESB                   Thanachart Numnonda and Thanisa Kruawaisayawan
4




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

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

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

               1.   เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด HospitalGoogleMap จากนนเล"อกคาสง New > Other
               2.   ในไดอะล5อก New File ใหเล"อก Categories ทช"อ Web เล"อก File Types: เปน Servlet แลวกด Next
               3.   กาหนด Class Name: เปน DisplayLocation และ Package เปน controller แลวกด Finish
               4.   เล"อกหนาต+าง Services แลวขยายโหนด Web Services > Google > Map Service
               5.   ในหนาต+าง Editor คล-:กขวา sourec code แลวเล"อกคาสง Insert Code.. > Call Enterprise Bean ...
                    แลวเล"อก BkkHospitalFacade
               6.   ลากเซอร0ว-ส getGoogleMap มาใส+ไวในหนาต+าง Editor ทแสดง source code ของไฟล0
                    DisplayLocation.java แลวแกไข 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>Servlet DisplayLocation</title>");
         out.println("</head>");
         out.println("<body>");

               try {




    Web Services & SOA Using GlassFishESB                                Thanachart Numnonda and Thanisa Kruawaisayawan
5



           Object id = (Object) new Integer(request.getParameter("hospital_id"));

           BkkHospital hospital = bkkHospitalFacade.find(id);
           String address = hospital.getName() + ", " + hospital.getCity();
           java.lang.Integer zoom = 15;
           String iframe = "false";

           out.println("<h1>Google Map for " + hospital.getName() + "</h1>");

         RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
         out.println(result.getDataAsString());
      } catch (Exception ex) {
         ex.printStackTrace();

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

      out.close();
  }


      7.   โปรแกรมนจะเรยกใชเว5บเซอร0ว-สของ Google Map ซ2งเราจะตองทาการลงทะเบยนท url ทช"อ
           http://code.google.com/apis/maps/signup.html โดยกาหนดค+า My web site URL เปน
           http://localhost:8080 แลวกดป6ม Generate API Key
      8.   ทาการก5อบป@Aค+า API Key ทไดไปใส+ในไพล0ทช"อ googlemapservices.properties ทอย&+ภายในโหนด
           HospitalGoogleMap > Source Packages > org.netbeans.saas.google ดงตวอย+างเช+น
           api_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg




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

      1.   ทาการ Build และ Deploy โปรแกรม BkkHospitalGoogleMap
      2.   Run โปรแกรม BkkHospitalGoogleMap
      3.   เล"อก URL ของ Web Browser เปนจะไดผลลพธ0ในการรนโปรแกรมดงตวอย+าง




Web Services & SOA Using GlassFishESB                            Thanachart Numnonda and Thanisa Kruawaisayawan
6




    Web Services & SOA Using GlassFishESB   Thanachart Numnonda and Thanisa Kruawaisayawan
7




              Exercise 6: Developing a simple synchronous
                             BPEL program

       แบบฝกหดนเปนการพฒนาโปรแกรม BPEL เพอแสดงตวอย)างการเขยน Business Process แบบ
Synchronous แบบฝกหดนจะอธ2บายการใช NetBeans เพอสรางไฟลW XML Schema, ไฟลW WSDL และไฟลW
BPEL โปรแรม BPEL Process ทจะพฒนาข-นเปนธ6รกรรมเพอท4าการคดลอกขอความ

ขนตอนในการพฒนาโปรแกรม
   1. พฒนาโปรเจMค HelloBPEL
   2. พฒนา XML Schema
   3. พฒนาไฟลW WSDL
   4. พฒนา BPEL Process
   5. พฒนาโปรเจMค Composite Application

การพ#ฒนาโปรเจ`ค HelloBPEL

     แบบฝกหดนจะท4าการสรางโปรเจMคส4าหรบ Service Oriented Architecture ข-นมาใหม) โดยจะมขนตอน
การพฒนาดงน

   1. เลอกเมน( File => New Project..
   2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลวกด
      Next
   3. ก4าหนด Project Name เปน HelloBPEL แลวกด Finish

การพ#ฒนา XML Schema

      ขนตอนถดไปเปนการสรางไฟลW XML Schema เพอก4าหนดร(ปแบบของไฟลW XML ดง Listing ท 1 ซ-ง
โปรแกรม NetBeans จะม Wizard ในการสราง XML Schema อตโนมต2 โดยมขนตอนการพฒนาดงน




Web Services & SOA Using GlassFishESB             Thanachart Numnonda and Thanisa Kruawaisayawan
8



    1) สรางไฟลW SampleData.xsd

       1. เลอกหนาต)าง Projects ขยายโหนด HelloBPEL แลวคล2[กขวาทโหนด Process Files จากนนเลอกค4า
          สง New > Other..
       2. ในไดอะลMอก New File เลอก Categories: เปน XML และ File Types: เปน XML Schema แลวกด
          Next
       3. ก4าหนด File Name: เปน SampleData แลวกด Finish
       4. หนาต)าง Editor จะแสดงไฟลW SampleData.xsd ดงร(ป




    2) สราง Complex Type ส4าหรบ XML schema

       1. ในไฟลW SampleData.xsd เลอกแทป Design แลวลากไอคอน Complex Type ในหนาต)าง Palette
                  มาไวภายใตโหนด Complex Type
       2. โปรแกรม NetBeans จะเพ2ม complex type ใหม)ทชอ newComplexType ใหก4าหนดชอใหม)เปน
          simpleProcess จะไดผลลพธWดงร(ป




    Web Services & SOA Using GlassFishESB            Thanachart Numnonda and Thanisa Kruawaisayawan
9



3) การเพ2ม local element ส4าหรบ simpleProcess

   1. ในไฟลW SampleData.xsd เลอกแทป Design แลวลากไอคอน Element ในหนาต)าง Palette มาไวภาย
      ใตโหนด simpleProcess โปรแกรม NetBeans จะเพ2มโหนดใหม)ชอ newElement
   2. คล2[กขวาทโหนด newElement แลวเลอก Properties
   3. ในไดอะลMอก newElement ก4าหนดค)า Name: เปน paramA และเลอกป6zม ellipse (...) ทค)า Definition
      แลวขยายโหนด Built-in Types ใน List แลวเลอกโหนด string โดยแลวกดป6zม Close จะไดผลลพธWดง
      ร(ป




4) การเพ2ม global element

   1. ในไฟลW SampleData.xsd เลอกแทป Design แลวลากไอคอน Element ในหนาต)าง Palette มาไวภาย
      ใตโหนด Element โปรแกรม NetBeans จะเพ2มโหนดใหม)ชอ newElement ภายใตโหนด Element
   2. คล2[กขวาทโหนด newElement แลวเลอก Properties
   3. ในไดอะลMอก newElement ก4าหนดค)า Name: เปน typeA และเลอกป6zม ellipse (...) ทค)า Definition
      แลวขยายโหนด Complex Types ใน List แลวเลอกโหนด simpleProcess โดยแลวกดป6zม Close จะ
      ไดผลลพธWดงร(ป




   4. กดป6zม Save




Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
10




     Listing ท 1 ไฟล0 SampleData.xsd

     <?xml version="1.0" encoding="UTF-8"?>

     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              targetNamespace="http://xml.netbeans.org/schema/SampleData"
              xmlns:tns="http://xml.netbeans.org/schema/SampleData"
              elementFormDefault="qualified">
        <xsd:complexType name="simpleProcess">
           <xsd:sequence>
              <xsd:element name="paramA" type="xsd:string"/>
           </xsd:sequence>
        </xsd:complexType>
        <xsd:element name="typeA" type="tns:simpleProcess"/>
     </xsd:schema>


     การพ#ฒนาไฟลe WSDL

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

        1. เลอกหนาต)าง Projects ขยายโหนด HelloBPEL แลวคล2[กขวาทโหนด Process Files จากนนเลอกค4า
           สง New > WSDL Document...
        2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เปน HelloSample เลอกช)อง Import XML
           Schema File(s) แลวเลอกไฟลW src/SampleData.xsd โดยการกดป6zม Browse แลวเลอกไฟลWดงร(ป




     Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
11




   3. กด Next ในหนาถดไป ส4าหรบส)วนของ Input: ก4าหนด Message Part Name เปน inputType และ
      เลอกป6zม (...) ในส)วน Element Or Type แลวเลอก HelloBPEL > src/SampleData.xsd > Elements
      > typeA จากรายการ ดงร(ป




   4. ส4าหรบส)วนของ Output: ก4าหนด Message Part Name เปน resultType และเลอกป6zม (...) ในส)วน


Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan
12



            Element Or Type แลวเลอก HelloBPEL > src/SampleData.xsd > Elements > typeA จากรายการ
            และจะไดไดอะลMอกดงร(ป




        5. กด Next ในหนาถดไป ส4าหรบค)า Binding Subtype เลอกป6zม Document Literal แลวกด Finish จะ
           ไดไฟลW HelloSample.wsdl ดงร(ป




     Web Services & SOA Using GlassFishESB             Thanachart Numnonda and Thanisa Kruawaisayawan
13




การพ#ฒนา BPEL Process

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

1) สรางไฟลW HelloProcess.bpel

   1. เลอกหนาต)าง Projects ขยายโหนด HelloBPEL แลวคล2[กขวาทโหนด Process Files จากนนเลอกค4า
      สง New > BPEL Process..
   2. ก4าหนด File Name: เปน HelloProcess แลวกด Finish
   3. โปรแกรม NetBeans จะสรางไฟลW HelloProcess.bpel และหนาต)าง Editor จะแสดงไฟลWในโหมด
      designer ดงร(ป




Web Services & SOA Using GlassFishESB            Thanachart Numnonda and Thanisa Kruawaisayawan
14




            .

     2) การเพ2ม partner link

        1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน HelloSample.wsdl ในหนาต)าง
           Project มาไวภายใตหนาต)าง design
        2. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ใหใชค)าทก4าหนดมาแลว
           กด OK

     3) การเพ2มธ6รกรรม Receive

        1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน Receive ในหนาต)าง Palette มาไวมา
           ไวตรงบลMอกธ6รกรรมว)างเปล)า
        2. โปรแกรมจะก4าหนดธ6รกรรม Receive ทชอ Receive1 ในหนาต)าง Design ใหคล2[กทไอคอน Edit
           ต4าแหน)งบนธ6รกรรม Receive1
        3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ใหก4าหนด Name: เปน start และเลอก
           Partner Link: เปน PartnerLink1
        4. ในช)อง Input Variable: กดป6zม Create.. เมอไดอะลMอก New Input Variable แสดงข-น ใหก4าหนด
           Name: เปน inputVar แลวกด OK จะไดไดอะลMอกดงร(ป



     Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
15




   5. กด OK จะได HelloProcess ดงร(ป




3) การเพ2มธ6รกรรม Reply

   1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน Reply ในหนาต)าง Palette
      มาไวในหนาต)าง design ระหว)าง บลMอกธ6รกรรม Receive1 กบธ6รกรรม Process End
   2. โปรแกรมจะก4าหนดธ6รกรรม Reply ทชอ Reply1 ในหนาต)าง Design ใหคล2[กไอคอน Edit
      ของธ6รกรรม Reply1
   3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก
      Partner Link: เปน PartnerLink1


Web Services & SOA Using GlassFishESB        Thanachart Numnonda and Thanisa Kruawaisayawan
16




        4. ในช)อง Output Variable: กดป6ม Create.. เมอไดอะลMอก New Output Variable แสดงข-น
                                       z
           ใหก4าหนด Name: เปน outputVar แลวกด OK

     4) การเพ2มธ6รกรรม Assign

        1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง
           Palette มาไวในหนาต)าง design ระหว)าง ธ6รกรรม start กบธ6รกรรม end
        2. ในหนาต)าง Editor เลอกธ6รกรรม Assign1 แลวเลอกแทป Mapper ท4าการโยงโหนด
           paramA ในส)วน inputVar ในหนาต)างดานซายเขากบโหนด paramA ในส)วน inputVar ใน
           หนาต)างดานขวา (เปนการกMอปปŒค)าจากอ2นพ6ตไปยงเอาทWพ6ต) ดงร(ป
                                        •




        3. จะได BPEL Process ดงร(ป




     Web Services & SOA Using GlassFishESB          Thanachart Numnonda and Thanisa Kruawaisayawan
17




   4.   กดป6ม Save

การพฒนาโปรเจ"ค Composite Application

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

   1.   เล"อกเมน& File => New Project..
   2.   ในไดอะล5อก New Project ใหเล"อก Categories เปน SOA และ Projects เปน Composite
        Application แลวกด Next
   3.   กาหนด Project Name เปน HelloApplication แลวกด Finish
   4.   ในหนาต+าง Project เล"อกโหนด HelloApplication แลวคล-:กขวาเล"อก Add JBI Module ..
   5.   ใหเล"อกโปรเจ5ค HelloBPEL แลวกดป6ม Add Project JAR Files
   6.   โปรแรม NetBeans จะเพ-มโหนด HelloBPEL.jar ภายใต HelloApplication > JBI Module

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

   1.   ทาการ   Deploy โปรเจ5ค HelloApplication จะไดหนาต+าง Editor ดงร&ป




Web Services & SOA Using GlassFishESB                  Thanachart Numnonda and Thanisa Kruawaisayawan
18




        2.   ในหนาต+าง Project เล"อกโหนด HelloApplication > Test แลวคล-:กขวาเล"อก New Test Case
        3.   ในไดอะล5อก New Test Case ใหกาหนด Test Case Name: เปน TestCase1 แลวกด Next
        4.   ในหนาถดไปใหเล"อกไฟล0 WSDL เปน HelloSample.wsdl แลวกด Next
        5.   ในหนาถดไปใหเล"อก HelloSampleOperation แลวกด Finish
        6.   หนาต+าง Editor จะแสดงไฟล0 Input.xml ใหแก source code ส+วน paramA ดงน
                <sam:paramA>Hello Thana</sam:paramA>
        7.   เล"อกโหนด TestCase1 แลวคล-:กขวาเล"อก Run
        8.   จะเห5นผลลพธ0ปรากฎในไฟล0 Output.xml ดง Listing ท 2[หมายเหตการรนครงแรกจะไม+มผลเปรยบ
             เทยบจ2งแสดงผลเปน fail แต+ครงต+อๆมาจะมผลเปรยบเทยบจ2งระบว+า pass ดงร&ป]




     Listing ท 2 ผลลพธ0จากการรน 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"




     Web Services & SOA Using GlassFishESB                 Thanachart Numnonda and Thanisa Kruawaisayawan
19



xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns0="http://xml.netbeans.org/schema/SampleData" xmlns="http://xml.netbeans.org/schema/
SampleData">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
 <typeA xmlns="http://xml.netbeans.org/schema/SampleData">
   <ns0:paramA xmlns:ns0="http://xml.netbeans.org/schema/SampleData">Hello
Thana</ns0:paramA>
 </typeA>
</SOAP-ENV:Body>
    </SOAP-ENV:Envelope>




Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
20




                            Exercise 7: BPEL for Writing to File

             แบบฝกหดนเปนการสราง Business Process เพอเขยนขอม(ลทไดรบผ(ใชงานลงไฟลW โดยใชโปรแกรม
     BPEL

     ขนตอนในการพฒนาโปรแกรม
        12. พฒนาโปรเจMค FileBPEL
        13. พฒนาไฟลW WSDL ส4าหรบ SOAPBinding
        14. พฒนาไฟลW WSDL ส4าหรบ FileBinding
        15. พฒนา BPEL Process
        16. พฒนาโปรเจMค Composite Application
        17. ทดสอบโปรแกรมผ)าน TestCase
        18. ทดสอบโปรแกรมผ)าน Web Application


     1. การพ#ฒนาโปรเจ`ค FileBPEL
          แบบฝกหดนจะท4าการสรางโปรเจMคส4าหรบ Service Oriented Architecture ข-นมาใหม) โดยจะมขนตอน
     การพฒนาดงน
        6.   เลอกเมน( File > New Project
        7.   ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลว
             กด Next
        8.   ก4าหนด Project Name เปน FileBPEL แลวกด Finish

     2. การพ#ฒนาไฟลe WSDL สSาหร#บ SOAPBinding
          ขนตอนถดไปเปนการสรางไฟลW WSDL ส4าหรบ SOAPBinding ส4าหรบน2ยาม Business Process ทจะ
     พฒนาข-น เพอใหสามารถเรยกใชเปนเวMบเซอรWว2สได โดยมขนตอนการพฒนาดงน
        3.   เลอกหนาต)าง Projects คล2[กขวาทโหนด FileBPEL ใหเลอก New > WSDL Document ..
        4.   ในไดอะลMอก New WSDL Document ก4าหนด File Name: เปน DataIO ก4าหนด WSDL Type: เปน
             Concrete WSDL Document และก4าหนด Binding เปน SOAP และ Types เปน RPC Literal ดง
             แสดงในร(ปท 1 แลวกด Next




     Web Services & SOA Using GlassFishESB              Thanachart Numnonda and Thanisa Kruawaisayawan
21




                              ร5ร5ปท 1 แสดงการก4าหนดค)า WSDL Document

   5.   ในหนาถดไป ส4าหรบส)วนของ Input: ก4าหนด Message Part Name เปน id กด Add แลวเพ2ม input
        ส4าหรบ firstName, lastName, salary (int) และส4าหรบส)วนของ Output: ก4าหนด Message Part
        Name เปน result ดงแสดงในร(ปท 2 จากนนกด Finish




Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan
22




                               ร5ปท 2 แสดงการใส)ค)า Input และ Output Messages

     2. การพ#ฒนาไฟลe WSDL สSาหร#บ FileBinding

             ขนตอนถดไปเปนการสรางไฟลW WSDL ส4าหรบ FileBinding เพอเขยนลงไฟลW โดยมขนตอนการพฒนา
     ดงน
        1.   เลอกหนาต)าง Projects คล2[กขวาทโหนด FileBPEL ใหเลอก New > WSDL Document ..
        2.   ในไดอะลMอก New WSDL Document ก4าหนด File Name: เปน FileResult ใหเลอก WSDL Type:
             เปน Concrete WSDL Document Binding เปน FILE และ Types เปน Write ดงแสดงในร(ปท 3
             จากนนกด Next




     Web Services & SOA Using GlassFishESB                 Thanachart Numnonda and Thanisa Kruawaisayawan
23




                         ร5ปท 3 แสดงการใส)ค)าส4าหรบ New WSDL Document

   3.   ในหนาถดไป ก4าหนดค)า File Name: เปน result.txt ส4าหรบ Path: ให กด Browse… เพอเลอก
        Path: ไปท C:SOA_output (กรณทยงไม)ม folder จะตองท4าการสรางข-นมา) และเลอก File Exists:
        เปน Append to Existing File ดงแสดงในร(ปท 4 จากนนกด Finish




Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
24




                                 ร5ปท 4 แสดงการก4าหนดค)าส4าหรบการเขยนไฟลW

     3. การพ#ฒนา BPEL Process

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

     3.1 สรางไฟลW FileProcess.bpel

        1.   เลอกหนาต)าง Projects แลวคล2[กขวาทโหนด FileBPEL จากนนเลอกค4าสง New > BPEL Process
        2.   ก4าหนด File Name: เปน FileProcess แลวกด Finish
        3.   โปรแกรม NetBeans จะสรางไฟลW FileProcess.bpel และหนาต)าง Editor จะแสดงไฟลWในโหมด
             designer




     Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
25



3.2 การเพ2ม partner link

   1.   ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน DataIO.wsdl ในหนาต)าง Project มาไว
        ในแทบเทาทางซายมอภายใตหนาต)าง design
   2.   ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน DataIOPartnerLink
   3.   ลากไอคอน FileResult.wsdl ในหนาต)าง Project มาไวในแทบเทาทางขวามอภายใตหนาต)าง design
   4.   ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน FilePartnerLink

3.3 การเพ2มธ6รกรรม Receive
   1.   ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Receive ในหนาต)าง Palette มาไวตรง
        บลMอกธ6รกรรมว)างเปล)า
   2.   โปรแกรมจะก4าหนดธ6รกรรม Receive ทชอ Receive1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม
        Receive1
   3.   ในไดอะลMอก Receive1 [Receive] - – Property Editor ใหก4าหนด Name: เปน start และเลอก
        Partner Link: เปน DataIOPartnerLink
   4.   ในช)อง Input Variable: กดป6zม Create เมอไดอะลMอก New Input Variable แสดงข-น ใหก4าหนด
        Name: เปน inData แลวกด OK

3.4 การเพ2มธ6รกรรม Reply
   1.   ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Reply ในหนาต)าง Palette มาไวใน
        หนาต)าง design ระหว)างธ6รกรรม start กบธ6รกรรม Process End
   2.   โปรแกรมจะก4าหนดธ6รกรรม Reply ทชอ Reply1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม Reply1
   3.    ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner
        Link: เปน DataIOPartnerLink
   4.   ในช)อง Output Variable: กดป6zม Create เมอไดอะลMอก New Output Variable แสดงข-น ใหก4าหนด
        Name: เปน outData แลวกด OK

3.5 การเพ2มธ6รกรรม Invoke ส4าหรบ write
   1.   ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Invoke ในหนาต)าง Palette มาไวใน
        หนาต)าง design ระหว)าง start กบธ6รกรรม end




Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
26



        2.   โปรแกรมจะก4าหนดธ6รกรรม Invoke ทชอ Invoke1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม
             Invoke1
        3.    ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ใหก4าหนด Name: เปน invokeWriteToFile
             และเลอก Partner Link: เปน FilePartnerLink และ Operation: เปน write
        4.   ในช)อง Input Variable: กดป6zม Create เมอไดอะลMอก New Input Variable แสดงข-น ใหก4าหนด
             Name: เปน inFile แลวกด OK

     3.6 การเพ2มธ6รกรรม Assign
        1.   ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง Palette มาไวใน
             หนาต)าง design ระหว)าง ธ6รกรรม start กบธ6รกรรม invokeWriteToFile
        2.   ในหนาต)าง Editor เลอกธ6รกรรม Assign1 ในหนาต)าง BPEL Mapper ท4าการเชอมโยงขอม(ลในโหนด
             inData ทางดานซายมอ โดยเลอก String > Concat จากนนเชอมโยง
                1. firstName เขาเปน String ช)องท 1
                2. ‘ ‘ เปน String ช)องท 2
                3. lastName เขาเปน String ช)องท 3
                4. ‘ => ‘ เปน String ช)องท 4
                5. salary เขาเปน String ช)องท 5
                6. จากนนเชอมโยง return String ไปยง part1 ใน inFile ทางดานขวามอ ดงแสดงในร(ปท 5




                        ร5ปท 5 แสดง Business Rule ระหว)าง start และ invokeWriteToFile

        3.   ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง Palette มาไวใน
             หนาต)าง design ระหว)าง ธ6รกรรม invokeWriteToFile กบธ6รกรรม end
        4.   ในหนาต)าง Editor เลอกธ6รกรรม Assign2 ในหนาต)าง BPEL Mapper เลอก String > String Literal
             แลวก4าหนดค)าเปน Success เชอมโยงฟ~ลดWระหว)าง string literal กบ result ทอย()ใน outData ดง
             แสดงในร(ปท 6



     Web Services & SOA Using GlassFishESB                 Thanachart Numnonda and Thanisa Kruawaisayawan
27




                   ร5ปท 6 แสดง Business Rule ระหว)าง invokeWriteToFile และ end

   5.   เราจะไดโปรแกรม BPEL ดงแสดงในร(ปท 7




                               ร5ปท 7 แสดง BPEL Process ของทงระบบ

   6.   Clean and Build โปรเจMค


4. การพ#ฒนาโปรเจ`ค Composite Application
       ขนตอนนเปนการสราง Composite Application เพอทรน FileBPEL บน BPEL Engine ทใชมาตรฐาน
JBI โดยมขนตอนดงน
   1.   เลอกเมน( File > New Project



Web Services & SOA Using GlassFishESB                Thanachart Numnonda and Thanisa Kruawaisayawan
28



        2.   ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite
             Application แลวกด Next
        3.   ก4าหนด Project Name เปน FileCompositeApp แลวกด Finish
        4.   ในหนาต)าง Project เลอกโหนด FileCompositeApp แลวคล2[กขวาเลอก Add JBI Module..
        5.   ใหเลอกโปรเจMค FileBPEL แลวกดป6zม Add Project JAR Files
        6.   โปรแรม NetBeans จะเพ2มโหนด FileBPEL.jar ภายใต FileCompositeApp > JBI Module
        7.   คล2[กขวาท FileCompositeApp เลอก Clean and Build
        8.   คล2[กท Service Assembly จะเหMนผลลพธWดงแสดงในร(ปท 8




                            ร5ปท 8 แสดง Service Assembly ของ FileCompositeApp

     5. การทดสอบโปรแกรมผlาน TestCase
        9.  ท4าการ Deploy โปรเจMค FileCompositeApp
        10. ในหนาต)าง Project เลอกโหนด FileCompositeApp > Test แลวคล2[กขวาเลอก New Test Case
        11. ในไดอะลMอก New Test Case ใหก4าหนด Test Case Name: เปน TestCase1 แลวกด Next
        12. หนาถดไปใน FileBPEL ใหเลอกไฟลW WSDL เปน DataIO.wsdl แลวกด Next
        13. ในหนาถดไปใหเลอก DataIOOperation แลวกด Finish
        14. หนาต)าง Editor จะแสดงไฟลW Input.xml ใหแก source code ดงน
                     <id>1234</id>
                     <firstName>Somjai</firstName>
                     <lastName>Jaidee</lastName>
                     <salary>38000</salary>
        15. กดป6zม Save เลอกโหนด TestCase1 แลวคล2[กขวาเลอก Run
        16. จะเหMนผลลพธWปรากฎในไฟลW Output.xml ดงแสดงในร(ปท 9




     Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan
29




                              ร5ปท 9 แสดงผลลพธWทไดจากการรน TestCase1

   17. และจะไดไฟลW   result.txt ในไดเรMกทอร c:SOA_output ซ-งมขอม(ลดงน
               Somjai Jaidee => 38000


6. การพ#ฒนาโปรแกรมผlาน Web Application

   ท4าการคนหาต4าแหน)ง url ของ soap:address ตามขนตอนดงน

   1.   คล2[กท Service Assembly ใน FileCompisiteApp และคล2[กท DataIOPort
   2.   ในหนาต)าง properties ใหท4าการ copy ค)าของ soap:address
   3.   ทดสอบโดยเป~ด Web Browser แลว paste ค)าท copy ไว จากนนใหท4าการเปลยนค)าของ URL ใหเปน
        ดงน http://localhost:9080/DataIOService/DataIOPort?WSDL

       พฒนาโปรแกรม Web Application เพอใหผ(ใชปsอนค)าขอม(ลต)างๆ จากนนโปรแกรมจะท4าการเขยน
ขอม(ลลงไฟลW โดยมขนตอนการพฒนาดงน
   1. เลอกเมน( File > New Project
   2. ในไดอะลMอก New Project ใหเลอก Categories เปน Web และ Web Application แลวกด Next
   3. ก4าหนด Project Name เปน FileBPUI แลวเลอก Project Location เปน folder ทเราตองการจะเกMบ
       ไฟลWไว
   4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish
   5. ในช)อง Frameworks ใหเลอก Visual Web JavaServer Faces จากนนกด Finish
   6. คล2[กขวาทโหนด FileBPUI จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web
       Services และ Web Service Client แลวกด Next
   7. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน
       http://localhost:9080/DataIOService/DataIOPort?WSDL แลวกด Finish
   8.   เลอกไปท Page1.jsp ท4าการออกแบบ Page Layout ดงแสดงในร(ปท 10




Web Services & SOA Using GlassFishESB                  Thanachart Numnonda and Thanisa Kruawaisayawan
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]
SOA Using GlassFishESB and NetBeans [in Thai]

Contenu connexe

Similaire à SOA Using GlassFishESB and NetBeans [in Thai]

Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeansJava Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeansIMC Institute
 
Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5Thanachart Numnonda
 
Eclipse
EclipseEclipse
Eclipsegzxc
 
ตัวอย่างบทที่3โปรแกรม filter บน linux
ตัวอย่างบทที่3โปรแกรม filter บน linuxตัวอย่างบทที่3โปรแกรม filter บน linux
ตัวอย่างบทที่3โปรแกรม filter บน linuxrubtumproject.com
 
รายงาน คอม
รายงาน คอมรายงาน คอม
รายงาน คอมNooLuck
 
61 sql server 2008 complete
61 sql server 2008 complete61 sql server 2008 complete
61 sql server 2008 completeTae Delphi
 
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...Sarawut Panchon
 

Similaire à SOA Using GlassFishESB and NetBeans [in Thai] (20)

Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeansJava Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
 
Java Web programming Using NetBeans
Java Web programming Using NetBeansJava Web programming Using NetBeans
Java Web programming Using NetBeans
 
Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5Java Web Programming Using NetBeans 6.5
Java Web Programming Using NetBeans 6.5
 
Proposal
ProposalProposal
Proposal
 
20110303 joomla-appserv-server2go
20110303 joomla-appserv-server2go20110303 joomla-appserv-server2go
20110303 joomla-appserv-server2go
 
Wps
WpsWps
Wps
 
joomla-2-5-install-appserv
joomla-2-5-install-appservjoomla-2-5-install-appserv
joomla-2-5-install-appserv
 
Web dav android
Web dav androidWeb dav android
Web dav android
 
Web dav android (1)
Web dav android (1)Web dav android (1)
Web dav android (1)
 
Cent os
Cent osCent os
Cent os
 
Eclipse
EclipseEclipse
Eclipse
 
Wordpress 3.5 -install-appserv
Wordpress 3.5 -install-appservWordpress 3.5 -install-appserv
Wordpress 3.5 -install-appserv
 
ตัวอย่างบทที่3โปรแกรม filter บน linux
ตัวอย่างบทที่3โปรแกรม filter บน linuxตัวอย่างบทที่3โปรแกรม filter บน linux
ตัวอย่างบทที่3โปรแกรม filter บน linux
 
Agent
AgentAgent
Agent
 
650 1
650 1650 1
650 1
 
รายงาน คอม
รายงาน คอมรายงาน คอม
รายงาน คอม
 
61 sql server 2008 complete
61 sql server 2008 complete61 sql server 2008 complete
61 sql server 2008 complete
 
บทที่+1
บทที่+1บทที่+1
บทที่+1
 
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
 
Ch10
Ch10Ch10
Ch10
 

Plus de Thanachart Numnonda

Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021Thanachart Numnonda
 
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุขประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุขThanachart Numnonda
 
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทยข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทยThanachart Numnonda
 
Software Trends Towards AEC 2015
Software Trends Towards AEC 2015Software Trends Towards AEC 2015
Software Trends Towards AEC 2015Thanachart Numnonda
 
How would cloud computing Effect to Software Industry?
How would cloud computing  Effect to Software Industry?How would cloud computing  Effect to Software Industry?
How would cloud computing Effect to Software Industry?Thanachart Numnonda
 
Impact of cloud computing to Asian IT Industry
Impact of cloud computing  to Asian IT IndustryImpact of cloud computing  to Asian IT Industry
Impact of cloud computing to Asian IT IndustryThanachart Numnonda
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่Thanachart Numnonda
 
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]Thanachart Numnonda
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่Thanachart Numnonda
 
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย Thanachart Numnonda
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆCloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆThanachart Numnonda
 
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทยThanachart Numnonda
 
บทความ Google vs. Android
บทความ Google vs. Android  บทความ Google vs. Android
บทความ Google vs. Android Thanachart Numnonda
 
Technology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software IndustryTechnology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software IndustryThanachart Numnonda
 
อยากอยู่ 110 ปี
อยากอยู่ 110 ปี อยากอยู่ 110 ปี
อยากอยู่ 110 ปี Thanachart Numnonda
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตThanachart Numnonda
 

Plus de Thanachart Numnonda (20)

Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021
 
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุขประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
 
Planning on Mobile Strategy
Planning on Mobile StrategyPlanning on Mobile Strategy
Planning on Mobile Strategy
 
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทยข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
 
Software Trends Towards AEC 2015
Software Trends Towards AEC 2015Software Trends Towards AEC 2015
Software Trends Towards AEC 2015
 
Personal Cloud
Personal CloudPersonal Cloud
Personal Cloud
 
How would cloud computing Effect to Software Industry?
How would cloud computing  Effect to Software Industry?How would cloud computing  Effect to Software Industry?
How would cloud computing Effect to Software Industry?
 
Impact of cloud computing to Asian IT Industry
Impact of cloud computing  to Asian IT IndustryImpact of cloud computing  to Asian IT Industry
Impact of cloud computing to Asian IT Industry
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
 
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
 
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆCloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆ
 
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
 
บทความ Google vs. Android
บทความ Google vs. Android  บทความ Google vs. Android
บทความ Google vs. Android
 
IT trends for co-creation
IT trends for co-creationIT trends for co-creation
IT trends for co-creation
 
Technology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software IndustryTechnology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software Industry
 
อยากอยู่ 110 ปี
อยากอยู่ 110 ปี อยากอยู่ 110 ปี
อยากอยู่ 110 ปี
 
Open
OpenOpen
Open
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุต
 

SOA Using GlassFishESB and NetBeans [in Thai]

  • 1. 1 Hand-on Exercises Java Web Services and Service Oritened Architecture Using GlassFish ESB and NetBeans 6.5 Dr.Thanachart Numnonda and Asst Prof.Thanisa Kruawaisayawan Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 2. 2 Exercises Exercise 1: Calling External Web Services Exercise 2: Java Web Service Exercise 3: RESTful Web Services Exercise 4: Twitter Web Services and Google Calendar API Exercise 5: Google Map Web Services Exercise 6: Developing a Simple Synchronous BPEL program Exercise 7: BPEL for writing to file Exercise 8: BPEL for Writing to Database Exercise 9: BPEL for Sending Message to a JMS Queue Exercise 10: BPEL Invoking Web Services Exercise 11: BPEL : Structured Activities Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 3. 3 Exercise 1: Calling External Web Services แบบฝกหดในบทนเปนการพฒนาโปรแกรมเพอเรยกใช Web Services ทมอย()แลว ซ-งจะเลอกมา 3 บร2การดงน การทดลองท 1 ราคาน4ามนล)าส6ดของ ปตท. การทดลองท 2 อตราแลกเปลยนเง2นตราระหว)างประเทศ การทดลองท 3 ราคาห6น โดยจะใช NetBeans และ GlassFish V2 Server การพ#ฒนา Web Service Client แบบฝกหดนจะสราง Web Application Project ข-นใหม) เพอใชในการเรยก Web Services โดยมขน ตอนการพฒนาดงน 1. เลอกเมน( File > New Project 2. ในไดอะลMอก New Project ใหเลอก Categories เปน Java Web และ Web Application แลวกด Next 3. ก4าหนด Project Name เปน ExternalWSDemo แลวเลอก Project Location เปน folder ทเรา ตองการจะเกMบไฟลWไว 4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish การทดลองท 1 1. คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web Services และ Web Service Client แลวกด Next 2. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน http://www.pttplc.com/pttinfo.asmx?wsdl ดงแสดงในร(ปท 1 แลวกด Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 4. 4 ร5ปท 1 แสดงไดอะลMอก New Web Service Client 3. ในหนาต)าง Projects จะม Folder ทชอ Web Service References ข-นมา 4. คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน PTTServlet และ Package: เปน servlets แลวกด Finish 5. คล2[กขวาภายในเมธอด processRequest ในไฟลW PTTServlet.java แลวเลอก Web Service Client Resources > Call Web Service Operation ดงแสดงในร(ปท 2 ร5ปท 2 แสดงการเรยกใช operation ของ Web Service 6. เลอก CurrentOilPrice ดงแสดงในร(ปท 3 แลวกด OK Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 5. 5 ร5ปท 3 แสดงการเรยกใช Operation: CurrentOilPrice ของปตท. 7. ภายในไฟลW PTTServlet.java ใหใส) language เปน TH แลว Run ไฟลW จะแสดงราคาน4ามนล)าส6ด ดง แสดงในร(ปท 4 ร5ปท 4 แสดงผลลพธWทไดจากการเรยกใช Web Service Operation: CurrentOilPrice ของปตท. Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 6. 6 การทดลองท 2 1. คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Web Service Client แลวกด Next 2. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน http://www.webservicex.com/CurrencyConvertor.asmx?wsdl 3. คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน CurrencyServlet และ Package: เปน servlets แลวกด Finish 4. คล2[กขวาภายในเมธอด processRequest ในไฟลW CurrencyServlet.java แลวเลอก Web Service Client Resources > Call Web Service Operation เลอก ConversionRate แลวกด OK 5. แกไขไฟลW CurrencyServlet.java ดงน 6. Run ไฟลW CurrencyServlet.java จะแสดงอตราแลกเปลยนเง2นตรา ดงแสดงในร(ปท 5 ร5ปท 5 แสดงผลลพธWทไดจากการเรยกใช Web Service Operation: ConversionRate การทดลองท 3 1. คล2[กขวาทโหนด ExternalWSDemo จากนนเลอกค4าสง New > Web Service Client แลวกด Next 2. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน http://www.webservicex.com/stockquote.asmx?WSDL 3. คล2[กขวาท ExternalWSDemo แลวเลอก Servlet จากนนใหก4าหนดชอเปน StockServlet และ Package: เปน servlets แลวกด Finish 4. คล2[กขวาภายในเมธอด processRequest ในไฟลW StockServlet.java แลวเลอก Web Service Client Resources > Call Web Service Operation เลอก GetQuote แลวกด OK Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 7. 7 5. แกไขไฟลW StockServlet.java โดยใส) symbol เปน request.getParameter("symbol"); 6. Run ไฟลW 7. ทดสอบโปรแกรมโดยใส) ?symbol=java ต)อทาย URL ดงน http://localhost:8080/ExternalWSDemo/StockServlet?symbol=java ไดผลลพธWดงแสดงในร(ปท 6 ร5ปท 6 แสดงผลลพธWทไดจากการเรยกใช Web Service Operation: GetQuote เมอปsอน symbol เปน java 8. ทดสอบโปรแกรมโดยใส) ?symbol=goog ต)อทาย URL ดงน http://localhost:8080/ExternalWSDemo/StockServlet?symbol=goog ไดผลลพธWดงแสดงในร(ปท 7 ร5ปท 7 แสดงผลลพธWทไดจากการเรยกใช Web Service Operation: GetQuote เมอปsอน symbol เปน goog การทดสอบ Web Services โดยใชM SoapUI โปรแกรม SoupUI เปนโปรแกรม Open Source ทสามารถใชเปนเครองมอในการทดสอบเวMบเซอรWว2ส ทน2ยมใชกนอย)างกวางขวาง เราสามารถทจะไปดาวนWโหลดโปรแกรมนไดท www.soupui.org และท4าการ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 8. 8 ทดสอบเวMบเซอรWว2สในการทดลองทงสามขางตน นอกจากนเรายงสามารถต2ดตงโปรแกรม SoapUI ภายใน NetBeans ไดโดยการดาวนWโหลด SoupUI NetBeans Plugin (ไฟลW com-eviware-soapui-netbeans-module- 2.5.1.nbm) และท4าการต2ดตงตามขนตอนดงน 1. ในโปรแกรม NetBeans เลอกเมน( Tools > Plugins 2. ในไดอะลMอก Plugins เลอกแทป Downloaded แลวกดป6zม Add Plugins..แลวเลอกไฟลW com-eviware- soapui-netbeans-module-2.5.1.nbm ซ-งท4าการดาวนWโหลดมาก)อนหนาน จะไดไดอะลMอกดงร(ป 3. กดป6zม Install แลวกดป6zม Next จนท4าการต2ดตงเสรMจแลวเลอกให Restart โปรแกรม NetBeans ข-นมา ใหม) เราสามารถทดสอบการใชงาน SoupUI ทต2ดตงข-นมาใน NetBeans เพอทดสอบเวMบเซอรWว2สด(อตรา แลกเปลยนตามขนตอนดงน 1. เลอกเมน( File > New Project 2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Web Services Testing Project แลวกด Next 3. ก4าหนด Project Name เปน CurrencyExcangeWSTestProject แลวเลอก Project Location เปน folder ทเราตองการจะเกMบไฟลWไว Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 9. 9 4. ก4าหนดค)า Initial WSDL (URL/file) เปน http://www.webservicex.com/CurrencyConvertor.asmx?wsdl แลวกด Finish 5. โปรแกรมจะสรางโปรเจMคนข-นมา และม WSDL ของเวMบเซอรWว2สแสดงข-นมา หทดลองเลอกโหนด CurrencyConvertorSoap จะเหMนรายละเอยดของ WSDL ดงตวอย)างในร(ป 6. ขยายโหนด CurrencyConvertorSoap แลวเลอกโอเปอรWเรชน ConversionRate แลวคล2[กขวาเลอก ค4าสง New Request 7. ในไดอะลMอก New Request ก4าหนดค)าเปน Request1 8. หนาต)าง Editor จะแสดงค)าของ SOAP Request ทจะส)งไปใหปรบเปลยนค)าเปน <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> 9. กดป6zม submit request (เครองหมายสเขยว) โปรแกรมจะได SOAP Response กลบมาดงตวอย)าง <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>34.105</ConversionRateResult> </ConversionRateResponse> </soap:Body> </soap:Envelope> Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 10. 1 Exercise 2: Java Web Services แบบฝกหดในบทนเปนการพฒนาโปรแกรม Web Services ส4าหรบ Java EE โดยใชช6ดค4าสง JAX-WS ซ-งจะเปนการพฒนาบน Server ทรนบน Java EE โดยช6ดค4าสง JAX-WS จะช)วยท4าใหการสรางและ เรยกใช Web Services ดวยภาษา Java เปนไปไดง)ายข-น การพฒนา Web Services จะแบ)งเปนสองส)วนคอ Web Service Provider (Server) และ Web Service Requester (Client) แบบฝกหดนจะเร2มจากการพฒนา Web Service ซ-งสามารถท4าได 2 ว2ธคอ 1. Web Services ทรนบน Web Server โดยใช Java Servlet 2. Web Services ทรนบน Application Server โดยใช Session Bean แบบฝกหดนจะแสดงขนตอนการใช NetBeans สราง Web Service ทชอ calculateTax โดยใช Servlet ซ-งจะรนอย()บน GlassFish V2 Server เพอแสดง Web Services การส)ง SOAP message และ WSDL ของ Services การพ#ฒนา calculateTax Web Service แบบฝกหดนจะสราง Web Application Project ข-นใหม) เพอใชในการเกMบ Web Service โดยมขนตอน การพฒนาดงน 1. เลอกเมน( File > New Project 2. ในไดอะลMอก New Project ใหเลอก Categories เปน Java Web และ Projects เปน Web Application แลวกด Next 3. ก4าหนด Project Name เปน TaxWSDemo แลวเลอก Project Location เปน folder ทเราตองการจะ เกMบไฟลWไว 4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish 5. คล2[กขวาทโหนด TaxWSDemo จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web Services และ Web Service แลวกด Next 6. ในไดอะลMอก New Web Service ก4าหนด Web Service Name: เปน TaxServices และ Package: เปน ws แลวกด Finish 7. โปรแกรมจะประกาศ Web Services ทชอ TaxServices ในโหนด Web Services ของหนาต)าง Project และหนาต)าง Editor จะแสดงไฟลWทชอ TaxServices.java Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 11. 2 8. ในหนาต)าง Projects ขยายโหนด TaxWSDemo > Web Services แลวคล2[กขวาทโหนด TaxServices เลอกค4าสง Add Operation… 9. ในไดอะลMอก Add Operation ก4าหนด Method เปน calculateTax ชน2ดของ Return Type เปน double และ เพ2ม Input parameter หน-งตวคอ income ชน2ด double แลวกด OK 10. คล2[กทแทป Source ของ TaxServices.java และปรบปร6งเมธอด 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; } } } TaxWSDemo จากนนเลอกค4าสง Clean and Build จากนนคล2[กขวาทโหนด 11. คล2[กขวาทโหนด TaxWSDemo อกครง แลวเลอก Deploy การทดสอบ Web Service โปรแกรม Web Service จะถ(กต2ดตงบน GlassFish V2 และสามารถเรยกด(ไดการใช System Admin Console โดยการเป~ด Web Browser และเรยก url ท http://localhost:4848 โดยก4าหนด user เปน admin และ password เปน adminadmin 1. โปรแกรมจะแสดง Applications และ Web Services ดงแสดงในร(ปท 1 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 12. 3 ร5ปท 1 แสดงรายละเอยดใน GlassFish V2 (Sun Java Application Server) 2. เราสามารถทจะทดสอบ Web Service นผ)านทาง Admin Console ไดโดยกดป6zม Test หรอทดสอบ จาก Netbeans โดยคล2[กขวาท TaxServices ใน Web Services ดงแสดงในร(ปท 2 ร5ปท 2 แสดงว2ธการทดสอบ Web Service ใน Netbeans Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 13. 4 3. โปรแกรมจะแสดงหนาจอเพอใหเราปsอนขอม(ลอ2นพ6ต ซ-งคอจ4านวนเง2นทตองการค4านวณภาษ ในทนจะ ใส)ตวเลขเปน 730000 ดงแสดงในร(ปท 3 ร5ปท 3 แสดงหนาต)างส4าหรบใหทดสอบเรยก Web Service 4. แลวกดป6zม calculateTax โปรแกรมจะเรยกใช Web Services และจะแสดงผลลพธWทได พรอมทงแสดง ค)า SOAP Request ดงแสดงในร(ปท 4 ร5ปท 4 แสดงผลลพธWทไดจากการเรยกใช Web Service และแสดง SOAP Request 5. เราสามารถทจะแสดงค4าสง WSDL ของ Web Service นโดยการเลอก WSDL File โปรแกรมจะท4าการ เรยก url ชอ http://localhost:8080/TaxWSDemo/TaxServicesService?WSDL และจะไดผลลพธWดง แสดงในร(ปท 5 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 14. 5 ร5ปท 5 แสดงรายละเอยดของ WSDL Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 15. 6 Exercise 3: RESTful Web Services เนอหาทตองศกษากอน Enterprise Java Bean แบบฝกหดในบทนเปนการพฒนาโปรแกรม RESTful Web Services โดยใชชดคาสง JAX-RS เพ"อ สราง Web Services ทจะเรยกด&ขอม&ลจากฐานขอม&ล MySQL ผ+านชดคาสง Java Persistence API (JPA) ขนตอนในการพฒนาโปรแกรม 1. การต-ดตงโมด&ล RESTful Web Services 2. สราง Web Application Project 3. พฒนา Entity Class 4. พฒนา RESTful Web Service จาก Entity Class 5. ทดสอบ RESTful Web Service 6. พฒนา RESTful Web Service Client Stubs การตดตงโมดล RESTful Web Services ขนตอนนจาเปนเฉพาะโปรแกรม NetBeans เวอร0ชน 6.0 ซ2งไม+ไดต-ดตงโมด&ลนมา แต+สาหรบผ&ใช โปรแกรม NetBeans 6.1 ข2นไปสามารถขามขนตอนนไปได สาหรบขนตอนการต-ดตงโมด&ลนมดงน 1. เล"อกเมน& Tools => Plugin 2. ในไดอะล5อก Plugins เล"อกแทป Available Plugins แลวเล"อกช+อง RESTful Web Services 3. กดป6ม Install แลวทาการต-ดตงโดยการกดป6ม OK และยอมรบเง"อนไขของล-ขส-ทธ-8โปรแกรม การสราง Web Application Project เราจะกาหนดใหโปรแกรมนเปนโปรแกม Web Application ขนตอนแรกจะเปนการสราง Project ใหม+ ข2นมาใน NetBeans ซ2งมขนตอนดงน 1. เล"อกเมน& File => New Project.. 2. ในไดอะล5อก New Project ใหเล"อก Categories เปน Java Web และเล"อก Project เปน Web Application แลวกด Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 16. 7 3. กาหนด Project Name เปน RestfulWS แลวเล"อก Project Location เปน Director ทเราตองการจะ เก5บไฟล0ไว กด Next 4. จากนนเล"อก Server เปน GlassFishV2 แลวกด Finish การพฒนา Entity Class ขนตอนนจะเปนการสราง Entity Class เพ"อต-ดต+อกบ table ทช"อ books ใน MySQL โดยมขนตอนการ พฒนาเช+นเดยวกบแบบฝกหดการพฒนา Enterprise Java Bean ซ2งเราจะได Entity Class ทช"อ Books และ Persistence Unit ทาการแกไขเพ"อเพ-ม property ของ ไฟล0 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" 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="MySQL_password" /> </properties> </persistence-unit> </persistence> การพฒนา Restful Web Service จาก Entity Class ขนตอนนจะเปนการพฒนา Restful Web Services เพ"อใหสามารถต-ดต+อกบฐานขอม&ลโดยผ+าน Entity Class ทพฒนาข2นได โดยจะมขนตอนการพฒนาดงน 1. เลอกหนาตาง Projects แลวคลกขวาทโหนด RestfulWS จากนนเลอกคาสง New > Other... 2. ในไดอะล!อก New File ใหเลอก Categories ทชอ Web Services เลอก File Types: เป$น RESTful Web Services from Entity Class แลวกด Next 3. ในไดอะล!อก New RESTful Web Services from Entity Class ใหเลอก Books ดงร&ป แลวกด Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 17. 8 4. โปรแกรม NetBeans จะสราง class ตางๆ ดงร&ป 5. กดป)*ม Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 18. 9 การทดสอบ RESTful Web Service จาก Entity Class ขนตอนนจะเปนการทดสอบ RESTful Web Services ทพฒนาข2นโดยจะมขนตอนดงน 1. เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด RestfulWS จากนนเล"อกคาสง Test Restful Web Services 2. โปรแกรม Browser จะแสดง uri ของ RESTful Web Services ใหเล"อกโหนด books และคล-:ก isbn จะไดผลลพธ0ดงร&ป 3. ทดลองป;อนขอม&ล isbn เปน 123 แลวกดป6ม Test จะไดผลลพธ0ตวอย+างดงร&ป 4. ทดลองเปลยน method เปน DELETE และ PUT เพ"อทาการลบและเพ-มขอม&ลเขาไปในตาราง books Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 19. 1 Exercise 4:Twitter Web Services and Google Calendar API แบบฝกหดในบทนเปนตวอย)างการใช Web Services ทมอย()ใน Social Networks โดยจะใช Web Services ของ Twitter เพอเขยนโปรแกรม update status ของ Twitter ส)วนตว จาก Web Application ท พฒนาข-น จากนนจะเขยนโปรแกรมต2ดต)อกบ Google Calendar โดยใช Java API ของ Google เพอเรยกด( ก4าหนดนดหมายองผ(ใชในวนป€จจ6บน จากนนจะสามารถเลอกนดหมายทแสดงข-นเพอส)งผ)านไปยง Twitter โดย การเรยกใช Web Services การสรMาง User Account สSาหร#บ Twitter และ Google Calendar แบบฝกหดนจะเรยกใชเวMบไซตWSocial Network สองแห)งคอ Twitter และ Google Calendar • เวMบ Twitter เปนบร2การส4าหรบใหเราสามารถทจะเชอมต)อกบ เพอน สมาช2กในครอบครว และเพอน ร)วมงานไดอย()ตลอดเวลา โดยการตอบค4าถามสนๆอย)างบ)อยครงว)า What are you doing? เราสามารถ ทจะลงทะเบยนเวMบนไดท twitter.com และเมอท4าการลMอกอ2นเขาไปแลวจะไดตวอย)างเวMบดงร(ป • เวMบ Google Calendar เปนเวMบทใหผ(ใชจดการก4าหนดการนดหมายต)างๆไดโดยสามารถสราง แสดง แกไข และลบไดผ)านโปรแกรมเวMบบราวเซอรW โดยขอม(ลการนดหมายจะถ(กเกMบไวท Google ท4าใหผ(ใช สามารถเรยกผ)านเวMบจากเครองใดๆกMได เราสามารถทจะลงทะเบยนเวMบนไดท Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 20. 2 www.google.com/calendar และเมอท4าการลMอกอ2นเขาไปแลวจะไดตวอย)างเวMบดงร(ป • กรณทผ(ใชม account อย()ใน Facebook เราสามารถทจะให status update ของ Twitter ถ(กส)งผ)าน มายงเวMบไซตW Facebook ของเราไดโดยอตโนมต2โดยการเลอก Facebook Application ชอ http://apps.facebook.com/twitter/ ดงตวอย)างในร(ป การสราง JSF Web Application สาหรบ Twitter ขนตอนนจะเปนกาสราง Web Application โดยใช JSF Visual Web Framework เพ"อทาการส+ง Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 21. 3 ขอความตอบคาถาม What are you doing? จากโปรแกรมทพฒนาข2นไปยง Twitter โดยเรยกใช Web Services ซ2งมขนตอนดงน 1. เล"อกเมน& File > New Project.. 2. ในไดอะล5อก New Project ใหเล"อก Categories เปน Java Web และเล"อก Projects เปน Web Application แลวกด Next 3. กาหนด Project Name เปน TwitterJSF แลวเล"อก Project Location เปน Director ทเราตองการจะ เก5บไฟล0ไว จากนนเล"อก Server เปน GlassFish V2 จากนนกด Next 4. ในช+อง Frameworks ใหเล"อก Visual Web JavaServer Faces จากนนกด Finish โปรแกรมทจะพฒนาข2นยตองการจะใหมหนาจอส+วนต-ดต+อผ&ใชดงร&ป โดยผ&ใชสามารถป;อนขอความใน TextField และเม"อกดป6ม Twitter Notification โปรแกรมจะส+งขอความไปยง Twitter โดยมขนตอนการ พฒนาโปรแกรมดงน 1. ในโปรเจ5ค TwitterJSF ใหเล"อกไฟล0 Page1.jsp หนาต+าง Editor จะแสดงไฟล0นในโหมด Design 2. ในหนาต+าง Properties ใหกาหนดค+าของ Title เปน Twitter Notification 3. ในหนาตาง Palette ลากไอคอน Label ทอย&ภายในโหนด Basic มาไวในหนาตางการออกแบบของ Page1.jsp แลวแกไขขอความเป$น What are you doing? แลวกด Enter ในหนาตาง Properties สาหรบ Label1 ใหเปลยน Style เพอเลอก Font เป$น Time News Roman ขนาด 18 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 22. 4 4. ลากไอคอน TextField ทอย&ภายในโหนด Basic มาไวในหนาตางการออกแบบของ Page1.jsp ใน ตาแหนงดงร&ปทแสดงขางตน 5. ในหนาตาง Properties สาหรบ TextField1 ใหเปลยนคา columns เป$น 60 และคา id จาก textField1 เป$น answerTf 6. ใหทาการคลกขวาท answerTf แลวเลอก Add Binding Attribute 7. ลากไอคอน Button ทอย&ภายในโหนด Basic มาไวในหนาตางการออกแบบของ Page1.jsp ในตาแหนง ดงร&ปทแสดงขางตน แลวแกไขขอความเป$น Twitter Notification 8. ในหนาตาง Properties สาหรบ Button ใหเปลยนคา id จาก button1 เป$น sendButton ขนตอนถดมาจะเปนการเขยน Source code เพ"อกาหนดการทางานของการกดป6ม Twitter Notification โดยม ขนตอนการทางานดงน 9. ในหนาต+าง editor ใหกลบมาเล"อกแทป Design แลวกดดบเบ-ลคล-:กทป6ม Twitter Notification 10. เล"อกแทป Services แลวขยายโหนด Web Services > Twitter > What are you doing service > statuses > [update.{format}] 11. ลากเซอร0ว-ส updateStatus มาไวในหนาต+าง editor ซ2งแสดง source code ในคาสง action ของป6ม และ ใหแกไข 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.twitterresponse.NilClasses.class); } //TODO - Uncomment the print Statement below to print result. //System.out.println("The SaasService returned: "+result.getDataAsString()); } catch (Exception ex) { ex.printStackTrace(); } return null; } Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 23. 5 เราจะตองท4าการระบ6 username และ password ของ Twitter โดยการก4าหนดค)า properties ทอย()ใน ไฟลW 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 เราสามารถทดสอบรนโปรแกรมนแลวทดลองปsอนขอความดงร(ป จากนนเราสามารถทจะเรยกด(ผลขอ การส)งขอความไปยง Twitter ไดจากเวMบ Twitter หรอกรณทเราเชอมโยง Twitter ไปยง Facebook เราจะ สามารถเหMนการอปเดตเวMบ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 24. 6 การสราง Web Application สาหรบสงนดหมายใน Google Calendar ไปยง Twitter ขนตอนนจะเปนกาสราง Web Application โดยใชเพ"อทาการแสดงนดหมายจาก Google Calendar แลวเล"อกนดหมายเพ"อส+งไปยง Twitter โปรแกรมจะถ&กกาหนดใหอย&+ภายใน Web Project ทช"อ TwitterTester ทมไฟล0ต+างๆค"อ 1. CalendarTwitter.html เปนการแสดง Web Page เพ"อใหผ&ใชป;อนขอม&ล account ของทง Google Calendar และ Twitter ดง ร&ป โดยม source code ดงน <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="CalendarServlet" method="POST"> Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 25. 7 <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> <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> 2. CalendarServlet.java โปรแกรม Servlet เพ"อแสดงนดหมายของผ&ใชใน Google Account ทระบเพ"อมาแสดงดงตวอย+างในร&ป โปรแกรม Servlet นจะเรยกใช Google API ซ2งผ&ใชจะตองทาการดาวน0โหลดไฟล0 java/lib/gdata-calendar-1.0.jar และ java/lib/gdataclient-1.0.jar มาจาก http://code.google.com/p/gdata-java-client/downloads/list และตอง Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 26. 8 ดาวน0โหลดไฟล0 google-collect-1.0-rc1.zip มาจาก http://code.google.com/p/ google-collections/downloads/list จากนนจะตองทาการต-ดตง Library นใน NetBeans โดยมขนตอนดงน 1. เล"อกเมน& Tool > Library.. 2. ในไดอะล5อก Library Manager ใหเล"อก New Library.. แลวกาหนด Library Name เปน G ฏ ata 3. กาหนด Classpath ของ GData เปน ไฟล0ต+างๆดงน • 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 4. กาหนด Sources เปน [$gdata-director$]gdatajavasrc 5. กาหนด Javadoc เปน [$gdata-director$]gdatajavadoc 6. จากนนสราง Libray ทช"อ GoogleCollection โดยใหกาหนด Classpath เปน • google-collect-1.0-rc1.jar • google-collect-testfw-1.0-rc1.jar จากนนจะตองทาการเพ-ม Library ทงสองใน Web Project ทพฒนาข2น Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 27. 9 โปรแกรม CalendarServlet จะมเมธอดในการ Authentication ของ Twitter เพ"อกาหนด 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) { Logger.getLogger(TwitterWhatAreYouDoingServiceAuthenticator.class.getName()).log(Level.SEVERE, null, ex); } } และมเมธอดในการเรยกนดหมายทงหมดใน Google Calendar โดยจะเรยกเมธอด Calendar.getInstance() เพ"อเอาวนเวลาป?จจบนมา จากนนจะตองแปลงวนเวลาใหอย&+ในร&ปแบบดงน dd-mm- yyyyThh:mm:ss เพ"อส+งเปนพาราม-เตอร0ของ Google Calendar ในการหาการนดหมายในช+วงวน เวลาระหว+างตวแปร startTime ถ2งตวแปร 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; } 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); Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 28. 10 return resultFeed; } catch (Exception ex) { ex.printStackTrace(); return null; } } สาหรบเมธอด 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); 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(); } 3. TwitterUpdate.java โปรแกรม Calendar Servlet จะเรยกใช Twitter Update ซ2งมการเรยกใชเว5บเซอร0ว-สทช"อ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 29. 11 updateStatus โดยการเขยน source code สามารถทาไดโดยการลากเซอร0ว-สดงกล+าวมาไวในหนาต+าง 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.whatareyoudoingservice.twitterresponse.NilClasses resultObj = result.getDataAsObject(twitter.whatareyoudoingservice.twitterresponse.NilClasses.class); } //TODO - Uncomment the print Statement below to print result. //out.println("The SaasService returned: "+result.getDataAsString()); } catch (Exception ex) { ex.printStackTrace(); } } out.println("</body>"); out.println("</html>"); } finally { out.close(); } } เราสามารถทจะทดลองรนโปรแกรมน แลวตรวจสอบผลลพธ0จากการอฟเดตใน Twitter ดงร&ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 30. 12 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 31. 1 Exercise 5: Google Map Web Services แบบฝกหดในบทนเปนตวอย)างการใช Google Map Web Services เพอเขยน Web Application เพอ แสดงต4าแหน)งของโรงพยาบาลทเกMบรายละเอยดทอย()ในฐานขอม(ล การสรMางฐานขMอม5ลโรงพยาบาล ขนตอนแรกจะเปนการสราง table และเตรยมขอม(ลเพอใชในแบบฝกหด โดยใชโปรแกรม NetBeans หรอ MySQL Query Browser เพอสราง Table ทชอ bkk_hospital ในฐานขอม(ล MySQL ทชอ test โดย ก4าหนดใหม column ต)างๆ ดงน hospital_id INTEGER Primary Key name VARCHAR(60) address VARCHAR(100) city VARCHAR(30) zipcode VARCHAR(5) หรอรนไฟลW bkk_hospital.sql CREATE TABLE `test`.`bkk_hospital` ( `hospital_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(60) NOT NULL, `address` VARCHAR(100) NOT NULL, `city` VARCHAR(30) NOT NULL, `zipcode` VARCHAR(5) NOT NULL, PRIMARY KEY(`hospital_id`) ) ENGINE = InnoDB; ขนตอนต)อมาใหใส)ขอม(ลรายละเอยดทอย()ของโรงพยาบาลใน table ทสรางข-น โดยการรน Store Procedure ดงน INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital', '2 Prannok road Siriraj Bangkoknoi', 'Bangkok', '10700') INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital', '51/3 Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900') INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital', 'Phaya Thai Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 32. 2 Road, Phaya Thai', 'Bangkok', '10400') การสราง Enterprise Application Project แบบฝกหดนจะสราง Project ทเปน Enterprise Application โดยม Entity Class ทช"อ BkkHospital เพ"อทา ORM (Obeject Relational Mapping) กบ table ทช"อ bkk_hospital และมโปนแกรม Java Servlet ในการแสดงรายช"อโรงพยาบาลทอย&+ในฐานขอม&ลใหผ&ใชเล"อกแลวเรยกใชโปรแกรม Java Servlet อกโปรแกรม ในการแสดงตาแหน+งของโรงพยาบาลจาก Google Map โดยมขนตอนการสรางโปรเจ5คดงน 1. เล"อกเมน& File > New Project.. 2. ในไดอะล5อก New Project ใหเล"อก Categories เปน Java EE และเล"อก Projects เปน Enterprise Application แลวกด Next 3. กาหนด Project Name: เปน BkkHospitalGoogleMap แลวเล"อก Project Location: เปน Director ทเราตองการจะเก5บไฟล0ไว จากนนเล"อก Server เปน GlassFish V2 แลวกด Finish การพฒนาโปรแกรม Entity Class ขนตอนนจะเปนการสราง Entity Class จาก table ทช"อ bkk_hospital ซ1งมการสรางมากอนแลว โดยม ขนตอนการพฒนาโปรแกรมนมดงน 1. เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด BkkHospitalGoogleMap-ejb จากนนเล"อกคาสง New > Other.. 2. ในไดอะล5อก New File ใหเล"อก Categories ทช"อ Persistence เล"อก File Types: เปน Entity Classes from Database แลวกด Next 3. ในไดอะล5อก New Entity Classes from Database ใหเล"อก Data Sources: เปน jdbc:mysql//localhost:3306/test และ Selected Tables: เปน bkk_hospital ดแลวกด Next 4. ในไดอะล5อกถดไปใหระบ Package: เปน entity แลวกดป6ม Create Persistence Unit... 5. ในไดอะล5อก Create Persistence Unit... กาหนด Persistence Unit Name: เปน HospitalGoogleMapPU และค+า Presistence Libray เปน TopLink แลวกด Create 6. กด Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 33. 3 การพฒนาโปรแกรม BkkHospitalFacade (Session Bean) โปรแกรม BkkHospitalFacade จะเปน Session Bean เพ"อสราง Business method ในการสราง แกไข ลบ และเรยกด&ขอม&ลของ table ทสอดคลองกบ Entity Class โดยจะมขนตอนการพฒนาดงน 1. เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด BkkHospitalGoogleMap-ejb จากนนเล"อกคาสง New > Other... 2. ในไดอะล5อก New File ใหเล"อก Categories ทช"อ Persistence เล"อก File Types: เปน Session Beans for Entity Classes แลวกด Next 3. ในไดอะล5อก New Session Beans for Entity Classes ใหเล"อก Selected Entity Classes: เปน entity.BkkHospital แลวกด Next 4. ในไดอะล5อกถดไปใหระบ Package: เปน entity ส+วนค+าอ"นๆ เปนตามทตงไว แลวกด Finish การพฒนาโปรแกรม HospitalSelector.java โปรแกรม HospitalSelector.java เปนโปแกรมจาวา Servlet เพ"อแสดงรายช"อโรงพยาบาลทเก5บในฐาน ขอม&ลโดยจะแสดงใน Drop-down List และเม"อผ&ใชเล"อกโรงพยาบาลโปรแกรมจะส+งต+อไปยงโปรแกรม Servlet ทช"อ DisplayLocation.java เราสามารถทจะพฒนาโปรแกรม HospitalSelector.java ตามขนตอนในการ พฒนา Java Servlet ทอธ-บายไวในแบบฝกหดทผ+านมา โดยม source code ดงน 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 { @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(); Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 34. 4 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("<input type='submit' value='Show Location' />"); out.println("</form>"); out.println("</body>"); out.println("</html>"); } .... } การพฒนาโปรแกรม DisplayLocation.java โปรแกรม DisplayLocation.java เปนโปรแกรม Servlet ทเรยกใชเว5บเซอร0ว-สของ Google Map แสดงแสดงแผนทของโรงพยาบาลทเล"อกจาก HospitalSelector.java โดยมขนตอนการพฒนาโปรแกรมดงนดงน 1. เล"อกหนาต+าง Projects แลวคล-:กขวาทโหนด HospitalGoogleMap จากนนเล"อกคาสง New > Other 2. ในไดอะล5อก New File ใหเล"อก Categories ทช"อ Web เล"อก File Types: เปน Servlet แลวกด Next 3. กาหนด Class Name: เปน DisplayLocation และ Package เปน controller แลวกด Finish 4. เล"อกหนาต+าง Services แลวขยายโหนด Web Services > Google > Map Service 5. ในหนาต+าง Editor คล-:กขวา sourec code แลวเล"อกคาสง Insert Code.. > Call Enterprise Bean ... แลวเล"อก BkkHospitalFacade 6. ลากเซอร0ว-ส getGoogleMap มาใส+ไวในหนาต+าง Editor ทแสดง source code ของไฟล0 DisplayLocation.java แลวแกไข 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>Servlet DisplayLocation</title>"); out.println("</head>"); out.println("<body>"); try { Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 35. 5 Object id = (Object) new Integer(request.getParameter("hospital_id")); BkkHospital hospital = bkkHospitalFacade.find(id); String address = hospital.getName() + ", " + hospital.getCity(); java.lang.Integer zoom = 15; String iframe = "false"; out.println("<h1>Google Map for " + hospital.getName() + "</h1>"); RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe); out.println(result.getDataAsString()); } catch (Exception ex) { ex.printStackTrace(); } out.println("</body>"); out.println("</html>"); out.close(); } 7. โปรแกรมนจะเรยกใชเว5บเซอร0ว-สของ Google Map ซ2งเราจะตองทาการลงทะเบยนท url ทช"อ http://code.google.com/apis/maps/signup.html โดยกาหนดค+า My web site URL เปน http://localhost:8080 แลวกดป6ม Generate API Key 8. ทาการก5อบป@Aค+า API Key ทไดไปใส+ในไพล0ทช"อ googlemapservices.properties ทอย&+ภายในโหนด HospitalGoogleMap > Source Packages > org.netbeans.saas.google ดงตวอย+างเช+น api_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg การทดสอบโปรแกรม 1. ทาการ Build และ Deploy โปรแกรม BkkHospitalGoogleMap 2. Run โปรแกรม BkkHospitalGoogleMap 3. เล"อก URL ของ Web Browser เปนจะไดผลลพธ0ในการรนโปรแกรมดงตวอย+าง Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 36. 6 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 37. 7 Exercise 6: Developing a simple synchronous BPEL program แบบฝกหดนเปนการพฒนาโปรแกรม BPEL เพอแสดงตวอย)างการเขยน Business Process แบบ Synchronous แบบฝกหดนจะอธ2บายการใช NetBeans เพอสรางไฟลW XML Schema, ไฟลW WSDL และไฟลW BPEL โปรแรม BPEL Process ทจะพฒนาข-นเปนธ6รกรรมเพอท4าการคดลอกขอความ ขนตอนในการพฒนาโปรแกรม 1. พฒนาโปรเจMค HelloBPEL 2. พฒนา XML Schema 3. พฒนาไฟลW WSDL 4. พฒนา BPEL Process 5. พฒนาโปรเจMค Composite Application การพ#ฒนาโปรเจ`ค HelloBPEL แบบฝกหดนจะท4าการสรางโปรเจMคส4าหรบ Service Oriented Architecture ข-นมาใหม) โดยจะมขนตอน การพฒนาดงน 1. เลอกเมน( File => New Project.. 2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลวกด Next 3. ก4าหนด Project Name เปน HelloBPEL แลวกด Finish การพ#ฒนา XML Schema ขนตอนถดไปเปนการสรางไฟลW XML Schema เพอก4าหนดร(ปแบบของไฟลW XML ดง Listing ท 1 ซ-ง โปรแกรม NetBeans จะม Wizard ในการสราง XML Schema อตโนมต2 โดยมขนตอนการพฒนาดงน Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 38. 8 1) สรางไฟลW SampleData.xsd 1. เลอกหนาต)าง Projects ขยายโหนด HelloBPEL แลวคล2[กขวาทโหนด Process Files จากนนเลอกค4า สง New > Other.. 2. ในไดอะลMอก New File เลอก Categories: เปน XML และ File Types: เปน XML Schema แลวกด Next 3. ก4าหนด File Name: เปน SampleData แลวกด Finish 4. หนาต)าง Editor จะแสดงไฟลW SampleData.xsd ดงร(ป 2) สราง Complex Type ส4าหรบ XML schema 1. ในไฟลW SampleData.xsd เลอกแทป Design แลวลากไอคอน Complex Type ในหนาต)าง Palette มาไวภายใตโหนด Complex Type 2. โปรแกรม NetBeans จะเพ2ม complex type ใหม)ทชอ newComplexType ใหก4าหนดชอใหม)เปน simpleProcess จะไดผลลพธWดงร(ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 39. 9 3) การเพ2ม local element ส4าหรบ simpleProcess 1. ในไฟลW SampleData.xsd เลอกแทป Design แลวลากไอคอน Element ในหนาต)าง Palette มาไวภาย ใตโหนด simpleProcess โปรแกรม NetBeans จะเพ2มโหนดใหม)ชอ newElement 2. คล2[กขวาทโหนด newElement แลวเลอก Properties 3. ในไดอะลMอก newElement ก4าหนดค)า Name: เปน paramA และเลอกป6zม ellipse (...) ทค)า Definition แลวขยายโหนด Built-in Types ใน List แลวเลอกโหนด string โดยแลวกดป6zม Close จะไดผลลพธWดง ร(ป 4) การเพ2ม global element 1. ในไฟลW SampleData.xsd เลอกแทป Design แลวลากไอคอน Element ในหนาต)าง Palette มาไวภาย ใตโหนด Element โปรแกรม NetBeans จะเพ2มโหนดใหม)ชอ newElement ภายใตโหนด Element 2. คล2[กขวาทโหนด newElement แลวเลอก Properties 3. ในไดอะลMอก newElement ก4าหนดค)า Name: เปน typeA และเลอกป6zม ellipse (...) ทค)า Definition แลวขยายโหนด Complex Types ใน List แลวเลอกโหนด simpleProcess โดยแลวกดป6zม Close จะ ไดผลลพธWดงร(ป 4. กดป6zม Save Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 40. 10 Listing ท 1 ไฟล0 SampleData.xsd <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/SampleData" xmlns:tns="http://xml.netbeans.org/schema/SampleData" elementFormDefault="qualified"> <xsd:complexType name="simpleProcess"> <xsd:sequence> <xsd:element name="paramA" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="typeA" type="tns:simpleProcess"/> </xsd:schema> การพ#ฒนาไฟลe WSDL ขนตอนถดไปเปนการสรางไฟลW WSDL ส4าหรบน2ยามเวMบเซอรWว2สทจะใชในโปรเจMค โดยมขนตอนการ พฒนาดงน 1. เลอกหนาต)าง Projects ขยายโหนด HelloBPEL แลวคล2[กขวาทโหนด Process Files จากนนเลอกค4า สง New > WSDL Document... 2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เปน HelloSample เลอกช)อง Import XML Schema File(s) แลวเลอกไฟลW src/SampleData.xsd โดยการกดป6zม Browse แลวเลอกไฟลWดงร(ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 41. 11 3. กด Next ในหนาถดไป ส4าหรบส)วนของ Input: ก4าหนด Message Part Name เปน inputType และ เลอกป6zม (...) ในส)วน Element Or Type แลวเลอก HelloBPEL > src/SampleData.xsd > Elements > typeA จากรายการ ดงร(ป 4. ส4าหรบส)วนของ Output: ก4าหนด Message Part Name เปน resultType และเลอกป6zม (...) ในส)วน Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 42. 12 Element Or Type แลวเลอก HelloBPEL > src/SampleData.xsd > Elements > typeA จากรายการ และจะไดไดอะลMอกดงร(ป 5. กด Next ในหนาถดไป ส4าหรบค)า Binding Subtype เลอกป6zม Document Literal แลวกด Finish จะ ไดไฟลW HelloSample.wsdl ดงร(ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 43. 13 การพ#ฒนา BPEL Process ขนตอนนเปนการสรางไฟลW BPEL ส4าหรบน2ยาม Business Process ทจะใชในโปรเจMค โดยมขนตอน การพฒนาดงน 1) สรางไฟลW HelloProcess.bpel 1. เลอกหนาต)าง Projects ขยายโหนด HelloBPEL แลวคล2[กขวาทโหนด Process Files จากนนเลอกค4า สง New > BPEL Process.. 2. ก4าหนด File Name: เปน HelloProcess แลวกด Finish 3. โปรแกรม NetBeans จะสรางไฟลW HelloProcess.bpel และหนาต)าง Editor จะแสดงไฟลWในโหมด designer ดงร(ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 44. 14 . 2) การเพ2ม partner link 1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน HelloSample.wsdl ในหนาต)าง Project มาไวภายใตหนาต)าง design 2. โปรแกรมจะแสดงไดอะลMอก PartnerLink1 [Partner Link] – Property Editor ใหใชค)าทก4าหนดมาแลว กด OK 3) การเพ2มธ6รกรรม Receive 1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน Receive ในหนาต)าง Palette มาไวมา ไวตรงบลMอกธ6รกรรมว)างเปล)า 2. โปรแกรมจะก4าหนดธ6รกรรม Receive ทชอ Receive1 ในหนาต)าง Design ใหคล2[กทไอคอน Edit ต4าแหน)งบนธ6รกรรม Receive1 3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ใหก4าหนด Name: เปน start และเลอก Partner Link: เปน PartnerLink1 4. ในช)อง Input Variable: กดป6zม Create.. เมอไดอะลMอก New Input Variable แสดงข-น ใหก4าหนด Name: เปน inputVar แลวกด OK จะไดไดอะลMอกดงร(ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 45. 15 5. กด OK จะได HelloProcess ดงร(ป 3) การเพ2มธ6รกรรม Reply 1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน Reply ในหนาต)าง Palette มาไวในหนาต)าง design ระหว)าง บลMอกธ6รกรรม Receive1 กบธ6รกรรม Process End 2. โปรแกรมจะก4าหนดธ6รกรรม Reply ทชอ Reply1 ในหนาต)าง Design ใหคล2[กไอคอน Edit ของธ6รกรรม Reply1 3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner Link: เปน PartnerLink1 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 46. 16 4. ในช)อง Output Variable: กดป6ม Create.. เมอไดอะลMอก New Output Variable แสดงข-น z ใหก4าหนด Name: เปน outputVar แลวกด OK 4) การเพ2มธ6รกรรม Assign 1. ในไฟลW HelloProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง Palette มาไวในหนาต)าง design ระหว)าง ธ6รกรรม start กบธ6รกรรม end 2. ในหนาต)าง Editor เลอกธ6รกรรม Assign1 แลวเลอกแทป Mapper ท4าการโยงโหนด paramA ในส)วน inputVar ในหนาต)างดานซายเขากบโหนด paramA ในส)วน inputVar ใน หนาต)างดานขวา (เปนการกMอปปŒค)าจากอ2นพ6ตไปยงเอาทWพ6ต) ดงร(ป • 3. จะได BPEL Process ดงร(ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 47. 17 4. กดป6ม Save การพฒนาโปรเจ"ค Composite Application ขนตอนนเปนการสราง Composite Application เพ"อทรน SampleBPEL บน BPEL Engine ทใช มาตรฐาน JBI โดยมขนตอนดงน 1. เล"อกเมน& File => New Project.. 2. ในไดอะล5อก New Project ใหเล"อก Categories เปน SOA และ Projects เปน Composite Application แลวกด Next 3. กาหนด Project Name เปน HelloApplication แลวกด Finish 4. ในหนาต+าง Project เล"อกโหนด HelloApplication แลวคล-:กขวาเล"อก Add JBI Module .. 5. ใหเล"อกโปรเจ5ค HelloBPEL แลวกดป6ม Add Project JAR Files 6. โปรแรม NetBeans จะเพ-มโหนด HelloBPEL.jar ภายใต HelloApplication > JBI Module การทดสอบโปรแกรม 1. ทาการ Deploy โปรเจ5ค HelloApplication จะไดหนาต+าง Editor ดงร&ป Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 48. 18 2. ในหนาต+าง Project เล"อกโหนด HelloApplication > Test แลวคล-:กขวาเล"อก New Test Case 3. ในไดอะล5อก New Test Case ใหกาหนด Test Case Name: เปน TestCase1 แลวกด Next 4. ในหนาถดไปใหเล"อกไฟล0 WSDL เปน HelloSample.wsdl แลวกด Next 5. ในหนาถดไปใหเล"อก HelloSampleOperation แลวกด Finish 6. หนาต+าง Editor จะแสดงไฟล0 Input.xml ใหแก source code ส+วน paramA ดงน <sam:paramA>Hello Thana</sam:paramA> 7. เล"อกโหนด TestCase1 แลวคล-:กขวาเล"อก Run 8. จะเห5นผลลพธ0ปรากฎในไฟล0 Output.xml ดง Listing ท 2[หมายเหตการรนครงแรกจะไม+มผลเปรยบ เทยบจ2งแสดงผลเปน fail แต+ครงต+อๆมาจะมผลเปรยบเทยบจ2งระบว+า pass ดงร&ป] Listing ท 2 ผลลพธ0จากการรน 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" Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 49. 19 xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="http://xml.netbeans.org/schema/SampleData" xmlns="http://xml.netbeans.org/schema/ SampleData"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <typeA xmlns="http://xml.netbeans.org/schema/SampleData"> <ns0:paramA xmlns:ns0="http://xml.netbeans.org/schema/SampleData">Hello Thana</ns0:paramA> </typeA> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 50. 20 Exercise 7: BPEL for Writing to File แบบฝกหดนเปนการสราง Business Process เพอเขยนขอม(ลทไดรบผ(ใชงานลงไฟลW โดยใชโปรแกรม BPEL ขนตอนในการพฒนาโปรแกรม 12. พฒนาโปรเจMค FileBPEL 13. พฒนาไฟลW WSDL ส4าหรบ SOAPBinding 14. พฒนาไฟลW WSDL ส4าหรบ FileBinding 15. พฒนา BPEL Process 16. พฒนาโปรเจMค Composite Application 17. ทดสอบโปรแกรมผ)าน TestCase 18. ทดสอบโปรแกรมผ)าน Web Application 1. การพ#ฒนาโปรเจ`ค FileBPEL แบบฝกหดนจะท4าการสรางโปรเจMคส4าหรบ Service Oriented Architecture ข-นมาใหม) โดยจะมขนตอน การพฒนาดงน 6. เลอกเมน( File > New Project 7. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน BPEL Module แลว กด Next 8. ก4าหนด Project Name เปน FileBPEL แลวกด Finish 2. การพ#ฒนาไฟลe WSDL สSาหร#บ SOAPBinding ขนตอนถดไปเปนการสรางไฟลW WSDL ส4าหรบ SOAPBinding ส4าหรบน2ยาม Business Process ทจะ พฒนาข-น เพอใหสามารถเรยกใชเปนเวMบเซอรWว2สได โดยมขนตอนการพฒนาดงน 3. เลอกหนาต)าง Projects คล2[กขวาทโหนด FileBPEL ใหเลอก New > WSDL Document .. 4. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เปน DataIO ก4าหนด WSDL Type: เปน Concrete WSDL Document และก4าหนด Binding เปน SOAP และ Types เปน RPC Literal ดง แสดงในร(ปท 1 แลวกด Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 51. 21 ร5ร5ปท 1 แสดงการก4าหนดค)า WSDL Document 5. ในหนาถดไป ส4าหรบส)วนของ Input: ก4าหนด Message Part Name เปน id กด Add แลวเพ2ม input ส4าหรบ firstName, lastName, salary (int) และส4าหรบส)วนของ Output: ก4าหนด Message Part Name เปน result ดงแสดงในร(ปท 2 จากนนกด Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 52. 22 ร5ปท 2 แสดงการใส)ค)า Input และ Output Messages 2. การพ#ฒนาไฟลe WSDL สSาหร#บ FileBinding ขนตอนถดไปเปนการสรางไฟลW WSDL ส4าหรบ FileBinding เพอเขยนลงไฟลW โดยมขนตอนการพฒนา ดงน 1. เลอกหนาต)าง Projects คล2[กขวาทโหนด FileBPEL ใหเลอก New > WSDL Document .. 2. ในไดอะลMอก New WSDL Document ก4าหนด File Name: เปน FileResult ใหเลอก WSDL Type: เปน Concrete WSDL Document Binding เปน FILE และ Types เปน Write ดงแสดงในร(ปท 3 จากนนกด Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 53. 23 ร5ปท 3 แสดงการใส)ค)าส4าหรบ New WSDL Document 3. ในหนาถดไป ก4าหนดค)า File Name: เปน result.txt ส4าหรบ Path: ให กด Browse… เพอเลอก Path: ไปท C:SOA_output (กรณทยงไม)ม folder จะตองท4าการสรางข-นมา) และเลอก File Exists: เปน Append to Existing File ดงแสดงในร(ปท 4 จากนนกด Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 54. 24 ร5ปท 4 แสดงการก4าหนดค)าส4าหรบการเขยนไฟลW 3. การพ#ฒนา BPEL Process ขนตอนนเปนการสรางไฟลW BPEL ส4าหรบน2ยาม Business Process ทจะใชในโปรเจMค โดยมขนตอน การพฒนาดงน 3.1 สรางไฟลW FileProcess.bpel 1. เลอกหนาต)าง Projects แลวคล2[กขวาทโหนด FileBPEL จากนนเลอกค4าสง New > BPEL Process 2. ก4าหนด File Name: เปน FileProcess แลวกด Finish 3. โปรแกรม NetBeans จะสรางไฟลW FileProcess.bpel และหนาต)าง Editor จะแสดงไฟลWในโหมด designer Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 55. 25 3.2 การเพ2ม partner link 1. ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน DataIO.wsdl ในหนาต)าง Project มาไว ในแทบเทาทางซายมอภายใตหนาต)าง design 2. ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน DataIOPartnerLink 3. ลากไอคอน FileResult.wsdl ในหนาต)าง Project มาไวในแทบเทาทางขวามอภายใตหนาต)าง design 4. ดบเบ2ลคล2[กตรงขอความ PartnerLink1 และเปลยนชอเปน FilePartnerLink 3.3 การเพ2มธ6รกรรม Receive 1. ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Receive ในหนาต)าง Palette มาไวตรง บลMอกธ6รกรรมว)างเปล)า 2. โปรแกรมจะก4าหนดธ6รกรรม Receive ทชอ Receive1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม Receive1 3. ในไดอะลMอก Receive1 [Receive] - – Property Editor ใหก4าหนด Name: เปน start และเลอก Partner Link: เปน DataIOPartnerLink 4. ในช)อง Input Variable: กดป6zม Create เมอไดอะลMอก New Input Variable แสดงข-น ใหก4าหนด Name: เปน inData แลวกด OK 3.4 การเพ2มธ6รกรรม Reply 1. ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Reply ในหนาต)าง Palette มาไวใน หนาต)าง design ระหว)างธ6รกรรม start กบธ6รกรรม Process End 2. โปรแกรมจะก4าหนดธ6รกรรม Reply ทชอ Reply1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม Reply1 3. ในไดอะลMอก Reply1 [Reply] - – Property Editor ใหก4าหนด Name: เปน end และเลอก Partner Link: เปน DataIOPartnerLink 4. ในช)อง Output Variable: กดป6zม Create เมอไดอะลMอก New Output Variable แสดงข-น ใหก4าหนด Name: เปน outData แลวกด OK 3.5 การเพ2มธ6รกรรม Invoke ส4าหรบ write 1. ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Invoke ในหนาต)าง Palette มาไวใน หนาต)าง design ระหว)าง start กบธ6รกรรม end Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 56. 26 2. โปรแกรมจะก4าหนดธ6รกรรม Invoke ทชอ Invoke1 ในหนาต)าง Design ใหดบเบ2ลคล2[กธ6รกรรม Invoke1 3. ในไดอะลMอก Invoke1 [Invoke] - – Property Editor ใหก4าหนด Name: เปน invokeWriteToFile และเลอก Partner Link: เปน FilePartnerLink และ Operation: เปน write 4. ในช)อง Input Variable: กดป6zม Create เมอไดอะลMอก New Input Variable แสดงข-น ใหก4าหนด Name: เปน inFile แลวกด OK 3.6 การเพ2มธ6รกรรม Assign 1. ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง Palette มาไวใน หนาต)าง design ระหว)าง ธ6รกรรม start กบธ6รกรรม invokeWriteToFile 2. ในหนาต)าง Editor เลอกธ6รกรรม Assign1 ในหนาต)าง BPEL Mapper ท4าการเชอมโยงขอม(ลในโหนด inData ทางดานซายมอ โดยเลอก String > Concat จากนนเชอมโยง 1. firstName เขาเปน String ช)องท 1 2. ‘ ‘ เปน String ช)องท 2 3. lastName เขาเปน String ช)องท 3 4. ‘ => ‘ เปน String ช)องท 4 5. salary เขาเปน String ช)องท 5 6. จากนนเชอมโยง return String ไปยง part1 ใน inFile ทางดานขวามอ ดงแสดงในร(ปท 5 ร5ปท 5 แสดง Business Rule ระหว)าง start และ invokeWriteToFile 3. ในไฟลW FileProcess.bpel เลอกแทป Design แลวลากไอคอน Assign ในหนาต)าง Palette มาไวใน หนาต)าง design ระหว)าง ธ6รกรรม invokeWriteToFile กบธ6รกรรม end 4. ในหนาต)าง Editor เลอกธ6รกรรม Assign2 ในหนาต)าง BPEL Mapper เลอก String > String Literal แลวก4าหนดค)าเปน Success เชอมโยงฟ~ลดWระหว)าง string literal กบ result ทอย()ใน outData ดง แสดงในร(ปท 6 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 57. 27 ร5ปท 6 แสดง Business Rule ระหว)าง invokeWriteToFile และ end 5. เราจะไดโปรแกรม BPEL ดงแสดงในร(ปท 7 ร5ปท 7 แสดง BPEL Process ของทงระบบ 6. Clean and Build โปรเจMค 4. การพ#ฒนาโปรเจ`ค Composite Application ขนตอนนเปนการสราง Composite Application เพอทรน FileBPEL บน BPEL Engine ทใชมาตรฐาน JBI โดยมขนตอนดงน 1. เลอกเมน( File > New Project Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 58. 28 2. ในไดอะลMอก New Project ใหเลอก Categories เปน SOA และ Projects เปน Composite Application แลวกด Next 3. ก4าหนด Project Name เปน FileCompositeApp แลวกด Finish 4. ในหนาต)าง Project เลอกโหนด FileCompositeApp แลวคล2[กขวาเลอก Add JBI Module.. 5. ใหเลอกโปรเจMค FileBPEL แลวกดป6zม Add Project JAR Files 6. โปรแรม NetBeans จะเพ2มโหนด FileBPEL.jar ภายใต FileCompositeApp > JBI Module 7. คล2[กขวาท FileCompositeApp เลอก Clean and Build 8. คล2[กท Service Assembly จะเหMนผลลพธWดงแสดงในร(ปท 8 ร5ปท 8 แสดง Service Assembly ของ FileCompositeApp 5. การทดสอบโปรแกรมผlาน TestCase 9. ท4าการ Deploy โปรเจMค FileCompositeApp 10. ในหนาต)าง Project เลอกโหนด FileCompositeApp > Test แลวคล2[กขวาเลอก New Test Case 11. ในไดอะลMอก New Test Case ใหก4าหนด Test Case Name: เปน TestCase1 แลวกด Next 12. หนาถดไปใน FileBPEL ใหเลอกไฟลW WSDL เปน DataIO.wsdl แลวกด Next 13. ในหนาถดไปใหเลอก DataIOOperation แลวกด Finish 14. หนาต)าง Editor จะแสดงไฟลW Input.xml ใหแก source code ดงน <id>1234</id> <firstName>Somjai</firstName> <lastName>Jaidee</lastName> <salary>38000</salary> 15. กดป6zม Save เลอกโหนด TestCase1 แลวคล2[กขวาเลอก Run 16. จะเหMนผลลพธWปรากฎในไฟลW Output.xml ดงแสดงในร(ปท 9 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 59. 29 ร5ปท 9 แสดงผลลพธWทไดจากการรน TestCase1 17. และจะไดไฟลW result.txt ในไดเรMกทอร c:SOA_output ซ-งมขอม(ลดงน Somjai Jaidee => 38000 6. การพ#ฒนาโปรแกรมผlาน Web Application ท4าการคนหาต4าแหน)ง url ของ soap:address ตามขนตอนดงน 1. คล2[กท Service Assembly ใน FileCompisiteApp และคล2[กท DataIOPort 2. ในหนาต)าง properties ใหท4าการ copy ค)าของ soap:address 3. ทดสอบโดยเป~ด Web Browser แลว paste ค)าท copy ไว จากนนใหท4าการเปลยนค)าของ URL ใหเปน ดงน http://localhost:9080/DataIOService/DataIOPort?WSDL พฒนาโปรแกรม Web Application เพอใหผ(ใชปsอนค)าขอม(ลต)างๆ จากนนโปรแกรมจะท4าการเขยน ขอม(ลลงไฟลW โดยมขนตอนการพฒนาดงน 1. เลอกเมน( File > New Project 2. ในไดอะลMอก New Project ใหเลอก Categories เปน Web และ Web Application แลวกด Next 3. ก4าหนด Project Name เปน FileBPUI แลวเลอก Project Location เปน folder ทเราตองการจะเกMบ ไฟลWไว 4. จากนนเลอก Server เปน GlassFish V2 ก4าหนด Jave EE Version: เปน Java EE 5 แลวกด Finish 5. ในช)อง Frameworks ใหเลอก Visual Web JavaServer Faces จากนนกด Finish 6. คล2[กขวาทโหนด FileBPUI จากนนเลอกค4าสง New > Other… ใหเลอก Categories เปน Web Services และ Web Service Client แลวกด Next 7. ในไดอะลMอก New Web Service Client ใหเลอก WSDL URL: แลวใส) URL เปน http://localhost:9080/DataIOService/DataIOPort?WSDL แลวกด Finish 8. เลอกไปท Page1.jsp ท4าการออกแบบ Page Layout ดงแสดงในร(ปท 10 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan