SlideShare a Scribd company logo
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
30




                                    āļĢ5āļ›āļ— 10 āđāļŠāļ”āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļŦāļ™āļē Page1.jsp

        9.   āļ4āļēāļŦāļ™āļ”āļ„)āļēāļ„6āļ“āļŠāļĄāļšāļ•2āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆMāļ„āļ•)āļēāļ‡āđ† āđƒāļ™ Page Layout āļ™ āļ”āļ‡āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ— 1
         āļ•āļēāļĢāļēāļ‡āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļ4āļēāļŦāļ™āļ”āļ„)āļē properties āđƒāļŦāļāļšāļ­āļ­āļ›āđ€āļˆâ€™āļ„āļ•)āļēāļ‡āđ†
                 id                   text
          lbID                ID:
          inputID
          lbFirstName         FirstName:
          inputFirstName
          lbLastName          LastName:
          inputLastName
          lbSalary            Salary:
          inputSalary
          BtnSubmit           Submit
         resultText
        10. āļāļ”āļ›6zāļĄ Save
        11. āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ— inputID āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 11




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




                               āļĢ5āļ›āļ— 11 āđāļŠāļ”āļ‡āļāļēāļĢ Add Binding Attribute

   12. āļ—4āļēāļāļēāļĢAdd Binding Attribute āļ— inputFirstName, inputLastName āđāļĨāļ° inputSalary
   13. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļ›6zāļĄ Submit āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļš Java āđāļĨāļ°āđāļŠāļ”āļ‡ source code āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļē
       āđƒāļ™āđ€āļĄāļ˜āļ­āļ” btnSubmit_action āđāļĨāļ§āđ€āļĨāļ­āļ Web Service Client Resources > Call Web Service
       Operation āđ€āļĨāļ­āļāđ„āļ›āļ— DataIOOperation āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™
       public String btnSubmit_action() {
                try { // Call Web Service Operation
                      org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port =
                                                          service.getDataIOPort();
                      java.lang.String id = (String) inputID.getText();
                  java.lang.String firstName = (String)
inputFirstName.getText();
                      java.lang.String lastName = (String) inputLastName.getText();
                      String tmp = (String) inputSalary.getText();
                      int salary = Integer.parseInt(tmp);
                      // TODO process result here
                      java.lang.String result = port.dataIOOperation(id, firstName,
                                                                        lastName, salary);
                      resultText.setText("Result = " + result);
                } catch (Exception ex) {
                      resultText.setText(ex);
                }
                return null;
        }


   14. Clean and Build   āđāļĨāļ° Run āđ‚āļ›āļĢāđ€āļˆMāļ„




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




                                      āļĢ5āļ›āļ— 12 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜WāļŦāļ™āļē Page1.jsp

        15. āđāļĨāļ°āđ„āļŸāļĨW   result.txt āđƒāļ™āđ„āļ”āđ€āļĢMāļāļ—āļ­āļĢ c:SOA_output āļˆāļ°āļĄāļ‚āļ­āļĄ(āļĨāļ”āļ‡āļ™
                    Somjai Jaidee => 38000
                    Nipa Jinjai => 738000




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




                  Exercise 8: BPEL for Writing to Database

       āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ­āđ€āļ‚āļĒāļ™āļ‚āļ­āļĄ(āļĨāļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ
Business Process āļ—āļžāļ’āļ™āļēāđ‚āļ”āļĒāđƒāļŠ GlassFish Open ESB āļœ)āļēāļ™ Database Binding Component

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
   1. āļŠāļĢāļēāļ‡ Table, Connection Pool āđāļĨāļ° JDBC Resources
   2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ DBBPEL
   3. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš DatabaseBinding
   4. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding
   5. āļžāļ’āļ™āļē BPEL Process
   6. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application
   7. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase
   8. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ Web Application


1. āļŠāļĢMāļēāļ‡ Table, Connection Pool āđāļĨāļ° JDBC DataSource

        āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ€āļžāļ­āđƒāļŠāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļžāļ™āļāļ‡āļēāļ™āļ‚āļ­āļ‡āļšāļĢ2āļĐāļ— āđāļĨāļ°āļ—4āļēāļāļēāļĢ config
GlassFish v2 Application Server āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āļ•)āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ„āļ”āđ‚āļ”āļĒāđƒāļŠ JDBC Resource

   1.   āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļŦāļĢāļ­ MySQL Query Browser āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ Employee āđƒāļ™āļāļēāļ™
        āļ‚āļ­āļĄ(āļĨ MySQL āļ—āļŠāļ­ soa āđ‚āļ”āļĒāļ4āļēāļŦāļ™āļ”āđƒāļŦāļĄ column āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™
                    id            VARCHAR(10)        Primary Key
                    firstName     VARCHAR(30)
                    lastName      VARCHAR(30)
                    salary        DOUBLE
        āļŦāļĢāļ­āļĢāļ™āđ„āļŸāļĨW employee.sql
                      DROP TABLE IF EXISTS soa.employee;
                      CREATE TABLE soa.employee (
                        id varchar(10) NOT NULL,
                        firstName varchar(30) NOT NULL,
                        lastName varchar(30) NOT NULL,
                        salary double NOT NULL,
                        PRIMARY KEY (id) )




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



        2.   āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ­āļāđ„āļ›āļ—āđāļ—āļš Services āļ„āļĨ2[āļāļ‚āļ§āļēāļ— Servers > GlassFish V2 āđ€āļĨāļ­āļ View
             Admin Console
        3.   āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āļˆāļ°āļ–(āļāđ€āļ›~āļ”āļ‚-āļ™āđāļĨāļ°āđāļŠāļ”āļ‡āļŦāļ™āļēāļˆāļ­ Admin Console āđƒāļŦāļ›sāļ­āļ™ User Name: āđ€āļ›āļ™
             admin āđāļĨāļ° Password: āđ€āļ›āļ™ adminadmin
        4.   āļ—āļēāļ‡āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­āļ‚āļ­āļ‡ Admin Console āđƒāļŦāļ„āļĨ2[āļāļ— Resources > JDBC > Connection Pools
             āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ­ Connection Pool āļ—āļĄāļ­āļĒ() āļˆāļēāļāļ™āļ™āđƒāļŦāļāļ” New āđāļĨāļ°āđƒāļŠ)āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 1




                            āļĢ5āļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Connection Pool āļ—āļŠāļ­ MySQLPool

        5.   āļāļ” Next āļˆāļēāļāļ™āļ™āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļēāļ•)āļēāļ‡āđ† āļ”āļ‡āļ™
                    1. DatabaseName      soa
                    2. Password          admin
                    3. PortNumber        3306
                    4. ServerName         localhost
                    5. User              root
        6.   āļāļ” Finish āđāļĨāļ§āļāļ” Save
        7.   āđ€āļĨāļ­āļ MySQLPool āđāļĨāļ°āđƒāļŦāļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ›6zāļĄ Ping āļ–āļēāļ‚-āļ™ Ping Succeeded āđāļŠāļ”āļ‡āļ§)āļēāđ€āļŠāļ­āļĄāļ•)āļ­āđ„āļ”
             āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 2




                            āļĢ5āļ›āļ— 2 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•)āļ­āļ‚āļ­āļ‡ MySQLPool āđ„āļ›āļĒāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ soa




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



   8.   āļ„āļĨ2[āļāļ— Resources > JDBC > JDBC Resources āļˆāļēāļāļ™āļ™āđƒāļŦāļāļ” New āđāļĨāļ°āđƒāļŠ)āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 3




                         āļĢ5āļ›āļ— 3 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ JDBC Resource āļ—āļŠāļ­ jdbc/soa

   9.  āļāļ” OK
   10. āđƒāļŠ NetBeans āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•)āļ­āļāļš Database āđ„āļ”āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ—āđāļ—āļš Services āļˆāļ°āđ€āļŦMāļ™ MySQL Driver āļ—āļĄāļĄāļē
       āđƒāļŦāđāļĨāļ§ āļ‹-āļ‡āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Databases > Drivers āļˆāļ°āđ€āļŦMāļ™ Driver āļ—āļŠāļ­ MySQL āđƒāļŦāļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļē āđāļĨāļ§
       āđ€āļĨāļ­āļ Connect Using āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 4




                                 āļĢ5āļ›āļ— 4 āđāļŠāļ”āļ‡ MySQL āļ—āļ­āļĒ()āđƒāļ™ Drivers

   11. āđƒāļŦāļ—4āļēāļāļēāļĢāļĢāļ°āļš6āļ„)āļēāļ‚āļ­āļ‡Database URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/soa
   12. āļŠ4āļēāļŦāļĢāļš User Name: āđāļĨāļ° Password: āđƒāļŦāđƒāļŠ)āļ„)āļēāļ•āļēāļĄāļ—āļ4āļēāļŦāļ™āļ”āđ„āļ§āđƒāļ™āļ•āļ­āļ™āļ•2āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL āļ‹-āļ‡āđƒāļ™āļ—
       āļ™āļˆāļ°āļĄāļ„)āļēāđ€āļ›āļ™ root āđāļĨāļ° admin āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 5 āļāļ” OK 2 āļ„āļĢāļ‡




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




                             āļĢ5āļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢāļ4āļēāļŦāļ™āļ”āļ„)āļēāđƒāļŦāļāļš Database Connection

        13. āļˆāļēāļāļ™āļ™āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš      Database āļˆāļ°āđ€āļŦMāļ™ Connection āđƒāļŦāļĄ)āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 6 (āļ–āļēāļĒāļ‡āđ„āļĄ) Connect āđƒāļŦ
             āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ Connect)




                                 āļĢ5āļ›āļ— 6 āđāļŠāļ”āļ‡ Connection āđ„āļ›āļĒāļ‡ soa Database

     2. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ DBBPEL
          āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļŠ4āļēāļŦāļĢāļš Service Oriented Architecture āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™
     āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
        1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§
             āļāļ” Next
        3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DBBPEL āđāļĨāļ§āļāļ” Finish




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



3. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš DatabaseBinding

      āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ Database āļŠ4āļēāļŦāļĢāļšāđ€āļ‚āļĒāļ™āļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ
āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

   1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document ..
   2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ EmployeeDB āļ4āļēāļŦāļ™āļ” WSDL Type:
      āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ DATABASE āđāļĨāļ° Types āđ€āļ›āļ™ Table
      āļˆāļēāļāļ™āļ™āļāļ” Next
   3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/soa āļāļ” Next
   4. āđ€āļĨāļ­āļ Table: Employee āļˆāļēāļ Available Tables: āđ„āļ›āļĒāļ‡ Selected Tables: āđāļĨāļ°āļāļ” Next
   5. āļāļ” Next āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē JNDI Name āđ€āļ›āļ™ jdbc/soa āļāļ” Finish
   6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨWāļ‚-āļ™āļĄāļēāļŠāļ­āļ‡āđ„āļŸāļĨWāļ„āļ­ EmployeeDB.wsdl āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ service āļ•)āļēāļ‡āđ† āļ‚āļ­āļ‡ Table
      āđāļĨāļ° employee.xsd āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ XML Schema āļ‚āļ­āļ‡ Table
        āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ”(āļ„4āļēāļŠāļ‡āļ•)āļēāļ‡āđ† āđƒāļ™āđ„āļŸāļĨW EmployeeDB.wsdl āļ­āļēāļ—2āđ€āļŠ)āļ™ insert operation āļ‚āļ­āļ‡ table
āđ„āļ”āđ‚āļ”āļĒāđ€āļĨāļ­āļāđ„āļŸāļĨWāļ™ āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW āđƒāļŦāļ‚āļĒāļēāļĒāđāļ—āļ› Bindings > binding >
insert > inputInsert āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 7 āđāļĨāļ§āļ”(āļ— properties āļ‚āļ­āļ‡ jdbc:input āļˆāļ°āđ€āļŦMāļ™āļ„4āļēāļŠāļ‡ sql āđ€āļ›āļ™
       insert into employee (firstName,id,salary,lastName) values (?,?,?,?)




                           āļĢ5āļ›āļ— 7 āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW Employee.wsdl




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



     4. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš SOAPBinding
           āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°
     āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāđƒāļ™āļ—āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ” inputData āđƒāļŦāđ€āļ›āļ™ XML āļ•āļēāļĄ
     DataType āļ—āļ™2āļĒāļēāļĄāđƒāļ™ Employee.xsd āđāļĨāļ° result āđƒāļŦāđ€āļ›āļ™ String āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document ..
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ DatabaseWSDL āļ4āļēāļŦāļ™āļ” WSDL
             Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC
             Literal āđāļĨāļ§āļāļ” Next
        3.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputData āđāļĨāļ§āļ4āļēāļŦāļ™āļ”
             Element Or Type āđ€āļ›āļ™ employee āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 8 āđāļĨāļ°āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Output: āļ4āļēāļŦāļ™āļ” Message
             Part Name āđ€āļ›āļ™ result āļˆāļēāļāļ™āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish




                                   āļĢ5āļ›āļ— 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Element āļ‚āļ­āļ‡ inputData

     5. āļāļēāļĢāļž#āļ’āļ™āļē BPEL Process

          āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™
     āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

     5.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW DBProcess.bpel

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPEL āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > BPEL Process
        2.   āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ DBProcess āđāļĨāļ§āļāļ” Finish
        3.   āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW DBProcess.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™āđ‚āļŦāļĄāļ”



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



        designer

5.2 āļāļēāļĢāđ€āļž2āļĄ partner link

   1.   āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DatabaseWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡
        Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‹āļēāļĒāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design
   2.   āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DatabaseWSDLPartnerLink
   3.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ EmployeeDB.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡
        design
   4.   āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DBPartnerLink

5.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive
   1.   āđƒāļ™āđ„āļŸāļĨW DBProcess.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: āđ€āļ›āļ™ DatabaseWSDLPartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK

5.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Reply
   1.   āđƒāļ™āđ„āļŸāļĨW DBProcess.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: āđ€āļ›āļ™ DatabaseWSDLPartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK

5.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš write
   1.   āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™


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



             āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
        2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ
             Invoke1
        3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ invokeWriteToDB āđāļĨāļ°
             āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DBPartnerLink āđāļĨāļ°āđ€āļĨāļ­āļ Operation: āđ€āļ›āļ™ insert
        4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ InsertIn
        5.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ InsertOut āđāļĨāļ§āļāļ” OK

     5.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign
        1.   āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™
             āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ invokeWriteToDB
        2.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄ(āļĨāđƒāļ™āđ‚āļŦāļ™āļ”
             inData > inputData > employee_Record āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ āđ„āļ›āļĒāļ‡ InsertIn > part >
             employee_Record āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 9 āđ‚āļ”āļĒāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡ field āļ•)āļēāļ‡āđ†āđ€āļŦāļĨ)āļēāļ™
                1. id > id
                2. firstName > firstName
                3. lastName > lastName
                4. salary > salary




                        āļĢ5āļ›āļ— 9 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§)āļēāļ‡ start āđāļĨāļ° invokeWriteToDB

        3.   āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™
             āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ invokeWriteToDB āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
        4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āđ€āļĨāļ­āļ String > String Literal
             āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļēāđ€āļ›āļ™ Success āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŸ~āļĨāļ”WāļĢāļ°āļŦāļ§)āļēāļ‡ string literal āļāļš result āļ—āļ­āļĒ()āđƒāļ™ outData āļ”āļ‡


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



        āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 10




                   āļĢ5āļ›āļ— 10 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§)āļēāļ‡ invokeWriteToDB āđāļĨāļ° end

   5.   āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 11




                              āļĢ5āļ›āļ— 11 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļ‡āļĢāļ°āļšāļš

   6.   Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„

6. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application
       āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ DBBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™
JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™



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



        1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite
             Application āđāļĨāļ§āļāļ” Next
        3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DBCompositeApp āđāļĨāļ§āļāļ” Finish
        4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” DBCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module
        5.   āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ DBBPEL āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files
        6.   āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” DBBPEL.jar āļ āļēāļĒāđƒāļ• DBCompositeApp > JBI Module
        7.   āļ„āļĨ2[āļāļ‚āļ§āļēāļ— DBCompositeApp āđ€āļĨāļ­āļ Clean and Build
        8.   āļ„āļĨ2[āļāļ— Service Assembly āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 12




                            āļĢ5āļ›āļ— 12 āđāļŠāļ”āļ‡ Service Assembly āļ‚āļ­āļ‡ DBCompositeApp

     7. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase
        1.   āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ DBCompositeApp
        2.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” DBCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case
        3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
        4.   āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ DBBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ DatabaseWSDL.wsdl āđāļĨāļ§āļāļ” Next
        5.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ DatabaseWSDLOperation āđāļĨāļ§āļāļ” Finish
        6.   āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļ”āļ‡āļ™
                     <tab:employee_Record>
                        <tab:id>1234</tab:id>
                        <tab:lastName>Jaidee</tab:lastName>
                        <tab:salary>38000</tab:salary>



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



                    <tab:firstName>Somjai</tab:firstName>
                 </tab:employee_Record>
   7.   āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run
   8.   āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨW Output.xml āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 13




                             āļĢ5āļ›āļ— 13 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜Wāļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™ TestCase1

   9.   āđāļĨāļ°āđ„āļ”āļ‚āļ­āļĄ(āļĨāļ‹-āļ‡āđ€āļ‚āļēāđ„āļ›āļ­āļĒ()āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 14




                     āļĢ5āļ›āļ— 14 āđāļŠāļ”āļ‡āļ‚āļ­āļĄ(āļĨāļ—āļ­āļĒ()āđƒāļ™āļ•āļēāļĢāļēāļ‡ Employee āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ soa

8. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ Web Application

   āļ—4āļēāļāļēāļĢāļ„āļ™āļŦāļēāļ•4āļēāđāļŦāļ™)āļ‡ URL āļ‚āļ­āļ‡ soap:address āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

   1.   āļ„āļĨ2[āļāļ— Service Assembly āđƒāļ™ DBCompositeApp āđāļĨāļ°āļ„āļĨ2[āļāļ— DatabaseWSDLPort
   2.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ properties āđƒāļŦāļ—4āļēāļāļēāļĢ copy āļ„)āļēāļ‚āļ­āļ‡ soap:address
   3.   āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›~āļ” Web Browser āđāļĨāļ§ paste āļ„)āļēāļ— copy āđ„āļ§ āļˆāļēāļāļ™āļ™āđƒāļŦāļ—4āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļ„)āļēāļ‚āļ­āļ‡ URL āđƒāļŦāđ€āļ›āļ™
        āļ”āļ‡āļ™ http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL


       āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđƒāļŦāļœ(āđƒāļŠāļ›sāļ­āļ™āļ„)āļēāļ‚āļ­āļĄ(āļĨāļ•)āļēāļ‡āđ† āļˆāļēāļāļ™āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—4āļēāļāļēāļĢāđ€āļ‚āļĒāļ™
āļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
   1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
   2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next
   3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DBBPUI āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļMāļš
       āđ„āļŸāļĨWāđ„āļ§



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



        4.   āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ” Finish
        5.   āđƒāļ™āļŠ)āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Visual Web JavaServer Faces āļˆāļēāļāļ™āļ™āļāļ” Finish
        6.   āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web
             Services āđāļĨāļ° Web Service Client āđāļĨāļ§āļāļ” Next
        7.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠ) URL āđ€āļ›āļ™
             http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL āđāļĨāļ§āļāļ” Finish
        8.   āđ€āļĨāļ­āļāđ„āļ›āļ— Page1.jsp āļ—4āļēāļāļēāļĢāļ­āļ­āļāđāļšāļš Page Layout āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 15




                                    āļĢ5āļ›āļ— 15 āđāļŠāļ”āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļŦāļ™āļē Page1.jsp

        9.   āļ4āļēāļŦāļ™āļ”āļ„)āļēāļ„6āļ“āļŠāļĄāļšāļ•2āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆMāļ„āļ•)āļēāļ‡āđ† āđƒāļ™ Page Layout āļ™ āļ”āļ‡āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ— 1




         āļ•āļēāļĢāļēāļ‡āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļ4āļēāļŦāļ™āļ”āļ„)āļē properties āđƒāļŦāļāļšāļ­āļ­āļ›āđ€āļˆâ€™āļ„āļ•)āļēāļ‡āđ†
           Object            id                    text
            Type
          Label       lbID                   ID:
          Text Field inputID
          Label       lbFirstName            FirstName:




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




       Object               id                      text
       Type
     Text Field inputFirstName
     Label       lbLastName               LastName:
     Text Field inputLastName
     Label       lbSalary                 Salary:
     Text Field inputSalary
     Button      BtnSubmit                Submit
     Static Text resultText

   10. āļāļ”āļ›6zāļĄ Save
   11. āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ—   inputID āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 16




                                 āļĢ5āļ›āļ— 16 āđāļŠāļ”āļ‡āļāļēāļĢ Add Binding Attribute

   12. āļ—4āļēāļāļēāļĢAdd Binding Attribute āļ— inputFirstName, inputLastName āđāļĨāļ° inputSalary
   13. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļ›6zāļĄ Submit āļŦāļ™āļēāļ•+āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļš Java āđāļĨāļ°āđāļŠāļ”āļ‡ source code āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļē
       āđƒāļ™āđ€āļĄāļ˜āļ­āļ” btnSubmit_action āđāļĨāļ§āđ€āļĨāļ­āļ Web Service Client Resources > Call Web Service
       Operation āđ€āļĨāļ­āļāđ„āļ›āļ— DatabaseWSDLOperation āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™
       public String btnSubmit_action() {
                 try { // Get port
                  org.netbeans.j2ee.wsdl.dbbpel.databasewsdl.DatabaseWSDLPort-
Type port = service_1.getDatabaseWSDLPort();
                      // Retrieve values in text fields on UI
                      java.lang.String id = (String) inputID.getText();
                  java.lang.String firstName = (String)
inputFirstName.getText();
                      java.lang.String lastName = (String) inputLastName.getText();
                      String temp = (String) inputSalary.getText();




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



                           int salary = Integer.parseInt(temp);
                           org.netbeans.j2ee.xsd.tableschema.Employee inputData =
                                         new
                                       org.netbeans.j2ee.xsd.tableschema.Employee();
                           // Set input values
                           EmployeeRecord emp = new EmployeeRecord();
                           emp.setId(id);
                           emp.setFirstName(firstName);
                           emp.setLastName(lastName);
                           emp.setSalary(salary);
                           inputData.getEmployeeRecord().add(emp);
                           // Call Web Service
                           java.lang.String result =
                                                   port.databaseWSDLOperation(inputData);
                           resultText.setText("Result = " + result);
                      } catch (Exception ex) {
                           resultText.setText(ex);
                      }
                      return null;
                 }

        Clean and Build āđāļĨāļ° Run āđ‚āļ›āļĢāđ€āļˆMāļ„




                                     āļĢ5āļ›āļ— 17 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜WāļŦāļ™āļē Page1.jsp
        āđāļĨāļ°āđ„āļ”āļ‚āļ­āļĄ(āļĨāļ‹-āļ‡āđ€āļ‚āļēāđ„āļ›āļ­āļĒ()āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 18




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




                       āļĢ5āļ›āļ— 18 āđāļŠāļ”āļ‡āļ‚āļ­āļĄ(āļĨāļ—āļ­āļĒ()āđƒāļ™āļ•āļēāļĢāļēāļ‡ Employee āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ soa




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




                      Exercise 9: BPEL for Sending Message to
                                    a JMS Queue

            āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ­āļŠ)āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāđ„āļ›āļĒāļ‡ JMS Queue āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠ JMS
     Binding Component āļ—āļ­āļĒ() OpenESB āđāļĨāļ°āļˆāļ°āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđ€āļžāļ­āđ€āļĢāļĒāļāļ”(āļ‚āļ­āļ„āļ§āļēāļĄāļ—āļ­āļĒ()āđƒāļ™ Queue

     āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
        1. āļ•2āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS
        2. āļ•2āļ”āļ•āļ‡āđāļĨāļ°āļ„āļĢāļ§āļˆāļŠāļ­āļš JMS Binding Components
        3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ JMSBPEL
        4. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš JMSBinding
        5. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding
        6. āļžāļ’āļ™āļē BPEL Process
        7. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application
        8. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase


     1. āļ•rāļ”āļ•#sāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS

            āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Open Source āļ—āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđƒāļ™āļāļēāļĢāļˆāļ”āļāļēāļĢ Meessage Queues
     āļ‚āļ­āļ‡ Messaging Server āđ„āļ” āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļĨāļ­āļāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļ„āļ§āļēāļĄāļ—āļŠ)āļ‡āļĄāļēāļĒāļ‡ JMS
     Queue āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° download āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ„āļ”āļ— http://www.hermesjms.com/confluence/display/HJMS/
     Home āđ‚āļ”āļĒāļāļēāļĢāđ€āļĨāļ­āļāđ„āļŸāļĨW hetmesJMS version 1.13 āđāļĨāļ§āļ•2āļ”āļ•āļ‡āđ„āļŸāļĨWāđāļšāļš jar āđ‚āļ”āļĒāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠāļ„4āļēāļŠāļ‡

             āđ€āļĄāļ­āļ•2āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļĢāļĒāļšāļĢāļ­āļĒāđāļĨāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—4āļēāļāļēāļĢ config āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ„āļ”āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

        1.   āđ€āļ›~āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ— sessions āđāļĨāļ°āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New / NewSession




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




   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Preference āđƒāļŦāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļēāļ <new> āđ€āļ›āļ™ JavaMQ āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āđ€āļĨāļ­āļāđāļ—āļ› Provider
        āļ—āļ­āļĒ()āļ”āļēāļ™āļĨ)āļēāļ‡āļ‚āļ­āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ




   3.   āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ„āļ”āļ­āļ°āļĨMāļ­āļāđƒāļ™āđāļ—āļ› Provider āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add Group
   4.   āļ4āļēāļŦāļ™āļ”āļ„)āļē Classpath group name āđ€āļ›āļ™ JavaMQClasspathGroup āđāļĨāļ§āļāļ” OK
   5.   āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” JavaMQClasspathGroup āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ— Library āđāļĨāļ°āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add JAR(s)
   6.   āđ€āļĨāļ­āļāđ„āļŸāļĨWāđāļšāļš jar āļ•)āļ­āđ„āļ›āļ™āļ—āļ­āļĒ()āđƒāļ™āđ„āļ”āđ€āļĢMāļāļ—āļ­āļĢāļ‚āļ­āļ‡ GlassFish ESB āļ—āļŠāļ­ imq/lib
             4. fscontext.jar
             5. imq.jar
             6. imqadmin.jar
             7. imqbroker.jar
             8. imqjmx.jar
             9. imqutil.jar
             10. imqxm.jar
             11. jaxm-api.jar
             12. jhall.jar
             13. jms.jar

   7.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļāļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ”āļ›6zāļĄ Apply āđāļĨāļ§āļāļ” OK āđ€āļžāļ­āļ›~āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļ Preference




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




        8.   āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” sessions āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ— JavaMQ āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Edit.. āļ”āļ‡āļĢ(āļ›




        9.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Preference āđ€āļĨāļ­āļāđāļ—āļ› Session āđāļĨāļ§āđ€āļĨāļ­āļ JavaMQClasspathGroup āļŠ4āļēāļŦāļĢāļš Loader
             āđāļĨāļ° com.sun.messaging.QueueConnectionFactory āļŠ4āļēāļŦāļĢāļš Class āļ”āļ‡āļĢ(āļ›




        10. āļāļ”āļ›6zāļĄ Apply āļ•āļēāļĄāļ”āļ§āļĒ   OK āđ€āļžāļ­āļ›~āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļ


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



   11. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ”  sessions āđāļĨāļ§āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” JavaMQ āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Add queue..
   12. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Destination Properties āļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ TestQueue āļ4āļēāļŦāļ™āļ”āļ„)āļē UserName āđ€āļ›āļ™
       admin āđāļĨāļ° Password āđ€āļ›āļ™ admin āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āļ”āļ‡āļĢ(āļ›




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



     2. āļāļēāļĢāļ•rāļ”āļ•#sāļ‡ āđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļš JMS Binding Component

              āđāļšāļšāļāļāļŦāļ”āļ™āļ•āļ­āļ‡āļāļēāļĢāđƒāļŠ JMS Binding Component āļ—āļ•2āļ”āļ•āļ‡āļ­āļĒ()āđƒāļ™ OpenESB āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļš
     Service Engines āđāļĨāļ° Binding Components āļ—āļ•2āļ”āļ•āļ‡āļ­āļĒ()āđƒāļ™ Open ESB āļ‚āļ­āļ‡ GlassFish V2 āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›~āļ”
     āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Services āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Servers > GlassFish V2 > JBI āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™
     āđ‚āļĄāļ”(āļĨāļ•)āļēāļ‡āđ† āļ”āļ‡āļ•āļ§āļ­āļĒ)āļēāļ‡āđƒāļ™āļĢ(āļ›




              āļ–āļē GlassFish V2 āđ„āļĄ)āļĄ sun-jms-binding āļ­āļĒ()āđƒāļŦāđ„āļ›āļ—4āļēāļāļēāļĢ download āđ‚āļĄāļ”(āļĨāļ™āđ„āļ”āļ— https://open-
     esb.dev.java.net/Components.html āļˆāļēāļāļ™āļ™āļ—4āļēāļāļēāļĢāļ•2āļ”āļ•āļ‡āđ„āļ”āđ‚āļ”āļĒāļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Binding Components āđāļĨāļ§
     āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Install and Start.. āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ•2āļ”āļ•āļ‡āđ„āļŸāļĨWāļ— download āļĄāļē

     3. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ JMSBPEL
          āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļŠ4āļēāļŦāļĢāļš Service Oriented Architecture āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™
     āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
        1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project



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



   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§
        āļāļ” Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ JMSBPEL āđāļĨāļ§āļāļ” Finish

4. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš JMS Binding

      āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ JMS āļŠ4āļēāļŦāļĢāļšāļāļēāļĢāļŠ)āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ āđ‚āļ”āļĒāļĄāļ‚āļ™
āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

   1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JMSBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document ..
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ TestQueueWSDL āļ4āļēāļŦāļ™āļ” WSDL
        Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ JMS āđāļĨāļ° Types āđ€āļ›āļ™ Send
        āļˆāļēāļāļ™āļ™āļāļ” Next
   3.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē Connection URL: āđ€āļ›āļ™ mq://localhost:7676 āļāļ„)āļē User Name āđ€āļ›āļ™
        admin āđāļĨāļ° Password āđ€āļ›āļ™ admin āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” Next




   4.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē Destination āđ€āļ›āļ™ TestQueue āļŠ)āļ§āļ™āļ„)āļēāļ­āļ™āđƒāļŦāļ„āļ‡āļ•āļēāļĄāļ—āļ4āļēāļŦāļ™āļ”āļĄāļē āđāļĨāļ§āļāļ”
        Finish




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



     5. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš SOAPBinding
          āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°
     āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JMSBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document ..
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ JMSWSDL āļ4āļēāļŦāļ™āļ” WSDL Type:
             āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC Literal
             āđāļĨāļ§āļāļ” Next
        3.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inData āđāļĨāļ§āļ4āļēāļŦāļ™āļ”
             Element Or Type āđ€āļ›āļ™ xsd:String āđāļĨāļ°āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Output: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™
             outData āđāļĨāļ§āļ4āļēāļŦāļ™āļ” Element Or Type āđ€āļ›āļ™ xsd:String āļˆāļēāļāļ™āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish

     6. āļāļēāļĢāļž#āļ’āļ™āļē BPEL Process

          āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™
     āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

     6.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW JMSProcess.bpel

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JMSBPEL āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > BPEL Process
        2.   āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ JMSProcess āđāļĨāļ§āļāļ” Finish
        3.   āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW JMSProcess.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™āđ‚āļŦāļĄāļ”
             designer

     6.2 āļāļēāļĢāđ€āļž2āļĄ partner link

        1.   āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ JMSWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project
             āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‹āļēāļĒāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design
        2.   āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ JMSWSDLPartnerLink
        3.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ TestQueue.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡
             design
        4.   āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ TestQueuepartnerLink




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



6.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive
   1.   āđƒāļ™āđ„āļŸāļĨW JMSProcess.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: āđ€āļ›āļ™ JMSWSDLPartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ JMSinData āđāļĨāļ§āļāļ” OK

6.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Reply
   1.   āđƒāļ™āđ„āļŸāļĨW JMSProcess.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: āđ€āļ›āļ™ JMSWSDLPartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ JMSoutData āđāļĨāļ§āļāļ” OK

6.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš write
   1.   āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™
        āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
   2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ
        Invoke1
   3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ sendToQueue āđāļĨāļ°
        āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ TestQueuePartnerLink āđāļĨāļ°āđ€āļĨāļ­āļ Operation: āđ€āļ›āļ™ JMSOutOperation
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ JMSOutOperationIn

6.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign
   1.   āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™



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



             āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ sendToQueue
        2.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄ(āļĨāđƒāļ™āđ‚āļŦāļ™āļ”
             inData > JMSinData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ āđ„āļ›āļĒāļ‡ part āđ… > JMSOutOperationIn āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




        3.   āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™
             āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ isendToQue āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
        4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āđ€āļĨāļ­āļ String > String Literal
             āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļēāđ€āļ›āļ™ Success āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŸ~āļĨāļ”WāļĢāļ°āļŦāļ§)āļēāļ‡ string literal āļāļš outData āļ—āļ­āļĒ()āđƒāļ™ JMSoutData
             āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




        5.   āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




   6.   Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„

7. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application
      āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ JMSBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠ
āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™
   1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite
        Application āđāļĨāļ§āļāļ” Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ JMSCompositeApp āđāļĨāļ§āļāļ” Finish
   4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” JMSCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module
   5.   āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ JMSBPEL āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files
   6.   āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” JMSBPEL.jar āļ āļēāļĒāđƒāļ• JMSCompositeApp > JBI Module
   7.   āļ„āļĨ2[āļāļ‚āļ§āļēāļ— JMSCompositeApp āđ€āļĨāļ­āļ Clean and Build
   8.   āļ„āļĨ2[āļāļ— Service Assembly āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




     8. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase
        1.   āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ JMSCompositeApp
        2.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” JMSCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case
        3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
        4.   āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ JMSBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ JMSWSDL.wsdl āđāļĨāļ§āļāļ” Next
        5.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ JMSWSDLOperation āđāļĨāļ§āļāļ” Finish
        6.   āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļ”āļ‡āļ™
                      <soapenv:Body>
                    <jms:JMSWSDLOperation>
                      <inData>This is a test message</inData>
                    </jms:JMSWSDLOperation>
                   </soapenv:Body>

        7.   āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run
        8.   āđ€āļ›~āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđāļĨāļ§āļ„āļĨ2[āļāļ— TestQueue āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜Wāļ”āļ‡āļ•āļ§āļ­āļĒ)āļēāļ‡āđƒāļ™āļĢ(āļ›




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




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




                      Exercise 10: BPEL Invoking Web Services

            āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ Business Process āļ—āđ€āļĢāļĒāļāđƒāļŠ Web Service āļ—āļžāļ’āļ™āļēāļ‚-āļ™āļĄāļēāđ‚āļ”āļĒāđƒāļŠāļ„4āļēāļŠāļ‡
     Invoke āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļē Web Services āļ‚-āļ™āļĄāļŠāļ­āļ‡āļŠ6āļ”āļ„āļ­ DetermineRoomRate āđāļĨāļ°
     CalculateBookingPayment āđ‚āļ›āļĢāđāļāļĢāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™āļˆāļ°āļ­)āļēāļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļāļĄāļē āđāļĨāļ§
     āđ€āļĢāļĒāļāđƒāļŠāđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠ DetermineRoomRate āđ€āļžāļ­āļŦāļēāļ­āļ•āļĢāļēāļ„)āļēāļ—āļžāļ āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠ
     CalculateBookingPayment āđ€āļžāļ­āļ„4āļēāļ™āļ§āļ“āļ„)āļēāļ—āļžāļāļ—āļ‡āļŦāļĄāļ” āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āļ‹-āļ‡
     Business Process āđƒāļŦāļĄ)āļ™āļŠāļēāļĄāļēāļĢāļ–āļ›āļĢāļ°āļāļēāļĻāđ€āļ›āļ™ Web Service āđ‚āļ”āļĒāđƒāļŠ WSDL āđāļĨāļ°āđ€āļĢāļēāļˆāļ°āļ—4āļēāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
     Web Application āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Business Process āļ™āļœ)āļēāļ™ WSDL āļ”āļ‡āļāļĨ)āļēāļ§

     āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
        1. āļžāļ’āļ™āļē Determine Room Rate Web Services
        2. āļžāļ’āļ™āļē Calculate Booking Payment Web Services
        3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking
        4. āļžāļ’āļ™āļē XML Schema
        5. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL
        6. Import āđ„āļŸāļĨW WSDL āđāļĨāļ° XML Schema
        7. āļžāļ’āļ™āļē Business Process
        8. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application
        9. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase
        10. āđ€āļž2āļĄ Business Process āļŠ4āļēāļŦāļĢāļšāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ
        11. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Business Process


     1. āļāļēāļĢāļž#āļ’āļ™āļē Determine Room Rate Web Services

           āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Service āļ—āļžāļ’āļ™āļēāļˆāļēāļ EJB Module āļ—āļĄ Business Logic āđƒāļ™āļāļēāļĢāđāļˆāļ‡
     āļĢāļēāļ„āļēāļ—āļžāļāļ•)āļ­āļ„āļ™ āļ—āļ‡āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ”āđƒāļŦ Web Service āļ™āļĄāļŠāļ­āđ€āļĄāļ˜āļ­āļ”āđāļĨāļ° argument āļ”āļ‡āļ™
                    double getRate(String roomType)
     1.1 āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Project
            āđ€āļĢāļēāļˆāļ°āļ4āļēāļŦāļ™āļ”āđ‚āļ›āļĢāđ€āļˆMāļ„āđƒāļŦāđ€āļ›āļ™ EJB Project āļ—āļ‡āļ™āđ€āļ™āļ­āļ‡āļˆāļēāļāđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļē Web Services āļˆāļēāļ
     Session Bean āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™



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




   1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ­āļ Project āđ€āļ›āļ™ EJBModule
        āđāļĨāļ§āļāļ” Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DetermineRoomRate āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļē
        āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļMāļš project āđ„āļ§ āļāļ” Next
   4.   āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āđ‚āļ”āļĒāļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ”
        Finish

1.2 āļāļēāļĢāļžāļ’āļ™āļē Web Service

        āļŦāļĨāļāļāļēāļĢāļžāļ’āļ™āļē Web Services āļ—āļ”āļ™āļ™ āļ„āļ§āļĢāļˆāļ°āļ™2āļĒāļēāļĄ interface āļ)āļ­āļ™āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
implementation āļāļĨ)āļēāļ§āļ„āļ­āļ•āļ­āļ‡āļ4āļēāļŦāļ™āļ” XML Schema Definition (XSD) āļ)āļ­āļ™ āđāļĨāļ§āļ™2āļĒāļēāļĄāđ„āļŸāļĨW WSDL āļ)āļ­āļ™āļ—āļˆāļ°
āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļāļēāļĢ implement āļ™2āļĒāļēāļĄ WSDL āļ”āļ‡āļāļĨ)āļēāļ§ āđāļ•)āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āđ€āļĢāļēāļˆāļ°āđƒāļŠāļ§2āļ˜āļ­āļĒ)āļēāļ‡āļ‡)āļēāļĒāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡
Web Service āđ‚āļ”āļĒāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ implementation āļ‚-āļ™āļĄāļēāļ)āļ­āļ™ āđāļĨāļ§āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļŠāļĢāļēāļ‡
Interface (WSDL āđāļĨāļ° XSD) āļ—āļŦāļĨāļ‡
        āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Web Service āļĄāļ”āļ‡āļ™

   1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRoomRate āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Oth-
      er...
   2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web Services āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Web Ser-
      vice āđāļĨāļ§āļāļ” Next
   3. āļ4āļēāļŦāļ™āļ”āļ„)āļē Web Service Name āđ€āļ›āļ™ DetermineRateService āđāļĨāļ°āļ„)āļē Package āđ€āļ›āļ™ ws āļŠ)āļ§āļ™āļ„)āļēāļ­āļ™āđ†
      āđ€āļ›āļ™āļ”āļ‡āļ—āļ•āļ‡āđ„āļ§ āļ”āļ‡āļĢ(āļ›āđāļĨāļ§āļāļ” Finish
   4. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ›āļĢāļ°āļāļēāļĻ Web Services āļ—āļŠāļ­ DetermineRateService āđƒāļ™āđ‚āļŦāļ™āļ” Web Services āļ‚āļ­āļ‡
      āļŦāļ™āļēāļ•)āļēāļ‡ Project āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāļ—āļŠāļ­ DetermineRateService .java āđ‚āļ”āļĒāļˆāļ°āđāļŠ
      āļ”āļ‡āđāļ—āļ› Design
   5. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļ‚āļ­āļ‡āđ„āļŸāļĨW DetermineRateService.java āđ€āļĨāļ­āļāđāļ—āļ› Design āļāļ”āļ›6zāļĄ Add
      Operationâ€Ķ




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



        6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Add Operation āļ4āļēāļŦāļ™āļ” Method āđ€āļ›āļ™ getRate āļŠāļ™2āļ”āļ‚āļ­āļ‡ Return Type āđ€āļ›āļ™ double
           āđāļĨāļ° āđ€āļž2āļĄ Input parameter āļŠāļ­ roomType āļŠāļ™2āļ” String āļ”āļ‡āļĢ(āļ›āđāļĨāļ§āļāļ” OK




        7. āļ„āļĨ2[āļāļ—āđāļ—āļ› Source āļ‚āļ­āļ‡ DetermineRoomRate.java āđāļĨāļ°āļ›āļĢāļšāļ›āļĢ6āļ‡āđ€āļĄāļ˜āļ­āļ” processBooking āļ”āļ‡āļ™

            @WebMethod(operationName = "getRate")
                public double getRate(@WebParam(name = "roomType") String roomType) {
                    if (roomType.equals("Deluxe")) {
                        return 4000.0;
                    } else if (roomType.equals("Superior")) {
                        return 3000.0;
                    } else {
                        return 2000.0;
                    }
                }



        8. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRoomRate āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Clean and Build āļˆāļēāļāļ™āļ™āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ”
           DetermineRoomRate āļ­āļāļ„āļĢāļ‡ āđāļĨāļ§āđ€āļĨāļ­āļ Deploy

     2. āļāļēāļĢāļž#āļ’āļ™āļē Calculating Booking Payment Web Services

            āļ‚āļ™āļ•āļ­āļ™āļ—āļœ)āļēāļ™āļĄāļēāđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Service āļˆāļēāļ EJB Module āđƒāļ™āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web
     Service āļ­āļāļ§2āļ˜āļŦāļ™-āļ‡ āđ‚āļ”āļĒāļāļēāļĢāļžāļ’āļ™āļēāļˆāļēāļ Web Application āđ‚āļ”āļĒāļĄ Business Logic āđƒāļ™āļāļēāļĢāļ„4āļēāļ™āļ§āļ“āļĢāļēāļ„āļēāļ„)āļēāļ—āļžāļāļ—
     āļ•āļ­āļ‡āļŠ4āļēāļĢāļ° āļ—āļ‡āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ”āđƒāļŦ Web Service āļ™āļĄāļŠāļ­āđ€āļĄāļ˜āļ­āļ”āļ—āļŠāļ­ getPayment āļ‹-āļ‡āļˆāļ°āļŠ)āļ‡āļ‚āļ­āļĄ(āļĨāļŠāļ™2āļ” double āļāļĨāļš
     āļĄāļēāđāļĨāļ°āļĄ argument āļ—āļŠāļ­ dayLength āļŠāļ™2āļ” int āđāļĨāļ° roomRate āļŠāļ™2āļ” double āļ™āļ­āļāļˆāļēāļāļ™āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļŠāļēāļ˜2āļ•āļāļēāļĢ
     āđƒāļŠ NetBeans āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW XSD āđāļĨāļ° WSDL XML document āļ‚-āļ™āļĄāļē



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




2.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project
       āđ€āļĢāļēāļˆāļ°āļ4āļēāļŦāļ™āļ”āđ‚āļ›āļĢāđ€āļˆMāļ„āđƒāļŦāđ€āļ›āļ™ EJB Project āļ—āļ‡āļ™āđ€āļ™āļ­āļ‡āļˆāļēāļāđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļē Web Services āļˆāļēāļ
Session Bean āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™

   1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project
   2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Ap-
      plication āđāļĨāļ§āļāļ” Next
   3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ CalculatePayment āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļē
      āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļMāļš project āđ„āļ§ āļāļ” Next
   4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āđ‚āļ”āļĒāļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ”
      Finish

2.2 āļāļēāļĢāļžāļ’āļ™āļē Web Service

       āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Web Service āļˆāļ°āđ€āļ›āļ™āđ€āļŠ)āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļēāđƒāļ™āļ‚āļ™āļ•āļ­āļ™āļ— 1.2 āđ‚āļ”āļĒāļˆāļ°āļ4āļēāļŦāļ™āļ” Web
Services āđƒāļŦāļĄāļŠāļ­āļ§)āļē CalculateBookingPayment āļ­āļĒ()āđƒāļ™ Package āļ—āļŠāļ­ payment āđāļĨāļ°āļĄ operation āļ—āļŠāļ­
getPayment āļ‹-āļ‡āļĄ source code āļ”āļ‡āļ™

       @WebMethod(operationName = "getPayment")
          public double getPayment(@WebParam(name = "dayLength")
          int dayLength, @WebParam(name = "roomRate")
          double roomRate) {
               return roomRate * dayLength;
          }


2.3 āļāļēāļĢāļ•āļĢāļ§āļˆāļ”(āđ„āļŸāļĨW XSD āđāļĨāļ° WSDL

       āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡ XML āđ„āļŸāļĨWāļ—āđ€āļ›āļ™ XSD āđ€āļžāļ­āļ4āļēāļŦāļ™āļ” Schema āļ‚āļ­āļ‡ Datatype āļ‚āļ­āļ‡ Web
Service āļ—āļŠāļĢāļēāļ‡āļ‚-āļ™ āđāļĨāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āđ€āļžāļ­āļ™2āļĒāļēāļĄ Web Service āļ—āļŠāļĢāļēāļ‡āļ‚-āļ™ āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”(āđ„āļŸāļĨW
āđ€āļŦāļĨ)āļēāļ™āđ„āļ”āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™




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



        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ‚āļĒāļēāļĒāđāļ—āļ› CalculatePayment > Web Services
        2.   āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” CalculateBookingPayment āđ€āļĨāļ­āļ Properties āļˆāļ°āđ€āļŦMāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļāđāļŠāļ”āļ‡āļ‚-āļ™ āđāļĄāļˆāļ°āđ„āļĄ)āļĄ
             Property āđƒāļ”āđ†āđāļŠāļ”āļ‡āļ­āļĒ() āđāļ•)āļ—āđƒāļ•āđ„āļ”āļ­āļ°āļĨMāļ­āļāļˆāļ°āđāļŠāļ”āļ‡āļ•4āļēāđāļŦāļ™)āļ‡ url āļ‚āļ­āļ‡ WSDL āļ”āļ‡āļ™
        3.   āđ€āļ›~āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđāļĨāļ°āđ€āļĢāļĒāļ url āļ”āļ‡āļāļĨ)āļēāļ§āļˆāļ°āđ„āļ” WSDL āļ”āļ‡āļ™
     −<definitions targetNamespace="http://ws/" name="CalculateBookingPaymentService">
     −<types>
     −<xsd:schema>
      <xsd:import namespace="http://ws/"
     schemaLocation="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/>
      </xsd:schema>
     </types>
     −<message name="getPayment">
      <part name="parameters" element="tns:getPayment"/>
     </message>
     −<message name="getPaymentResponse">
      <part name="parameters" element="tns:getPaymentResponse"/>
     </message>
     −<portType name="CalculateBookingPayment">
     −<operation name="getPayment">
      <input message="tns:getPayment"/>
      <output message="tns:getPaymentResponse"/>
     </operation>
     </portType>
     −<binding name="CalculateBookingPaymentPortBinding" type="tns:CalculateBookingPayment">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
     −<operation name="getPayment">
      <soap:operation soapAction=""/>
     −<input>
      <soap:body use="literal"/>
     </input>
     −<output>
      <soap:body use="literal"/>
     </output>
     </operation>
     </binding>
     −<service name="CalculateBookingPaymentService">
     −<port name="CalculateBookingPaymentPort" binding="tns:CalculateBookingPaymentPortBinding">
       <soap:address location="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService"/>
     </port>
     </service>
     </definitions>

        4.   āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™āļšāļĢāļĢāļ—āļ”āļ—āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ XML Schema āļ”āļ‡āļ™
     −<xsd:schema>
      <xsd:import namespace="http://ws/"
     schemaLocation="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/>
      </xsd:schema>



        5.   āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļ url āļ‚āļ­āļ‡ XSD āļ”āļ‡āļāļĨ)āļēāļ§ āļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āļ‹-āļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ” Web Service



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



        datatype definition āļ”āļ‡āļ™
        −<xs:schema version="1.0" targetNamespace="http://ws/">
                <xs:element name="getPayment" type="tns:getPayment"/>
                <xs:element name="getPaymentResponse" type="tns:getPaymentResponse"/>
        −<xs:complexType name="getPayment">
        −<xs:sequence>
                <xs:element name="dayLength" type="xs:int"/>
                <xs:element name="roomRate" type="xs:double"/>
        </xs:sequence>
        </xs:complexType>
        −<xs:complexType name="getPaymentResponse">
        −<xs:sequence>
                <xs:element name="return" type="xs:double"/>
        </xs:sequence>
        </xs:complexType>
        </xs:schema>

3 āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ RoomBooking

      āļāļēāļĢāļžāļ’āļ™āļē Business Process āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ•āļ­āļ‡āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āļ‹-āļ‡āļ āļēāļĒāđƒāļ™āđ‚āļ›āļĢāđ€āļˆM
āļ„āļ™āļˆāļ°āļĄāđ„āļŸāļĨW BPEL, XSD āđāļĨāļ° WSDL āļ—āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļ­āļĒ() āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™

   1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project..
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§āļāļ”
        Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RoomBooking āđāļĨāļ§āļāļ” Finish

4 āļāļēāļĢāļž#āļ’āļ™āļē XML Schema

        āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW XML Schema āđ€āļžāļ­āļ4āļēāļŦāļ™āļ”āļĢ(āļ›āđāļšāļšāļ‚āļ­āļ‡ XML Datatype āļ—āļˆāļ°āđƒāļŠāđ€āļ›āļ™
input argument āļ‚āļ­āļ‡ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āļ‹-āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄ Wizard āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡
XML Schema āļ­āļ•āđ‚āļ™āļĄāļ•2 āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

4.1) āļŠāļĢāļēāļ‡āđ„āļŸāļĨW RoomBookingSchema.xsd

   1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” RoomBooking āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™
        āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Other..
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđ€āļĨāļ­āļ Categories: āđ€āļ›āļ™ XML āđāļĨāļ° File Types: āđ€āļ›āļ™ XML Schema āđāļĨāļ§āļāļ”
        Next



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



        3.   āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingSchema āđāļĨāļ§āļāļ” Finish
        4.   āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW RoomBookingSchema.xsd

     4.2) āļŠāļĢāļēāļ‡ Complex Type āļŠ4āļēāļŦāļĢāļš XML schema

        7.  āđƒāļ™āđ„āļŸāļĨW RoomBookingSchema.xsd āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Complex Type āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡
            Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Complex Type
        8. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄ complex type āđƒāļŦāļĄ)āļ—āļŠāļ­ newComplexType āđƒāļŦāļ4āļēāļŦāļ™āļ”āļŠāļ­āđƒāļŦāļĄ)āđ€āļ›āļ™
            RoomBookingInput [āļ­āļāļ§2āļ˜āđƒāļ™āļāļēāļĢāļ—āļˆāļ°āđ€āļž2āļĄ Complex Type āļ„āļ­āļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Complex Types
            āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add > Complex Type ]
        9. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” RoomBookingInput āđ‚āļ›āļĢāđāļāļĢāļĄ
            NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ”āđƒāļŦāļĄ)āļŠāļ­ newElement [āļ­āļāļ§2āļ˜āđƒāļ™āļāļēāļĢāļ—āļˆāļ°āđ€āļž2āļĄ Element āļ„āļ­āļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ”
            RoomBookingInput āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add > Element]
        10. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” newElement āđāļĨāļ§āđ€āļĨāļ­āļ Properties
        11. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ newElement āļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ firstName āđāļĨāļ°āđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āļ—āļ„)āļē
            Definition āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Built-in Types āđƒāļ™ List āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” string āđ‚āļ”āļĒāđāļĨāļ§āļāļ”āļ›6zāļĄ Close
        12. āļ—4āļēāļ‹4āļēāđ€āļžāļ­āđ€āļž2āļĄ element āļ āļēāļĒāđƒāļ• RoomBookingInput āļ”āļ‡āļ™
            â—Ķ lastName(Built-In Types/ string)
            â—Ķ phone(Built-In Types/ string)
            â—Ķ checkinDate(Built-In Types/ string)
            â—Ķ lengthOfStay(Built-In Types/ int)
            â—Ķ roomType(Built-In Types/ string)
            āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ›




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




   13. āļˆāļēāļāļ™āļ™āđƒāļŦāđƒāļŠāļ§2āļ˜āđ€āļ”āļĒāļ§āļāļ™āđ€āļžāļ­āļŠāļĢāļēāļ‡         complex Type āļ—āļŠāļ­ RoomBookingOutput āļ‹-āļ‡āļˆāļ°āļĄ element āļ”āļ‡āļ™
         â—Ķ result(Built-In Types/ string)
         āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ›




   14. āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™     Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Element āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°
       āđ€āļž2āļĄāđ‚āļŦāļ™āļ”āđƒāļŦāļĄ)āļŠāļ­ newElement āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Element
   15. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” newElement āđāļĨāļ§āđ€āļĨāļ­āļ Properties
   16. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ newElement āļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ RoomBookingRequest āđāļĨāļ°āđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...)
       āļ—āļ„)āļē Definition āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Complex Types āđƒāļ™ List āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” RoomBookingInput āļ”āļ‡āļĢ(āļ›




   17.    āļ—4āļēāļ‹4āļēāđ€āļžāļ­āļ4āļēāļŦāļ™āļ” Element āļ—āļŠāļ­ RoomBookingResponse āļ—āļĄ datatype āđ€āļ›āļ™ RoomBookingOutput
         āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļ—4āļēāļāļēāļĢ Save



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




        18. āđ€āļ›āļĨāļĒāļ™āđ„āļ›āđāļ—āļ›    Source āļˆāļ°āđ€āļŦMāļ™āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡ XSD āļ”āļ‡āļ™
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 targetNamespace="http://xml.netbeans.org/schema/RoomBookingSchema"
                 xmlns:tns="http://xml.netbeans.org/schema/RoomBookingSchema"
                 elementFormDefault="qualified">
           <xsd:complexType name="RoomBookingInput">
              <xsd:sequence>
                 <xsd:element name="firstName" type="xsd:string"/>
                 <xsd:element name="lastName" type="xsd:string"/>
                 <xsd:element name="phone" type="xsd:string"/>
                 <xsd:element name="checkInDate" type="xsd:string"/>
                 <xsd:element name="lengthOfStay" type="xsd:int"/>
                 <xsd:element name="roomType" type="xsd:string"/>
              </xsd:sequence>
           </xsd:complexType>
           <xsd:complexType name="RoomBookingOutput">
              <xsd:sequence>
                 <xsd:element name="result" type="xsd:string"/>
              </xsd:sequence>
           </xsd:complexType>
           <xsd:element name="RoomBookingRequest" type="tns:RoomBookingInput"/>
           <xsd:element name="RoomBookingResponse" type="tns:RoomBookingOutput"/>
        </xsd:schema>




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




5. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL
      āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦ
āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
   1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” RoomBooking āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ
        āļ„4āļēāļŠāļ‡ New > WSDL Document
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingWSDL āļ4āļēāļŦāļ™āļ”
        WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™
        Document Literal āđāļĨāļ§āļāļ” Next
   3.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputData (āđ€āļĄāļ­āđƒāļŠ)āļ„)āļēāđ€āļŠāļĢMāļˆ
        āđāļĨāļ§ āļ•āļ­āļ‡āļāļ”āļ›6zāļĄ Enter āļ”āļ§āļĒāđ€āļŠāļĄāļ­ āļĄ2āļ‰āļ°āļ™āļ™āļ„)āļēāļˆāļ°āļāļĨāļšāđ„āļ›āđ€āļ›āļ™ part1 āđ€āļŦāļĄāļ­āļ™āđ€āļ”2āļĄ)
   4.   āđ€āļĨāļ­āļ Element or Type āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āđāļĨāļ§āđ€āļĨāļ­āļ RoomBookingRequest āđƒāļ•āđ‚āļŦāļ™āļ”
        Element āļ”āļ‡āļĢ(āļ›




   5.   āđāļĨāļ°āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Output: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ outputData āđāļĨāļ° Element or Type
        āđ€āļ›āļ™ RoomBookingResponse āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļāļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” Next




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




        6.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāļ„āļ‡āļ„)āļēāđ€āļ”2āļĄāđ„āļ§ āđāļĨāļ§āļāļ” Finish

     6 āļāļēāļĢ Import āđ„āļŸāļĨeXML Schema āđāļĨāļ° WSDL

           āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢ Import āđ„āļŸāļĨW WSDL āđāļĨāļ° XML Schema āļ—āļ­āļĒ()āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ DetermineRoomRate
     āđāļĨāļ° CalculatePayment āļĄāļēāđ„āļ§āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” DetermineRoomRate > Webservices
        2.   āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRateService āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Generate and Copy WSDL ..
        3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Generate and Copy WSDL āđƒāļŦāđ€āļĨāļ­āļāđ„āļ”āđ€āļĢMāļāļ—āļ­āļĢ src āļ āļēāļĒāđƒāļ• RoomBooking āļ”āļ‡āļĢ(āļ›




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




   4.   āļ—4āļēāļ‚āļ™āļ•āļ­āļ™āļ‚āļēāļ‡āļ•āļ™āļ‹4āļēāļāļš Web Service āļ—āļŠāļ­ CalculateBookingPayment āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„
        CalculatePayment

7. āļāļēāļĢāļž#āļ’āļ™āļē Business Process

     āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™
āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

67.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW RoomBookingProcess.bpel

   1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPEL āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡
        New > BPEL Process
   2.   āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingProcess āđāļĨāļ§āļāļ” Finish
   3.   āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW RoomBookingProcess.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™



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



             āđ‚āļŦāļĄāļ” designer

     7.2 āļāļēāļĢāđ€āļž2āļĄ partner link

           āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļ—4āļēāļāļēāļĢāļ4āļēāļŦāļ™āļ” partner link āļŠ4āļēāļŦāļĢāļš Web Services āļŠāļēāļĄāļŠ6āļ”āļ„āļ­ DetermineRateService,
     BooksFacade āđāļĨāļ° RoomBookingWSDL āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™
        1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ RoomBookingWSDL.wsdl
             āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ (āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠ)

             āđƒāļ™            )
        2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name:
             āđ€āļ›āļ™ RoomBookingPartnerLink āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļŠāļ­ PartnerLink1 āđ€āļ”2āļĄāđāļĨāļ§āļāļ” OK
        3.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DetermineRateServiceService.wsdl āļ—āļ­āļĒ()āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ”
             RoomBooking āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­ [āđ€āļĢāļēāļ•āļ­āļ‡āļ—4āļēāļāļēāļĢ deploy āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āļ)āļ­āļ™āļ—
             āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ4āļēāļŦāļ™āļ” partner link āđ„āļ”]
        4.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name:
             āđ€āļ›āļ™ DetermineRatePartnerLink āđāļĨāļ§āļāļ” OK
        5.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ CalculateBookingPaymentService.wsdl āļ—āļ­āļĒ()āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Ro
             omBooking ,āļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design [āđ€āļĢāļēāļ•āļ­āļ‡āļ—4āļēāļāļēāļĢ deploy āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āļ)āļ­āļ™āļ—āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ4āļēāļŦāļ™āļ”
             partner link āđ„āļ”]
        6.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name:
             āđ€āļ›āļ™ CalculatePaymentPartnerLink āđāļĨāļ§āļāļ” OK

        āđ€āļĢāļēāļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




7.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive
   1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.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: āđ€āļ›āļ™ RoomBookingPartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”



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



             Name: āđ€āļ›āļ™ inData āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” OK




     67.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Reply
        1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.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: āđ€āļ›āļ™ RoomBookingPartnerLink
        4.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK

        āđ€āļĢāļēāļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




7.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš getRate
   1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
        āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
   2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ
        Invoke1
   3.    āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ DetermineRate āđāļĨāļ°
        āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DetermineRatePartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ operation: āđ€āļĨāļ­āļ getRate
   5.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ GetRateIn āđāļĨāļ§āļāļ” OK
   6.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ GetRateOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ—




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




     7.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš getPayment

        1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
             āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ DetermineRate āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
        2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ
             Invoke1
        3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ CalculatePayment āđāļĨāļ°
             āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ CalculatePaymentPartnerLink
        4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ GetPaymentIn āđāļĨāļ§āļāļ” OK
        5.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ GetPaymentOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




7.7 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign
   1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
        āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ DetermineRate
   2.   āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignDetermineRateInput
   3.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignDetermineRateInput āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡
        āđ‚āļŦāļ™āļ” roomType āđƒāļ™āļŠ)āļ§āļ™ inputData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” roomType āđƒāļ™āļŠ)āļ§āļ™ outData āļ—āļēāļ‡
        āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




        4.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
             āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ DetermineRate āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ CalculatePayment
        5.   āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignCalculatePaymentInput
        6.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignCalculatePaymentInput āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢ
             āđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠ)āļ§āļ™ GetRateOut āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” roomRate āđƒāļ™āļŠ)āļ§āļ™
             GetPaymentIn āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđāļĨāļ°āđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” lengthOfStay āđƒāļ™āļŠ)āļ§āļ™ inData āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™
             āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” dayLength āđƒāļ™āļŠ)āļ§āļ™ GetPaymentIn āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




        7.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
             āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ CalculatePayment āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
        8.   āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignResult
        9.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignResult āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” result āđƒāļ™
             āļŠ)āļ§āļ™ outData āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ° highlight āļŠāļ™4āļēāđ€āļ‡2āļ™āđƒāļ™āđ‚āļŦāļ™āļ”āļ™āļ™āļ”āļ‡āļĢ(āļ›




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




   10. āđ€āļĨāļ­āļ Concat   operation āļˆāļēāļāđ€āļĄāļ™( String āļ—āļ­āļĒ()āļŠ)āļ§āļ™āļšāļ™āļ‚āļ­āļ‡ BPELMapper āļ”āļ‡āļĢ(āļ›




   11. Mapper  Canvas āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” Concat āđƒāļŦāđ€āļž2āļĄāļ‚āļ­āļ„āļ§āļēāļĄ 'your payment is ' āđƒāļ™āļŠ)āļ­āļ‡ String āđāļĢāļ āđāļĨāļ°
       āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠ)āļ§āļ™ GetPaymentOut āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāļŠ)āļ­āļ‡ String āļ—āļŠāļ­āļ‡āļ‚āļ­āļ‡
       āđ‚āļŦāļ™āļ” Concat āđāļĨāļ°āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŠ)āļ§āļ™ output String āļ‚āļ­āļ‡āđ‚āļŦāļ™āļ” Concat āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” result āđƒāļ™āļŠ)āļ§āļ™
       outData āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒ āļ”āļ‡āļĢ(āļ›




   12. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ    BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




        13. āļāļ”āļ›6zāļĄ Save āđāļĨāļ° Clean and Build



     8. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application
           āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ RoomBookingProcess.bpel āļšāļ™ Open
     ESB āđ‚āļ”āļĒāđƒāļŠ BPEL SE āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™
        1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite
             Application āđāļĨāļ§āļāļ” Next
        3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RoomBookingCompositeApp āđāļĨāļ§āļāļ” Finish
        4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” RoomBookingCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module
        5.   āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files
        6.   āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” RoomBooking.jar āļ āļēāļĒāđƒāļ• RoomBookingCompositeApp > JBI
             Module



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



   7.   āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp
   8.   āļŦāļ™āļēāļ•)āļēāļ‡ CASA Editor āļˆāļ°āđāļŠāļ”āļ‡āļ”āļ‡āļĢ(āļ› āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™āļ§)āļē RoomBooking āļ—āđ€āļ›āļ™ BPEL module āļˆāļ°āļ–(āļāđ€āļĢāļĒāļ
        āđ‚āļ”āļĒ SOAP request āđāļ•)āđ„āļĄ)āđ€āļŦMāļ™āļ§)āļē DetermineRatePartnerLink āđāļĨāļ° CalculatePaymentPartnerLink
        āđ€āļĢāļĒāļāđƒāļŠ Web Service āđƒāļ”




   9.   āđ€āļžāļ­āļĢāļ°āļš6 Web Service āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap āļ—āļ­āļĒ()āđƒāļ™ palette āļĄāļēāđ„āļ§āđƒāļ™āļŠ)āļ§āļ™ WSDL Ports
        āļ‚āļ­āļ‡ CASA Editor āļŠāļ­āļ‡āļ„āļĢāļ‡ āđāļĨāļ°āļ—4āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ”āļ‡āļĢ(āļ›




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




        10. āļĢāļ°āļš6 endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ— casaPort1 āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē
            Location āđ€āļ›āļ™ http://localhost:8080/DetermineRateServiceService/DetermineRateService āđāļĨāļ°
            Endpoint Name āđ€āļ›āļ™ DetermineRate
        11. āļ„āļĨ2[āļāļ‚āļ§āļēāļ— casaPort2 āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē Location āđ€āļ›āļ™
            http://localhost:8080/CalculatePayment/CalculateBookingPaymentService āđāļĨāļ° Endpoint Name
            āđ€āļ›āļ™ CalculatePayment
        12. āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp


     9. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase

        āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄāđ€āļ„āļĢāļ­āļ‡āļĄāļ­āļ—āļŠ)āļ§āļĒāđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš Composite Application āļ—āļžāļ’āļ™āļēāļ‚-āļ™ āđ‚āļ”āļĒāļāļēāļĢāļĢāļ™
     āļœ)āļēāļ™ TestCase āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

        1.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” RoomBookingCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test
             Case



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



   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
   3.   āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ RoomBooking āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ RoomBookingWSDL.wsdl āđāļĨāļ§āļāļ” Next
   4.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ RoomBookingWSDLOperation āđāļĨāļ§āļāļ” Finish
   5.   āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļŠ)āļ§āļ™ inputData āļ”āļ‡āļ™
         <soapenv:Body>
            <room:RoomBookingRequest>
              <room:firstName>Thanachart</room:firstName>
              <room:lastName>Numnonda</room:lastName>
              <room:phone>027777777</room:phone>
              <room:checkInDate>21/05/2009</room:checkInDate>
              <room:lengthOfStay>3</room:lengthOfStay>
              <room:roomType>Deluxe</room:roomType>
            </room:RoomBookingRequest>
          </soapenv:Body>

   6.   āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run
   7.   āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨW Output.xml āļ”āļ‡āļ™

   <?xml version="1.0" encoding="UTF-8"?>
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
   http://schemas.xmlsoap.org/soap/envelope/">
     <SOAP-ENV:Body>
       <ns1:RoomBookingResponse
   xmlns:msgns="http://j2ee.netbeans.org/wsdl/RoomBooking/RoomBookingWSDL"
   xmlns:ns1="http://xml.netbeans.org/schema/RoomBookinglSchema">
         <ns1:result>Your payment is 12000.0</ns1:result>
       </ns1:RoomBookingResponse>
     </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>


10. āļāļēāļĢāļž#āļ’āļ™āļē Business Process āđ€āļžvāļ­āđƒāļŦMāđ€āļ`āļšāļ‚Māļ­āļĄ5āļĨāļĨāļ‡āļāļēāļ™āļ‚Māļ­āļĄ5āļĨ

      āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Business Process āđ€āļžāļ­āđƒāļŦāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļĨāļ‡ Table āļ—āļŠāļ­ RoomBooking
āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

10.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Table

       āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ€āļžāļ­āđƒāļŠāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans
āļŦāļĢāļ­ MySQL Query Browser āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ RoomBooking āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ MySQL āļ—āļŠāļ­ test āđ‚āļ”āļĒ
āļ4āļēāļŦāļ™āļ”āđƒāļŦāļĄ column āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™



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



                             id              int    Primary Key Auto Increase
                             firstName       VARCHAR(30)
                             lastName        VARCHAR(30)
                             phone           VARCHAR(10)
                             payment         double

     āļŦāļĢāļ­āļĢāļ™ script file āļ”āļ‡āļ™
                             CREATE TABLE `test`.`roombooking` (
                               `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
                               `firstName` VARCHAR(30) NOT NULL,
                               `lastName` VARCHAR(30) NOT NULL,
                               `phone` VARCHAR(10) NOT NULL,
                               `payment` DOUBLE NOT NULL,
                               PRIMARY KEY(`id`)
                             )


     10.2 āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš DatabaseBinding

           āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ Database āļŠ4āļēāļŦāļĢāļšāđ€āļ‚āļĒāļ™āļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ
     āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

        8.  āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBooking āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document ..
        9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingDB āļ4āļēāļŦāļ™āļ” WSDL
            Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ DATABASE āđāļĨāļ° Types āđ€āļ›āļ™
            Table āļˆāļēāļāļ™āļ™āļāļ” Next
        10. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/test āļāļ” Next
        11. āđ€āļĨāļ­āļ Table: roombooking āļˆāļēāļ Available Tables: āđ„āļ›āļĒāļ‡ Selected Tables: āđāļĨāļ°āļāļ” Next
        12. āļāļ” Next āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē JNDI Name āđ€āļ›āļ™ jdbc/test āļāļ” Finish
        13. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨWāļ‚-āļ™āļĄāļēāļŠāļ­āļ‡āđ„āļŸāļĨWāļ„āļ­ RoomBookingDB.wsdl āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ service āļ•)āļēāļ‡āđ† āļ‚āļ­āļ‡
            Table āđāļĨāļ° roombooking.xsd āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ XML Schema āļ‚āļ­āļ‡ Table
        14. āđ€āļ™āļ­āļ‡āļˆāļēāļ column āļ—āļŠāļ­ id āļˆāļ°āđ€āļ›āļ™ auto increment āļ”āļ‡āļ™āļ™āđ€āļĢāļēāļˆāļ°āđāļāđ„āļ‚ insert operation āđ‚āļ”āļĒāđ€āļĨāļ­āļāđ„āļŸāļĨW
            RoomBookingDB.wsdl āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW āđƒāļŦāļ‚āļĒāļēāļĒāđāļ—āļ› Bindings >
            binding > insert > inputInsert āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› āđāļĨāļ§āļ”(āļ— properties āļ‚āļ­āļ‡ jdbc:input āļˆāļ°āđ€āļŦMāļ™āļ„4āļēāļŠāļ‡ sql
            āđ€āļ›āļ™
            insert into roombooking (phone,payment,firstName,id,lastName) values (?,?,?,?,?)
             āđƒāļŦāđāļāđ„āļ‚āđ€āļ›āļ™



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



           insert into roombooking (phone,payment,firstName,lastName) values (?,?,?,?)

      āđāļĨāļ°āđƒāļŦāđāļāđ„āļ‚ paramOrder āļˆāļēāļ
           phone,payment,firstName,id,lastName

      āđ€āļ›āļ™
           phone,payment,firstName,lastName




10.3 āļāļēāļĢāļ›āļĢāļšāļ›āļĢ6āļ‡ Business Process

            āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ6āļ‡āđ„āļŸāļĨW RoomBookingProcess.bpel āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

10   .3.1 āļāļēāļĢāđ€āļž2āļĄ partner link

      1.    āđ€āļ›~āļ”āđ„āļŸāļĨW RoomBookingProcess.bpel āđāļĨāļ§āđ€āļĨāļ­āļāđāļ—āļ› Design
      2.    āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ RoomBookingDB.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡
            design


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



        3.   āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DBPartnerLink
     10.3.2 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš storeBooking

        1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
             āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ AssignResult āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end
        2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ
             Invoke1
        3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ StoreBooking āđāļĨāļ°āđ€āļĨāļ­āļ
             Partner Link: āđ€āļ›āļ™ DBPartnerLink
        4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ InsertIn āđāļĨāļ§āļāļ” OK
        5.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ InsertOut āđāļĨāļ§āļāļ” OK
     10.3.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign
        1.   āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette
             āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ AssignResult āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ StoreBooking
        2.   āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignDBInput
        3.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignDBInput āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ”āļ•)āļēāļ‡āđ†
             āļ”āļ‡āļ™
                 â€Ē return āđƒāļ™āļŠ)āļ§āļ™ GetPaymentOut āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” payment āđƒāļ™āļŠ)āļ§āļ™ InsertIn
                 â€Ē firstName āđƒāļ™āļŠ)āļ§āļ™ inData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” firstName āđƒāļ™āļŠ)āļ§āļ™ InsertIn
                 â€Ē lastName āđƒāļ™āļŠ)āļ§āļ™ inData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” lastName āđƒāļ™āļŠ)āļ§āļ™ InsertIn
                 â€Ē phone āđƒāļ™āļŠ)āļ§āļ™ inData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” phone āđƒāļ™āļŠ)āļ§āļ™ InsertIn

         āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




   4.   āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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



     10.4 āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„
        1.   āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking āđƒāļŦāļĄ)
        2.   āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp āđƒāļŦāļĄ) āļˆāļ°āđ„āļ” CASA Editor āļ”āļ‡āļĢ(āļ›




        3.   āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp āđƒāļŦāļĄ)
        4.   āļĢāļ™ TestCase1 āļ­āļāļ„āļĢāļ‡ āđāļĨāļ§āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļĄ(āļĨāđƒāļ™ Table āļ—āļŠāļ­ RoomBooking āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™āļ‚āļ­āļĄ(āļĨāļ”āļ‡āļ™




     11. āļž#āļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļŠSāļēāļŦāļĢ#āļš User Interface

            āđ‚āļ›āļĢāđāļāļĢāļĄ Business Process āļ—āļžāļ’āļ™āļēāļ‚-āļ™āļˆāļ°āđ€āļ›āļ™ Web Services āļ—āļĢāļ™āļ­āļĒ()āđƒāļ™ GlassFish Application
     Server āļ‹-āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđ€āļ›āļ™āļŠ)āļ§āļ™ User Interface (Presentation) āđƒāļ™
     āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ Business Process

     11.1 āļāļēāļĢāļŦāļēāļ•4āļēāđāļŦāļ™)āļ‡ URL āļ‚āļ­āļ‡ WSDL āļŠ4āļēāļŦāļĢāļš Business Process

        āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāđ€āļĢāļĒāļāļ”( url āļ‚āļ­āļ‡ WSDL āļŠ4āļēāļŦāļĢāļš Business Process āļ—āļžāļ’āļ™āļēāļ‚-āļ™āļ”āļ‡āļ™

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” RoomBookingCompositeApp āđāļĨāļ§āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļ Service
             Assembly āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ CASA Editor




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




   2.   āļ„āļĨ2[āļāļ— RoomBookingWSDLPort
   3.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ properties āđƒāļŦāļ—4āļēāļāļēāļĢ copy āļ„)āļēāļ‚āļ­āļ‡ soap:address
   4.   āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›~āļ” Web Browser āđāļĨāļ§ paste āļ„)āļēāļ— copy āđ„āļ§ āļˆāļēāļāļ™āļ™āđƒāļŦāļ—4āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļ„)āļēāļ‚āļ­āļ‡ URL āđƒāļŦāđ€āļ›āļ™
        āļ”āļ‡āļ™ http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL

11.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Web Application

        āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Web Application āđ€āļžāļ­āđƒāļŦāļœ(āđƒāļŠāļ›sāļ­āļ™āļ‚āļ­āļĄ(āļĨāđƒāļ™āļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđƒāļ™āļŦāļ™āļē
āđ€āļ§Māļš roomlBooking.html āđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļŠāļ­ RoomBookingBP.java āđ€āļžāļ­āđāļŠāļ”āļ‡
āļœāļĨāļĨāļžāļ˜Wāļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

   1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RoomBookingUI āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢ
        āļˆāļ°āđ€āļMāļšāđ„āļŸāļĨWāđ„āļ§
   4.   āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ” Finish
   5.   āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBookingUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™
        Web Services āđāļĨāļ° Web Service Client āđāļĨāļ§āļāļ” Next
   6.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠ) URL āđ€āļ›āļ™
        http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL āļ”āļ‡
        āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› āđāļĨāļ§āļāļ” Finish




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




     11.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ roomBooking.html

           āđ‚āļ›āļĢāđāļāļĢāļĄ roomBookingP.html āđ€āļ›āļ™āđ€āļ§Māļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢWāļĄāļŠ4āļēāļŦāļĢāļšāđƒāļŦāļœ(āđƒāļŠāļ›sāļ­āļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ
     āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
        1.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ HTML āđāļĨāļ§āļāļ” Next
        2.   āļ4āļēāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ roomBooking āđāļĨāļ§āļāļ” Finish
        3.   āđ€āļ‚āļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨW roomBooking.html āļ•āļēāļĄ Listing āļ— 1


     Listing 1 āđ‚āļ›āļĢāđāļāļĢāļĄ roomBooking.html

       <body>
               <form action="RoomBookingBP" method="POST">
                   First Name: <input name="firstName" /> <br>

                    Last Name: <input name="lastName" /> <br>
                    Phone: <input name="phone" /> <br>
                    Check in Date: <input name="checkInDate" /> <br>
                    Length of stay: <input name="lengthOfStay" /> <br>
                    Room type: <select name="roomType">




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



                 <option value="Deluxe">Deluxe</option>
                 <option value="Superior">Superior</option>
                 <option value="Standard">Standard</option>
             </select> <br>
             <input type="submit" value="Book Room" />
         </form>
     </body>



10.4 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ RoomBookingBP.java

      āđ‚āļ›āļĢāđāļāļĢāļĄ RoomBookingBP.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļˆāļ°āļ­)āļēāļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āļ—āļœ(āđƒāļŠāļ›sāļ­āļ™
āļĄāļēāļˆāļēāļāļŦāļ™āļē roomBooking.html āđāļĨāļ°āļˆāļ°āđ€āļĢāļĒāļ Web Process āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜W āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

   1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBookingPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Other...
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Servlet āđāļĨāļ§āļāļ” Next
   3.   āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingBP āđāļĨāļ° Package: āđ€āļ›āļ™ servlets āļāļ” Next āđāļĨāļ§āļāļ” Finish
   4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđƒāļŦāļ„āļĨ2[āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđāļĨāļ§āđ€āļĨāļ­āļ Web Service Client Re-
        sources > Call Web Service Operation āđ€āļĨāļ­āļāđ„āļ›āļ— RoomBookingWSDLOperation
   5.   āđƒāļŦāļ›āļĢāļšāļ›āļĢ6āļ‡ Source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āļ”āļ‡āļ™
      protected void processRequest(HttpServletRequest request, HttpServletRe-
sponse response) throws ServletException, IOException {
                 response.setContentType("text/html;charset=UTF-8");
                 PrintWriter out = response.getWriter();


                 out.println("<html>");
                 out.println("<head>");
                 out.println("<title>Servlet RoomBooking</title>");
                 out.println("</head>");
                 out.println("<body>");


                 try { // Call Web Service Operation
                  org.netbeans.j2ee.wsdl.roombooking.roombookingwsdl.RoomBook-
ingWSDLPortType port = service.getRoomBookingWSDLPort();



                  org.netbeans.xml.schema.roombookinglschema.RoomBookingInput
inputData = new org.netbeans.xml.schema.roombookinglschema.RoomBookingInput();




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



                           String firstName = request.getParameter("firstName");
                           String lastName = request.getParameter("lastName");
                           String phone = request.getParameter("phone");
                           String checkInDate = request.getParameter("checkInDate");
                           String lengthOfStay = request.getParameter("lengthOfStay");
                           String roomType = request.getParameter("roomType");
                           int dayLength = Integer.parseInt(lengthOfStay);
                           inputData.setFirstName(firstName);
                           inputData.setLastName(lastName);
                           inputData.setPhone(phone);
                           inputData.setLengthOfStay(dayLength);
                           inputData.setRoomType(roomType);
                           org.netbeans.xml.schema.roombookinglschema.RoomBookingOutput
                                 result = port.roomBookingWSDLOperation(inputData);
                           out.println("Booking is done: " + result.getResult());
                      } catch (Exception ex) {


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


                      out.close();


                 }

        6.   Run āđ„āļŸāļĨW roomBooking.html āđ€āļžāļ­āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ




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




                  Exercise 11: BPEL : Structured Activities

       āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ BPEL 2.0 āđ‚āļ”āļĒāđ€āļĢāļĒāļāđƒāļŠ Structured Activities āđ€āļŠ)āļ™ ForEach āđ‚āļ”āļĒāļˆāļ°āļŠāļĢāļēāļ‡
Business Process āļ‚-āļ™āļĄāļēāđ€āļžāļ­āļ­)āļēāļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļŠāļ‡āļŠ2āļ™āļ„āļē (PO) āļ‹-āļ‡āļ­āļēāļˆāļĄāļĢāļēāļĒāļāļēāļĢāļŠ2āļ™āļ„āļēāļ­āļĒ()āļŦāļĨāļēāļĒāļĢāļēāļĒāļāļēāļĢāđāļĨāļ°āļˆāļ°
āļ—4āļēāļāļēāļĢāļšāļ™āļ—-āļāļĢāļēāļĒāļāļēāļĢāđ€āļŦāļĨ)āļēāļ™āļ™āļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

   1.   āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructure
   2.   āļžāļ’āļ™āļē XML Schema
   3.   āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL
   4.   āļāļēāļĢāļžāļ’āļ™āļē WSDL āđ€āļžāļ­āđƒāļŦāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ
   5.   āļžāļ’āļ™āļē Business Process āļŠ4āļēāļŦāļĢāļš ForEach
   6.   āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application
   7.   āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase


1 āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ BPELStructure

    āļāļēāļĢāļžāļ’āļ™āļē Business Process āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ•āļ­āļ‡āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āļ‹-āļ‡āļ āļēāļĒāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™
āļˆāļ°āļĄāđ„āļŸāļĨW BPEL, XSD āđāļĨāļ° WSDL āļ—āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļ­āļĒ() āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™

   1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project..
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§āļāļ”
        Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ BPELStructure āđāļĨāļ§āļāļ” Finish

2 āļāļēāļĢāļž#āļ’āļ™āļē XML Schema

        āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW XML Schema āđ€āļžāļ­āļ4āļēāļŦāļ™āļ”āļĢ(āļ›āđāļšāļšāļ‚āļ­āļ‡ XML Datatype āļ—āļˆāļ°āđƒāļŠāđ€āļ›āļ™
input argument āļ‚āļ­āļ‡ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āđ‚āļ”āļĒāđƒāļ™āļ—āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ”āđ€āļ›āļ™ PO.xsd āļ‹-āļ‡
āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄ Wizard āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ XML Schema āļ­āļ•āđ‚āļ™āļĄāļ•2 āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™



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



     2.1) āļŠāļĢāļēāļ‡āđ„āļŸāļĨW PO.xsd

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPELStructure āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™
             āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Other..
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđ€āļĨāļ­āļ Categories: āđ€āļ›āļ™ XML āđāļĨāļ° File Types: āđ€āļ›āļ™ XML Schema āđāļĨāļ§āļāļ”
             Next
        3.   āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ PO āđāļĨāļ§āļāļ” Finish
        4.   āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW PO.xsd

     2.2) āļŠāļĢāļēāļ‡ Complex Type āļŠ4āļēāļŦāļĢāļš XML schema

        1.  āđƒāļ™āđ„āļŸāļĨW PO.xsd āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ”
            Elements
        2. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄ element āđƒāļŦāļĄ)āļ—āļŠāļ­ newElement āđƒāļŦāļ4āļēāļŦāļ™āļ”āļŠāļ­āđƒāļŦāļĄ)āđ€āļ›āļ™ PO
        3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Sequence āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” PO
        4. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” PO
        5. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” newElement āđāļĨāļ§āđ€āļĨāļ­āļ Properties
        6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ newElement āļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ PONumber āđāļĨāļ°āđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āļ—āļ„)āļē
            Definition āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Built-in Types āđƒāļ™ List āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” integer āđ‚āļ”āļĒāđāļĨāļ§āļāļ”āļ›6zāļĄ Close
        7. āļ—4āļēāļ‹4āļēāđ€āļžāļ­āđ€āļž2āļĄ element āļ āļēāļĒāđƒāļ• POt āļ”āļ‡āļ™
            1. PODate(Built-In Types/ string)
            2. Items [āđ„āļĄ)āļ•āļ­āļ‡āļĢāļ°āļš6 Data Type]
        8. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Sequence āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Items
        9. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļŠāļ­āļ‡āļŠ6āļ”āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Items āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē āđ€āļ›āļ™ Item
        10. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Sequence āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Item [āđ„āļĄ)āļ•āļ­āļ‡āļĢāļ°āļš6 Data Type]
        11. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Item āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē Max Occurs āđ€āļ›āļ™ unbounded āļ”āļ‡āļĢ(āļ› āđ€āļžāļ­
            āļĢāļ°āļš6āļ§)āļē Item āļĄāđ„āļ”āđ„āļĄ)āļˆ4āļēāļāļ”āļˆ4āļēāļ™āļ§āļ™




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




   12. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļŠāļ­āļ‡āļŠ6āļ”āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Item āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļēāļ”āļ‡āļ™
       3. ItemNumber(Built-In Types/ string)
       4. ItemQuantity(Built-In Types/ int)
       āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ›




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



     3. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL
           āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦ
     āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™
        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPELStructure āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ
             āļ„4āļēāļŠāļ‡ New > WSDL Document
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ BPELStructureWSDL1 āļ4āļēāļŦāļ™āļ”
             WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™
             Document Literal āđāļĨāļ§āļāļ” Next
        3.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ” Operation Type āđ€āļ›āļ™ One-Way Operation āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ”
             Message Part Name āđ€āļ›āļ™ inputData
        4.   āđ€āļĨāļ­āļ Element or Type āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āđāļĨāļ§āđ€āļĨāļ­āļ PO āđƒāļ•āđ‚āļŦāļ™āļ” Element āđāļĨāļ§āļāļ” Next
        5.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāļ„āļ‡āļ„)āļēāđ€āļ”2āļĄāđ„āļ§ āđāļĨāļ§āļāļ” Finish

     4. āļāļēāļĢāļž#āļ’āļ™āļē WSDL āđ€āļžvāļ­āđƒāļŦMāđ€āļ`āļšāļ‚Māļ­āļĄ5āļĨāļĨāļ‡āļāļēāļ™āļ‚Māļ­āļĄ5āļĨ

             āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ” WSDL āļŠ4āļēāļŦāļĢāļšāļāļēāļĢāļˆāļ”āļāļēāļĢ Table āļ—āļŠāļ­ purchasingorder āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

     4.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Table

            āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ€āļžāļ­āđƒāļŠāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans
     āļŦāļĢāļ­ MySQL Query Browser āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ purchasingorder āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ MySQL āļ—āļŠāļ­ test āđ‚āļ”āļĒ
     āļ4āļēāļŦāļ™āļ”āđƒāļŦāļĄ column āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™
                         orderNumber        int   Primary Key Auto Increase
                         PONumber           int
                         itemNumber         VARCHAR(45)
                         itemQuantity       int

     4.2 āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš DatabaseBinding

           āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ Database āļŠ4āļēāļŦāļĢāļšāđ€āļ‚āļĒāļ™āļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ
     āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™




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



   1.    āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BPELStructure āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document ..
   2.    āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ PurchasingOrderDB āļ4āļēāļŦāļ™āļ”
         WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ DATABASE āđāļĨāļ°
         Types āđ€āļ›āļ™ Table āļˆāļēāļāļ™āļ™āļāļ” Next
   3.    āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/test āļāļ” Next
   4.    āđ€āļĨāļ­āļ Table: purchasingorder āļˆāļēāļ Available Tables: āđ„āļ›āļĒāļ‡ Selected Tables: āđāļĨāļ°āļāļ” Next
   5.    āļāļ” Next āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē JNDI Name āđ€āļ›āļ™ jdbc/test āļāļ” Finish
   6.    āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨWāļ‚-āļ™āļĄāļēāļŠāļ­āļ‡āđ„āļŸāļĨWāļ„āļ­ PurchasingOrderDB.wsdl āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ service āļ•)āļēāļ‡āđ† āļ‚āļ­āļ‡
         Table āđāļĨāļ° purchasingorder.xsd āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ XML Schema āļ‚āļ­āļ‡ Table
   7.    āđ€āļ™āļ­āļ‡āļˆāļēāļ column āļ—āļŠāļ­ orderNumber āļˆāļ°āđ€āļ›āļ™ auto increment āļ”āļ‡āļ™āļ™āđ€āļĢāļēāļˆāļ°āđāļāđ„āļ‚ insert operation
         āđ‚āļ”āļĒāđ€āļĨāļ­āļāđ„āļŸāļĨW PurchasingOrder.wsdl āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW āđƒāļŦāļ‚āļĒāļēāļĒāđāļ—āļ›
         Bindings > binding > insert > inputInsert āđāļĨāļ§āļ”(āļ— properties āļ‚āļ­āļ‡ jdbc:input āļˆāļ°āđ€āļŦMāļ™āļ„4āļēāļŠāļ‡ sql āđ€āļ›āļ™

        insert into purchasingorder (itemNumber,PONumber,orderNumber,itemQuantity) values (?,?,?,?)

        āđƒāļŦāđāļāđ„āļ‚āđ€āļ›āļ™
        insert into purchasingorder (itemNumber,PONumber,itemQuantity) values (?,?,?)

   āđāļĨāļ°āđƒāļŦāđāļāđ„āļ‚ paramOrder āļˆāļēāļ
        itemNumber,PONumber,orderNumber,itemQuantity

   āđ€āļ›āļ™
        itemNumber,PONumber,itemQuantity


5. āļāļēāļĢāļž#āļ’āļ™āļē Business Process āļŠSāļēāļŦāļĢ#āļš ForEach

      āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļŠ4āļēāļŦāļĢāļšāļāļēāļĢāļŠāļēāļ˜2āļ•āļāļēāļĢāđƒāļŠāļ„4āļēāļŠāļ‡
ForEach āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

65.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPELStructureProcess1.bpel

   1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPEL āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡
      New > BPEL Process
   2. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ BPELStructureProcess1 āđāļĨāļ§āļāļ” Finish
   3. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPELStructureProcess1.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™
      āđ‚āļŦāļĄāļ” designer



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




     5.2 āļāļēāļĢāđ€āļž2āļĄ partner link

        1.   āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™
             BPELStructureWSDL1.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ (

             āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠ)āđƒāļ™           )
        2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name:
             āđ€āļ›āļ™ BPELStructurePartnerLink āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļŠāļ­ PartnerLink1 āđ€āļ”2āļĄāđāļĨāļ§āļāļ” OK
        3.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ PurchasingOrderDB.wsdl āļ—āļ­āļĒ()āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” BPELStructure āļĄāļē
             āđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­ [āđ€āļĢāļēāļ•āļ­āļ‡āļ—4āļēāļāļēāļĢ deploy āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āļ)āļ­āļ™āļ—āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ4āļēāļŦāļ™āļ”
             partner link āđ„āļ”]
        4.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name:
             āđ€āļ›āļ™ DBPartnerLink āđāļĨāļ§āļāļ” OK

     5.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive
        1.   āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.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: āđ€āļ›āļ™ BPELStructurePartnerLink
        4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
             Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK


     5.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ ForEach

        1.   āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ ForEach āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡
             Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ Process end
        2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ ForEach āļ—āļŠāļ­ ForEach1 āļˆāļ°āļŠāļ‡āđ€āļāļ•6āđ€āļŦMāļ™āļ§)āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđāļŠāļ”āļ‡ Error āđ€āļ2āļ”āļ‚-āļ™
             āđ€āļ™āļ­āļ‡āļˆāļēāļāđ€āļĢāļēāļĒāļ‡āđ„āļĄ)āđ„āļ”āļ4āļēāļŦāļ™āļ” parameters āđƒāļ™ ForEach
        3.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ ForEach1 āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ BPEL Mapper āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ”



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



        Start Value āđƒāļ™āļŠ)āļ§āļ™ For Each āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ° highlight āļŠāļ™4āļēāđ€āļ‡2āļ™āđƒāļ™āđ‚āļŦāļ™āļ”āļ™āļ™
   4.   āđ€āļĨāļ­āļ Number Literal āļˆāļēāļāđ€āļĄāļ™( Number āļ—āļ­āļĒ()āļŠ)āļ§āļ™āļšāļ™āļ‚āļ­āļ‡ BPELMapper āđāļĨāļ§āđ€āļ›āļĨāļĒāļ™āļ„)āļēāđ€āļ›āļ™ 1 āđāļĨāļ°
        āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āđ„āļ›āļĒāļ‡ Start Value āļ”āļ‡āļĢ(āļ›




   5.   āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” Final Value āđƒāļ™āļŠ)āļ§āļ™ For Each āđ€āļĨāļ­āļ Count āļˆāļēāļāđ€āļĄāļ™( Node āļ—āļ­āļĒ()āļŠ)āļ§āļ™āļšāļ™āļ‚āļ­āļ‡
        BPELMapper āđāļĨāļ§āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” item āđƒāļ™āļŠ)āļ§āļ™ items > inputData > inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļš
        āđ‚āļŦāļ™āļ” NodeSet āļ‚āļ­āļ‡ Count āđāļĨāļ°āđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” Number āļ‚āļ­āļ‡ Count āļāļšāđ‚āļŦāļ™āļ” Final Value āđƒāļ™āļŠ)āļ§āļ™ For
        Each āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




   6.   āļāļ” Save

5.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš storePO

   1.   āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡
        Palette āļĄāļēāđ„āļ§āđƒāļ™āļ˜6āļĢāļāļĢāļĢāļĄ ForEach1
   2.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ
        Invoke1
   3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ storePO āđāļĨāļ°āđ€āļĨāļ­āļ
        Partner Link: āđ€āļ›āļ™ DBPartnerLink
   4.   āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ InsertIn āđāļĨāļ§āļāļ” OK
   5.   āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ”
        Name: āđ€āļ›āļ™ InsertOut āđāļĨāļ§āļāļ” OK




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



      5.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Predicate

         1.   āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡
              Palette āļĄāļēāđ„āļ§āđƒāļ™āļ āļēāļĒāđƒāļ™āļ˜6āļĢāļāļĢāļĢāļĄ ForEach1 āļ)āļ­āļ™āļŦāļ™āļēāļ˜6āļĢāļāļĢāļĢāļĄ storePO āļ”āļ‡āļĢ(āļ›




         2.   āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļĢāļēāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ„)āļēāļˆāļēāļ Items āđƒāļ™āļāļēāļĢāļ›sāļ­āļ™āļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđƒāļ™āļāļēāļĢāļ™āđ€āļĢāļē
              āļˆāļ°āļ•āļ­āļ‡āļ™2āļĒāļēāļĄ predicate āđ€āļžāļ­āļŠāļĢāļēāļ‡ index list āļ‚āļ­āļ‡ Item āļ—āļˆāļ°āļ—4āļēāđƒāļŦāđ€āļĢāļēāđ€āļ‚āļĒāļ™āļāļēāļĢāļ§āļ™āļĢāļ­āļšāđ„āļ”
         3.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPELMapper āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” inData > inputData > Items āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Item āđ€āļĨāļ­āļ
              āļ„4āļēāļŠāļ‡ Add Predicate... āļ”āļ‡āļĢ(āļ›




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




   4.    āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Predicate Editor āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” ForEach1Counter āđƒāļ™āļŠ)āļ§āļ™ ForEach1 āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒ
        āļĄāļ­āļāļšāđ‚āļŦāļ™āļ” Predicate āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” OK




   5.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPELMapper āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ”āļ•)āļēāļ‡āđ†āļ”āļ‡āļ™
           5. PONumber āđƒāļ™āļŠ)āļ§āļ™ inputData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” PONumber āđƒāļ™āļŠ)āļ§āļ™ InsertIn
           6. ItemNumber āđƒāļ™āļŠ)āļ§āļ™ Item[$ForEach1Counter] āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” itemNumber āđƒāļ™āļŠ)āļ§āļ™
              InsertIn
           7. ItemQuantity āđƒāļ™āļŠ)āļ§āļ™ Item[$ForEach1Counter] āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” itemQuantity āđƒāļ™āļŠ)āļ§āļ™
              InsertIn

   āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




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




         6.   āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›




         7.   āļāļ”āļ›6zāļĄ Save āđāļĨāļ° Clean and Build

      6. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application
            āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ BPELStructureProcess1.bpel āļšāļ™ Open
      ESB āđ‚āļ”āļĒāđƒāļŠ BPEL SE āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™




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



   1.   āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite
        Application āđāļĨāļ§āļāļ” Next
   3.   āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ BPELStructureCompositeApp āđāļĨāļ§āļāļ” Finish
   4.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” BPELStructureCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module
   5.   āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructure āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files
   6.   āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” BPELStructure.jar āļ āļēāļĒāđƒāļ• RoomBookingCompositeApp > JBI
        Module
   7.   āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructureCompositeApp
   8.   āļŦāļ™āļēāļ•)āļēāļ‡ CASA Editor āļˆāļ°āđāļŠāļ”āļ‡āļ”āļ‡āļĢ(āļ›




   9.   āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructureCompositeApp

7. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase

   āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄāđ€āļ„āļĢāļ­āļ‡āļĄāļ­āļ—āļŠ)āļ§āļĒāđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš Composite Application āļ—āļžāļ’āļ™āļēāļ‚-āļ™ āđ‚āļ”āļĒāļāļēāļĢāļĢāļ™
āļœ)āļēāļ™ TestCase āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

   1.   āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” BPELStructureCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New
        Test Case
   2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next



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



         3.   āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ BPELStructure āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ BPELStructureWSDL1.wsdl āđāļĨāļ§āļāļ”
              Next
         4.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ BPELStructureWSDL1Operation āđāļĨāļ§āļāļ” Finish
         5.   āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļŠ)āļ§āļ™ inputData āļ”āļ‡āļ™
               <soapenv:Body>
                  <po:PO>
                    <po:PONumber>1234</po:PONumber>
                    <po:PODate>2009-5-5T12:12:13.123456</po:PODate>
                    <po:Items>
                      <!--1 or more repetitions:-->
                      <po:Item>
                        <po:ItemNumber>101</po:ItemNumber>
                        <po:ItemQuantity>3</po:ItemQuantity>
                      </po:Item>
                      <po:Item>
                        <po:ItemNumber>102</po:ItemNumber>
                        <po:ItemQuantity>2</po:ItemQuantity>
                      </po:Item>
                      <po:Item>
                        <po:ItemNumber>201</po:ItemNumber>
                        <po:ItemQuantity>5</po:ItemQuantity>
                      </po:Item>
                    </po:Items>
                  </po:PO>
                </soapenv:Body>

         6.   āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run
         7.   āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”(āļœāļĨāļĨāļžāļ˜Wāļˆāļēāļ Table āļ—āļŠāļ­ purchasingorder āđ„āļ”āļ”āļ‡āļĢ(āļ›




      Web Services & SOA Using GlassFishESB               Thanachart Numnonda and Thanisa Kruawaisayawan

More Related Content

PDF
Java Web Services and SOA Exercises [in Thai]
PDF
āđ‡Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
DOC
āļ āļēāļĐāļē Jsp
PDF
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
PDF
Java Web Services and SOA Using GlassFish openESB and NetBeans
PDF
Web service overview
PDF
āļŠāļĢāđ‰āļēāļ‡ Soap web services āļ‡āđˆāļēāļĒāđ†
PDF
Websocket & HTML5
Java Web Services and SOA Exercises [in Thai]
āđ‡Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
āļ āļēāļĐāļē Jsp
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeans
Web service overview
āļŠāļĢāđ‰āļēāļ‡ Soap web services āļ‡āđˆāļēāļĒāđ†
Websocket & HTML5

Similar to SOA Using GlassFishESB and NetBeans [in Thai] (20)

PDF
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
PDF
Java Web programming Using NetBeans
PDF
Java Web Programming Using NetBeans 6.5
DOCX
PDF
20110303 joomla-appserv-server2go
PDF
Web Programming for education class - all slides
PDF
PDF
joomla-2-5-install-appserv
PDF
Web dav android (1)
PDF
Web dav android
PDF
Eclipse
 
PDF
Wordpress 3.5 -install-appserv
PDF
āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļšāļ—āļ—āļĩāđˆ3āđ‚āļ›āļĢāđāļāļĢāļĄ filter āļšāļ™ linux
PDF
650 1
PDF
āļĢāļēāļĒāļ‡āļēāļ™ āļ„āļ­āļĄ
PDF
61 sql server 2008 complete
PPT
āļšāļ—āļ—āļĩāđˆ+1
DOC
āļšāļ—āļ—āļĩāđˆ 2 (21 02-56) okāļĢāļąāļ™āđ€āļĨāļ‚āđāļĨāđ‰āļ§(āđāļāđ‰āđ€āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļŦāļ™āđ‰āļēāļ”āđ‰āļ§āļĒ āļ•āļąāđ‰āļ‡āđāļ•āđˆāļŦāļ™āđ‰āļē 9 āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™āđ„āļ› )...
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Java Web programming Using NetBeans
Java Web Programming Using NetBeans 6.5
20110303 joomla-appserv-server2go
Web Programming for education class - all slides
joomla-2-5-install-appserv
Web dav android (1)
Web dav android
Eclipse
 
Wordpress 3.5 -install-appserv
āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļšāļ—āļ—āļĩāđˆ3āđ‚āļ›āļĢāđāļāļĢāļĄ filter āļšāļ™ linux
650 1
āļĢāļēāļĒāļ‡āļēāļ™ āļ„āļ­āļĄ
61 sql server 2008 complete
āļšāļ—āļ—āļĩāđˆ+1
āļšāļ—āļ—āļĩāđˆ 2 (21 02-56) okāļĢāļąāļ™āđ€āļĨāļ‚āđāļĨāđ‰āļ§(āđāļāđ‰āđ€āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļŦāļ™āđ‰āļēāļ”āđ‰āļ§āļĒ āļ•āļąāđ‰āļ‡āđāļ•āđˆāļŦāļ™āđ‰āļē 9 āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™āđ„āļ› )...
Ad

More from Thanachart Numnonda (20)

PDF
Thailand Digital Industry Survey Result 2021
PDF
āļ›āļĢāļ°āļ§āļąāļ•āļī (āļĻāļēāļŠāļ•āļĢāđŒ) āļ­āļąāļ™āđāļŠāļ™āļŠāļļāļ‚āļ‚āļ­āļ‡ āđāļ–āļĄāļŠāļļāļ‚
PDF
Planning on Mobile Strategy
PDF
āļ‚āđ‰āļ­āļšāļąāļ‡āļ„āļąāļš āļŠāļĄāļēāļ„āļĄāļŠāļ–āļēāļ›āļ™āļīāļāđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩāļŠāļēāļĢāļŠāļ™āđ€āļ—āļĻāļ›āļĢāļ°āđ€āļ—āļĻāđ„āļ—āļĒ
PDF
Software Trends Towards AEC 2015
PDF
Personal Cloud
PDF
How would cloud computing Effect to Software Industry?
PDF
Impact of cloud computing to Asian IT Industry
PDF
āļžāļīāļŠāļīāļ•āļ„āļđāđˆāđāļ‚āđˆāļ‡ āđāļ‹āļ‡āļŦāļ™āđ‰āļēāļ”āđ‰āļ§āļĒāđ„āļ­āļ—āļĩ āļĒāļļāļ„āđƒāļŦāļĄāđˆ
PDF
āļĢāļēāļĒāļŠāļ·āđˆāļ­āļœāļđāđ‰āļŠāļĄāļ„āļ§āļĢāđ„āļ”āđ‰āļĢāļąāļšāđƒāļšāļ›āļĢāļ°āļāļēāļĻāđ€āļāļĩāļĒāļĢāļ•āļīāļ„āļļāļ“āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ§āļīāļ—āļĒāļēāļĻāļēāļŠāļ•āļĢāđŒāļŠāļđāđˆāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āđ€āļĨāļīāļĻ]
PDF
āļžāļīāļŠāļīāļ•āļ„āļđāđˆāđāļ‚āđˆāļ‡ āđāļ‹āļ‡āļŦāļ™āđ‰āļēāļ”āđ‰āļ§āļĒāđ„āļ­āļ—āļĩ āļĒāļļāļ„āđƒāļŦāļĄāđˆ
PDF
āđ„āļ­āļ‹āļĩāļ—āļĩāļāļąāļšāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡āļŠāļąāļ‡āļ„āļĄāđ„āļ—āļĒ
PDF
Cloud Computing āļāļąāļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ•āđˆāļēāļ‡āđ†
PDF
3G āļāļąāļšāļ­āļ™āļēāļ„āļ• āļ˜āļļāļĢāļāļīāļˆāđāļ­āļžāļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđƒāļ™āđ€āļĄāļ·āļ­āļ‡āđ„āļ—āļĒ
PDF
āļšāļ—āļ„āļ§āļēāļĄ Google vs. Android
PDF
IT trends for co-creation
PDF
Technology Trends & The Impact for Software Industry
PDF
āļ­āļĒāļēāļāļ­āļĒāļđāđˆ 110 āļ›āļĩ
PDF
Java Programming: āļ„āļĨāļēāļŠāļ­āļīāļ™āļžāļļāļ•āđāļĨāļ°āđ€āļ­āļēāļ•āđŒāļžāļļāļ•
Thailand Digital Industry Survey Result 2021
āļ›āļĢāļ°āļ§āļąāļ•āļī (āļĻāļēāļŠāļ•āļĢāđŒ) āļ­āļąāļ™āđāļŠāļ™āļŠāļļāļ‚āļ‚āļ­āļ‡ āđāļ–āļĄāļŠāļļāļ‚
Planning on Mobile Strategy
āļ‚āđ‰āļ­āļšāļąāļ‡āļ„āļąāļš āļŠāļĄāļēāļ„āļĄāļŠāļ–āļēāļ›āļ™āļīāļāđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩāļŠāļēāļĢāļŠāļ™āđ€āļ—āļĻāļ›āļĢāļ°āđ€āļ—āļĻāđ„āļ—āļĒ
Software Trends Towards AEC 2015
Personal Cloud
How would cloud computing Effect to Software Industry?
Impact of cloud computing to Asian IT Industry
āļžāļīāļŠāļīāļ•āļ„āļđāđˆāđāļ‚āđˆāļ‡ āđāļ‹āļ‡āļŦāļ™āđ‰āļēāļ”āđ‰āļ§āļĒāđ„āļ­āļ—āļĩ āļĒāļļāļ„āđƒāļŦāļĄāđˆ
āļĢāļēāļĒāļŠāļ·āđˆāļ­āļœāļđāđ‰āļŠāļĄāļ„āļ§āļĢāđ„āļ”āđ‰āļĢāļąāļšāđƒāļšāļ›āļĢāļ°āļāļēāļĻāđ€āļāļĩāļĒāļĢāļ•āļīāļ„āļļāļ“āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ§āļīāļ—āļĒāļēāļĻāļēāļŠāļ•āļĢāđŒāļŠāļđāđˆāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āđ€āļĨāļīāļĻ]
āļžāļīāļŠāļīāļ•āļ„āļđāđˆāđāļ‚āđˆāļ‡ āđāļ‹āļ‡āļŦāļ™āđ‰āļēāļ”āđ‰āļ§āļĒāđ„āļ­āļ—āļĩ āļĒāļļāļ„āđƒāļŦāļĄāđˆ
āđ„āļ­āļ‹āļĩāļ—āļĩāļāļąāļšāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡āļŠāļąāļ‡āļ„āļĄāđ„āļ—āļĒ
Cloud Computing āļāļąāļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ•āđˆāļēāļ‡āđ†
3G āļāļąāļšāļ­āļ™āļēāļ„āļ• āļ˜āļļāļĢāļāļīāļˆāđāļ­āļžāļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđƒāļ™āđ€āļĄāļ·āļ­āļ‡āđ„āļ—āļĒ
āļšāļ—āļ„āļ§āļēāļĄ Google vs. Android
IT trends for co-creation
Technology Trends & The Impact for Software Industry
āļ­āļĒāļēāļāļ­āļĒāļđāđˆ 110 āļ›āļĩ
Java Programming: āļ„āļĨāļēāļŠāļ­āļīāļ™āļžāļļāļ•āđāļĨāļ°āđ€āļ­āļēāļ•āđŒāļžāļļāļ•
Ad

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
  • 60. 30 āļĢ5āļ›āļ— 10 āđāļŠāļ”āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļŦāļ™āļē Page1.jsp 9. āļ4āļēāļŦāļ™āļ”āļ„)āļēāļ„6āļ“āļŠāļĄāļšāļ•2āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆMāļ„āļ•)āļēāļ‡āđ† āđƒāļ™ Page Layout āļ™ āļ”āļ‡āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ— 1 āļ•āļēāļĢāļēāļ‡āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļ4āļēāļŦāļ™āļ”āļ„)āļē properties āđƒāļŦāļāļšāļ­āļ­āļ›āđ€āļˆâ€™āļ„āļ•)āļēāļ‡āđ† id text lbID ID: inputID lbFirstName FirstName: inputFirstName lbLastName LastName: inputLastName lbSalary Salary: inputSalary BtnSubmit Submit resultText 10. āļāļ”āļ›6zāļĄ Save 11. āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ— inputID āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 11 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 61. 31 āļĢ5āļ›āļ— 11 āđāļŠāļ”āļ‡āļāļēāļĢ Add Binding Attribute 12. āļ—4āļēāļāļēāļĢAdd Binding Attribute āļ— inputFirstName, inputLastName āđāļĨāļ° inputSalary 13. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļ›6zāļĄ Submit āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļš Java āđāļĨāļ°āđāļŠāļ”āļ‡ source code āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļē āđƒāļ™āđ€āļĄāļ˜āļ­āļ” btnSubmit_action āđāļĨāļ§āđ€āļĨāļ­āļ Web Service Client Resources > Call Web Service Operation āđ€āļĨāļ­āļāđ„āļ›āļ— DataIOOperation āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™ public String btnSubmit_action() { try { // Call Web Service Operation org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port = service.getDataIOPort(); java.lang.String id = (String) inputID.getText(); java.lang.String firstName = (String) inputFirstName.getText(); java.lang.String lastName = (String) inputLastName.getText(); String tmp = (String) inputSalary.getText(); int salary = Integer.parseInt(tmp); // TODO process result here java.lang.String result = port.dataIOOperation(id, firstName, lastName, salary); resultText.setText("Result = " + result); } catch (Exception ex) { resultText.setText(ex); } return null; } 14. Clean and Build āđāļĨāļ° Run āđ‚āļ›āļĢāđ€āļˆMāļ„ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 62. 32 āļĢ5āļ›āļ— 12 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜WāļŦāļ™āļē Page1.jsp 15. āđāļĨāļ°āđ„āļŸāļĨW result.txt āđƒāļ™āđ„āļ”āđ€āļĢMāļāļ—āļ­āļĢ c:SOA_output āļˆāļ°āļĄāļ‚āļ­āļĄ(āļĨāļ”āļ‡āļ™ Somjai Jaidee => 38000 Nipa Jinjai => 738000 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 63. 33 Exercise 8: BPEL for Writing to Database āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ­āđ€āļ‚āļĒāļ™āļ‚āļ­āļĄ(āļĨāļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ Business Process āļ—āļžāļ’āļ™āļēāđ‚āļ”āļĒāđƒāļŠ GlassFish Open ESB āļœ)āļēāļ™ Database Binding Component āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļŠāļĢāļēāļ‡ Table, Connection Pool āđāļĨāļ° JDBC Resources 2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ DBBPEL 3. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš DatabaseBinding 4. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding 5. āļžāļ’āļ™āļē BPEL Process 6. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application 7. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase 8. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ Web Application 1. āļŠāļĢMāļēāļ‡ Table, Connection Pool āđāļĨāļ° JDBC DataSource āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ€āļžāļ­āđƒāļŠāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļžāļ™āļāļ‡āļēāļ™āļ‚āļ­āļ‡āļšāļĢ2āļĐāļ— āđāļĨāļ°āļ—4āļēāļāļēāļĢ config GlassFish v2 Application Server āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āļ•)āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ„āļ”āđ‚āļ”āļĒāđƒāļŠ JDBC Resource 1. āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļŦāļĢāļ­ MySQL Query Browser āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ Employee āđƒāļ™āļāļēāļ™ āļ‚āļ­āļĄ(āļĨ MySQL āļ—āļŠāļ­ soa āđ‚āļ”āļĒāļ4āļēāļŦāļ™āļ”āđƒāļŦāļĄ column āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™ id VARCHAR(10) Primary Key firstName VARCHAR(30) lastName VARCHAR(30) salary DOUBLE āļŦāļĢāļ­āļĢāļ™āđ„āļŸāļĨW employee.sql DROP TABLE IF EXISTS soa.employee; CREATE TABLE soa.employee ( id varchar(10) NOT NULL, firstName varchar(30) NOT NULL, lastName varchar(30) NOT NULL, salary double NOT NULL, PRIMARY KEY (id) ) Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 64. 34 2. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ­āļāđ„āļ›āļ—āđāļ—āļš Services āļ„āļĨ2[āļāļ‚āļ§āļēāļ— Servers > GlassFish V2 āđ€āļĨāļ­āļ View Admin Console 3. āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āļˆāļ°āļ–(āļāđ€āļ›~āļ”āļ‚-āļ™āđāļĨāļ°āđāļŠāļ”āļ‡āļŦāļ™āļēāļˆāļ­ Admin Console āđƒāļŦāļ›sāļ­āļ™ User Name: āđ€āļ›āļ™ admin āđāļĨāļ° Password: āđ€āļ›āļ™ adminadmin 4. āļ—āļēāļ‡āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­āļ‚āļ­āļ‡ Admin Console āđƒāļŦāļ„āļĨ2[āļāļ— Resources > JDBC > Connection Pools āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ­ Connection Pool āļ—āļĄāļ­āļĒ() āļˆāļēāļāļ™āļ™āđƒāļŦāļāļ” New āđāļĨāļ°āđƒāļŠ)āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 1 āļĢ5āļ›āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Connection Pool āļ—āļŠāļ­ MySQLPool 5. āļāļ” Next āļˆāļēāļāļ™āļ™āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļēāļ•)āļēāļ‡āđ† āļ”āļ‡āļ™ 1. DatabaseName soa 2. Password admin 3. PortNumber 3306 4. ServerName localhost 5. User root 6. āļāļ” Finish āđāļĨāļ§āļāļ” Save 7. āđ€āļĨāļ­āļ MySQLPool āđāļĨāļ°āđƒāļŦāļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ›6zāļĄ Ping āļ–āļēāļ‚-āļ™ Ping Succeeded āđāļŠāļ”āļ‡āļ§)āļēāđ€āļŠāļ­āļĄāļ•)āļ­āđ„āļ” āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 2 āļĢ5āļ›āļ— 2 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•)āļ­āļ‚āļ­āļ‡ MySQLPool āđ„āļ›āļĒāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ soa Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 65. 35 8. āļ„āļĨ2[āļāļ— Resources > JDBC > JDBC Resources āļˆāļēāļāļ™āļ™āđƒāļŦāļāļ” New āđāļĨāļ°āđƒāļŠ)āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 3 āļĢ5āļ›āļ— 3 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ JDBC Resource āļ—āļŠāļ­ jdbc/soa 9. āļāļ” OK 10. āđƒāļŠ NetBeans āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•)āļ­āļāļš Database āđ„āļ”āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ—āđāļ—āļš Services āļˆāļ°āđ€āļŦMāļ™ MySQL Driver āļ—āļĄāļĄāļē āđƒāļŦāđāļĨāļ§ āļ‹-āļ‡āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Databases > Drivers āļˆāļ°āđ€āļŦMāļ™ Driver āļ—āļŠāļ­ MySQL āđƒāļŦāļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļē āđāļĨāļ§ āđ€āļĨāļ­āļ Connect Using āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 4 āļĢ5āļ›āļ— 4 āđāļŠāļ”āļ‡ MySQL āļ—āļ­āļĒ()āđƒāļ™ Drivers 11. āđƒāļŦāļ—4āļēāļāļēāļĢāļĢāļ°āļš6āļ„)āļēāļ‚āļ­āļ‡Database URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/soa 12. āļŠ4āļēāļŦāļĢāļš User Name: āđāļĨāļ° Password: āđƒāļŦāđƒāļŠ)āļ„)āļēāļ•āļēāļĄāļ—āļ4āļēāļŦāļ™āļ”āđ„āļ§āđƒāļ™āļ•āļ­āļ™āļ•2āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL āļ‹-āļ‡āđƒāļ™āļ— āļ™āļˆāļ°āļĄāļ„)āļēāđ€āļ›āļ™ root āđāļĨāļ° admin āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 5 āļāļ” OK 2 āļ„āļĢāļ‡ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 66. 36 āļĢ5āļ›āļ— 5 āđāļŠāļ”āļ‡āļāļēāļĢāļ4āļēāļŦāļ™āļ”āļ„)āļēāđƒāļŦāļāļš Database Connection 13. āļˆāļēāļāļ™āļ™āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Database āļˆāļ°āđ€āļŦMāļ™ Connection āđƒāļŦāļĄ)āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 6 (āļ–āļēāļĒāļ‡āđ„āļĄ) Connect āđƒāļŦ āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ Connect) āļĢ5āļ›āļ— 6 āđāļŠāļ”āļ‡ Connection āđ„āļ›āļĒāļ‡ soa Database 2. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ DBBPEL āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļŠ4āļēāļŦāļĢāļš Service Oriented Architecture āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§ āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DBBPEL āđāļĨāļ§āļāļ” Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 67. 37 3. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš DatabaseBinding āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ Database āļŠ4āļēāļŦāļĢāļšāđ€āļ‚āļĒāļ™āļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document .. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ EmployeeDB āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ DATABASE āđāļĨāļ° Types āđ€āļ›āļ™ Table āļˆāļēāļāļ™āļ™āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/soa āļāļ” Next 4. āđ€āļĨāļ­āļ Table: Employee āļˆāļēāļ Available Tables: āđ„āļ›āļĒāļ‡ Selected Tables: āđāļĨāļ°āļāļ” Next 5. āļāļ” Next āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē JNDI Name āđ€āļ›āļ™ jdbc/soa āļāļ” Finish 6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨWāļ‚-āļ™āļĄāļēāļŠāļ­āļ‡āđ„āļŸāļĨWāļ„āļ­ EmployeeDB.wsdl āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ service āļ•)āļēāļ‡āđ† āļ‚āļ­āļ‡ Table āđāļĨāļ° employee.xsd āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ XML Schema āļ‚āļ­āļ‡ Table āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ”(āļ„4āļēāļŠāļ‡āļ•)āļēāļ‡āđ† āđƒāļ™āđ„āļŸāļĨW EmployeeDB.wsdl āļ­āļēāļ—2āđ€āļŠ)āļ™ insert operation āļ‚āļ­āļ‡ table āđ„āļ”āđ‚āļ”āļĒāđ€āļĨāļ­āļāđ„āļŸāļĨWāļ™ āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW āđƒāļŦāļ‚āļĒāļēāļĒāđāļ—āļ› Bindings > binding > insert > inputInsert āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 7 āđāļĨāļ§āļ”(āļ— properties āļ‚āļ­āļ‡ jdbc:input āļˆāļ°āđ€āļŦMāļ™āļ„4āļēāļŠāļ‡ sql āđ€āļ›āļ™ insert into employee (firstName,id,salary,lastName) values (?,?,?,?) āļĢ5āļ›āļ— 7 āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW Employee.wsdl Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 68. 38 4. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš SOAPBinding āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ° āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāđƒāļ™āļ—āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ” inputData āđƒāļŦāđ€āļ›āļ™ XML āļ•āļēāļĄ DataType āļ—āļ™2āļĒāļēāļĄāđƒāļ™ Employee.xsd āđāļĨāļ° result āđƒāļŦāđ€āļ›āļ™ String āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document .. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ DatabaseWSDL āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC Literal āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputData āđāļĨāļ§āļ4āļēāļŦāļ™āļ” Element Or Type āđ€āļ›āļ™ employee āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 8 āđāļĨāļ°āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Output: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ result āļˆāļēāļāļ™āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish āļĢ5āļ›āļ— 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Element āļ‚āļ­āļ‡ inputData 5. āļāļēāļĢāļž#āļ’āļ™āļē BPEL Process āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 5.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW DBProcess.bpel 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPEL āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > BPEL Process 2. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ DBProcess āđāļĨāļ§āļāļ” Finish 3. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW DBProcess.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™āđ‚āļŦāļĄāļ” Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 69. 39 designer 5.2 āļāļēāļĢāđ€āļž2āļĄ partner link 1. āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DatabaseWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‹āļēāļĒāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design 2. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DatabaseWSDLPartnerLink 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ EmployeeDB.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design 4. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DBPartnerLink 5.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨW DBProcess.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: āđ€āļ›āļ™ DatabaseWSDLPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK 5.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨW DBProcess.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: āđ€āļ›āļ™ DatabaseWSDLPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK 5.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš write 1. āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 70. 40 āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ invokeWriteToDB āđāļĨāļ° āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DBPartnerLink āđāļĨāļ°āđ€āļĨāļ­āļ Operation: āđ€āļ›āļ™ insert 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ InsertIn 5. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ InsertOut āđāļĨāļ§āļāļ” OK 5.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ invokeWriteToDB 2. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄ(āļĨāđƒāļ™āđ‚āļŦāļ™āļ” inData > inputData > employee_Record āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ āđ„āļ›āļĒāļ‡ InsertIn > part > employee_Record āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 9 āđ‚āļ”āļĒāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡ field āļ•)āļēāļ‡āđ†āđ€āļŦāļĨ)āļēāļ™ 1. id > id 2. firstName > firstName 3. lastName > lastName 4. salary > salary āļĢ5āļ›āļ— 9 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§)āļēāļ‡ start āđāļĨāļ° invokeWriteToDB 3. āđƒāļ™āđ„āļŸāļĨW DBProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ invokeWriteToDB āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āđ€āļĨāļ­āļ String > String Literal āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļēāđ€āļ›āļ™ Success āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŸ~āļĨāļ”WāļĢāļ°āļŦāļ§)āļēāļ‡ string literal āļāļš result āļ—āļ­āļĒ()āđƒāļ™ outData āļ”āļ‡ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 71. 41 āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 10 āļĢ5āļ›āļ— 10 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§)āļēāļ‡ invokeWriteToDB āđāļĨāļ° end 5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 11 āļĢ5āļ›āļ— 11 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļ‡āļĢāļ°āļšāļš 6. Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ 6. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ DBBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 72. 42 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DBCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” DBCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ DBBPEL āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” DBBPEL.jar āļ āļēāļĒāđƒāļ• DBCompositeApp > JBI Module 7. āļ„āļĨ2[āļāļ‚āļ§āļēāļ— DBCompositeApp āđ€āļĨāļ­āļ Clean and Build 8. āļ„āļĨ2[āļāļ— Service Assembly āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 12 āļĢ5āļ›āļ— 12 āđāļŠāļ”āļ‡ Service Assembly āļ‚āļ­āļ‡ DBCompositeApp 7. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase 1. āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ DBCompositeApp 2. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” DBCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ DBBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ DatabaseWSDL.wsdl āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ DatabaseWSDLOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļ”āļ‡āļ™ <tab:employee_Record> <tab:id>1234</tab:id> <tab:lastName>Jaidee</tab:lastName> <tab:salary>38000</tab:salary> Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 73. 43 <tab:firstName>Somjai</tab:firstName> </tab:employee_Record> 7. āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 8. āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨW Output.xml āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 13 āļĢ5āļ›āļ— 13 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜Wāļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™ TestCase1 9. āđāļĨāļ°āđ„āļ”āļ‚āļ­āļĄ(āļĨāļ‹-āļ‡āđ€āļ‚āļēāđ„āļ›āļ­āļĒ()āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 14 āļĢ5āļ›āļ— 14 āđāļŠāļ”āļ‡āļ‚āļ­āļĄ(āļĨāļ—āļ­āļĒ()āđƒāļ™āļ•āļēāļĢāļēāļ‡ Employee āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ soa 8. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ Web Application āļ—4āļēāļāļēāļĢāļ„āļ™āļŦāļēāļ•4āļēāđāļŦāļ™)āļ‡ URL āļ‚āļ­āļ‡ soap:address āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āļ„āļĨ2[āļāļ— Service Assembly āđƒāļ™ DBCompositeApp āđāļĨāļ°āļ„āļĨ2[āļāļ— DatabaseWSDLPort 2. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ properties āđƒāļŦāļ—4āļēāļāļēāļĢ copy āļ„)āļēāļ‚āļ­āļ‡ soap:address 3. āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›~āļ” Web Browser āđāļĨāļ§ paste āļ„)āļēāļ— copy āđ„āļ§ āļˆāļēāļāļ™āļ™āđƒāļŦāļ—4āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļ„)āļēāļ‚āļ­āļ‡ URL āđƒāļŦāđ€āļ›āļ™ āļ”āļ‡āļ™ http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđƒāļŦāļœ(āđƒāļŠāļ›sāļ­āļ™āļ„)āļēāļ‚āļ­āļĄ(āļĨāļ•)āļēāļ‡āđ† āļˆāļēāļāļ™āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—4āļēāļāļēāļĢāđ€āļ‚āļĒāļ™ āļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DBBPUI āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļMāļš āđ„āļŸāļĨWāđ„āļ§ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 74. 44 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ” Finish 5. āđƒāļ™āļŠ)āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Visual Web JavaServer Faces āļˆāļēāļāļ™āļ™āļāļ” Finish 6. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DBBPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web Services āđāļĨāļ° Web Service Client āđāļĨāļ§āļāļ” Next 7. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠ) URL āđ€āļ›āļ™ http://localhost:9080/DatabaseWSDLService/DatabaseWSDLPort?WSDL āđāļĨāļ§āļāļ” Finish 8. āđ€āļĨāļ­āļāđ„āļ›āļ— Page1.jsp āļ—4āļēāļāļēāļĢāļ­āļ­āļāđāļšāļš Page Layout āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 15 āļĢ5āļ›āļ— 15 āđāļŠāļ”āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļŦāļ™āļē Page1.jsp 9. āļ4āļēāļŦāļ™āļ”āļ„)āļēāļ„6āļ“āļŠāļĄāļšāļ•2āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆMāļ„āļ•)āļēāļ‡āđ† āđƒāļ™ Page Layout āļ™ āļ”āļ‡āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ— 1 āļ•āļēāļĢāļēāļ‡āļ— 1 āđāļŠāļ”āļ‡āļāļēāļĢāļ4āļēāļŦāļ™āļ”āļ„)āļē properties āđƒāļŦāļāļšāļ­āļ­āļ›āđ€āļˆâ€™āļ„āļ•)āļēāļ‡āđ† Object id text Type Label lbID ID: Text Field inputID Label lbFirstName FirstName: Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 75. 45 Object id text Type Text Field inputFirstName Label lbLastName LastName: Text Field inputLastName Label lbSalary Salary: Text Field inputSalary Button BtnSubmit Submit Static Text resultText 10. āļāļ”āļ›6zāļĄ Save 11. āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ— inputID āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 16 āļĢ5āļ›āļ— 16 āđāļŠāļ”āļ‡āļāļēāļĢ Add Binding Attribute 12. āļ—4āļēāļāļēāļĢAdd Binding Attribute āļ— inputFirstName, inputLastName āđāļĨāļ° inputSalary 13. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļ›6zāļĄ Submit āļŦāļ™āļēāļ•+āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļš Java āđāļĨāļ°āđāļŠāļ”āļ‡ source code āļ—4āļēāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļē āđƒāļ™āđ€āļĄāļ˜āļ­āļ” btnSubmit_action āđāļĨāļ§āđ€āļĨāļ­āļ Web Service Client Resources > Call Web Service Operation āđ€āļĨāļ­āļāđ„āļ›āļ— DatabaseWSDLOperation āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™ public String btnSubmit_action() { try { // Get port org.netbeans.j2ee.wsdl.dbbpel.databasewsdl.DatabaseWSDLPort- Type port = service_1.getDatabaseWSDLPort(); // Retrieve values in text fields on UI java.lang.String id = (String) inputID.getText(); java.lang.String firstName = (String) inputFirstName.getText(); java.lang.String lastName = (String) inputLastName.getText(); String temp = (String) inputSalary.getText(); Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 76. 46 int salary = Integer.parseInt(temp); org.netbeans.j2ee.xsd.tableschema.Employee inputData = new org.netbeans.j2ee.xsd.tableschema.Employee(); // Set input values EmployeeRecord emp = new EmployeeRecord(); emp.setId(id); emp.setFirstName(firstName); emp.setLastName(lastName); emp.setSalary(salary); inputData.getEmployeeRecord().add(emp); // Call Web Service java.lang.String result = port.databaseWSDLOperation(inputData); resultText.setText("Result = " + result); } catch (Exception ex) { resultText.setText(ex); } return null; } Clean and Build āđāļĨāļ° Run āđ‚āļ›āļĢāđ€āļˆMāļ„ āļĢ5āļ›āļ— 17 āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜WāļŦāļ™āļē Page1.jsp āđāļĨāļ°āđ„āļ”āļ‚āļ­āļĄ(āļĨāļ‹-āļ‡āđ€āļ‚āļēāđ„āļ›āļ­āļĒ()āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— 18 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 77. 47 āļĢ5āļ›āļ— 18 āđāļŠāļ”āļ‡āļ‚āļ­āļĄ(āļĨāļ—āļ­āļĒ()āđƒāļ™āļ•āļēāļĢāļēāļ‡ Employee āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ soa Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 78. 48 Exercise 9: BPEL for Sending Message to a JMS Queue āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ­āļŠ)āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāđ„āļ›āļĒāļ‡ JMS Queue āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠ JMS Binding Component āļ—āļ­āļĒ() OpenESB āđāļĨāļ°āļˆāļ°āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđ€āļžāļ­āđ€āļĢāļĒāļāļ”(āļ‚āļ­āļ„āļ§āļēāļĄāļ—āļ­āļĒ()āđƒāļ™ Queue āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ•2āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS 2. āļ•2āļ”āļ•āļ‡āđāļĨāļ°āļ„āļĢāļ§āļˆāļŠāļ­āļš JMS Binding Components 3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ JMSBPEL 4. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš JMSBinding 5. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding 6. āļžāļ’āļ™āļē BPEL Process 7. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application 8. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase 1. āļ•rāļ”āļ•#sāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Open Source āļ—āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđƒāļ™āļāļēāļĢāļˆāļ”āļāļēāļĢ Meessage Queues āļ‚āļ­āļ‡ Messaging Server āđ„āļ” āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļĨāļ­āļāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļ„āļ§āļēāļĄāļ—āļŠ)āļ‡āļĄāļēāļĒāļ‡ JMS Queue āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° download āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ„āļ”āļ— http://www.hermesjms.com/confluence/display/HJMS/ Home āđ‚āļ”āļĒāļāļēāļĢāđ€āļĨāļ­āļāđ„āļŸāļĨW hetmesJMS version 1.13 āđāļĨāļ§āļ•2āļ”āļ•āļ‡āđ„āļŸāļĨWāđāļšāļš jar āđ‚āļ”āļĒāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠāļ„4āļēāļŠāļ‡ āđ€āļĄāļ­āļ•2āļ”āļ•āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļĢāļĒāļšāļĢāļ­āļĒāđāļĨāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—4āļēāļāļēāļĢ config āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āđ„āļ”āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļ›~āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ— sessions āđāļĨāļ°āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New / NewSession Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 79. 49 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Preference āđƒāļŦāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļēāļ <new> āđ€āļ›āļ™ JavaMQ āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āđ€āļĨāļ­āļāđāļ—āļ› Provider āļ—āļ­āļĒ()āļ”āļēāļ™āļĨ)āļēāļ‡āļ‚āļ­āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ 3. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ„āļ”āļ­āļ°āļĨMāļ­āļāđƒāļ™āđāļ—āļ› Provider āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add Group 4. āļ4āļēāļŦāļ™āļ”āļ„)āļē Classpath group name āđ€āļ›āļ™ JavaMQClasspathGroup āđāļĨāļ§āļāļ” OK 5. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” JavaMQClasspathGroup āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ— Library āđāļĨāļ°āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add JAR(s) 6. āđ€āļĨāļ­āļāđ„āļŸāļĨWāđāļšāļš jar āļ•)āļ­āđ„āļ›āļ™āļ—āļ­āļĒ()āđƒāļ™āđ„āļ”āđ€āļĢMāļāļ—āļ­āļĢāļ‚āļ­āļ‡ GlassFish ESB āļ—āļŠāļ­ imq/lib 4. fscontext.jar 5. imq.jar 6. imqadmin.jar 7. imqbroker.jar 8. imqjmx.jar 9. imqutil.jar 10. imqxm.jar 11. jaxm-api.jar 12. jhall.jar 13. jms.jar 7. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļāļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ”āļ›6zāļĄ Apply āđāļĨāļ§āļāļ” OK āđ€āļžāļ­āļ›~āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļ Preference Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 80. 50 8. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” sessions āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ— JavaMQ āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Edit.. āļ”āļ‡āļĢ(āļ› 9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Preference āđ€āļĨāļ­āļāđāļ—āļ› Session āđāļĨāļ§āđ€āļĨāļ­āļ JavaMQClasspathGroup āļŠ4āļēāļŦāļĢāļš Loader āđāļĨāļ° com.sun.messaging.QueueConnectionFactory āļŠ4āļēāļŦāļĢāļš Class āļ”āļ‡āļĢ(āļ› 10. āļāļ”āļ›6zāļĄ Apply āļ•āļēāļĄāļ”āļ§āļĒ OK āđ€āļžāļ­āļ›~āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 81. 51 11. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” sessions āđāļĨāļ§āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” JavaMQ āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Add queue.. 12. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Destination Properties āļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ TestQueue āļ4āļēāļŦāļ™āļ”āļ„)āļē UserName āđ€āļ›āļ™ admin āđāļĨāļ° Password āđ€āļ›āļ™ admin āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 82. 52 2. āļāļēāļĢāļ•rāļ”āļ•#sāļ‡ āđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļš JMS Binding Component āđāļšāļšāļāļāļŦāļ”āļ™āļ•āļ­āļ‡āļāļēāļĢāđƒāļŠ JMS Binding Component āļ—āļ•2āļ”āļ•āļ‡āļ­āļĒ()āđƒāļ™ OpenESB āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļš Service Engines āđāļĨāļ° Binding Components āļ—āļ•2āļ”āļ•āļ‡āļ­āļĒ()āđƒāļ™ Open ESB āļ‚āļ­āļ‡ GlassFish V2 āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›~āļ” āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Services āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Servers > GlassFish V2 > JBI āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™ āđ‚āļĄāļ”(āļĨāļ•)āļēāļ‡āđ† āļ”āļ‡āļ•āļ§āļ­āļĒ)āļēāļ‡āđƒāļ™āļĢ(āļ› āļ–āļē GlassFish V2 āđ„āļĄ)āļĄ sun-jms-binding āļ­āļĒ()āđƒāļŦāđ„āļ›āļ—4āļēāļāļēāļĢ download āđ‚āļĄāļ”(āļĨāļ™āđ„āļ”āļ— https://open- esb.dev.java.net/Components.html āļˆāļēāļāļ™āļ™āļ—4āļēāļāļēāļĢāļ•2āļ”āļ•āļ‡āđ„āļ”āđ‚āļ”āļĒāļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Binding Components āđāļĨāļ§ āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Install and Start.. āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ•2āļ”āļ•āļ‡āđ„āļŸāļĨWāļ— download āļĄāļē 3. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ JMSBPEL āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļŠ4āļēāļŦāļĢāļš Service Oriented Architecture āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 83. 53 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§ āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ JMSBPEL āđāļĨāļ§āļāļ” Finish 4. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš JMS Binding āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ JMS āļŠ4āļēāļŦāļĢāļšāļāļēāļĢāļŠ)āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ āđ‚āļ”āļĒāļĄāļ‚āļ™ āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JMSBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document .. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ TestQueueWSDL āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ JMS āđāļĨāļ° Types āđ€āļ›āļ™ Send āļˆāļēāļāļ™āļ™āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē Connection URL: āđ€āļ›āļ™ mq://localhost:7676 āļāļ„)āļē User Name āđ€āļ›āļ™ admin āđāļĨāļ° Password āđ€āļ›āļ™ admin āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē Destination āđ€āļ›āļ™ TestQueue āļŠ)āļ§āļ™āļ„)āļēāļ­āļ™āđƒāļŦāļ„āļ‡āļ•āļēāļĄāļ—āļ4āļēāļŦāļ™āļ”āļĄāļē āđāļĨāļ§āļāļ” Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 84. 54 5. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļŠSāļēāļŦāļĢ#āļš SOAPBinding āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš SOAPBinding āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ° āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JMSBPEL āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document .. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ JMSWSDL āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ RPC Literal āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inData āđāļĨāļ§āļ4āļēāļŦāļ™āļ” Element Or Type āđ€āļ›āļ™ xsd:String āđāļĨāļ°āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Output: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ outData āđāļĨāļ§āļ4āļēāļŦāļ™āļ” Element Or Type āđ€āļ›āļ™ xsd:String āļˆāļēāļāļ™āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish 6. āļāļēāļĢāļž#āļ’āļ™āļē BPEL Process āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 6.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW JMSProcess.bpel 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JMSBPEL āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > BPEL Process 2. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ JMSProcess āđāļĨāļ§āļāļ” Finish 3. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW JMSProcess.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™āđ‚āļŦāļĄāļ” designer 6.2 āļāļēāļĢāđ€āļž2āļĄ partner link 1. āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ JMSWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‹āļēāļĒāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design 2. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ JMSWSDLPartnerLink 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ TestQueue.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design 4. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ TestQueuepartnerLink Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 85. 55 6.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨW JMSProcess.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: āđ€āļ›āļ™ JMSWSDLPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ JMSinData āđāļĨāļ§āļāļ” OK 6.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨW JMSProcess.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: āđ€āļ›āļ™ JMSWSDLPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ JMSoutData āđāļĨāļ§āļāļ” OK 6.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš write 1. āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ sendToQueue āđāļĨāļ° āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ TestQueuePartnerLink āđāļĨāļ°āđ€āļĨāļ­āļ Operation: āđ€āļ›āļ™ JMSOutOperation 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ JMSOutOperationIn 6.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 86. 56 āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ sendToQueue 2. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄ(āļĨāđƒāļ™āđ‚āļŦāļ™āļ” inData > JMSinData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ āđ„āļ›āļĒāļ‡ part āđ… > JMSOutOperationIn āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› 3. āđƒāļ™āđ„āļŸāļĨW JMSProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ isendToQue āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āđ€āļĨāļ­āļ String > String Literal āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļēāđ€āļ›āļ™ Success āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŸ~āļĨāļ”WāļĢāļ°āļŦāļ§)āļēāļ‡ string literal āļāļš outData āļ—āļ­āļĒ()āđƒāļ™ JMSoutData āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› 5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 87. 57 6. Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ 7. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ JMSBPEL āļšāļ™ BPEL Engine āļ—āđƒāļŠ āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ JMSCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” JMSCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ JMSBPEL āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” JMSBPEL.jar āļ āļēāļĒāđƒāļ• JMSCompositeApp > JBI Module 7. āļ„āļĨ2[āļāļ‚āļ§āļēāļ— JMSCompositeApp āđ€āļĨāļ­āļ Clean and Build 8. āļ„āļĨ2[āļāļ— Service Assembly āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 88. 58 8. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase 1. āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ JMSCompositeApp 2. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” JMSCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ JMSBPEL āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ JMSWSDL.wsdl āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ JMSWSDLOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļ”āļ‡āļ™ <soapenv:Body> <jms:JMSWSDLOperation> <inData>This is a test message</inData> </jms:JMSWSDLOperation> </soapenv:Body> 7. āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 8. āđ€āļ›~āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ HermesJMS āđāļĨāļ§āļ„āļĨ2[āļāļ— TestQueue āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜Wāļ”āļ‡āļ•āļ§āļ­āļĒ)āļēāļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 89. 59 Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 90. 60 Exercise 10: BPEL Invoking Web Services āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ Business Process āļ—āđ€āļĢāļĒāļāđƒāļŠ Web Service āļ—āļžāļ’āļ™āļēāļ‚-āļ™āļĄāļēāđ‚āļ”āļĒāđƒāļŠāļ„4āļēāļŠāļ‡ Invoke āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļē Web Services āļ‚-āļ™āļĄāļŠāļ­āļ‡āļŠ6āļ”āļ„āļ­ DetermineRoomRate āđāļĨāļ° CalculateBookingPayment āđ‚āļ›āļĢāđāļāļĢāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™āļˆāļ°āļ­)āļēāļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļāļĄāļē āđāļĨāļ§ āđ€āļĢāļĒāļāđƒāļŠāđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠ DetermineRoomRate āđ€āļžāļ­āļŦāļēāļ­āļ•āļĢāļēāļ„)āļēāļ—āļžāļ āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠ CalculateBookingPayment āđ€āļžāļ­āļ„4āļēāļ™āļ§āļ“āļ„)āļēāļ—āļžāļāļ—āļ‡āļŦāļĄāļ” āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āļ‹-āļ‡ Business Process āđƒāļŦāļĄ)āļ™āļŠāļēāļĄāļēāļĢāļ–āļ›āļĢāļ°āļāļēāļĻāđ€āļ›āļ™ Web Service āđ‚āļ”āļĒāđƒāļŠ WSDL āđāļĨāļ°āđ€āļĢāļēāļˆāļ°āļ—4āļēāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Business Process āļ™āļœ)āļēāļ™ WSDL āļ”āļ‡āļāļĨ)āļēāļ§ āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļžāļ’āļ™āļē Determine Room Rate Web Services 2. āļžāļ’āļ™āļē Calculate Booking Payment Web Services 3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking 4. āļžāļ’āļ™āļē XML Schema 5. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL 6. Import āđ„āļŸāļĨW WSDL āđāļĨāļ° XML Schema 7. āļžāļ’āļ™āļē Business Process 8. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application 9. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase 10. āđ€āļž2āļĄ Business Process āļŠ4āļēāļŦāļĢāļšāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ 11. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđ€āļĢāļĒāļāđƒāļŠ Business Process 1. āļāļēāļĢāļž#āļ’āļ™āļē Determine Room Rate Web Services āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Service āļ—āļžāļ’āļ™āļēāļˆāļēāļ EJB Module āļ—āļĄ Business Logic āđƒāļ™āļāļēāļĢāđāļˆāļ‡ āļĢāļēāļ„āļēāļ—āļžāļāļ•)āļ­āļ„āļ™ āļ—āļ‡āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ”āđƒāļŦ Web Service āļ™āļĄāļŠāļ­āđ€āļĄāļ˜āļ­āļ”āđāļĨāļ° argument āļ”āļ‡āļ™ double getRate(String roomType) 1.1 āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Project āđ€āļĢāļēāļˆāļ°āļ4āļēāļŦāļ™āļ”āđ‚āļ›āļĢāđ€āļˆMāļ„āđƒāļŦāđ€āļ›āļ™ EJB Project āļ—āļ‡āļ™āđ€āļ™āļ­āļ‡āļˆāļēāļāđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļē Web Services āļˆāļēāļ Session Bean āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 91. 61 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ­āļ Project āđ€āļ›āļ™ EJBModule āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ DetermineRoomRate āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļē āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļMāļš project āđ„āļ§ āļāļ” Next 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āđ‚āļ”āļĒāļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ” Finish 1.2 āļāļēāļĢāļžāļ’āļ™āļē Web Service āļŦāļĨāļāļāļēāļĢāļžāļ’āļ™āļē Web Services āļ—āļ”āļ™āļ™ āļ„āļ§āļĢāļˆāļ°āļ™2āļĒāļēāļĄ interface āļ)āļ­āļ™āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ implementation āļāļĨ)āļēāļ§āļ„āļ­āļ•āļ­āļ‡āļ4āļēāļŦāļ™āļ” XML Schema Definition (XSD) āļ)āļ­āļ™ āđāļĨāļ§āļ™2āļĒāļēāļĄāđ„āļŸāļĨW WSDL āļ)āļ­āļ™āļ—āļˆāļ° āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļāļēāļĢ implement āļ™2āļĒāļēāļĄ WSDL āļ”āļ‡āļāļĨ)āļēāļ§ āđāļ•)āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āđ€āļĢāļēāļˆāļ°āđƒāļŠāļ§2āļ˜āļ­āļĒ)āļēāļ‡āļ‡)āļēāļĒāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Web Service āđ‚āļ”āļĒāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ implementation āļ‚-āļ™āļĄāļēāļ)āļ­āļ™ āđāļĨāļ§āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļŠāļĢāļēāļ‡ Interface (WSDL āđāļĨāļ° XSD) āļ—āļŦāļĨāļ‡ āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Web Service āļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRoomRate āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Oth- er... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web Services āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Web Ser- vice āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ”āļ„)āļē Web Service Name āđ€āļ›āļ™ DetermineRateService āđāļĨāļ°āļ„)āļē Package āđ€āļ›āļ™ ws āļŠ)āļ§āļ™āļ„)āļēāļ­āļ™āđ† āđ€āļ›āļ™āļ”āļ‡āļ—āļ•āļ‡āđ„āļ§ āļ”āļ‡āļĢ(āļ›āđāļĨāļ§āļāļ” Finish 4. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ›āļĢāļ°āļāļēāļĻ Web Services āļ—āļŠāļ­ DetermineRateService āđƒāļ™āđ‚āļŦāļ™āļ” Web Services āļ‚āļ­āļ‡ āļŦāļ™āļēāļ•)āļēāļ‡ Project āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāļ—āļŠāļ­ DetermineRateService .java āđ‚āļ”āļĒāļˆāļ°āđāļŠ āļ”āļ‡āđāļ—āļ› Design 5. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļ‚āļ­āļ‡āđ„āļŸāļĨW DetermineRateService.java āđ€āļĨāļ­āļāđāļ—āļ› Design āļāļ”āļ›6zāļĄ Add Operationâ€Ķ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 92. 62 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Add Operation āļ4āļēāļŦāļ™āļ” Method āđ€āļ›āļ™ getRate āļŠāļ™2āļ”āļ‚āļ­āļ‡ Return Type āđ€āļ›āļ™ double āđāļĨāļ° āđ€āļž2āļĄ Input parameter āļŠāļ­ roomType āļŠāļ™2āļ” String āļ”āļ‡āļĢ(āļ›āđāļĨāļ§āļāļ” OK 7. āļ„āļĨ2[āļāļ—āđāļ—āļ› Source āļ‚āļ­āļ‡ DetermineRoomRate.java āđāļĨāļ°āļ›āļĢāļšāļ›āļĢ6āļ‡āđ€āļĄāļ˜āļ­āļ” processBooking āļ”āļ‡āļ™ @WebMethod(operationName = "getRate") public double getRate(@WebParam(name = "roomType") String roomType) { if (roomType.equals("Deluxe")) { return 4000.0; } else if (roomType.equals("Superior")) { return 3000.0; } else { return 2000.0; } } 8. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRoomRate āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Clean and Build āļˆāļēāļāļ™āļ™āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRoomRate āļ­āļāļ„āļĢāļ‡ āđāļĨāļ§āđ€āļĨāļ­āļ Deploy 2. āļāļēāļĢāļž#āļ’āļ™āļē Calculating Booking Payment Web Services āļ‚āļ™āļ•āļ­āļ™āļ—āļœ)āļēāļ™āļĄāļēāđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Service āļˆāļēāļ EJB Module āđƒāļ™āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Web Service āļ­āļāļ§2āļ˜āļŦāļ™-āļ‡ āđ‚āļ”āļĒāļāļēāļĢāļžāļ’āļ™āļēāļˆāļēāļ Web Application āđ‚āļ”āļĒāļĄ Business Logic āđƒāļ™āļāļēāļĢāļ„4āļēāļ™āļ§āļ“āļĢāļēāļ„āļēāļ„)āļēāļ—āļžāļāļ— āļ•āļ­āļ‡āļŠ4āļēāļĢāļ° āļ—āļ‡āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ”āđƒāļŦ Web Service āļ™āļĄāļŠāļ­āđ€āļĄāļ˜āļ­āļ”āļ—āļŠāļ­ getPayment āļ‹-āļ‡āļˆāļ°āļŠ)āļ‡āļ‚āļ­āļĄ(āļĨāļŠāļ™2āļ” double āļāļĨāļš āļĄāļēāđāļĨāļ°āļĄ argument āļ—āļŠāļ­ dayLength āļŠāļ™2āļ” int āđāļĨāļ° roomRate āļŠāļ™2āļ” double āļ™āļ­āļāļˆāļēāļāļ™āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļŠāļēāļ˜2āļ•āļāļēāļĢ āđƒāļŠ NetBeans āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW XSD āđāļĨāļ° WSDL XML document āļ‚-āļ™āļĄāļē Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 93. 63 2.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project āđ€āļĢāļēāļˆāļ°āļ4āļēāļŦāļ™āļ”āđ‚āļ›āļĢāđ€āļˆMāļ„āđƒāļŦāđ€āļ›āļ™ EJB Project āļ—āļ‡āļ™āđ€āļ™āļ­āļ‡āļˆāļēāļāđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļžāļ’āļ™āļē Web Services āļˆāļēāļ Session Bean āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Ap- plication āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ CalculatePayment āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļē āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļMāļš project āđ„āļ§ āļāļ” Next 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āđ‚āļ”āļĒāļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ” Finish 2.2 āļāļēāļĢāļžāļ’āļ™āļē Web Service āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Web Service āļˆāļ°āđ€āļ›āļ™āđ€āļŠ)āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļēāđƒāļ™āļ‚āļ™āļ•āļ­āļ™āļ— 1.2 āđ‚āļ”āļĒāļˆāļ°āļ4āļēāļŦāļ™āļ” Web Services āđƒāļŦāļĄāļŠāļ­āļ§)āļē CalculateBookingPayment āļ­āļĒ()āđƒāļ™ Package āļ—āļŠāļ­ payment āđāļĨāļ°āļĄ operation āļ—āļŠāļ­ getPayment āļ‹-āļ‡āļĄ source code āļ”āļ‡āļ™ @WebMethod(operationName = "getPayment") public double getPayment(@WebParam(name = "dayLength") int dayLength, @WebParam(name = "roomRate") double roomRate) { return roomRate * dayLength; } 2.3 āļāļēāļĢāļ•āļĢāļ§āļˆāļ”(āđ„āļŸāļĨW XSD āđāļĨāļ° WSDL āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡ XML āđ„āļŸāļĨWāļ—āđ€āļ›āļ™ XSD āđ€āļžāļ­āļ4āļēāļŦāļ™āļ” Schema āļ‚āļ­āļ‡ Datatype āļ‚āļ­āļ‡ Web Service āļ—āļŠāļĢāļēāļ‡āļ‚-āļ™ āđāļĨāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āđ€āļžāļ­āļ™2āļĒāļēāļĄ Web Service āļ—āļŠāļĢāļēāļ‡āļ‚-āļ™ āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”(āđ„āļŸāļĨW āđ€āļŦāļĨ)āļēāļ™āđ„āļ”āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 94. 64 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ‚āļĒāļēāļĒāđāļ—āļ› CalculatePayment > Web Services 2. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” CalculateBookingPayment āđ€āļĨāļ­āļ Properties āļˆāļ°āđ€āļŦMāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļāđāļŠāļ”āļ‡āļ‚-āļ™ āđāļĄāļˆāļ°āđ„āļĄ)āļĄ Property āđƒāļ”āđ†āđāļŠāļ”āļ‡āļ­āļĒ() āđāļ•)āļ—āđƒāļ•āđ„āļ”āļ­āļ°āļĨMāļ­āļāļˆāļ°āđāļŠāļ”āļ‡āļ•4āļēāđāļŦāļ™)āļ‡ url āļ‚āļ­āļ‡ WSDL āļ”āļ‡āļ™ 3. āđ€āļ›~āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđāļĨāļ°āđ€āļĢāļĒāļ url āļ”āļ‡āļāļĨ)āļēāļ§āļˆāļ°āđ„āļ” WSDL āļ”āļ‡āļ™ âˆ’<definitions targetNamespace="http://ws/" name="CalculateBookingPaymentService"> −<types> −<xsd:schema> <xsd:import namespace="http://ws/" schemaLocation="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/> </xsd:schema> </types> −<message name="getPayment"> <part name="parameters" element="tns:getPayment"/> </message> −<message name="getPaymentResponse"> <part name="parameters" element="tns:getPaymentResponse"/> </message> −<portType name="CalculateBookingPayment"> −<operation name="getPayment"> <input message="tns:getPayment"/> <output message="tns:getPaymentResponse"/> </operation> </portType> −<binding name="CalculateBookingPaymentPortBinding" type="tns:CalculateBookingPayment"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> −<operation name="getPayment"> <soap:operation soapAction=""/> −<input> <soap:body use="literal"/> </input> −<output> <soap:body use="literal"/> </output> </operation> </binding> −<service name="CalculateBookingPaymentService"> −<port name="CalculateBookingPaymentPort" binding="tns:CalculateBookingPaymentPortBinding"> <soap:address location="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService"/> </port> </service> </definitions> 4. āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™āļšāļĢāļĢāļ—āļ”āļ—āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ XML Schema āļ”āļ‡āļ™ âˆ’<xsd:schema> <xsd:import namespace="http://ws/" schemaLocation="http://localhost:8080/CalculatePayment/CalculateBookingPaymentService?xsd=1"/> </xsd:schema> 5. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļ url āļ‚āļ­āļ‡ XSD āļ”āļ‡āļāļĨ)āļēāļ§ āļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āļ‹-āļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ” Web Service Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 95. 65 datatype definition āļ”āļ‡āļ™ âˆ’<xs:schema version="1.0" targetNamespace="http://ws/"> <xs:element name="getPayment" type="tns:getPayment"/> <xs:element name="getPaymentResponse" type="tns:getPaymentResponse"/> −<xs:complexType name="getPayment"> −<xs:sequence> <xs:element name="dayLength" type="xs:int"/> <xs:element name="roomRate" type="xs:double"/> </xs:sequence> </xs:complexType> −<xs:complexType name="getPaymentResponse"> −<xs:sequence> <xs:element name="return" type="xs:double"/> </xs:sequence> </xs:complexType> </xs:schema> 3 āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ RoomBooking āļāļēāļĢāļžāļ’āļ™āļē Business Process āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ•āļ­āļ‡āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āļ‹-āļ‡āļ āļēāļĒāđƒāļ™āđ‚āļ›āļĢāđ€āļˆM āļ„āļ™āļˆāļ°āļĄāđ„āļŸāļĨW BPEL, XSD āđāļĨāļ° WSDL āļ—āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļ­āļĒ() āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RoomBooking āđāļĨāļ§āļāļ” Finish 4 āļāļēāļĢāļž#āļ’āļ™āļē XML Schema āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW XML Schema āđ€āļžāļ­āļ4āļēāļŦāļ™āļ”āļĢ(āļ›āđāļšāļšāļ‚āļ­āļ‡ XML Datatype āļ—āļˆāļ°āđƒāļŠāđ€āļ›āļ™ input argument āļ‚āļ­āļ‡ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āļ‹-āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄ Wizard āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ XML Schema āļ­āļ•āđ‚āļ™āļĄāļ•2 āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 4.1) āļŠāļĢāļēāļ‡āđ„āļŸāļĨW RoomBookingSchema.xsd 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” RoomBooking āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™ āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđ€āļĨāļ­āļ Categories: āđ€āļ›āļ™ XML āđāļĨāļ° File Types: āđ€āļ›āļ™ XML Schema āđāļĨāļ§āļāļ” Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 96. 66 3. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingSchema āđāļĨāļ§āļāļ” Finish 4. āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW RoomBookingSchema.xsd 4.2) āļŠāļĢāļēāļ‡ Complex Type āļŠ4āļēāļŦāļĢāļš XML schema 7. āđƒāļ™āđ„āļŸāļĨW RoomBookingSchema.xsd āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Complex Type āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Complex Type 8. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄ complex type āđƒāļŦāļĄ)āļ—āļŠāļ­ newComplexType āđƒāļŦāļ4āļēāļŦāļ™āļ”āļŠāļ­āđƒāļŦāļĄ)āđ€āļ›āļ™ RoomBookingInput [āļ­āļāļ§2āļ˜āđƒāļ™āļāļēāļĢāļ—āļˆāļ°āđ€āļž2āļĄ Complex Type āļ„āļ­āļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Complex Types āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add > Complex Type ] 9. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” RoomBookingInput āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ”āđƒāļŦāļĄ)āļŠāļ­ newElement [āļ­āļāļ§2āļ˜āđƒāļ™āļāļēāļĢāļ—āļˆāļ°āđ€āļž2āļĄ Element āļ„āļ­āļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBookingInput āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Add > Element] 10. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” newElement āđāļĨāļ§āđ€āļĨāļ­āļ Properties 11. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ newElement āļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ firstName āđāļĨāļ°āđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āļ—āļ„)āļē Definition āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Built-in Types āđƒāļ™ List āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” string āđ‚āļ”āļĒāđāļĨāļ§āļāļ”āļ›6zāļĄ Close 12. āļ—4āļēāļ‹4āļēāđ€āļžāļ­āđ€āļž2āļĄ element āļ āļēāļĒāđƒāļ• RoomBookingInput āļ”āļ‡āļ™ â—Ķ lastName(Built-In Types/ string) â—Ķ phone(Built-In Types/ string) â—Ķ checkinDate(Built-In Types/ string) â—Ķ lengthOfStay(Built-In Types/ int) â—Ķ roomType(Built-In Types/ string) āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 97. 67 13. āļˆāļēāļāļ™āļ™āđƒāļŦāđƒāļŠāļ§2āļ˜āđ€āļ”āļĒāļ§āļāļ™āđ€āļžāļ­āļŠāļĢāļēāļ‡ complex Type āļ—āļŠāļ­ RoomBookingOutput āļ‹-āļ‡āļˆāļ°āļĄ element āļ”āļ‡āļ™ â—Ķ result(Built-In Types/ string) āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ› 14. āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Element āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ° āđ€āļž2āļĄāđ‚āļŦāļ™āļ”āđƒāļŦāļĄ)āļŠāļ­ newElement āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Element 15. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” newElement āđāļĨāļ§āđ€āļĨāļ­āļ Properties 16. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ newElement āļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ RoomBookingRequest āđāļĨāļ°āđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āļ—āļ„)āļē Definition āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Complex Types āđƒāļ™ List āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” RoomBookingInput āļ”āļ‡āļĢ(āļ› 17. āļ—4āļēāļ‹4āļēāđ€āļžāļ­āļ4āļēāļŦāļ™āļ” Element āļ—āļŠāļ­ RoomBookingResponse āļ—āļĄ datatype āđ€āļ›āļ™ RoomBookingOutput āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļ—4āļēāļāļēāļĢ Save Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 98. 68 18. āđ€āļ›āļĨāļĒāļ™āđ„āļ›āđāļ—āļ› Source āļˆāļ°āđ€āļŦMāļ™āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ‚āļ­āļ‡ XSD āļ”āļ‡āļ™ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/RoomBookingSchema" xmlns:tns="http://xml.netbeans.org/schema/RoomBookingSchema" elementFormDefault="qualified"> <xsd:complexType name="RoomBookingInput"> <xsd:sequence> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> <xsd:element name="phone" type="xsd:string"/> <xsd:element name="checkInDate" type="xsd:string"/> <xsd:element name="lengthOfStay" type="xsd:int"/> <xsd:element name="roomType" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="RoomBookingOutput"> <xsd:sequence> <xsd:element name="result" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="RoomBookingRequest" type="tns:RoomBookingInput"/> <xsd:element name="RoomBookingResponse" type="tns:RoomBookingOutput"/> </xsd:schema> Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 99. 69 5. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦ āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” RoomBooking āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ āļ„4āļēāļŠāļ‡ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingWSDL āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ Document Literal āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputData (āđ€āļĄāļ­āđƒāļŠ)āļ„)āļēāđ€āļŠāļĢMāļˆ āđāļĨāļ§ āļ•āļ­āļ‡āļāļ”āļ›6zāļĄ Enter āļ”āļ§āļĒāđ€āļŠāļĄāļ­ āļĄ2āļ‰āļ°āļ™āļ™āļ„)āļēāļˆāļ°āļāļĨāļšāđ„āļ›āđ€āļ›āļ™ part1 āđ€āļŦāļĄāļ­āļ™āđ€āļ”2āļĄ) 4. āđ€āļĨāļ­āļ Element or Type āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āđāļĨāļ§āđ€āļĨāļ­āļ RoomBookingRequest āđƒāļ•āđ‚āļŦāļ™āļ” Element āļ”āļ‡āļĢ(āļ› 5. āđāļĨāļ°āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Output: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ outputData āđāļĨāļ° Element or Type āđ€āļ›āļ™ RoomBookingResponse āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨMāļ­āļāļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 100. 70 6. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāļ„āļ‡āļ„)āļēāđ€āļ”2āļĄāđ„āļ§ āđāļĨāļ§āļāļ” Finish 6 āļāļēāļĢ Import āđ„āļŸāļĨeXML Schema āđāļĨāļ° WSDL āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢ Import āđ„āļŸāļĨW WSDL āđāļĨāļ° XML Schema āļ—āļ­āļĒ()āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ DetermineRoomRate āđāļĨāļ° CalculatePayment āļĄāļēāđ„āļ§āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” DetermineRoomRate > Webservices 2. āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” DetermineRateService āđāļĨāļ§āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ Generate and Copy WSDL .. 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Generate and Copy WSDL āđƒāļŦāđ€āļĨāļ­āļāđ„āļ”āđ€āļĢMāļāļ—āļ­āļĢ src āļ āļēāļĒāđƒāļ• RoomBooking āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 101. 71 4. āļ—4āļēāļ‚āļ™āļ•āļ­āļ™āļ‚āļēāļ‡āļ•āļ™āļ‹4āļēāļāļš Web Service āļ—āļŠāļ­ CalculateBookingPayment āđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ CalculatePayment 7. āļāļēāļĢāļž#āļ’āļ™āļē Business Process āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 67.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW RoomBookingProcess.bpel 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPEL āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > BPEL Process 2. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingProcess āđāļĨāļ§āļāļ” Finish 3. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW RoomBookingProcess.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 102. 72 āđ‚āļŦāļĄāļ” designer 7.2 āļāļēāļĢāđ€āļž2āļĄ partner link āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āļ—4āļēāļāļēāļĢāļ4āļēāļŦāļ™āļ” partner link āļŠ4āļēāļŦāļĢāļš Web Services āļŠāļēāļĄāļŠ6āļ”āļ„āļ­ DetermineRateService, BooksFacade āđāļĨāļ° RoomBookingWSDL āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ RoomBookingWSDL.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ (āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠ) āđƒāļ™ ) 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ RoomBookingPartnerLink āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļŠāļ­ PartnerLink1 āđ€āļ”2āļĄāđāļĨāļ§āļāļ” OK 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DetermineRateServiceService.wsdl āļ—āļ­āļĒ()āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” RoomBooking āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­ [āđ€āļĢāļēāļ•āļ­āļ‡āļ—4āļēāļāļēāļĢ deploy āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āļ)āļ­āļ™āļ— āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ4āļēāļŦāļ™āļ” partner link āđ„āļ”] 4. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ DetermineRatePartnerLink āđāļĨāļ§āļāļ” OK 5. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ CalculateBookingPaymentService.wsdl āļ—āļ­āļĒ()āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Ro omBooking ,āļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design [āđ€āļĢāļēāļ•āļ­āļ‡āļ—4āļēāļāļēāļĢ deploy āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āļ)āļ­āļ™āļ—āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ4āļēāļŦāļ™āļ” partner link āđ„āļ”] 6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ CalculatePaymentPartnerLink āđāļĨāļ§āļāļ” OK āđ€āļĢāļēāļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 103. 73 7.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.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: āđ€āļ›āļ™ RoomBookingPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 104. 74 Name: āđ€āļ›āļ™ inData āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” OK 67.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.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: āđ€āļ›āļ™ RoomBookingPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ outData āđāļĨāļ§āļāļ” OK āđ€āļĢāļēāļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 105. 75 7.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš getRate 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ DetermineRate āđāļĨāļ° āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DetermineRatePartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ operation: āđ€āļĨāļ­āļ getRate 5. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ GetRateIn āđāļĨāļ§āļāļ” OK 6. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ GetRateOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ›āļ— Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 106. 76 7.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš getPayment 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ DetermineRate āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ CalculatePayment āđāļĨāļ° āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ CalculatePaymentPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ GetPaymentIn āđāļĨāļ§āļāļ” OK 5. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ GetPaymentOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 107. 77 7.7 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ DetermineRate 2. āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignDetermineRateInput 3. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignDetermineRateInput āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡ āđ‚āļŦāļ™āļ” roomType āđƒāļ™āļŠ)āļ§āļ™ inputData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” roomType āđƒāļ™āļŠ)āļ§āļ™ outData āļ—āļēāļ‡ āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 108. 78 4. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ DetermineRate āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ CalculatePayment 5. āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignCalculatePaymentInput 6. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignCalculatePaymentInput āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢ āđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠ)āļ§āļ™ GetRateOut āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” roomRate āđƒāļ™āļŠ)āļ§āļ™ GetPaymentIn āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđāļĨāļ°āđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” lengthOfStay āđƒāļ™āļŠ)āļ§āļ™ inData āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™ āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” dayLength āđƒāļ™āļŠ)āļ§āļ™ GetPaymentIn āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› 7. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ CalculatePayment āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 8. āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignResult 9. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignResult āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” result āđƒāļ™ āļŠ)āļ§āļ™ outData āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ° highlight āļŠāļ™4āļēāđ€āļ‡2āļ™āđƒāļ™āđ‚āļŦāļ™āļ”āļ™āļ™āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 109. 79 10. āđ€āļĨāļ­āļ Concat operation āļˆāļēāļāđ€āļĄāļ™( String āļ—āļ­āļĒ()āļŠ)āļ§āļ™āļšāļ™āļ‚āļ­āļ‡ BPELMapper āļ”āļ‡āļĢ(āļ› 11. Mapper Canvas āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” Concat āđƒāļŦāđ€āļž2āļĄāļ‚āļ­āļ„āļ§āļēāļĄ 'your payment is ' āđƒāļ™āļŠ)āļ­āļ‡ String āđāļĢāļ āđāļĨāļ° āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠ)āļ§āļ™ GetPaymentOut āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļšāļŠ)āļ­āļ‡ String āļ—āļŠāļ­āļ‡āļ‚āļ­āļ‡ āđ‚āļŦāļ™āļ” Concat āđāļĨāļ°āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļŠ)āļ§āļ™ output String āļ‚āļ­āļ‡āđ‚āļŦāļ™āļ” Concat āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” result āđƒāļ™āļŠ)āļ§āļ™ outData āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒ āļ”āļ‡āļĢ(āļ› 12. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 110. 80 13. āļāļ”āļ›6zāļĄ Save āđāļĨāļ° Clean and Build 8. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ RoomBookingProcess.bpel āļšāļ™ Open ESB āđ‚āļ”āļĒāđƒāļŠ BPEL SE āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RoomBookingCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” RoomBookingCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” RoomBooking.jar āļ āļēāļĒāđƒāļ• RoomBookingCompositeApp > JBI Module Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 111. 81 7. āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp 8. āļŦāļ™āļēāļ•)āļēāļ‡ CASA Editor āļˆāļ°āđāļŠāļ”āļ‡āļ”āļ‡āļĢ(āļ› āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™āļ§)āļē RoomBooking āļ—āđ€āļ›āļ™ BPEL module āļˆāļ°āļ–(āļāđ€āļĢāļĒāļ āđ‚āļ”āļĒ SOAP request āđāļ•)āđ„āļĄ)āđ€āļŦMāļ™āļ§)āļē DetermineRatePartnerLink āđāļĨāļ° CalculatePaymentPartnerLink āđ€āļĢāļĒāļāđƒāļŠ Web Service āđƒāļ” 9. āđ€āļžāļ­āļĢāļ°āļš6 Web Service āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠāđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap āļ—āļ­āļĒ()āđƒāļ™ palette āļĄāļēāđ„āļ§āđƒāļ™āļŠ)āļ§āļ™ WSDL Ports āļ‚āļ­āļ‡ CASA Editor āļŠāļ­āļ‡āļ„āļĢāļ‡ āđāļĨāļ°āļ—4āļēāļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 112. 82 10. āļĢāļ°āļš6 endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨ2[āļāļ‚āļ§āļēāļ— casaPort1 āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē Location āđ€āļ›āļ™ http://localhost:8080/DetermineRateServiceService/DetermineRateService āđāļĨāļ° Endpoint Name āđ€āļ›āļ™ DetermineRate 11. āļ„āļĨ2[āļāļ‚āļ§āļēāļ— casaPort2 āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē Location āđ€āļ›āļ™ http://localhost:8080/CalculatePayment/CalculateBookingPaymentService āđāļĨāļ° Endpoint Name āđ€āļ›āļ™ CalculatePayment 12. āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp 9. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄāđ€āļ„āļĢāļ­āļ‡āļĄāļ­āļ—āļŠ)āļ§āļĒāđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš Composite Application āļ—āļžāļ’āļ™āļēāļ‚-āļ™ āđ‚āļ”āļĒāļāļēāļĢāļĢāļ™ āļœ)āļēāļ™ TestCase āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” RoomBookingCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 113. 83 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 3. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ RoomBooking āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ RoomBookingWSDL.wsdl āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ RoomBookingWSDLOperation āđāļĨāļ§āļāļ” Finish 5. āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļŠ)āļ§āļ™ inputData āļ”āļ‡āļ™ <soapenv:Body> <room:RoomBookingRequest> <room:firstName>Thanachart</room:firstName> <room:lastName>Numnonda</room:lastName> <room:phone>027777777</room:phone> <room:checkInDate>21/05/2009</room:checkInDate> <room:lengthOfStay>3</room:lengthOfStay> <room:roomType>Deluxe</room:roomType> </room:RoomBookingRequest> </soapenv:Body> 6. āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 7. āļˆāļ°āđ€āļŦMāļ™āļœāļĨāļĨāļžāļ˜Wāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨW Output.xml āļ”āļ‡āļ™ <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <ns1:RoomBookingResponse xmlns:msgns="http://j2ee.netbeans.org/wsdl/RoomBooking/RoomBookingWSDL" xmlns:ns1="http://xml.netbeans.org/schema/RoomBookinglSchema"> <ns1:result>Your payment is 12000.0</ns1:result> </ns1:RoomBookingResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 10. āļāļēāļĢāļž#āļ’āļ™āļē Business Process āđ€āļžvāļ­āđƒāļŦMāđ€āļ`āļšāļ‚Māļ­āļĄ5āļĨāļĨāļ‡āļāļēāļ™āļ‚Māļ­āļĄ5āļĨ āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļē Business Process āđ€āļžāļ­āđƒāļŦāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļĨāļ‡ Table āļ—āļŠāļ­ RoomBooking āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 10.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ€āļžāļ­āđƒāļŠāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļŦāļĢāļ­ MySQL Query Browser āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ RoomBooking āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ MySQL āļ—āļŠāļ­ test āđ‚āļ”āļĒ āļ4āļēāļŦāļ™āļ”āđƒāļŦāļĄ column āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 114. 84 id int Primary Key Auto Increase firstName VARCHAR(30) lastName VARCHAR(30) phone VARCHAR(10) payment double āļŦāļĢāļ­āļĢāļ™ script file āļ”āļ‡āļ™ CREATE TABLE `test`.`roombooking` ( `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `firstName` VARCHAR(30) NOT NULL, `lastName` VARCHAR(30) NOT NULL, `phone` VARCHAR(10) NOT NULL, `payment` DOUBLE NOT NULL, PRIMARY KEY(`id`) ) 10.2 āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš DatabaseBinding āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ Database āļŠ4āļēāļŦāļĢāļšāđ€āļ‚āļĒāļ™āļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 8. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBooking āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document .. 9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingDB āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ DATABASE āđāļĨāļ° Types āđ€āļ›āļ™ Table āļˆāļēāļāļ™āļ™āļāļ” Next 10. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/test āļāļ” Next 11. āđ€āļĨāļ­āļ Table: roombooking āļˆāļēāļ Available Tables: āđ„āļ›āļĒāļ‡ Selected Tables: āđāļĨāļ°āļāļ” Next 12. āļāļ” Next āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē JNDI Name āđ€āļ›āļ™ jdbc/test āļāļ” Finish 13. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨWāļ‚-āļ™āļĄāļēāļŠāļ­āļ‡āđ„āļŸāļĨWāļ„āļ­ RoomBookingDB.wsdl āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ service āļ•)āļēāļ‡āđ† āļ‚āļ­āļ‡ Table āđāļĨāļ° roombooking.xsd āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ XML Schema āļ‚āļ­āļ‡ Table 14. āđ€āļ™āļ­āļ‡āļˆāļēāļ column āļ—āļŠāļ­ id āļˆāļ°āđ€āļ›āļ™ auto increment āļ”āļ‡āļ™āļ™āđ€āļĢāļēāļˆāļ°āđāļāđ„āļ‚ insert operation āđ‚āļ”āļĒāđ€āļĨāļ­āļāđ„āļŸāļĨW RoomBookingDB.wsdl āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW āđƒāļŦāļ‚āļĒāļēāļĒāđāļ—āļ› Bindings > binding > insert > inputInsert āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› āđāļĨāļ§āļ”(āļ— properties āļ‚āļ­āļ‡ jdbc:input āļˆāļ°āđ€āļŦMāļ™āļ„4āļēāļŠāļ‡ sql āđ€āļ›āļ™ insert into roombooking (phone,payment,firstName,id,lastName) values (?,?,?,?,?) āđƒāļŦāđāļāđ„āļ‚āđ€āļ›āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 115. 85 insert into roombooking (phone,payment,firstName,lastName) values (?,?,?,?) āđāļĨāļ°āđƒāļŦāđāļāđ„āļ‚ paramOrder āļˆāļēāļ phone,payment,firstName,id,lastName āđ€āļ›āļ™ phone,payment,firstName,lastName 10.3 āļāļēāļĢāļ›āļĢāļšāļ›āļĢ6āļ‡ Business Process āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ6āļ‡āđ„āļŸāļĨW RoomBookingProcess.bpel āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 10 .3.1 āļāļēāļĢāđ€āļž2āļĄ partner link 1. āđ€āļ›~āļ”āđ„āļŸāļĨW RoomBookingProcess.bpel āđāļĨāļ§āđ€āļĨāļ­āļāđāļ—āļ› Design 2. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ RoomBookingDB.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ­āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 116. 86 3. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āļŠāļ­āđ€āļ›āļ™ DBPartnerLink 10.3.2 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš storeBooking 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ AssignResult āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ StoreBooking āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DBPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ InsertIn āđāļĨāļ§āļāļ” OK 5. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ InsertOut āđāļĨāļ§āļāļ” OK 10.3.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨW RoomBookingProcess.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ AssignResult āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ StoreBooking 2. āļ4āļēāļŦāļ™āļ”āļŠāļ­āļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļ›āļ™ AssignDBInput 3. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđ€āļĨāļ­āļāļ˜6āļĢāļāļĢāļĢāļĄ AssignDBInput āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPEL Mapper āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ”āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™ â€Ē return āđƒāļ™āļŠ)āļ§āļ™ GetPaymentOut āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” payment āđƒāļ™āļŠ)āļ§āļ™ InsertIn â€Ē firstName āđƒāļ™āļŠ)āļ§āļ™ inData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” firstName āđƒāļ™āļŠ)āļ§āļ™ InsertIn â€Ē lastName āđƒāļ™āļŠ)āļ§āļ™ inData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” lastName āđƒāļ™āļŠ)āļ§āļ™ InsertIn â€Ē phone āđƒāļ™āļŠ)āļ§āļ™ inData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” phone āđƒāļ™āļŠ)āļ§āļ™ InsertIn āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 117. 87 4. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 118. 88 10.4 āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ 1. āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBooking āđƒāļŦāļĄ) 2. āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp āđƒāļŦāļĄ) āļˆāļ°āđ„āļ” CASA Editor āļ”āļ‡āļĢ(āļ› 3. āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ RoomBookingCompositeApp āđƒāļŦāļĄ) 4. āļĢāļ™ TestCase1 āļ­āļāļ„āļĢāļ‡ āđāļĨāļ§āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļĄ(āļĨāđƒāļ™ Table āļ—āļŠāļ­ RoomBooking āđ€āļĢāļēāļˆāļ°āđ€āļŦMāļ™āļ‚āļ­āļĄ(āļĨāļ”āļ‡āļ™ 11. āļž#āļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļŠSāļēāļŦāļĢ#āļš User Interface āđ‚āļ›āļĢāđāļāļĢāļĄ Business Process āļ—āļžāļ’āļ™āļēāļ‚-āļ™āļˆāļ°āđ€āļ›āļ™ Web Services āļ—āļĢāļ™āļ­āļĒ()āđƒāļ™ GlassFish Application Server āļ‹-āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āđ€āļ›āļ™āļŠ)āļ§āļ™ User Interface (Presentation) āđƒāļ™ āļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ Business Process 11.1 āļāļēāļĢāļŦāļēāļ•4āļēāđāļŦāļ™)āļ‡ URL āļ‚āļ­āļ‡ WSDL āļŠ4āļēāļŦāļĢāļš Business Process āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāđ€āļĢāļĒāļāļ”( url āļ‚āļ­āļ‡ WSDL āļŠ4āļēāļŦāļĢāļš Business Process āļ—āļžāļ’āļ™āļēāļ‚-āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” RoomBookingCompositeApp āđāļĨāļ§āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļ Service Assembly āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ CASA Editor Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 119. 89 2. āļ„āļĨ2[āļāļ— RoomBookingWSDLPort 3. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ properties āđƒāļŦāļ—4āļēāļāļēāļĢ copy āļ„)āļēāļ‚āļ­āļ‡ soap:address 4. āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›~āļ” Web Browser āđāļĨāļ§ paste āļ„)āļēāļ— copy āđ„āļ§ āļˆāļēāļāļ™āļ™āđƒāļŦāļ—4āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļ„)āļēāļ‚āļ­āļ‡ URL āđƒāļŦāđ€āļ›āļ™ āļ”āļ‡āļ™ http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL 11.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Web Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Web Application āđ€āļžāļ­āđƒāļŦāļœ(āđƒāļŠāļ›sāļ­āļ™āļ‚āļ­āļĄ(āļĨāđƒāļ™āļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđƒāļ™āļŦāļ™āļē āđ€āļ§Māļš roomlBooking.html āđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļŠāļ­ RoomBookingBP.java āđ€āļžāļ­āđāļŠāļ”āļ‡ āļœāļĨāļĨāļžāļ˜Wāļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ RoomBookingUI āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ folder āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢ āļˆāļ°āđ€āļMāļšāđ„āļŸāļĨWāđ„āļ§ 4. āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āļ4āļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›āļ™ Java EE 5 āđāļĨāļ§āļāļ” Finish 5. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBookingUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Web Services āđāļĨāļ° Web Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠ) URL āđ€āļ›āļ™ http://localhost:9080/RoomBookingWSDLService/RoomBookingWSDLPort?WSDL āļ”āļ‡ āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› āđāļĨāļ§āļāļ” Finish Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 120. 90 11.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ roomBooking.html āđ‚āļ›āļĢāđāļāļĢāļĄ roomBookingP.html āđ€āļ›āļ™āđ€āļ§Māļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢWāļĄāļŠ4āļēāļŦāļĢāļšāđƒāļŦāļœ(āđƒāļŠāļ›sāļ­āļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ HTML āđāļĨāļ§āļāļ” Next 2. āļ4āļēāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ roomBooking āđāļĨāļ§āļāļ” Finish 3. āđ€āļ‚āļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨW roomBooking.html āļ•āļēāļĄ Listing āļ— 1 Listing 1 āđ‚āļ›āļĢāđāļāļĢāļĄ roomBooking.html <body> <form action="RoomBookingBP" method="POST"> First Name: <input name="firstName" /> <br> Last Name: <input name="lastName" /> <br> Phone: <input name="phone" /> <br> Check in Date: <input name="checkInDate" /> <br> Length of stay: <input name="lengthOfStay" /> <br> Room type: <select name="roomType"> Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 121. 91 <option value="Deluxe">Deluxe</option> <option value="Superior">Superior</option> <option value="Standard">Standard</option> </select> <br> <input type="submit" value="Book Room" /> </form> </body> 10.4 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ RoomBookingBP.java āđ‚āļ›āļĢāđāļāļĢāļĄ RoomBookingBP.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļˆāļ°āļ­)āļēāļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āļ—āļœ(āđƒāļŠāļ›sāļ­āļ™ āļĄāļēāļˆāļēāļāļŦāļ™āļē roomBooking.html āđāļĨāļ°āļˆāļ°āđ€āļĢāļĒāļ Web Process āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜W āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” RoomBookingPUI āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āđ€āļĨāļ­āļ File Types: āđ€āļ›āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ RoomBookingBP āđāļĨāļ° Package: āđ€āļ›āļ™ servlets āļāļ” Next āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Editor āđƒāļŦāļ„āļĨ2[āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđāļĨāļ§āđ€āļĨāļ­āļ Web Service Client Re- sources > Call Web Service Operation āđ€āļĨāļ­āļāđ„āļ›āļ— RoomBookingWSDLOperation 5. āđƒāļŦāļ›āļĢāļšāļ›āļĢ6āļ‡ Source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āļ”āļ‡āļ™ protected void processRequest(HttpServletRequest request, HttpServletRe- sponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet RoomBooking</title>"); out.println("</head>"); out.println("<body>"); try { // Call Web Service Operation org.netbeans.j2ee.wsdl.roombooking.roombookingwsdl.RoomBook- ingWSDLPortType port = service.getRoomBookingWSDLPort(); org.netbeans.xml.schema.roombookinglschema.RoomBookingInput inputData = new org.netbeans.xml.schema.roombookinglschema.RoomBookingInput(); Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 122. 92 String firstName = request.getParameter("firstName"); String lastName = request.getParameter("lastName"); String phone = request.getParameter("phone"); String checkInDate = request.getParameter("checkInDate"); String lengthOfStay = request.getParameter("lengthOfStay"); String roomType = request.getParameter("roomType"); int dayLength = Integer.parseInt(lengthOfStay); inputData.setFirstName(firstName); inputData.setLastName(lastName); inputData.setPhone(phone); inputData.setLengthOfStay(dayLength); inputData.setRoomType(roomType); org.netbeans.xml.schema.roombookinglschema.RoomBookingOutput result = port.roomBookingWSDLOperation(inputData); out.println("Booking is done: " + result.getResult()); } catch (Exception ex) { } out.println("</body>"); out.println("</html>"); out.close(); } 6. Run āđ„āļŸāļĨW roomBooking.html āđ€āļžāļ­āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 123. 93 Exercise 11: BPEL : Structured Activities āđāļšāļšāļāļāļŦāļ”āļ™āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ BPEL 2.0 āđ‚āļ”āļĒāđ€āļĢāļĒāļāđƒāļŠ Structured Activities āđ€āļŠ)āļ™ ForEach āđ‚āļ”āļĒāļˆāļ°āļŠāļĢāļēāļ‡ Business Process āļ‚-āļ™āļĄāļēāđ€āļžāļ­āļ­)āļēāļ™āļ‚āļ­āļĄ(āļĨāļāļēāļĢāļŠāļ‡āļŠ2āļ™āļ„āļē (PO) āļ‹-āļ‡āļ­āļēāļˆāļĄāļĢāļēāļĒāļāļēāļĢāļŠ2āļ™āļ„āļēāļ­āļĒ()āļŦāļĨāļēāļĒāļĢāļēāļĒāļāļēāļĢāđāļĨāļ°āļˆāļ° āļ—4āļēāļāļēāļĢāļšāļ™āļ—-āļāļĢāļēāļĒāļāļēāļĢāđ€āļŦāļĨ)āļēāļ™āļ™āļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructure 2. āļžāļ’āļ™āļē XML Schema 3. āļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL 4. āļāļēāļĢāļžāļ’āļ™āļē WSDL āđ€āļžāļ­āđƒāļŦāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ 5. āļžāļ’āļ™āļē Business Process āļŠ4āļēāļŦāļĢāļš ForEach 6. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆMāļ„ Composite Application 7. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœ)āļēāļ™ TestCase 1 āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ BPELStructure āļāļēāļĢāļžāļ’āļ™āļē Business Process āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ•āļ­āļ‡āļ—4āļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ‚-āļ™āļĄāļēāđƒāļŦāļĄ) āļ‹-āļ‡āļ āļēāļĒāđƒāļ™āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™ āļˆāļ°āļĄāđ„āļŸāļĨW BPEL, XSD āđāļĨāļ° WSDL āļ—āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļ­āļĒ() āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆMāļ„āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File => New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ BPEL Module āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ BPELStructure āđāļĨāļ§āļāļ” Finish 2 āļāļēāļĢāļž#āļ’āļ™āļē XML Schema āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW XML Schema āđ€āļžāļ­āļ4āļēāļŦāļ™āļ”āļĢ(āļ›āđāļšāļšāļ‚āļ­āļ‡ XML Datatype āļ—āļˆāļ°āđƒāļŠāđ€āļ›āļ™ input argument āļ‚āļ­āļ‡ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āđ‚āļ”āļĒāđƒāļ™āļ—āļ™āļˆāļ°āļ4āļēāļŦāļ™āļ”āđ€āļ›āļ™ PO.xsd āļ‹-āļ‡ āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄ Wizard āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ XML Schema āļ­āļ•āđ‚āļ™āļĄāļ•2 āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 124. 94 2.1) āļŠāļĢāļēāļ‡āđ„āļŸāļĨW PO.xsd 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPELStructure āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™ āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New File āđ€āļĨāļ­āļ Categories: āđ€āļ›āļ™ XML āđāļĨāļ° File Types: āđ€āļ›āļ™ XML Schema āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ PO āđāļĨāļ§āļāļ” Finish 4. āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW PO.xsd 2.2) āļŠāļĢāļēāļ‡ Complex Type āļŠ4āļēāļŦāļĢāļš XML schema 1. āđƒāļ™āđ„āļŸāļĨW PO.xsd āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Elements 2. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄ element āđƒāļŦāļĄ)āļ—āļŠāļ­ newElement āđƒāļŦāļ4āļēāļŦāļ™āļ”āļŠāļ­āđƒāļŦāļĄ)āđ€āļ›āļ™ PO 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Sequence āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” PO 4. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” PO 5. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” newElement āđāļĨāļ§āđ€āļĨāļ­āļ Properties 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ newElement āļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ PONumber āđāļĨāļ°āđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āļ—āļ„)āļē Definition āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Built-in Types āđƒāļ™ List āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” integer āđ‚āļ”āļĒāđāļĨāļ§āļāļ”āļ›6zāļĄ Close 7. āļ—4āļēāļ‹4āļēāđ€āļžāļ­āđ€āļž2āļĄ element āļ āļēāļĒāđƒāļ• POt āļ”āļ‡āļ™ 1. PODate(Built-In Types/ string) 2. Items [āđ„āļĄ)āļ•āļ­āļ‡āļĢāļ°āļš6 Data Type] 8. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Sequence āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Items 9. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļŠāļ­āļ‡āļŠ6āļ”āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Items āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē āđ€āļ›āļ™ Item 10. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Sequence āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Item [āđ„āļĄ)āļ•āļ­āļ‡āļĢāļ°āļš6 Data Type] 11. āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Item āđāļĨāļ§āđ€āļĨāļ­āļ Properties āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē Max Occurs āđ€āļ›āļ™ unbounded āļ”āļ‡āļĢ(āļ› āđ€āļžāļ­ āļĢāļ°āļš6āļ§)āļē Item āļĄāđ„āļ”āđ„āļĄ)āļˆ4āļēāļāļ”āļˆ4āļēāļ™āļ§āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 125. 95 12. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Element āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļŠāļ­āļ‡āļŠ6āļ”āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Item āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļēāļ”āļ‡āļ™ 3. ItemNumber(Built-In Types/ string) 4. ItemQuantity(Built-In Types/ int) āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āļŦāļ™āļē Design āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 126. 96 3. āļāļēāļĢāļž#āļ’āļ™āļēāđ„āļŸāļĨe WSDL āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚-āļ™ āđ€āļžāļ­āđƒāļŦ āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāđƒāļŠāđ€āļ›āļ™āđ€āļ§Māļšāđ€āļ‹āļ­āļĢWāļ§2āļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPELStructure āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ āļ„4āļēāļŠāļ‡ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ BPELStructureWSDL1 āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ SOAP āđāļĨāļ° Types āđ€āļ›āļ™ Document Literal āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ” Operation Type āđ€āļ›āļ™ One-Way Operation āļŠ4āļēāļŦāļĢāļšāļŠ)āļ§āļ™āļ‚āļ­āļ‡ Input: āļ4āļēāļŦāļ™āļ” Message Part Name āđ€āļ›āļ™ inputData 4. āđ€āļĨāļ­āļ Element or Type āđ‚āļ”āļĒāđ€āļĨāļ­āļāļ›6zāļĄ ellipse (...) āđāļĨāļ§āđ€āļĨāļ­āļ PO āđƒāļ•āđ‚āļŦāļ™āļ” Element āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāļ„āļ‡āļ„)āļēāđ€āļ”2āļĄāđ„āļ§ āđāļĨāļ§āļāļ” Finish 4. āļāļēāļĢāļž#āļ’āļ™āļē WSDL āđ€āļžvāļ­āđƒāļŦMāđ€āļ`āļšāļ‚Māļ­āļĄ5āļĨāļĨāļ‡āļāļēāļ™āļ‚Māļ­āļĄ5āļĨ āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ” WSDL āļŠ4āļēāļŦāļĢāļšāļāļēāļĢāļˆāļ”āļāļēāļĢ Table āļ—āļŠāļ­ purchasingorder āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 4.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨāđ€āļžāļ­āđƒāļŠāđ€āļMāļšāļ‚āļ­āļĄ(āļĨāļāļēāļĢāļˆāļ­āļ‡āļ—āļžāļ āđ‚āļ”āļĒāđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļŦāļĢāļ­ MySQL Query Browser āđ€āļžāļ­āļŠāļĢāļēāļ‡ Table āļ—āļŠāļ­ purchasingorder āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ MySQL āļ—āļŠāļ­ test āđ‚āļ”āļĒ āļ4āļēāļŦāļ™āļ”āđƒāļŦāļĄ column āļ•)āļēāļ‡āđ† āļ”āļ‡āļ™ orderNumber int Primary Key Auto Increase PONumber int itemNumber VARCHAR(45) itemQuantity int 4.2 āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨW WSDL āļŠ4āļēāļŦāļĢāļš DatabaseBinding āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āđ„āļ›āđ€āļ›āļ™āļāļēāļĢāļ4āļēāļŦāļ™āļ”āđ„āļŸāļĨW WSDL āļ—āļĄ Binding āđ€āļ›āļ™ Database āļŠ4āļēāļŦāļĢāļšāđ€āļ‚āļĒāļ™āļĨāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 127. 97 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BPELStructure āđƒāļŦāđ€āļĨāļ­āļ New > WSDL Document .. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New WSDL Document āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ PurchasingOrderDB āļ4āļēāļŦāļ™āļ” WSDL Type: āđ€āļ›āļ™ Concrete WSDL Document āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Binding āđ€āļ›āļ™ DATABASE āđāļĨāļ° Types āđ€āļ›āļ™ Table āļˆāļēāļāļ™āļ™āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āļ4āļēāļŦāļ™āļ”āļ„)āļē URL: āđ€āļ›āļ™ jdbc:mysql://localhost:3306/test āļāļ” Next 4. āđ€āļĨāļ­āļ Table: purchasingorder āļˆāļēāļ Available Tables: āđ„āļ›āļĒāļ‡ Selected Tables: āđāļĨāļ°āļāļ” Next 5. āļāļ” Next āđāļĨāļ§āļ4āļēāļŦāļ™āļ”āļ„)āļē JNDI Name āđ€āļ›āļ™ jdbc/test āļāļ” Finish 6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨWāļ‚-āļ™āļĄāļēāļŠāļ­āļ‡āđ„āļŸāļĨWāļ„āļ­ PurchasingOrderDB.wsdl āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ service āļ•)āļēāļ‡āđ† āļ‚āļ­āļ‡ Table āđāļĨāļ° purchasingorder.xsd āļŠ4āļēāļŦāļĢāļšāļ­āļ˜2āļšāļēāļĒ XML Schema āļ‚āļ­āļ‡ Table 7. āđ€āļ™āļ­āļ‡āļˆāļēāļ column āļ—āļŠāļ­ orderNumber āļˆāļ°āđ€āļ›āļ™ auto increment āļ”āļ‡āļ™āļ™āđ€āļĢāļēāļˆāļ°āđāļāđ„āļ‚ insert operation āđ‚āļ”āļĒāđ€āļĨāļ­āļāđ„āļŸāļĨW PurchasingOrder.wsdl āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡ Design View āļ‚āļ­āļ‡āđ„āļŸāļĨW āđƒāļŦāļ‚āļĒāļēāļĒāđāļ—āļ› Bindings > binding > insert > inputInsert āđāļĨāļ§āļ”(āļ— properties āļ‚āļ­āļ‡ jdbc:input āļˆāļ°āđ€āļŦMāļ™āļ„4āļēāļŠāļ‡ sql āđ€āļ›āļ™ insert into purchasingorder (itemNumber,PONumber,orderNumber,itemQuantity) values (?,?,?,?) āđƒāļŦāđāļāđ„āļ‚āđ€āļ›āļ™ insert into purchasingorder (itemNumber,PONumber,itemQuantity) values (?,?,?) āđāļĨāļ°āđƒāļŦāđāļāđ„āļ‚ paramOrder āļˆāļēāļ itemNumber,PONumber,orderNumber,itemQuantity āđ€āļ›āļ™ itemNumber,PONumber,itemQuantity 5. āļāļēāļĢāļž#āļ’āļ™āļē Business Process āļŠSāļēāļŦāļĢ#āļš ForEach āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPEL āļŠ4āļēāļŦāļĢāļšāļ™2āļĒāļēāļĄ Business Process āļŠ4āļēāļŦāļĢāļšāļāļēāļĢāļŠāļēāļ˜2āļ•āļāļēāļĢāđƒāļŠāļ„4āļēāļŠāļ‡ ForEach āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 65.1 āļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPELStructureProcess1.bpel 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•)āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” BPEL āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„4āļēāļŠāļ‡ New > BPEL Process 2. āļ4āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ BPELStructureProcess1 āđāļĨāļ§āļāļ” Finish 3. āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨW BPELStructureProcess1.bpel āđāļĨāļ°āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨWāđƒāļ™ āđ‚āļŦāļĄāļ” designer Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 128. 98 5.2 āļāļēāļĢāđ€āļž2āļĄ partner link 1. āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ BPELStructureWSDL1.wsdl āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļĄāļēāđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāļĄāļ­ ( āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠ)āđƒāļ™ ) 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ BPELStructurePartnerLink āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ—āļŠāļ­ PartnerLink1 āđ€āļ”2āļĄāđāļĨāļ§āļāļ” OK 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ PurchasingOrderDB.wsdl āļ—āļ­āļĒ()āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” BPELStructure āļĄāļē āđ„āļ§āļ āļēāļĒāđƒāļ•āļŦāļ™āļēāļ•)āļēāļ‡ design āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­ [āđ€āļĢāļēāļ•āļ­āļ‡āļ—4āļēāļāļēāļĢ deploy āđ‚āļ›āļĢāđ€āļˆMāļ„āļ™āļ)āļ­āļ™āļ—āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ4āļēāļŦāļ™āļ” partner link āđ„āļ”] 4. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨMāļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ”āļ„)āļē Name: āđ€āļ›āļ™ DBPartnerLink āđāļĨāļ§āļāļ” OK 5.3 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.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: āđ€āļ›āļ™ BPELStructurePartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ inData āđāļĨāļ§āļāļ” OK 5.4 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ ForEach 1. āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ ForEach āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ design āļĢāļ°āļŦāļ§)āļēāļ‡ āļ˜6āļĢāļāļĢāļĢāļĄ start āļāļšāļ˜6āļĢāļāļĢāļĢāļĄ Process end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ ForEach āļ—āļŠāļ­ ForEach1 āļˆāļ°āļŠāļ‡āđ€āļāļ•6āđ€āļŦMāļ™āļ§)āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđāļŠāļ”āļ‡ Error āđ€āļ2āļ”āļ‚-āļ™ āđ€āļ™āļ­āļ‡āļˆāļēāļāđ€āļĢāļēāļĒāļ‡āđ„āļĄ)āđ„āļ”āļ4āļēāļŦāļ™āļ” parameters āđƒāļ™ ForEach 3. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ ForEach1 āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ BPEL Mapper āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 129. 99 Start Value āđƒāļ™āļŠ)āļ§āļ™ For Each āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ° highlight āļŠāļ™4āļēāđ€āļ‡2āļ™āđƒāļ™āđ‚āļŦāļ™āļ”āļ™āļ™ 4. āđ€āļĨāļ­āļ Number Literal āļˆāļēāļāđ€āļĄāļ™( Number āļ—āļ­āļĒ()āļŠ)āļ§āļ™āļšāļ™āļ‚āļ­āļ‡ BPELMapper āđāļĨāļ§āđ€āļ›āļĨāļĒāļ™āļ„)āļēāđ€āļ›āļ™ 1 āđāļĨāļ° āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āđ„āļ›āļĒāļ‡ Start Value āļ”āļ‡āļĢ(āļ› 5. āļ„āļĨ2[āļāļ—āđ‚āļŦāļ™āļ” Final Value āđƒāļ™āļŠ)āļ§āļ™ For Each āđ€āļĨāļ­āļ Count āļˆāļēāļāđ€āļĄāļ™( Node āļ—āļ­āļĒ()āļŠ)āļ§āļ™āļšāļ™āļ‚āļ­āļ‡ BPELMapper āđāļĨāļ§āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” item āđƒāļ™āļŠ)āļ§āļ™ items > inputData > inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒāđ€āļ‚āļēāļāļš āđ‚āļŦāļ™āļ” NodeSet āļ‚āļ­āļ‡ Count āđāļĨāļ°āđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” Number āļ‚āļ­āļ‡ Count āļāļšāđ‚āļŦāļ™āļ” Final Value āđƒāļ™āļŠ)āļ§āļ™ For Each āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› 6. āļāļ” Save 5.5 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļŠ4āļēāļŦāļĢāļš storePO 1. āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļ˜6āļĢāļāļĢāļĢāļĄ ForEach1 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ˜6āļĢāļāļĢāļĢāļĄ Invoke āļ—āļŠāļ­ Invoke1 āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Design āđƒāļŦāļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ storePO āđāļĨāļ°āđ€āļĨāļ­āļ Partner Link: āđ€āļ›āļ™ DBPartnerLink 4. āđƒāļ™āļŠ)āļ­āļ‡ Input Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ InsertIn āđāļĨāļ§āļāļ” OK 5. āđƒāļ™āļŠ)āļ­āļ‡ Output Variable: āļāļ”āļ›6zāļĄ Create.. āđ€āļĄāļ­āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚-āļ™ āđƒāļŦāļ4āļēāļŦāļ™āļ” Name: āđ€āļ›āļ™ InsertOut āđāļĨāļ§āļāļ” OK Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 130. 100 5.6 āļāļēāļĢāđ€āļž2āļĄāļ˜6āļĢāļāļĢāļĢāļĄ Assign āđāļĨāļ°āļ4āļēāļŦāļ™āļ” Predicate 1. āđƒāļ™āđ„āļŸāļĨW BPELStructureProcess1.bpel āđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™āļ āļēāļĒāđƒāļ™āļ˜6āļĢāļāļĢāļĢāļĄ ForEach1 āļ)āļ­āļ™āļŦāļ™āļēāļ˜6āļĢāļāļĢāļĢāļĄ storePO āļ”āļ‡āļĢ(āļ› 2. āļ”āļšāđ€āļš2āļĨāļ„āļĨ2[āļāļ˜6āļĢāļāļĢāļĢāļĄ Assign1 āđ€āļĢāļēāļˆāļ°āļ4āļēāļŦāļ™āļ”āļ„)āļēāļˆāļēāļ Items āđƒāļ™āļāļēāļĢāļ›sāļ­āļ™āļ‚āļ­āļĄ(āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ(āļĨ āđƒāļ™āļāļēāļĢāļ™āđ€āļĢāļē āļˆāļ°āļ•āļ­āļ‡āļ™2āļĒāļēāļĄ predicate āđ€āļžāļ­āļŠāļĢāļēāļ‡ index list āļ‚āļ­āļ‡ Item āļ—āļˆāļ°āļ—4āļēāđƒāļŦāđ€āļĢāļēāđ€āļ‚āļĒāļ™āļāļēāļĢāļ§āļ™āļĢāļ­āļšāđ„āļ” 3. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPELMapper āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” inData > inputData > Items āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Item āđ€āļĨāļ­āļ āļ„4āļēāļŠāļ‡ Add Predicate... āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 131. 101 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ Predicate Editor āđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” ForEach1Counter āđƒāļ™āļŠ)āļ§āļ™ ForEach1 āļ—āļēāļ‡āļ”āļēāļ™āļ‹āļēāļĒ āļĄāļ­āļāļšāđ‚āļŦāļ™āļ” Predicate āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ­āļ”āļ‡āļĢ(āļ› āđāļĨāļ§āļāļ” OK 5. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ BPELMapper āļ—4āļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ”āļ•)āļēāļ‡āđ†āļ”āļ‡āļ™ 5. PONumber āđƒāļ™āļŠ)āļ§āļ™ inputData āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” PONumber āđƒāļ™āļŠ)āļ§āļ™ InsertIn 6. ItemNumber āđƒāļ™āļŠ)āļ§āļ™ Item[$ForEach1Counter] āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” itemNumber āđƒāļ™āļŠ)āļ§āļ™ InsertIn 7. ItemQuantity āđƒāļ™āļŠ)āļ§āļ™ Item[$ForEach1Counter] āđ€āļ‚āļēāļāļšāđ‚āļŦāļ™āļ” itemQuantity āđƒāļ™āļŠ)āļ§āļ™ InsertIn āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 132. 102 6. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ(āļ› 7. āļāļ”āļ›6zāļĄ Save āđāļĨāļ° Clean and Build 6. āļāļēāļĢāļž#āļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆ`āļ„ Composite Application āļ‚āļ™āļ•āļ­āļ™āļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ­āļ—āļĢāļ™ BPELStructureProcess1.bpel āļšāļ™ Open ESB āđ‚āļ”āļĒāđƒāļŠ BPEL SE āļ—āđƒāļŠāļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 133. 103 1. āđ€āļĨāļ­āļāđ€āļĄāļ™( File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ SOA āđāļĨāļ° Projects āđ€āļ›āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļ4āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ BPELStructureCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” BPELStructureCompositeApp āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ­āļāđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructure āđāļĨāļ§āļāļ”āļ›6zāļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļž2āļĄāđ‚āļŦāļ™āļ” BPELStructure.jar āļ āļēāļĒāđƒāļ• RoomBookingCompositeApp > JBI Module 7. āļ—4āļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructureCompositeApp 8. āļŦāļ™āļēāļ•)āļēāļ‡ CASA Editor āļˆāļ°āđāļŠāļ”āļ‡āļ”āļ‡āļĢ(āļ› 9. āļ—4āļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆMāļ„ BPELStructureCompositeApp 7. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœlāļēāļ™ TestCase āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āļĄāđ€āļ„āļĢāļ­āļ‡āļĄāļ­āļ—āļŠ)āļ§āļĒāđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš Composite Application āļ—āļžāļ’āļ™āļēāļ‚-āļ™ āđ‚āļ”āļĒāļāļēāļĢāļĢāļ™ āļœ)āļēāļ™ TestCase āļ‹-āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđƒāļ™āļŦāļ™āļēāļ•)āļēāļ‡ Project āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” BPELStructureCompositeApp > Test āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ New Test Case 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨMāļ­āļ New Test Case āđƒāļŦāļ4āļēāļŦāļ™āļ” Test Case Name: āđ€āļ›āļ™ TestCase1 āđāļĨāļ§āļāļ” Next Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan
  • 134. 104 3. āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļ™ BPELStructure āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨW WSDL āđ€āļ›āļ™ BPELStructureWSDL1.wsdl āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ­āļ BPELStructureWSDL1Operation āđāļĨāļ§āļāļ” Finish 5. āļŦāļ™āļēāļ•)āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨW Input.xml āđƒāļŦāđāļ source code āļŠ)āļ§āļ™ inputData āļ”āļ‡āļ™ <soapenv:Body> <po:PO> <po:PONumber>1234</po:PONumber> <po:PODate>2009-5-5T12:12:13.123456</po:PODate> <po:Items> <!--1 or more repetitions:--> <po:Item> <po:ItemNumber>101</po:ItemNumber> <po:ItemQuantity>3</po:ItemQuantity> </po:Item> <po:Item> <po:ItemNumber>102</po:ItemNumber> <po:ItemQuantity>2</po:ItemQuantity> </po:Item> <po:Item> <po:ItemNumber>201</po:ItemNumber> <po:ItemQuantity>5</po:ItemQuantity> </po:Item> </po:Items> </po:PO> </soapenv:Body> 6. āļāļ”āļ›6zāļĄ Save āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨ2[āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Run 7. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”(āļœāļĨāļĨāļžāļ˜Wāļˆāļēāļ Table āļ—āļŠāļ­ purchasingorder āđ„āļ”āļ”āļ‡āļĢ(āļ› Web Services & SOA Using GlassFishESB Thanachart Numnonda and Thanisa Kruawaisayawan