SlideShare a Scribd company logo
1
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Hand-on
Exercises
Java Web Services
and SOA
Using NetBeans IDE with Open ESB
GlassFish Server and MySQL
Database
Assoc.Prof.Dr. Thanachart Numnonda
and
Assist.Prof.Dr. Thanisa Kruawaisayawan
April 2013
2
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercises
Exercise 1: Calling Existing Web Services 3
Exercise 2: Java Web Services 11
Exercise 3: Axis2 Web Services 16
Exercise 4: āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MySQL Database 22
Exercise 5: Java Web Services from Session Bean (1) 29
Exercise 6: Java Web Services from Session Bean (2) 40
Exercise 7: RESTful Web Services 53
Exercise 8: Google Map Web Services 57
Exercise 9: āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āđ‡āļšāđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļ­āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB 64
Exercise 10: Developing a Simple Synchronous BPEL Program 72
Exercise 11: BPEL for Writing to File 82
Exercise 12: Simple BPEL Invoking Web Services 95
3
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 1: Calling Existing Web Services
āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Services āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđāļĨāļ§ āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļĨāļ·āļ­āļāļĄāļē 3
āļšāļĢāļīāļāļēāļĢāļ”āļąāļ‡āļ™āļĩāđ‰
āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 1 āļ­āļąāļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ€āļ‡āļīāļ™āļ•āļĢāļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ›āļĢāļ°āđ€āļ—āļĻ
āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 2 āđ€āļĨāļ‚āļ›āļĢāļ°āļˆāđāļēāļ•āļąāļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™āļ‚āļ­āļ‡ āļāļĢāļĄāļŠāļĢāļĢāļžāļēāļāļĢ
āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 3 āļĢāļēāļ„āļēāļ™āđ‰āđāļēāļĄāļąāļ™āļĨāļēāļŠāļļāļ”āļ‚āļ­āļ‡ āļ›āļ•āļ—.
āđ‚āļ”āļĒāļˆāļ°āđƒāļŠïœ‹ soapUI, NetBeans āđāļĨāļ° GlassFish Server
āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 1
āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Services āđ‚āļ”āļĒāđƒāļŠïœ‹ soapUI
āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Open Source āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠ
āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄāđƒāļŠïœ‹āļāļąāļ™āļ­āļĒāļēāļ‡āļāļ§ïœ‹āļēāļ‡āļ‚āļ§āļēāļ‡ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđ„āļ›āļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āđ„āļ”āļ—āļĩāđˆ www.soapui.org
āđ‚āļ”āļĒāđ€āļĄāļ·āđˆāļ­āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđāļĨāļ§ āđƒāļŦāļ—āđāļēāļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠ āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New soapUI Project
2. āđƒāļ™āļŠïœŠāļ­āļ‡ Initial WSDL āđƒāļŦāđƒāļŠïœŠ
http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1
4
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ soapUI Project āđƒāļ™ soapUI
3. āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ”āļ›āļļāļĄ OK āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ™āļĩāđ‰āļ‚āļķāđ‰āļ™āļĄāļē
4. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ConversionRate āļ‚āļ­āļ‡ CurrencyConvertorSoap āđāļĨāļ§āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Request1
5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ 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>
5
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āļāļ”āļ›āļļāļĄ 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>31.403/ConversionRateResult>
</ConversionRateResponse>
</soap:Body>
</soap:Envelope>
āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 2
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļ”āļŠāļ­āļšāļāļēāļĢāđƒāļŠïœ‹āļ‡āļēāļ™ SoupUI āļāļąāļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ—āļĩāđˆāđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāđāļēāļ•āļąāļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™
āļ§ïœŠāļēāļ–āļđāļāļ•āļ­āļ‡āļŦāļĢāļ·āļ­āđ„āļĄïœŠ āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New soapUI Project
2. āđƒāļ™āļŠïœŠāļ­āļ‡ Initial WSDL āđƒāļŦāđƒāļŠïœŠ
https://rdws.rd.go.th/ServiceRD/CheckTINPINService.asmx?WSDL āđāļĨāļ§āļāļ” OK
3. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ServicePIN āđƒāļ™ CheckTINPINServiceSoap āđāļĨāļ§āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Request1
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āļ„āļēāļ‚āļ­āļ‡ SOAP Request āđƒāļŦāļ—āđāļēāļāļēāļĢāđƒāļŠïœŠāļ„āļēāļ‚āļ­āļ‡ username āđāļĨāļ° password
āđ€āļ›ïœ’āļ™ anonymous āđāļĨāļ°āđƒāļŠïœŠāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāđāļēāļ•āļąāļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļš āđ‚āļ”āļĒāđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđ„āļ”āļ”āļąāļ‡āļ™āļĩāđ‰
:
<chec:ServicePIN>
<!--Optional:-->
<chec:username>anonymous</chec:username>
<!--Optional:-->
<chec:password>anonymous</chec:password>
<!--Optional:-->
<chec:PIN>3605699082386</chec:PIN>
</chec:ServicePIN>
:
5. āļāļ”āļ›āļļāļĄ submit request (āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒāļŠāļĩāđ€āļ‚āļĩāļĒāļ§) āļ—āļĩāđˆāļ­āļĒāļđāļ—āļēāļ‡āļ‹ïœ‹āļēāļĒāļšāļ™
āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ„āļ” SOAP Response āļāļĨāļąāļšāļĄāļēāļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡
:
6
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<CheckingResult diffgr:id="CheckingResult1"
msdata:rowOrder="0" diffgr:hasChanges="inserted">
<ID>3605699082386</ID>
<DigitOk>true</DigitOk>
</CheckingResult>
<Message diffgr:id="Message1" msdata:rowOrder="0"
diffgr:hasChanges="inserted">
<Code>W00000</Code>
<Description>āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“&lt;br> Success
"</Description>
</Message>
</NewDataSet>
</diffgr:diffgram>
:
āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 3
āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service Client
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Web Application Project āļ‚āļķāđ‰āļ™āđƒāļŦāļĄïœŠ āđ€āļžāļ·āđˆāļ­āđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ Web Services
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Next
4. āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 Web
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļĨāļ§āļāļ” Finish
7
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Application
5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” ExistingWSDemo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™
Web Services āđāļĨāļ° File Types āđ€āļ›ïœ’āļ™ Web Service Client āđāļĨāļ§āļāļ” Next
6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ·āļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠïœŠ URL āđ€āļ›ïœ’āļ™
http://www.pttplc.com/webservice/pttinfo.asmx?wsdl āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļĨāļ§āļāļ” Finish
8
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client
7. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļˆāļ°āļĄāļĩ Folder āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web Service References āļ‚āļķāđ‰āļ™āļĄāļē
8. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ New > Servlet āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļāđāļēāļŦāļ™āļ”āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ PTTServlet āđāļĨāļ°
Package: āđ€āļ›ïœ’āļ™ servlets āđāļĨāļ§āļāļ” Finish
9. āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ PTTServlet.java āđƒāļŦāļĨāļš sourcecode āļ—āļĩāđˆāļ­āļĒāļđāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try
āđāļĨāļ° finally
10. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Code āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļ Call Web Service
Operation āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ operation āļ‚āļ­āļ‡ Web Service
11. āđ€āļĨāļ·āļ­āļ CurrentOilPrice āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļĨāļ§āļāļ” OK
9
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Operation: CurrentOilPrice āļ‚āļ­āļ‡āļ›āļ•āļ—.
12. āđ€āļžāļīāđˆāļĄ code āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ PTTServlet.java āļ”āļąāļ‡āļ™āļĩāđ‰
@WebServlet(name = "PTTServlet", urlPatterns = {"/PTTServlet"})
public class PTTServlet extends HttpServlet {
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/www.pttplc.com/pttinfo.asmx.wsdl")
private com.pttplc.ptt_webservice.PTTInfo service;
protected void processRequest(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.print(currentOilPrice("TH"));
} finally {
out.close();
}
}
:
private String currentOilPrice(java.lang.String language) {
com.pttplc.ptt_webservice.PTTInfoSoap port = service.getPTTInfoSoap();
return port.currentOilPrice(language);
}
}
13. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Clean and Build
10
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
14. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ PTTServlet.java āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Run File āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāđ€āļ›ïœ’āļ™āļĢāļēāļ„āļēāļ™āđ‰āđāļēāļĄāļąāļ™āļĨāļēāļŠāļļāļ”
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service Operation: CurrentOilPrice āļ‚āļ­āļ‡āļ›āļ•āļ—.
11
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 2: Java Web Services
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services āļŠāđāļēāļŦāļĢāļąāļš Java EE āđ‚āļ”āļĒāđƒāļŠïœ‹āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-WS
āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services Provider āļšāļ™ Java EE Server āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-WS
āļˆāļ°āļŠïœŠāļ§āļĒāļ—āđāļēāđƒāļŦāļāļēāļĢāļŠāļĢāļēāļ‡āđāļĨāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Services āļ”āļ§āļĒāļ āļēāļĐāļē Java āđ€āļ›ïœ’āļ™āđ„āļ›āđ„āļ”āļ‡ïœŠāļēāļĒāļ‚āļķāđ‰āļ™
āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services āļˆāļ°āđāļšïœŠāļ‡āđ„āļ”āđ€āļ›ïœ’āļ™āļŠāļ­āļ‡āļŠïœŠāļ§āļ™āļ„āļ·āļ­ Web Service Requester (Client) āđāļĨāļ° Web
Service Provider (Server) āļ‹āļķāđˆāļ‡āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service Provider āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāđ„āļ” 2 āļ§āļīāļ˜āļĩāļ„āļ·āļ­
1. Web Services āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ Web Server āđ‚āļ”āļĒāđƒāļŠïœ‹ Java Servlet
2. Web Services āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ Application Server āđ‚āļ”āļĒāđƒāļŠïœ‹ Session Bean
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŠïœ‹ NetBeans āļŠāļĢāļēāļ‡ Web Service āļ—āļĩāđˆāļŠāļ·āđˆāļ­ calculateTax āđ‚āļ”āļĒāđƒāļŠïœ‹ Servlet
āļ‹āļķāđˆāļ‡āļˆāļ°āļĢāļąāļ™āļ­āļĒāļđāļšāļ™ GlassFish Server 3.1.2 Server āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡ Web Services āļāļēāļĢāļŠïœŠāļ‡ SOAP message āđāļĨāļ°
WSDL āļ‚āļ­āļ‡ Services
āļāļēāļĢāļžāļąāļ’āļ™āļē calculateTax Web Service
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Web Application Project āļ‚āļķāđ‰āļ™āđƒāļŦāļĄïœŠ āđ€āļžāļ·āđˆāļ­āđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļš Web Service
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ TaxWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹
4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6
Web āđāļĨāļ§āļāļ” Finish
5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxWSDemo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web
Services āđāļĨāļ°āđ€āļĨāļ·āļ­āļ File Types āđ€āļ›ïœ’āļ™ Web Service āđāļĨāļ§āļāļ” Next
6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service āļāđāļēāļŦāļ™āļ” Web Service Name: āđ€āļ›ïœ’āļ™ TaxService āđāļĨāļ° Package:
āđ€āļ›ïœ’āļ™ ws āđāļĨāļ§āļāļ” Finish
7. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ›āļĢāļ°āļāļēāļĻ Web Services āļ—āļĩāđˆāļŠāļ·āđˆāļ­ TaxService āđƒāļ™āđ‚āļŦāļ™āļ” Web Services āļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project
āđāļĨāļ°āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ TaxService.java
8. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” TaxWSDemo > Web Services āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxService
āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Add Operationâ€Ķ
9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Add Operation āļāđāļēāļŦāļ™āļ” Method āđ€āļ›ïœ’āļ™ calculateTax āļŠāļ™āļīāļ”āļ‚āļ­āļ‡ Return Type āđ€āļ›ïœ’āļ™
12
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
double āđāļĨāļ°āļāļ”āļ›āļļāļĄ Add āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄ Input parameter āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Name āđ€āļ›ïœ’āļ™ income āđāļĨāļ° Type
āđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” double āđāļĨāļ§āļāļ” OK
10. āļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđāļ—āļ› Source āļ‚āļ­āļ‡ TaxService.java āđāļĨāļ°āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āđ€āļĄāļ˜āļ­āļ” calculateTax āļ”āļąāļ‡āļ™āļĩāđ‰
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService()
public class TaxService {
@WebMethod
public double calculateTax(@WebParam(name = "income") double income) {
if (income < 70000) {
return 0;
} else if (income < 100000) {
return (income - 70000) * 0.05;
} else if (income < 500000) {
return (income - 100000) * 0.1 + 3500;
} else {
return (income - 500000) * 0.2 + 43500;
}
}
}
11. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxWSDemo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Clean and Build āļˆāļēāļāļ™āļąāđ‰āļ™āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ”
TaxWSDemo āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡ āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Deploy
āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Service
1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ TaxService āđƒāļ™ Web Services āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Test Web Service āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Service āđƒāļ™ Netbeans
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļŦāļ™ïœ‹āļēāļˆāļ­āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ€āļĢāļēāļ›ïœ†āļ­āļ™āļ‚āļ­āļĄāļđāļĨāļ­āļīāļ™āļžāļļāļ• āļ‹āļķāđˆāļ‡āļ„āļ·āļ­āļˆāđāļēāļ™āļ§āļ™āđ€āļ‡āļīāļ™āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ„āđāļēāļ™āļ§āļ“āļ āļēāļĐāļĩ
āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āđƒāļŠïœŠāļ•āļąāļ§āđ€āļĨāļ‚āđ€āļ›ïœ’āļ™ 730000 āđāļĨāļ°āļāļ”āļ›āļļāļĄ calculateTax āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
13
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļŠāđāļēāļŦāļĢāļąāļšāđƒāļŦāļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļ Web Service
3. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Services āđāļĨāļ°āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ” āļžāļĢāļ­āļĄāļ—āļąāđ‰āļ‡āđāļŠāļ”āļ‡āļ„āļē SOAP Request āđāļĨāļ°
SOAP Response āļ”āļąāļ‡āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
14
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļžāļĢāļ­āļĄāļ—āļąāđ‰āļ‡ SOAP Request āđāļĨāļ° SOAP Response
4. āļŦāļĨāļąāļ‡āļˆāļēāļāļāļ” Back āļāļĨāļąāļšāļĄāļēāļ—āļĩāđˆāļŦāļ™ïœ‹āļēāđ€āļ”āļīāļĄāđāļĨāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ WSDL āļ‚āļ­āļ‡ Web
Service āļ™āļĩāđ‰āđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāđ€āļĨāļ·āļ­āļāļ—āļĩāđˆ WSDL File āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļ„āļĨāļīāđŠāļāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ WSDL
15
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļ url āļŠāļ·āđˆāļ­ http://localhost:8080/TaxWSDemo/TaxServiceService?WSDL
āđāļĨāļ°āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡ WSDL
6. āđ‚āļ›āļĢāđāļāļĢāļĄ Web Service āļˆāļ°āļ–āļđāļāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļšāļ™ GlassFish Server 3.1.2 āļŠāļēāļĄāļēāļĢāļ–āļ”āļđāđ„āļ”āļˆāļēāļāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ
GlassFish Server 3.1.2 āđƒāļ™āđāļ—āļ› Services āđāļĨāļ°āđ€āļĨāļ·āļ­āļ View Admin Console āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
āļŦāļĢāļ·āļ­āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›ïœāļ” Web Browser āđāļĨāļ°āđ€āļĢāļĩāļĒāļ url āļ—āļĩāđˆ http://localhost:4848 āđ‚āļ”āļĒāļĄāļĩ user āđ€āļ›ïœ’āļ™ admin
āđāļĨāļ° password āđ€āļ›ïœ’āļ™ adminadmin
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāļ”āļđ Admin Console
16
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 3: Axis2 Web Services
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 Web Services āļšāļ™ Tomcat Web Server āđāļĨāļąāļ§āļ—āļ”āļĨāļ­āļ‡āļžāļąāļ’āļ™āļē Web Service
āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans
āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 āļšāļ™ Tomcat
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļĄāļ”āļđāļĨ Axis2 āđ€āļžāļ·āđˆāļ­āļ—āđāļēāđƒāļŦ Tomcat āđ€āļ›ïœ’āļ™ Web Service Provider āļ—āļĩāđˆāļ—āđāļēāļ‡āļēāļ™āļ āļēāļĒāđƒāļ• Axis2
Framework āđ‚āļ”āļĒ Axis2 āļĄāļĩāļ‚āļ­āļ”āļĩāđ€āļŦāļ™āļ·āļ­ JAX-WS API āđƒāļ™āđāļ‡ïœŠāļ—āļĩāđˆāļ§ïœŠāļē Axis2 āļĄāļĩ WS-Security
āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ€āļĢāđ‡āļ§āļāļ§ïœŠāļē āļ‹āļķāđˆāļ‡āļāļēāļĢāļžāļąāļ’āļ™āļēāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āļ—āđāļēāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŸāļĨ axis2.war āļˆāļēāļ http://ws.apache.org/axis2/
2. āļ„āļąāļ”āļĨāļ­āļāđ„āļŸāļĨ axis2.war āļ āļēāļĒāđƒāļ•āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ—āļĩāđˆāļŠāļ·āđˆāļ­ webapps āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ CATALINA_BASE āļ‚āļ­āļ‡ Tomcat
3. āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄïœŠāļ—āļĢāļēāļšāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ Catalina Base āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ„āļ™āļŦāļēāđ„āļ”āđ‚āļ”āļĒāđ€āļ›ïœāļ”āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans
āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Services āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Servers āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Properties āļ‚āļ­āļ‡ Apache
Tomcat āđ‚āļ”āļĒāđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Server āļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ Catalina Base āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 1
āļĢāļđāļ›āļ—āļĩāđˆ 1 āļāļēāļĢāļŦāļēāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ Catalina Base
4. āļˆāļ°āđ„āļ”āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ āļēāļĒāđƒāļ• webapps āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 2
17
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ webapps āļ āļēāļĒāļŦāļĨāļąāļ‡āļˆāļēāļāļ„āļąāļ”āļĨāļ­āļāđ„āļŸāļĨ axis2.war
5. āļ—āđāļēāļāļēāļĢ Start/Restart Tomcat āđāļĨāļ§āļ—āļ”āļŠāļ­āļš Axis2 āđ‚āļ”āļĒāļāļēāļĢāđ€āļĨāļ·āļ­āļ url āļ—āļĩāđˆāļŠāļ·āđˆāļ­ http://localhost:8084/axis2/
āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3 āđ‚āļ”āļĒāļ āļēāļĒāđƒāļ™ Services āļˆāļ°āļĄāļĩāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ•āļąāļ§āļ­āļĒāļēāļ‡āļŠāļ·āđˆāļ­ Version āļĢāļąāļ™āļ­āļĒāļđ
āļĢāļđāļ›āļ—āļĩāđˆ 3 āļŦāļ™ïœ‹āļēāļˆāļ­āļ‚āļ­āļ‡ Tomcat Axis2
18
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ™āļĩāđ‰āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠïœŠāļ™ Soap UI āđ‚āļ”āļĒāļ­ïœ‹āļēāļ‡āļ­āļīāļ‡āļ–āļķāļ‡ WSDL āļ—āļĩāđˆ
http://localhost:8084/axis2/services/Version?wsdl
āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 Plugin āļŠāđāļēāļŦāļĢāļąāļš NetBeans
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 Plugin āđ€āļžāļ·āđˆāļ­āļ—āđāļēāđƒāļŦ NetBeans āļŠāļēāļĄāļēāļĢāļ–āļžāļąāļ’āļ™āļē Axis2 Web Services
āđ„āļ”āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ Tools > Plugins
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Plugins āđ€āļĨāļ·āļ­āļāđāļ—āļ› Downloaded āđāļĨāļ§āļāļ”āļ›āļļāļĄ Add Plugins āđāļĨāļ§āđ€āļĨāļ·āļ­āļāđ„āļ›āļ—āļĩāđˆāđ„āļŸāļĨ org-
netbeans-modules-websvc-axis2.nbm āļ‹āļķāđˆāļ‡āđ„āļ”āļ—āđāļēāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āļĄāļēāļïœŠāļ­āļ™āļŦāļ™ïœ‹āļēāļ™āļĩāđ‰
3. āļāļ”āļ›āļļāļĄ Install āđāļĨāļ§āļāļ”āļ›āļļāļĄ Next āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāļĒāļ­āļĄāļĢāļąāļšāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚ āđāļĨāļ°āļāļ”āļ›āļļāļĄ install āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡
4. āđ€āļĄāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ€āļŠāļĢāđ‡āļˆāļŠāļīāđ‰āļ™āđāļĨāļ§ āđƒāļŦāđ€āļĨāļ·āļ­āļ Restart IDE Now āđ€āļžāļ·āđˆāļ­ restart āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ
āđāļĨāļ§āļāļ”āļ›āļļāļĄ Finish āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Tools > Plugin
5. āļˆāļēāļāļ™āļąāđ‰āļ™āļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢ Config Tomcat āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ– deploy Axis2 Web Service āđ„āļ”āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī
āđ‚āļ”āļĒāđƒāļŦāđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Tools > Options
6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Options āđ€āļĨāļ·āļ­āļāđāļ—āļ› Axis2 āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļē Axis2 .aar Files āđ€āļ›ïœ’āļ™āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ—āļĩāđˆāđ€āļĢāļēāļ•āļīāļ”āļ•āļąāđ‰āļ‡
axis2.war āļĨāļ‡āđ„āļ› āđāļĨāļ°āļāđāļēāļŦāļ™āļ”āļ„āļē Axis URL āđ€āļ›ïœ’āļ™ http://localhost:8084/axis2/
7. āļāđāļēāļŦāļ™āļ” username āđāļĨāļ° password āļ‚āļ­āļ‡Tomcat Manager āđƒāļŦāļ–āļđāļāļ•āļ­āļ‡ āļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļĨāļ§āļāļ”āļ›āļļāļĄ
OK [āļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ Tomcat Users āļŠāļēāļĄāļēāļĢāļ–āļ„āļ™āļŦāļēāđ„āļ”āļˆāļēāļāđ„āļŸāļĨ CATALINA_BASE/conf/tomcat-users.xml]
19
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 4 āļāļēāļĢ Config āļ„āļēāļŠāđāļēāļŦāļĢāļąāļš Tomcat Axis2
āļāļēāļĢāļžāļąāļ’āļ™āļē Axis2 Web Service
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Axis2 Web Service āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project..
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java āđāļĨāļ° Java Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ Axis2Demo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ Director
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļšāđ„āļŸāļĨāđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Finish
4. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Axis2Demo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web Services āđāļĨāļ° Axis2 Service from Java
āđāļĨāļ§āļāļ” Next
20
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āđ€āļĨāļ·āļ­āļāļŠïœŠāļ­āļ‡ Create Empty Web Service āđāļĨāļ§āļāļ” Next
7. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ› āļāđāļēāļŦāļ™āļ”āļŠāļ·āđˆāļ­ Class Name āđ€āļ›ïœ’āļ™ TaxServices āđāļĨāļ° Package āđ€āļ›ïœ’āļ™ ws āđāļĨāļ§āļāļ”
Finish
8. āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ source code āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāđ€āļĄāļ˜āļ­āļ”āļ—āļĩāđˆāļŠāļ·āđˆāļ­ calculateTax āļ”āļąāļ‡āļ™āļĩāđ‰
package ws;
public class TaxServices {
public double calculateTax(double income) {
return 0.1 * income;
}
}
9. āļ—āđāļēāļāļēāļĢ Deploy Web Services āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Axis Web Services āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ”
Axis2Demo āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Deploy to Server āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 5
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢ Deploy Axis Web Services to Server
10. āļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ”āđ‚āļ”āļĒāļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđāļĨāļ°āļžāļīāļĄāļžïœŽ URL: http://localhost:8084/axis2/
āļˆāļēāļāļ™āļąāđ‰āļ™āļ„āļĨāļīāđŠāļ Services āļˆāļ°āđ€āļŦāđ‡āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ—āļĩāđˆāļŠāļ·āđˆāļ­ TaxServices āļ­āļĒāļđ āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 6
21
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡ TaxServices āļ āļēāļĒāđƒāļ™ Services
11. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ™āļĩāđ‰āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠïœŠāļ™ Soap UI āđ‚āļ”āļĒāļ­ïœ‹āļēāļ‡āļ­āļīāļ‡āļ–āļķāļ‡ WSDL āļ—āļĩāđˆ
http://localhost:8084/axis2/services/TaxServices?wsdl āđ„āļ”
12. āđ‚āļ”āļĒāļŦāļĨāļąāļ‡āļˆāļēāļāļāļēāļĢāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Request1 āđāļĨāļ°āđƒāļŠïœŠāļ„āļē income āđ€āļŠāļĢāđ‡āļˆāđāļĨāļ§ āļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™ port āļˆāļēāļ
8080 āđ€āļ›ïœ’āļ™ 8084 āļïœŠāļ­āļ™āļāļēāļĢāļĢāļąāļ™ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļĨāļ° 8
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ edit current.. āđ€āļžāļ·āđˆāļ­āđ€āļ›āļĨāļĩāđˆāļĒāļ™ Port āļ‚āļ­āļ‡ axis2
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™ Port āļ‚āļ­āļ‡ axis2 āļˆāļēāļ 8080 āđ€āļ›ïœ’āļ™ 8084 āļïœŠāļ­āļ™āļāļēāļĢāļĢāļąāļ™
22
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 4: āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MySQL Database
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āļ™āđƒāļŠïœ‹āļ‡āļēāļ™ Database Tool āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš Table test āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL
āļŠāđāļēāļŦāļĢāļąāļšāđ€āļ›ïœ’āļ™āļ•āļąāļ§āļŠïœŠāļ§āļĒāđƒāļŦāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™ āđ€āļŠïœŠāļ™āļ›āļāļ•āļīāļ–āļēāļˆāļ° create table āļāđ‡āļ•āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™ SQL āđāļ• Tool āļ™āļĩāđ‰āļĄāļĩ GUI āļĄāļēāļŠïœŠāļ§āļĒ
āļ—āđāļēāđƒāļŦāļĨāļ”āļ‚āļ­āļœāļīāļ”āļžāļĨāļēāļ” āđāļĨāļ° āļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļķāđ‰āļ™ āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰āļāļēāļĢāļ—āđāļēāđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ•āļ­āļ‡āļĄāļĩāļāļēāļĢ download
āđāļĨāļ°āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL āđāļĨāļ° MySQL Workbench āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢ download āđ„āļ”āļˆāļēāļāđ€āļ§āđ‡āļš
http://dev.mysql.com/
āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­ MySQL āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ MySQL Workbench
1. āđƒāļŦāđ€āļ›ïœāļ”āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL Workbench āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 1 āļˆāļēāļāļ™āļąāđ‰āļ™āļ—āđāļēāļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
āļĢāļđāļ›āļ—āļĩāđˆ 1 āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āļ‡āļēāļ™ Program MySQL Workbench
2. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Connection Name āđƒāļŠïœŠ Password āļ—āļĩāđˆāļāđāļēāļŦāļ™āļ”āđ„āļ§ïœ‹āđƒāļ™āļ•āļ­āļ™āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ
MySQLāļ‹āļķāđˆāļ‡āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™ root āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 2
āļĢāļđāļ›āļ—āļĩāđˆ 2 āļāļēāļĢāđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­ Connection āđ€āļžāļ·āđˆāļ­āđ€āļ‚āļēāđ„āļ›āļˆāļąāļ”āļāļēāļĢ Database
23
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡ books
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ‚āļ”āļĒāđƒāļŦāļ­āļĒāļđāļ āļēāļĒāđƒāļ• Schema āļ—āļĩāđˆāļŠāļ·āđˆāļ­ test āđ‚āļ”āļĒ Table
āļ™āļĩāđ‰āļāđāļēāļŦāļ™āļ”āđƒāļŦāļĄāļĩ Column āļ•āļēāļ‡āđ† āļ”āļąāļ‡āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆ 1
āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆ 1 Table books
āļŠāļ·āđˆāļ­Column āļŠāļ™āļīāļ” āļ‚āļ™āļēāļ” Primary Key Index
isbn varchar 20 Y Y
title varchar 70 - -
author varchar 50 - -
price float - - -
āđ€āļĢāļēāļˆāļ°āđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL WorkBench āđƒāļ™āļāļēāļĢāļ—āļĩāđˆāļˆāļ°āļŠāļĢāļēāļ‡ Tableāļ™āļĩāđ‰āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āļēāļ‡āđ† āļ”āļąāļ‡āļ™āļĩāđ‰
1. āļ„āļĨāļīāđŠāļāļ—āļĩāđˆ icon āļŠāļ·āđˆāļ­Add Table... āđāļĨāļ§āđƒāļŠïœŠāļŠāļ·āđˆāļ­table āđāļĨāļ° āļŠāļ·āđˆāļ­ field āļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆ 1 āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļĨāļ§āļāļ”āļ›āļļāļĄ Apply
24
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āļāļēāļĢāđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡
2. āļŦāļĢāļ·āļ­āđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ SQL Statement āļāđ‡āđ„āļ” āđ‚āļ”āļĒāļ™āđāļēāđ„āļ›āđƒāļŠïœŠāļ—āļĩāđˆāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Query1 āđāļĨāļ§ āļāļ” icon
āļŠāļēāļĒāļŸïœ†āļēāļŠāļĩāđ€āļŦāļĨāļ·āļ­āļ‡āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™
CREATE TABLE BOOKS (
ISBN VARCHAR(20) NOT NULL ,
TITLE VARCHAR(70) NULL ,
AUTHOR VARCHAR(50) NULL ,
PRICE FLOAT NULL ,
PRIMARY KEY (ISBN) );
3. āđ€āļ›ïœāļ” Tables books āļˆāļ°āđ€āļŦāđ‡āļ™ Column āļ•āļēāļ‡āđ† āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 4
25
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 4 āļœāļĨāļĨāļąāļžāļ˜ïœŽāļˆāļēāļāļāļēāļĢāļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡
āļāļēāļĢāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āđƒāļ™ MySQL WorkBench
āļ āļēāļĒāļŦāļĨāļąāļ‡āļˆāļēāļāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļˆāļ°āļ•āļīāļ”āļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ
āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāļĨāļ‡āđƒāļ™ Table āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āļēāļ‡āđ†āļ”āļąāļ‡āļ™āļĩāđ‰
1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Table books āļ”āļēāļ™āļ‚āļ§āļē āļˆāļ°āđ„āļ” SQL Editor āđƒāļŦāļ›ïœ†āļ­āļ™āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āđ€āļ›ïœ’āļ™
INSERT INTO books VALUES ('123', 'JAVA', 'Numnonda', 2500.00);
INSERT INTO books VALUES ('456', 'SOA', 'Numnonda', 3000.00) ;
26
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āđāļĨāļ§ āļ„āļĨāļīāđŠāļāļ—āļĩāđˆ icon āļŠāļēāļĒāļŸïœ†āļēāļŠāļĩāđ€āļŦāļĨāļ·āļ­āļ‡ āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 5 āļŦāļĢāļ·āļ­āļāļ”Ctrl+Shift+Enter āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āļ—āļąāđ‰āļ‡āļŦāļĄāļ”
āļĢāļđāļ›āļ—āļĩāđˆ 5 āļāļēāļĢ Executeāļ„āđāļēāļŠāļąāđˆāļ‡āđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡
2. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ”āļđāļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ›ïœ†āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ”
āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ€āđāļĨāļ§āļĨāļ·āļ­āļ Select Rows – Limit 1000 āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 6
āļĢāļđāļ›āļ—āļĩāđˆ 6 āļāļēāļĢāđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāđƒāļ™ Table āļŠāļ·āđˆāļ­ books
27
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
3. āđ€āļĄāļ·āđˆāļ­āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Database āđāļĨāļ§āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹ NetBeans āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš Database āđ„āļ”āđ‚āļ”āļĒāļŠāđāļēāļŦāļĢāļąāļš
Netbeans 7.3 āđƒāļŦāđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāđāļ—āļ› Services āļˆāļ°āđ€āļŦāđ‡āļ™ MySQL Driver āļ—āļĩāđˆāļĄāļĩāļĄāļēāđƒāļŦāđāļĨāļ§ āļ‹āļķāđˆāļ‡āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš
Databases > Drivers āļˆāļ°āđ€āļŦāđ‡āļ™ Driver āļ—āļĩāđˆāļŠāļ·āđˆāļ­ MySQL āđƒāļŦāļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļē āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Connect Using
4. āđƒāļŦāļ—āđāļēāļāļēāļĢāļĢāļ°āļšāļļāļ„āļēāļ‚āļ­āļ‡ Host: āđāļĨāļ° Port: āđ€āļ›ïœ’āļ™ localhost āđāļĨāļ° 3306 (āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄïœŠāđ„āļ”āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ port āļ•āļ­āļ™
āļ•āļīāļ”āļ•āļąāđ‰āļ‡) āļ•āļēāļĄāļĨāđāļēāļ”āļąāļš
5. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļĢāļ°āļšāļļāļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ•āļīāļ”āļ•āļ­ (āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļĢāļ°āļšāļļ test)
6. āļŠāđāļēāļŦāļĢāļąāļš User Name: āđāļĨāļ° Password: āđƒāļŦāđƒāļŠïœŠāļ„āļēāļ•āļēāļĄāļ—āļĩāđˆāļāđāļēāļŦāļ™āļ”āđ„āļ§ïœ‹āđƒāļ™āļ•āļ­āļ™āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL
āļ‹āļķāđˆāļ‡āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™ root āđāļĨāļ° root āđ‚āļ”āļĒāđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāđ„āļ”āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļąāļš Database Connection
28
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļ” OK āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Runtime āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Database āļˆāļ°āđ€āļŦāđ‡āļ™ Connection
āđƒāļŦāļĄïœŠāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡ Connection āđ„āļ›āļĒāļąāļ‡ test Database
5. āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš jdbc:mysql://localhost:3306/test āļˆāļ°āđ€āļŦāđ‡āļ™āļĢāļēāļĒāļāļēāļĢ test > Tables > books
āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ View Data... āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9
āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļāđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄāļđāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ books
6. āļˆāļ°āđ€āļŦāđ‡āļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļ•āļēāļĢāļēāļ‡ books āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10
āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļ‚āļ­āļĄāļđāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ Books
29
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 5: Java Web Services from Session Bean (1)
āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Enterprise Java Bean (EJB) āđ‚āļ”āļĒāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄāļšāļ™ GlassFish Server 3.1.2 āđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļšāļ™ Application
Server āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāļ”āļ§āļĒ Entity Class āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļāļąāļšāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđāļĨāļ° Session Bean āđ€āļžāļ·āđˆāļ­āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ
āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Entity Class āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļžāļīāđˆāļĄ āđāļïœ‹āđ„āļ‚ āđāļĨāļ° āļĨāļšāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡ books āđ„āļ”
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļŠāļĢāļēāļ‡ Enterprise Application Project
2. āļžāļąāļ’āļ™āļē Entity Class
3. āļžāļąāļ’āļ™āļē Session Bean
4. āļžāļąāļ’āļ™āļē Web Application
5. āļžāļąāļ’āļ™āļē Java Web Services āļˆāļēāļ Session Bean
āļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļ•āļīāļ”āļ•āļ­āļāļąāļš MySQL Database āđ„āļ” āđƒāļŦāļ—āđāļēāļāļēāļĢāļ”āļđāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ GlassFish āļˆāļēāļāđƒāļ™
NetBeans āļ”āļąāļ‡āļ™āļĩāđ‰
1. āļ„āļĨāļīāđŠāļāļ—āļĩāđˆ tab Services āđƒāļ™ NetBeans
2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ GlassFish āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ Servers āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŦāļēāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ GlassFish
3. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ”āļđāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ domain āđƒāļ™ GlassFish Server āļˆāļēāļ Domains Folder: āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
30
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ Domain āđƒāļ™ GlassFish
4. āđ„āļ›āļĒāļąāļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ Domain āđƒāļ™ GlassFish āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ™āđāļēāđ„āļŸāļĨ mysql-connector-java-5.1.19-bin.jar
(MySQL Driver) āđ„āļ›āđƒāļŠïœŠāđ„āļ§ïœ‹āđƒāļ™ folder lib āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠ MySQL Driver āļ āļēāļĒāđƒāļ™ Domain āļ‚āļ­āļ‡ GlassFish
5. Restart GlassFish āđ‚āļ”āļĒāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ•āļĢāļ‡ GlassFish āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ NetBeans āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Restart āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ
4
31
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢ Restart GlassFish Server
āļāļēāļĢāļŠāļĢāļēāļ‡ Enterprise Application Project
āđ€āļĢāļēāļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĄ Enterprise Application āļ‹āļķāđˆāļ‡āļĄāļĩāļ—āļąāđ‰āļ‡ EJB Module āđāļĨāļ° Web
Module āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄïœŠāļ‚āļķāđ‰āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File => New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Enterprise āđ€āļ›ïœ’āļ™ Enterprise
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ BookApp āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš
project āđ„āļ§ïœ‹ āļāļ” Next
4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6
āđāļĨāļ°āđƒāļŦāđ€āļĨāļ·āļ­āļāļŠïœŠāļ­āļ‡ Create EJB Module: āđāļĨāļ° Create Web Application Module: āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
32
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Enterprise Application
5. āļāļ” Finish
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class
āđ‚āļ›āļĢāđāļāļĢāļĄ EJB 3.0 āļˆāļ°āđƒāļŠïœ‹āļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Entity āđ€āļžāļ·āđˆāļ­āđ€āļ›ïœ’āļ™āļ­āļ­āļ›āđ€āļˆāđ‡āļ„āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļšāļ•āļēāļĢāļēāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ
āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļŠāļĢāļēāļ‡ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Books.java āļˆāļēāļāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āļ‹āļķāđˆāļ‡āļĄāļĩāļāļēāļĢāļŠāļĢāļēāļ‡āļĄāļēāļïœŠāļ­āļ™āđāļĨāļ§
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-ejb āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other...
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity
Classes from Database āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: āđ€āļ›ïœ’āļ™ New Data Sourceâ€Ķ
āđ‚āļ”āļĒāđƒāļŠïœŠāļŠāļ·āđˆāļ­ JNDI Name: jdbc/test āđāļĨāļ°āđ€āļĨāļ·āļ­āļāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āđ„āļ›āļĒāļąāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ test āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
33
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Data Source
4. āļāļ” OK āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Add All >> āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ™āđāļēāļĄāļēāļŠāļĢāļēāļ‡ Entity Class āļ‹āļķāđˆāļ‡āļˆāļ°āđ„āļ” Selected
Tables: āđ€āļ›ïœ’āļ™ books āļāļ” Next āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7
34
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļˆāļēāļ Data Source
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āđāļĨāļ°āđƒāļŦāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§ïœŠāļē Crate Persistence Unit
āđ„āļ”āļ–āļđāļāđ€āļĨāļ·āļ­āļāđ„āļ§ïœ‹ āļ‹āļķāđˆāļ‡ Persistence Unit āļˆāļ°āđ€āļ›ïœ’āļ™āļ•āļąāļ§āļāđāļēāļŦāļ™āļ”āđƒāļŦ EJB Container āļ‚āļ­āļ‡ Application Server
āļĢāļđāđ„āļ”āļ§ïœŠāļē Entity Class āļˆāļ°āļ–āļđāļāļ„āļ§āļšāļ„āļļāļĄāļ”āļ§āļĒ Entity Manager āļ•āļąāļ§āđƒāļ” āđāļĨāļ°āđ€āļ›ïœ’āļ™āļ•āļąāļ§āļāđāļēāļŦāļ™āļ” Data Source
āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āļāļąāļš Entity Manager āļ™āļĩāđ‰
6. āđ„āļĄïœŠāļˆāđāļēāđ€āļ›ïœ’āļ™āļ•āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āļēāđƒāļ”āđ† āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
35
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class
7. āđ€āļĄāļ·āđˆāļ­āļāļ” Finish āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ persistence.xml āđƒāļ™ package: Configuration Files
āđāļĨāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ Books.java āđƒāļ™ package: entity
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean
āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļˆāļ°āđƒāļŠïœ‹ Session Bean āđƒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļ­āļāļąāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ­āļ·āđˆāļ™āđ† āļ āļēāļĒāļ™āļ­āļ EJB Container
āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŦāļĨāļēāļ™āļąāđ‰āļ™āļˆāļ°āļ•āļīāļ”āļ•āļ­āļāļąāļš Entity Class āđ‚āļ”āļĒāļœïœŠāļēāļ™ Session Bean āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Session Bean
āļ—āļĩāđˆāļŠāļ·āđˆāļ­ BooksFacade.java āļ—āļĩāđˆāļĄāļĩ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļïœ‹āđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­
books āđ‚āļ”āļĒāđƒāļŠïœ‹ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Books.java āđāļĨāļ° EntityManager āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-ejb āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Session
Beans for Entity Classes āđāļĨāļ§āļāļ” Next
3. āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Add All >> āđāļĨāļ§āļāļ” Next
4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ sb āđāļĨāļ°āđ€āļĨāļ·āļ­āļ local āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļĨāļ§āļāļ” Finish
36
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Bean
5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ BooksFacade.java āđāļĨāļ° BooksFacadeLocal.java āđƒāļ™ package āļ—āļĩāđˆāļŠāļ·āđˆāļ­ sb
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application
āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļˆāļ°āđ€āļ›ïœ’āļ™āļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Business Logic āđ€āļ—āļēāļ™āļąāđ‰āļ™ āļāļēāļĢāļžāļąāļ’āļ™āļēāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Presentation
āļˆāļ°āļ•āļ­āļ‡āđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļŦāļĢāļ·āļ­ Java SE āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application
āđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™ isbn āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āđƒāļ™āļŦāļ™ïœ‹āļēāđ€āļ§āđ‡āļš findBook.html āđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĩāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļĩāđˆāļŠāļ·āđˆāļ­
ShowBook.java āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ”āļąāļ‡āļāļĨāļēāļ§āļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html
āđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļžāļˆāļ—āļĩāđˆāđƒāļŠïœ‹āđāļŠāļ”āļ‡āļŸāļ­āļĢāļĄāļŠāđāļēāļŦāļĢāļąāļšāđƒāļŦāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™ isbn āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ HTML āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™ findBook āđāļĨāļ§āļāļ” Finish
4. āđ€āļ‚āļĩāļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ findBook.html āļ•āļēāļĄ Listing āļ—āļĩāđˆ 1 āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļĨāļēāļ icon āļ›āļĢāļ°āđ€āļ āļ—
HTML Forms āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āđ€āļžāļ·āđˆāļ­āļŠāļēāļĄāļēāļĢāļ–āđƒāļŦāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āļ‡ïœŠāļēāļĒāļ‚āļķāđ‰āļ™
37
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Listing 1 āđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html
<html>
<head>
<title></title>
</head>
<body>
<form action="ShowBook" method="POST">
<h2>Search Book from ISBN </h2>
Enter ISBN <input type="text" name="isbn" value="" />
<input type="submit" value="Find" />
</form>
</body>
</html>
2. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ ShowBook.java
āđ‚āļ›āļĢāđāļāļĢāļĄ ShowBook.java āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļĩāđˆāļˆāļ°āļ­ïœŠāļēāļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ ISBN
āļ—āļĩāđˆāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™āļĄāļēāļˆāļēāļāļŦāļ™ïœ‹āļē findBook.html āđāļĨāļ°āļˆāļ°āđ€āļĢāļĩāļĒāļāđ€āļĄāļ˜āļ­āļ” find() āļ‚āļ­āļ‡ session bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­ BooksFacade
āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other...
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New FileāđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Servlet āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ ShowBook āđāļĨāļ° Package: āđ€āļ›ïœ’āļ™ servlets āļāļ” Next āđāļĨāļ§āļāļ” Finish
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Codeâ€Ķ > Call
Enterprise Beanâ€Ķ
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Call Enterprise Bean āđ€āļĨāļ·āļ­āļ BooksFacade āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ BookApp-ejb āđāļĨāļ§āļāļ” OK
6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļžāļīāđˆāļĄ Source code āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ EJB āļ”āļąāļ‡āļ™āļĩāđ‰
@EJB
private BooksFacadeLocal booksFacade;
7. āđƒāļŦāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ 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 ShowBook</title>");
38
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
out.println("</head>");
out.println("<body>");
String isbn = request.getParameter("isbn");
Books book = booksFacade.find(isbn);
out.println("Title: " + book.getTitle()+ "<BR>");
out.println("Author: " + book.getAuthor() + "<BR>");
out.println("Price: " + book.getPrice() + "<BR>");
out.println("</body>");
out.println("</html>");
out.close();
}
9. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ Fix Imports āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ import āļ„āļĨāļēāļŠāļ•āļēāļ‡āđ† āđāļĨāļ§ Save āđ‚āļ›āļĢāđāļāļĢāļĄ
āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ•āļĢāļ‡ BookApp āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Clean and Build
2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ BookApp (āđ„āļĄïœŠāđƒāļŠïœŠ BookApp-ejb āļŦāļĢāļ·āļ­ BookApp-war)
3. āđ€āļĨāļ·āļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™ http://localhost:8080/BookApp-war/findBook.html
āđƒāļŦāđ€āļĢāļēāļ—āļ”āļĨāļ­āļ‡āđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨ
4. āđ€āļĄāļ·āđˆāļ­āļāļ”āļ›āļļāļĄ Find āđ‚āļ›āļĢāđāļāļĢāļĄāļāđ‡āļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10
āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ
āļāļēāļĢāļžāļąāļ’āļ™āļē Java Web Services āļˆāļēāļ Session Bean
1. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļŠïœŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļīāļāļēāļĢāļ‚āļ­āļ‡ Stateless Session Bean āđ„āļ›āđ€āļ›ïœ’āļ™ Web Services
āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāđāļïœ‹āđ„āļ‚āđ„āļŸāļĨ BooksFacade.java āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āđ‚āļŦāļ™āļ” BookApp-ejb āļ”āļąāļ‡āļ™āļĩāđ‰
39
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
@WebService
@Stateless
public class BooksFacade extends AbstractFacade<Books> implements
BooksFacadeLocal {
@PersistenceContext(unitName = "BookApp-ejbPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public BooksFacade() {
super(Books.class);
}
@WebMethod
public Books findBookDetailsByIsbn(String isbn) {
Query query =
em.createNamedQuery("Books.findByIsbn").setParameter("isbn", isbn);
return (Books) query.getSingleResult();
}
}
2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ Fix Imports āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ import āļ„āļĨāļēāļŠāļ•āļēāļ‡āđ† (javax.jws.WebService,
javax.jws.WebMethod āđāļĨāļ° javax.persistence.Query) āđāļĨāļ§ Save āđ‚āļ›āļĢāđāļāļĢāļĄ
3. āļĨāļ­āļ‡āļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļˆāļēāļāđƒāļ™ NetBeans (āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠïœ‹ Test Web Service āđāļĨāļ°āđ€āļ‚āļĩāļĒāļ™ code)
āđāļĨāļ°āđ‚āļ”āļĒāđƒāļŠïœ‹ Soap UI
4. āđƒāļŦāļ—āļ”āļĨāļ­āļ‡āđ€āļžāļīāđˆāļĄāđ€āļĄāļ˜āļ­āļ”āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļīāļāļēāļĢāđ€āļ›ïœ’āļ™ Web Services āđ€āļŠïœŠāļ™ findBookDetailsByTitle
40
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 6: Java Web Services from Session Bean (2)
āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services āļŠāđāļēāļŦāļĢāļąāļš Java EE āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļšāļ™
Server āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ Java EE āđ‚āļ”āļĒāļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-WS āļ‹āļķāđˆāļ‡āđƒāļ™āļāļĢāļ“āļĩāļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŠïœ‹ NetBeans āļŠāļĢāļēāļ‡ Web
Services Method āļ—āļĩāđˆāļŠāļ·āđˆāļ­ findEmployeeDetails āļˆāļēāļ Session Bean āđ‚āļ”āļĒ Service āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ„āļ™āļŦāļēāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡
employee āļˆāļēāļ table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments
2. āļŠāļĢāļēāļ‡ EJB Module
3. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class
4. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean
5. āļŠāļĢāļēāļ‡ Web Application
1. āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđƒāļŦāļ—āđāļēāļāļēāļĢāļ„āļąāļ”āļĨāļ­āļ script āļ•āļ­āđ„āļ›āļ™āļĩāđ‰
āđāļĨāļ§āđƒāļŠïœŠāđƒāļ™ SQL Command Editor āļ‚āļ­āļ‡ NetBeans āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢ Run SQL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1
create table `test`.DEPARTMENTS
(
DEPARTMENT_ID INT not null primary key,
DEPARTMENT_NAME VARCHAR(30) not null
);
insert into departments values(90,'Executive');
create table `test`.EMPLOYEES
(
EMPLOYEE_ID INT not null primary key,
FIRST_NAME VARCHAR(20),
LAST_NAME VARCHAR(25) not null,
DEPARTMENT_ID INT,
FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON UPDATE
CASCADE
);
insert into employees values(100,'Steven','King',90);
insert into employees values(101,'Neena','Kochhar',90);
41
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Run SQL āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡
āđ‚āļ”āļĒāđ€āļĄāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ”āļđāđƒāļ™ tables āļ‚āļ­āļ‡ test āļˆāļ°āļžāļš table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļ–āļđāļāļŠāļĢāļēāļ‡āļ‚āļķāđ‰āļ™āļĄāļē
āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Module
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Enterprise āđ€āļ›ïœ’āļ™ EJB
Module āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļĨāļ§āļāļ” Next
42
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Module
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ EmployeeWS āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļšāđ„āļŸāļĨāđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Next
4. āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE 6 āđāļĨāļ§āļāļ” Finish
āļāļēāļĢāļžāļąāļ’āļ™āļē Employees and Departments Entity Classes
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity Classes
from Database āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: āđ€āļ›ïœ’āļ™ jdbc/test
āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āđ„āļ›āļĒāļąāļ‡āļ•āļēāļĢāļēāļ‡ test āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL
43
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļ›āļ—āļĩāđˆāļ•āļēāļĢāļēāļ‡ EMPLOYEES āđāļĨāļ§āļāļ” Add > āđāļĨāļ°āļ„āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ Include Related Tables
āđ„āļ§ïœ‹āļ•āļēāļĢāļēāļ‡ EMPLOYEES āđāļĨāļ° DEPARTMENTS āļˆāļ°āļ–āļđāļāļĒāļēāļĒāļĄāļēāļ­āļĒāļđāđƒāļ™ Selected Tables: āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ
4 āđāļĨāļ§āļāļ” Next
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļŠāđāļēāļŦāļĢāļąāļš EMPLOYEES āđāļĨāļ° DEPARTMENTS
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āđāļĨāļ° Finish
44
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāļĢāļ°āļšāļļ Package āļŠāđāļēāļŦāļĢāļąāļš Entity Classs āļ—āļĩāđˆāļŠāļĢāļēāļ‡āļ‚āļķāđ‰āļ™āļĄāļē
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean
āđ‚āļ›āļĢāđāļāļĢāļĄNetBeans āļˆāļ°āļĄāļĩ Wizard āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Session Bean āļˆāļēāļ Entity Class āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Business method
āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļïœ‹āđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ tableāļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļš Entity Class āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other...
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New FileāđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Session
Beans for Entity Classes āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Session Beans for Entity Classes āļāļ” Add All >> āđāļĨāļ§āļ„āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ Include
Referenced Class āđ„āļ§ïœ‹ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next
45
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Beans For Entity Classes
4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ sb āđāļĨāļ°āđ€āļĨāļ·āļ­āļ local āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļĨāļ§āļāļ” Finish
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Bean
46
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ” Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Employees, Departments āđāļĨāļ° Session Bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­ AbstractFacade,
EmployeesFacade, EmployeesFacadeLocal āđ‚āļ”āļĒāđ€āļĄāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āđāļĨāļ§
āļˆāļ°āļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ EmployeeWS āļ—āļĩāđˆāļ–āļđāļāļŠāļĢāļēāļ‡āļ‚āļķāđ‰āļ™
āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service Methods: findEmployeeDetails
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Web Services Method āļ—āļĩāđˆāļŠāļ·āđˆāļ­ findEmployeeDetails āđƒāļ™ Session Bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­
EmployeesFacade.java āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļˆāļēāļāđāļšāļšāļïœƒāļāļŦāļąāļ” Enterprise Java Bean āđ‚āļ”āļĒ Services āļ™āļĩāđ‰āļˆāļ°āļ„āļ·āļ™āļ„āļē
first_name, last_name āđāļĨāļ° department_name āļ‚āļ­āļ‡ employee āđ‚āļ”āļĒāļāļēāļĢāļ„āļ™āļŦāļēāļˆāļēāļ employee_id
āļ—āļĩāđˆāļ›ïœ†āļ­āļ™āđ€āļ‚āļēāļĄāļē āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ EmployeesFacade.java āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Insert Codeâ€Ķ > Add Business
Methodâ€Ķāļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
47
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļīāđˆāļĄāđ€āļĄāļ˜āļ­āļ”āđƒāļ™ Session Bean
2. āđ€āļžāļīāđˆāļĄ source code āđ‚āļ”āļĒāđ€āļžāļīāđˆāļĄāļ„āđāļēāļŠāļąāđˆāļ‡ annotation āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļāļēāļĻāđƒāļŦ session bean āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™ Web Service
āđāļĨāļ°āđ€āļĄāļ˜āļ­āļ” findEmployeeDetails āđ€āļ›ïœ’āļ™ Web Services Method āđ‚āļ”āļĒāļĄāļĩāļ„āđāļēāļŠāļąāđˆāļ‡āļ”āļąāļ‡āļ™āļĩāđ‰
@WebService
@Stateless
public class EmployeesFacade extends AbstractFacade<Employees> implements
EmployeesFacadeLocal {
@PersistenceContext(unitName = "EmployeeWSPU")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
48
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
}
public EmployeesFacade() {
super(Employees.class);
}
@WebMethod
public List<String> findEmployeeDetails(int employee_id) {
ArrayList<String> result = new ArrayList<String>();
Employees employee = em.find(Employees.class, employee_id);
result.add("First name: " + employee.getFirstName());
result.add("Last name: " + employee.getLastName());
Departments department = employee.getDepartmentId();
result.add("Department name: " + department.getDepartmentName());
return result;
}
}
2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Fix Imports āļāļ” OK āđāļĨāļ§āļāļ”āļ›āļļāļĄ Save
3. āļ—āđāļēāļāļēāļĢ Clean and Build āđāļĨāļ° Deploy Project
4. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ EmployeeFacade āđƒāļ™ Web Services āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Test Web Service
5. āļāļ” WSDL File āđƒāļ™āļŦāļ™ïœ‹āļē Web Browser āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢ copy URL āļ‚āļ­āļ‡ WSDL File āđ„āļ§ïœ‹ āđ€āļŠïœŠāļ™
http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL
49
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Web Application āļšāļ™ Apache Tomcat āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļ—āļĩāđˆāļŠāļ·āđˆāļ­
findEmployeeDetails āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project..
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web Application
āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ EmployeeWSClient āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ Apache Tomcat
7.0.14.0 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 āđāļĨāļ§āļāļ” Finish
4. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWSClient āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other..
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web Services āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Web
Service Client āđāļĨāļ§āļāļ” Next
6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client āđ€āļĨāļ·āļ­āļ WSDL URL: āđāļĨāļ°āđƒāļŠïœŠāļ„āļē
http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL
7. āļāļ” Finish āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ Web Service Reference āđ‚āļ”āļĒāļĄāļĩ Service āļŠāļ·āđˆāļ­ EmployeesFacade
8. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWSClient āđāļĨāļ§āđ€āļĨāļ·āļ­āļ New > Servlet..
9. āļāđāļēāļŦāļ™āļ” Servlet Name: āđ€āļ›ïœ’āļ™ EmployeeServlet āđƒāļŠïœŠāđƒāļ™ Package: servlets āļāļ” Next
10. āļāđāļēāļŦāļ™āļ” URL Pattern(s): āđ€āļ›ïœ’āļ™ /findEmployee āđāļĨāļ§āļāļ” Finish
11. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļĨāļēāļāđ‚āļŦāļ™āļ” findEmployeeDetails āļĨāļ‡āđƒāļ™āđ„āļŸāļĨ EmployeeServlet.java āļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡
Editor āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļžāļīāđˆāļĄ source code āđƒāļŦāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđƒāļŦāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ source code āđƒāļ™āļŠïœŠāļ§āļ™āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web
Service āļ”āļąāļ‡āļ™āļĩāđ‰
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String id = request.getParameter("id");
int employee_id = Integer.parseInt(id);
List<String> result = findEmployeeDetails(employee_id);
50
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
for (String s : result) {
out.print(s + "<BR>");
}
} finally {
out.close();
}
}
private static java.util.List<java.lang.String>
findEmployeeDetails(int arg0) {
sb.EmployeesFacadeService service = new
sb.EmployeesFacadeService();
sb.EmployeesFacade port = service.getEmployeesFacadePort();
return port.findEmployeeDetails(arg0);
}
12. āļāļ”āļ›āļļāļĄ Save
āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļ—āđāļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ EmployeeWSClient
2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ EmployeeServlet āđ‚āļ”āļĒāđƒāļŦāđƒāļŠïœŠāļ„āļēāļ‚āļ­āļ‡ URI āđ€āļ›ïœ’āļ™ /findEmployee?id=100 āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ
4 āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
51
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļē id
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡ employee id=100
3. āļ—āļ”āļĨāļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™
http://localhost:8084/EmployeeWSClient/findEmployee?id=101 āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
52
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡ employee id=101
4. āļ­āļēāļˆāļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ findEmployee.html āđ€āļžāļ·āđˆāļ­āļĢāļąāļšāļ„āļē employee id āļˆāļēāļāļœāļđāđƒāļŠïœ‹ āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ”āđƒāļŦ
findEmployee.html āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ EmployeeServlet āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ­āļĩāļāļ—āļĩ
53
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 7: RESTful Web Services
āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ RESTful Web Services āđ‚āļ”āļĒāđƒāļŠïœ‹āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-RS
āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Web Services āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļˆāļēāļāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āļœïœŠāļēāļ™āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ Java Persistence API (JPA)
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļŠāļĢāļēāļ‡ Web Application Project
2. āļžāļąāļ’āļ™āļē Entity Class
3. āļžāļąāļ’āļ™āļē RESTful Web Service āļˆāļēāļ Entity Class
4. āļ—āļ”āļŠāļ­āļš RESTful Web Service āļˆāļēāļ Entity Class
1. āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project
āđ€āļĢāļēāļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĄ Web Application āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Project
āđƒāļŦāļĄïœŠāļ‚āļķāđ‰āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Project āđ€āļ›ïœ’āļ™ Web
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ RestfulWS āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ Directory
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āļāļ” Next
4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āđāļĨāļ° Java EE 6 Web āđāļĨāļ§āļāļ” Finish
2. āļāļēāļĢāļžāļąāļ’āļ™āļē Entity Class
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Employees.java
āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļ›ïœ’āļ™āļ­āļ­āļ›āđ€āļˆāđ‡āļ„āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļšāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđƒāļ™ Oracle āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity
Classes from Database āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: āđ€āļ›ïœ’āļ™ jdbc/test
54
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļ” OK āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāđ€āļ‰āļžāļēāļ° books āđāļĨāļ§āļāļ” Add >
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āđāļĨāļ°āļāļ” Finish
3. āļāļēāļĢāļžāļąāļ’āļ™āļē Restful Web Service āļˆāļēāļ Entity Class
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Restful Web Services āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđ‚āļ”āļĒāļœïœŠāļēāļ™ Entity Class
āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āđ„āļ” āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web Services āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ RESTful
Web Services from Entity Classes āđāļĨāļ§āļāļ” Next
4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New RESTful Web Services from Entity Class āļāļ” Add All >>
āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļĨāļ§āļāļ” Next āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Finish
āļĢāļđāļ›āļ—āļĩāđˆ 1 āļāļēāļĢāđ€āļĨāļ·āļ­āļ Entity Class āļŠāđāļēāļŦāļĢāļąāļš RESTful Web Service
55
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļĢāļ—āļ”āļŠāļ­āļš RESTful Web Service āļˆāļēāļ Entity Class
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš RESTful Web Services āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Test Restful Web
Services
2. āđ‚āļ›āļĢāđāļāļĢāļĄ Browser āļˆāļ°āđāļŠāļ”āļ‡ uri āļ‚āļ­āļ‡ RESTful Web Services āđƒāļŦāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ‚āļŦāļ™āļ” entity.books
āđāļĨāļ°āļ„āļĨāļīāđŠāļāļ›āļļāļĄ Test āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 2
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđ
56
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
3. āđƒāļŦāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ {id} āđāļĨāļ°āļ—āļ”āļĨāļ­āļ‡āļ›ïœ†āļ­āļ™āļ‚āļ­āļĄāļđāļĨ id āđ€āļ›ïœ’āļ™ 111 āđāļĨāļ§āļāļ”āļ›āļļāļĄ Test āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ•āļąāļ§āļ­āļĒāļēāļ‡āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļĩāđˆāļĄāļĩ id (isbn) āđ€āļ—āļēāļāļąāļš 111
4. āļ—āļ”āļĨāļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™ methodāđ€āļ›ïœ’āļ™ DELETE āđ€āļžāļ·āđˆāļ­āļ—āļ”āļĨāļ­āļ‡āļ—āđāļēāļāļēāļĢāļĨāļšāļ‚āļ­āļĄāļđāļĨāļ­āļ­āļāļˆāļēāļāļ•āļēāļĢāļēāļ‡ books
57
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 8: Google Map Web Services
āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļ•āļąāļ§āļ­āļĒāļēāļ‡āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services āđāļĨāļ°āđƒāļŠïœ‹ Web Application
āđ€āļĢāļĩāļĒāļāđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāđ€āļāđ‡āļšāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ
2. āļŠāļĢāļēāļ‡ Enterprise Application Project
3. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class
4. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean)
5. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java
6. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java
1. āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđāļĨāļ°āđ€āļ•āļĢāļĩāļĒāļĄāļ‚āļ­āļĄāļđāļĨāđ€āļžāļ·āđˆāļ­āđƒāļŠïœ‹āđƒāļ™āđāļšāļšāļïœƒāļāļŦāļąāļ” āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans
āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ bkk_hospital āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ Oracle āđ‚āļ”āļĒāđƒāļŦāļ—āđāļēāļāļēāļĢāļĢāļąāļ™āđ„āļŸāļĨ 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;
58
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital',
'2 Prannok road Siriraj Bangkoknoi', 'Bangkok', '10700');
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital',
'51/3 Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900');
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital',
'Phaya Thai Road, Phaya Thai', 'Bangkok', '10400');
2. āļāļēāļĢāļŠāļĢāļēāļ‡ Enterprise Application Project
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Project āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ Enterprise Application āđ‚āļ”āļĒāļĄāļĩ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ BkkHospital
āđ€āļžāļ·āđˆāļ­āļ—āđāļē ORM (Obeject Relational Mapping) āļāļąāļš table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ bkk_hospital āđāļĨāļ°āļĄāļĩāđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet
āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ·āđˆāļ­āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđƒāļŦāļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļ āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļˆāļēāļāđƒāļ™
Google Map āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Projects āđ€āļ›ïœ’āļ™ Enterprise
Application Project āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name: āđ€āļ›ïœ’āļ™ BkkHospitalGoogleMap āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location: āđ€āļ›ïœ’āļ™ Directory
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āđāļĨāļ§āļāļ” Finish
3. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļˆāļēāļ table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ bkk_hospital āļ‹āļķāđˆāļ‡āļĄāļĩāļāļēāļĢāļŠāļĢāļēāļ‡āļĄāļēāļïœŠāļ­āļ™āđāļĨāļ§
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New >
Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity
Classes from Database āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: jdbc/test
4. āđ€āļĨāļ·āļ­āļ bkk_hospital āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Add āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāđƒāļŦāđ€āļ›ïœ’āļ™ Selected Tables: āđāļĨāļ§āļāļ” Next
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āđāļĨāļ§āļāļ” Finish
59
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean)
āđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade āļˆāļ°āđ€āļ›ïœ’āļ™ Session Bean āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļïœ‹āđ„āļ‚
āļĨāļš āđāļĨāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ table āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļš Entity Class āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-ejb āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New
> Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Session
Beans for Entity Classes āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Session Beans for Entity Classes āļāļ” Add All > > āđāļĨāļ§āļāļ” Next
4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ sb āļŠïœŠāļ§āļ™āļ„āļēāļ­āļ·āđˆāļ™āđ† āđ€āļ›ïœ’āļ™āļ•āļēāļĄāļ—āļĩāđˆāļ•āļąāđ‰āļ‡āđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Finish
5. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java
āđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļē Servlet āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ·āđˆāļ­āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļš
āļ­āļĒāļđāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļˆāļ°āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ‚āļ­āļ‡ radio āđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļ āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰
āļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļĩāđˆāļŠāļ·āđˆāļ­ DisplayLocation.java āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđ‚āļ”āļĒāđƒāļŠïœ‹ Google
Map Web Services
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Java Servlet āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New
> Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Servlet āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Class Name: āđ€āļ›ïœ’āļ™ HospitalSelector āđāļĨāļ° Package āđ€āļ›ïœ’āļ™ controller āđāļĨāļ§āļāļ” Finish
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļŦāļĨāļš Comment āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒ
/* â€Ķ */ āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally
5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Code āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļ Call Enterprise Bean
āđāļĨāļ§āđ€āļĨāļ·āļ­āļ BkkHospitalFacade āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ BkkHospitalGoogleMap-ejb āđāļĨāļ§āļāļ” OK
6. āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ source code āđƒāļŦāđ€āļ›ïœ’āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
protected void processRequest(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
60
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
try {
List<BkkHospital> hospitals = bkkHospitalFacade.findAll();
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><br>");
}
out.println("<input type='submit' value='Show Location' />");
out.println("</form>");
} finally {
out.close();
}
7. āļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Fix Imports
8. Run āđ‚āļ›āļĢāđāļāļĢāļĄ āđāļĨāļ°āļžāļīāļĄāļžïœŽ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™
http://localhost:8080/BkkHospitalGoogleMap-war/HospitalSelector āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ
1
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āđ‡āļšāđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ
61
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java
āđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ‚āļ­āļ‡ Google Map
āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āđāļœāļ™āļ—āļĩāđˆāļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāđ€āļĨāļ·āļ­āļāļˆāļēāļ HospitalSelector.java āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New
> Other
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New FileāđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Servlet āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Class Name: āđ€āļ›ïœ’āļ™ DisplayLocation āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Package āđ€āļ›ïœ’āļ™ controller āđāļĨāļ§āļāļ” Finish
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest() āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Insert Code.. > Call
Enterprise Bean ...āđāļĨāļ§āđ€āļĨāļ·āļ­āļ BkkHospitalFacade āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ BkkHospitalGoogleMap-ejb
5. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Services āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Web Services > Google > Map Service
6. āļĨāļēāļāđ€āļ‹āļ­āļĢāļ§āļīāļŠ getGoogleMap āļĄāļēāđƒāļŠïœŠāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ—āļĩāđˆāđāļŠāļ”āļ‡ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ
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();
try {
Object id = (Object) new
Integer(request.getParameter("hospital_id"));
BkkHospital hospital = bkkHospitalFacade.find(id);
String address = hospital.getName() + ", " +
hospital.getCity();
java.lang.Integer zoom = 15;
String iframe = "false";
out.println("<h1>Google Map for " + hospital.getName() +
"</h1>");
RestResponse result = GoogleMapService.getGoogleMap(address,
zoom, iframe);
out.println(result.getDataAsString());
} finally {
out.close();
}
62
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ‚āļ­āļ‡ Google Map āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢāļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āļ—āļĩāđˆ url āļ—āļĩāđˆāļŠāļ·āđˆāļ­
http://code.google.com/apis/maps/signup.html āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ”āļ„āļē My web site URL āđ€āļ›ïœ’āļ™
http://localhost:8080 āđāļĨāļ§āļāļ”āļ›āļļāļĄ Generate API Key
8. āļ—āđāļēāļāļēāļĢāļāđ‡āļ­āļšāļ›ïœ‚āļ„āļē API Key āļ—āļĩāđˆāđ„āļ”āđ„āļ›āđƒāļŠïœŠāđƒāļ™āđ„āļžāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ googlemapservices.properties āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ”
BkkHospitalGoogleMap-war > Source Packages > org.netbeans.saas.google āļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđ€āļŠïœŠāļ™
api_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-
All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg
āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ BkkHospitalGoogleMap āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Build āđāļĨāļ° Deploy
2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ BkkHospitalGoogleMap āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Run
3. āļžāļīāļĄāļžïœŽ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™ http://localhost:8080/BkkHospitalGoogleMap-
war/HospitalSelector āđāļĨāļ°āđƒāļŦāđ€āļĨāļ·āļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđ€āļžāļ·āđˆāļ­āļ”āļđāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļˆāļēāļāđƒāļ™ Google Map āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
63
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āļœāļĨāļĨāļąāļžāļ˜ïœŽāđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļˆāļēāļāđƒāļ™ Google Map
64
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 9: āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āđ‡āļšāđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļ­āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ
MongoDB
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠïœ‹ Java Servlet āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš
āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļ›ïœ’āļ™ NoSQL āļ­āļĒāļēāļ‡ MongoDB āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļāđ‡āļšāļ‚āļ­āļĄāļđāļĨāđāļšāļš Document āđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ JSON
āđāļĨāļ°āļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļšāļ‚āļ­āļĄāļđāļĨāļ‚āļ™āļēāļ”āđƒāļŦāļïœŠāđ„āļ”
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļ•āļīāļ”āļ•āļąāđ‰āļ‡ MongoDB
2. āļ—āļ”āļĨāļ­āļ‡āđƒāļŠïœ‹ MongoDB
3. āđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MongoDB
1. āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ MongoDB
āđ‚āļ›āļĢāđāļāļĢāļĄāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđƒāļ™āļĢāļ°āļšāļšāļ›āļŽāļīāļšāļąāļ•āļīāļāļēāļĢāļ—āļĩāđˆāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļ—āļąāđ‰āļ‡ Windows, Mac
OS āļŦāļĢāļ·āļ­ Linux āļŠāđāļēāļŦāļĢāļąāļšāļšāļ™āļĢāļ°āļšāļšāļ›āļŽāļīāļšāļąāļ•āļīāļāļēāļĢ Windows āļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āđ„āļŸāļĨ Binary
āļˆāļēāļāđ€āļ§āđ‡āļšāđ„āļ‹āļ• http://www.mongodb.org/downloads āļ‹āļķāđˆāļ‡āđ€āļĄāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāļ”āļąāļ‡āļāļĨāļēāļ§āđāļĨāļ§ āđƒāļŦāļ—āđāļēāļāļēāļĢ unzip
āđ€āļāđ‡āļšāđ„āļŸāļĨāđ„āļ§ïœ‹āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āļĄāļĩāđ„āļŸāļĨāļ•āļēāļ‡āđ† āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 1
65
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđ„āļŸāļĨāđ„āļšāļ™āļēāļĢāļĩāđˆāļ•āļēāļ‡āđ† āļ‚āļ­āļ‡ MongoDB
āļ‹āļķāđˆāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāđāļēāļ„āļąāļāļāđ‡āļ„āļ·āļ­
â€Ē mongod.exe āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ Database Server
â€Ē mongo.exe āļ—āļĩāđˆāđ€āļ›ïœ’āļ™āļŦāļ™ïœ‹āļēāļˆāļ­āļ‚āļ­āļ‡ admin
āđ‚āļ”āļĒ Default MongoDB āļˆāļ°āđ€āļāđ‡āļšāļ‚āļ­āļĄāļđāļĨāđ„āļ§ïœ‹āļ—āļĩāđˆāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ datadb āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āđ„āļ›āļŠāļĢāļēāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ”āļąāļ‡āļāļĨāļēāļ§
āļ āļēāļĒāđƒāļ• Drive C
2. āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđƒāļŠïœ‹ MongoDB
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ—āļ”āļĨāļ­āļ‡āļāļēāļĢāđƒāļŠïœ‹āļ‡āļēāļ™ MongoDB āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›ïœāļ”āđ‚āļ›āļĢāđāļāļĢāļĄ Mongo.exe āļ‹āļķāđˆāļ‡āļāđ‡āļˆāļ°āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ
command shell āļ‚āļ­āļ‡ administrator āđāļĨāļ°āđ‚āļ”āļĒ Default āļāđ‡āļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŠïœ‹āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ test āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°
āđāļŠāļ”āļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđƒāļŠïœ‹āļ­āļĒāļđāđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļžāļīāļĄāļžïœŽāļ„āđāļēāļŠāļąāđˆāļ‡
> db
66
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļ„āđāļēāļŠāļąāđˆāļ‡āļ—āļĩāđˆāļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ·āđˆāļ­āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ (database) āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ„āļ·āļ­
>show dbs
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđƒāļŦāļĄïœŠāļ—āļĩāđˆāļŠāļ·āđˆāļ­āļ§ïœŠāļē mydatabase āđ‚āļ”āļĒāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡
>use mydatabase
āļ„āđāļēāļŠāļąāđˆāļ‡āļ—āļĩāđˆāļˆāļ°āđāļŠāļ”āļ‡ Tables āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ„āļ·āļ­
>show collections
āđāļĨāļ°āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ„āđāļēāļŠāļąāđˆāļ‡āđƒāļ™āļāļēāļĢāļŠïœŠāļ§āļĒāđ€āļŦāļĨāļ·āļ­āđ‚āļ”āļĒ
>help
āļŠāđāļēāļŦāļĢāļąāļšāđƒāļ™āļ•āļąāļ§āļ­āļĒāļēāļ‡āļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļ—āđāļēāļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­ āļŠāļ­āļ‡āđ€āļĨāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
> db.books.insert({isbn:"555123", author:"thanachart", title:"Introduction to MongoDB",
price:1200})
āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāđ„āļ”āđ‚āļ”āļĒāļ„āđāļēāļŠāļąāđˆāļ‡āļ•āļ­āđ„āļ›āļ™āļĩāđ‰
> new_book = {isbn:"555124", author:"James Gosling", title: "Java SE", price: 1400}
> db.books.insert(new_book)
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āļˆāļēāļāļ„āđāļēāļŠāļąāđˆāļ‡
> db.books.find()
āļ‹āļķāđˆāļ‡āļāđ‡āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āļ™āļĩāđ‰
{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart",
"title" : "Introduction to MongoDB", "price" : 1200 }
{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "isbn" : "555124", "author" : "James Gosling",
"title" : "Java SE", "price" : 1400 }
67
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰ id āļˆāļ°āđ€āļ›ïœ’āļ™ index āđƒāļ™āļāļēāļĢāļĢāļ°āļšāļļāļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āļ‚āļ­āļĄāļđāļĨ āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ„āļ™āļŦāļēāļ‚āļ­āļĄāļđāļĨāļŠāđāļēāļŦāļĢāļąāļš
āļĢāļēāļĒāļāļēāļĢāđƒāļ”āđ† āđ„āļ”āđ€āļŠïœŠāļ™ āļāļēāļĢāļ„āļ™āļŦāļēāļ•āļēāļĄāļŠāļ·āđˆāļ­āļœāļđāđāļ•āļ‡
> db.books.find({author:"thanachart"})
āļŦāļĢāļ·āļ­āļ­āļēāļˆāļ•āļ­āļ‡āļāļēāļĢāļ„āļ™āļŠāļ·āđˆāļ­āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļĩāđˆāļĄāļĩāļ„āđāļēāļ§ïœŠāļē Mongo
> db.books.find({title:/Mongo/})
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ° update āļ‚āļ­āļĄāļđāļĨ āđ€āļŠïœŠāļ™āļ•āļ­āļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĢāļēāļ„āļēāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļĩāđˆāđāļ•āļ‡āđ‚āļ”āļĒ thanachart āđ€āļ›ïœ’āļ™ 1300
āđ‚āļ”āļĒāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡
> db.books.update({author:"thanachart"},{$set: {price:1300}})
āđ€āļĢāļēāļˆāļ°āļĨāļ­āļ‡āļ—āđāļēāļāļēāļĢāđ€āļžāļīāđˆāļĄ comment āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āđ€āļŠïœŠāļ™āļĄāļĩāļœāļđāļ­ïœŠāļēāļ™āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Somchai āļ­āļēāļˆāļĄāļēāđƒāļŦāļ„āļ§āļēāļĄāđ€āļŦāđ‡āļ™āļ§ïœŠāļēāļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ‚āļ­āļ‡
James Gosling āđ€āļ›ïœ’āļ™ â€œgood reading book” āđ‚āļ”āļĒāđ€āļĢāļēāļ­āļēāļˆāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡āļ”āļąāļ‡āļ™āļĩāđ‰
> new_comment = {reader:"Somchai", date: new Date(), text: "good reading book"}
> db.books.update({author:/James/},{$push: {comment:new_comment}})
āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ”āļ‚āļ­āļĄāļđāļĨāļ™āļĩāđ‰āđƒāļŦāļĄïœŠāđ€āļ›ïœ’āļ™
{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart",
"title" : "Introduction to MongoDB", "price" : 1300 }
{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "author" : "James Gosling", "comment" : [ {
"reader" : "Somchai", "date" : ISODate("2013-02-16T16:45:07.309Z"), "text" : "good reading book" } ],
"isbn" : "555124", "price" : 1400, "title" : "Java SE" }
3. āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MongoDB
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB āđ„āļ”āļŦāļĨāļēāļĒāđāļšāļš āđāļ•āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āđƒāļŠïœ‹
MongoDB Driver āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļˆāļ°āļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āļĄāļēāđ„āļ”āļˆāļēāļ https://github.com/mongodb/mongo-java-
driver/downloads
68
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āļŠāļēāļ˜āļīāļ•āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāļĨāļ‡āđƒāļ™ MongoDB āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āđƒāļŦāļĄāļĩ āđ‚āļ›āļĢāđāļāļĢāļĄ addBook.html āđāļĨāļ°
thankyou.html āļ”āļąāļ‡ Listing āļ—āļĩāđˆ 1 āđāļĨāļ° 2 āđāļĨāļ°āļ—āđāļēāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ WebBaseDB āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Next
4. āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ Apache Tomcat āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 Web āđāļĨāļ§āļāļ”
Finish
5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > HTML āļāļģāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™
addBook āđāļĨāļ§āļāļ” Finish
6. āđ€āļ‚āļĩāļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ addBook.html āļ•āļēāļĄ Listing āļ—āļĩāđˆ 1
Listing āļ—āļĩāđˆ 1 āđ‚āļ›āļĢāđāļāļĢāļĄ addBook.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Add a new book</title>
</head>
<body><h1>Add a new book</h1><P>
<form action="MongoDBServlet" method="POST">
ISBN : <input type="text" name="isbn" value="" size="15"/> <BR>
Title : <input type="text" name="title" value="" size="50"/> <BR>
Author : <input type="text" name="author" value="" size="50"/> <BR>
Price : <input type="text" name="price" value="" size="10"/> <BR>
<input type="submit" value="Add" />
</form>
</body>
</html>
7. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > HTML āļāļģāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™
thankyou āđāļĨāļ§āļāļ” Finish
8. āđ€āļ‚āļĩāļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ thankyou.html āļ•āļēāļĄ Listing āļ—āļĩāđˆ 2
Listing āļ—āļĩāđˆ 2 āđ‚āļ›āļĢāđāļāļĢāļĄ thankyou.html
<html>
<head>
<title>Thank you</title>
</head>
<body>
<H1>Thank you for inserting data </H1>
</body>
69
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
</html>
9. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New → Servlet
āļāļģāļŦāļ™āļ” Java Package āđ€āļ›ïœ’āļ™ controller, Class Name āđ€āļ›ïœ’āļ™ MongoDBServlet āđāļĨāļ§āļāļ” Finish
10. copy āđ„āļŸāļĨ mongo-2.10.1.jar āđ„āļ›āđ„āļ§ïœ‹āļ—āļĩāđˆāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ āđ‚āļ”āļĒāđƒāļŦ Copy āđ„āļ›āļ§āļēāļ‡āļ—āļĩāđˆ directory /lib āļ‚āļ­āļ‡ Apache
Tomcat (āļ‹āļķāđˆāļ‡ Default āļ­āļĒāļđāļ—āļĩāđˆ C:Program FilesApache Software FoundationTomcat 6.0lib)
11. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ editor āđƒāļŦāđāļïœ‹āđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ MongoDBServlet.java āđƒāļŦāđ€āļ›ïœ’āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ—āļĩāđˆ 3
Listing āļ—āļĩāđˆ 3 āđ‚āļ›āļĢāđāļāļĢāļĄ MongoDBServlet.java
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.UnknownHostException;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
/**
* Servlet implementation class MongoDBServlet
*/
@WebServlet("/MongoDBServlet")
public class MongoDBServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Mongo m = null;
public void init() {
70
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
try {
m = new Mongo( "localhost" );
System.out.println("Connected");
} catch (Exception ex) {
System.out.println(ex);
}
}
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>Add a new book</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1> Add a new book </h1>");
try {
String isbn = request.getParameter("isbn");
String author = request.getParameter("author");
String title = request.getParameter("title");
String priceStr = request.getParameter("price");
float price = Float.parseFloat(priceStr);
DB db = m.getDB( "test" );
BasicDBObject book = new BasicDBObject();
book.put("isbn", isbn);
book.put("author", author);
book.put("title", title);
book.put("price", price);
DBCollection coll = db.getCollection("books");
coll.insert(book);
RequestDispatcher obj =
request.getRequestDispatcher("thankyou.html");
obj.forward(request, response);
} catch (UnknownHostException ex) {
out.println("Error " + ex);
return;
}
out.println("</body>");
71
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
processRequest(request, response);
}
}
4 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB
2. āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āļ‡āļēāļ™āļŦāļ™ïœ‹āļē addBook.html āđāļĨāļ§āļ—āļ”āļŠāļ­āļšāļāļĢāļ­āļāļ‚āļ­āļĄāļđāļĨ
3. āđ„āļ›āļ—āļĩāđˆāđ‚āļ›āļĢāđāļāļĢāļĄ admin āļ‚āļ­āļ‡ MongoDB āđāļĨāļ§āđ€āļĢāļĩāļĒāļāļ„āđāļēāļŠāļąāđˆāļ‡ db.books.find() āļˆāļ°āđ€āļŦāđ‡āļ™āļ‚āļ­āļĄāļđāļĨāđƒāļŦāļĄïœŠāļ—āļĩāđˆāļ›ïœ†āļ­āļ™āđ€āļ‚āļēāļĄāļē
72
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 10: Developing a Simple Synchronous
BPEL Program
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļĨāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— BPEL āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™
Business Process āđāļšāļš Synchronous āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļāļēāļĢāđƒāļŠïœ‹ NetBeans āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™āļŸāļĢāļĩāđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— IDE
āđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āđāļĨāļ°āđ„āļŸāļĨ BPEL āđāļĨāļ°āđƒāļŠïœ‹ GlassFish āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™ Open Source
Application Server āļ—āļĩāđˆāļĄāļēāļžāļĢāļ­āļĄāļāļąāļš Open ESB āđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ BPEL Process
āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āđƒāļ™āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰ āđ€āļ›ïœ’āļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢāļ„āļąāļ”āļĨāļ­āļāļ‚āļ­āļ„āļ§āļēāļĄ āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰
1. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ HelloBPEL
2. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL
3. āļžāļąāļ’āļ™āļē BPEL Process
4. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
1. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ HelloBPEL
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ
āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module
āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ HelloBPEL āđāļĨāļ§āļāļ” Finish
2. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” HelloBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files
āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > WSDL Document
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL DocumentāļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ HelloSample āđ€āļĨāļ·āļ­āļ WSDL Types:
āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Type: āđ€āļ›ïœ’āļ™ RPC Literal āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ”
Next āđ€āļžāļ·āđˆāļ­āđ„āļ›āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›
73
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ WSDL Document āđ€āļ›ïœ’āļ™āđāļšāļš SOAP
3. āđƒāļ™āļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ inputType (āđ€āļĄāļ·āđˆāļ­āđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨāđ€āļŠāļĢāđ‡āļˆāđāļĨāļ§ āļ•āļ­āļ‡āļāļ”
Enter āļŦāļ™āļķāđˆāļ‡āļ„āļĢāļąāđ‰āļ‡āđ€āļŠāļĄāļ­) āđāļĨāļ°āļŠïœŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ resultType
āļ‹āļķāđˆāļ‡āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
74
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļąāļš WSDL Document
4. āļāļ” Next > āđāļĨāļ§āļāļ” Finish āļˆāļ°āđ„āļ”āđ„āļŸāļĨ HelloSample.wsdl āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3
75
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ HelloSample.wsdl
3. āļāļēāļĢāļžāļąāļ’āļ™āļē BPEL Process
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1) āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link
āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ helloBPEL.bpel āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ HelloSample.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project
āļĄāļēāđ„āļ§ïœ‹āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļīāđˆāļĄ PartnerLink āđ€āļ‚āļēāđ„āļ›āđƒāļ™ helloBPEL.bpel
76
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
2) āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive
1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļ­āļ„āļ­āļ™ Edit
āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļšāļ™āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ
Partner Link: āđ€āļ›ïœ’āļ™ PartnerLink1
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ inputVar āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 5
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive
5. āļāļ” OK āļˆāļ°āđ„āļ” HelloBPEL.bpel āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 6
77
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāļĢāļąāļšāļ„āļēāđ€āļ‚āļēāļĄāļēāļˆāļēāļ PartnerLink1
3) āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply
1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Process End
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ„āļĨāļīāđŠāļāđ„āļ­āļ„āļ­āļ™ Edit āļ‚āļ­āļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ
Reply1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner
Link: āđ€āļ›ïœ’āļ™ PartnerLink1
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ outputVar āđāļĨāļ§āļāļ” OK
4) āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign
1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđ€āļžāļ·āđˆāļ­āđ„āļ›āļĒāļąāļ‡āđāļ—āļ› Mapper āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ”
inputType āļ‚āļ­āļ‡ inputVar āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” resultType āļ‚āļ­āļ‡ outputVar
āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē (āđ€āļ›ïœ’āļ™āļāļēāļĢāļāđ‡āļ­āļ›āļ›ïœ‚āļ„āļēāļˆāļēāļāļ­āļīāļ™āļžāļļāļ•āđ„āļ›āļĒāļąāļ‡āđ€āļ­āļēāļ—āļžāļļāļ•) āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 7
78
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāļ‚āļ­āļ‡ inputType āđ„āļ›āļĒāļąāļ‡ resultType
3. āđ€āļĄāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļāļĨāļąāļšāļĄāļēāļ—āļĩāđˆāđāļ—āļ› Design āļˆāļ°āđ„āļ” BPEL Process āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡ helloBPEL.pbel
4. āļāļ”āļ›āļļāļĄ Save
79
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™ SampleBPEL āļšāļ™ BPEL Engine
āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File => New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ HelloApplication āđāļĨāļ§āļāļ” Finish
4. āđƒāļŦāļĨāļēāļāđ‚āļ›āļĢāđ€āļˆïœŒāļ„ HelloBPEL āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđƒāļŠïœŠāđƒāļ™ JBI Modules āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9
āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡āđ€āļžāļīāđˆāļĄ JBI Modules āđƒāļ™ HelloApplication
5. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ HelloApplication āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Clean and Build
āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10
āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆïœŒāļ„ HelloApplication
80
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ HelloApplication āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Deploy
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” HelloApplication > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ HelloSample.wsdl āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ HelloBPEL āđāļĨāļ§āļāļ” Next
5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ HelloSampleOperation āđāļĨāļ§āļāļ” Finish
6. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļŠïœŠāļ§āļ™ inputType āļ”āļąāļ‡āļ™āļĩāđ‰
<inputType>Hello Thana</inputType>
7. āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run
8. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™ Listing āļ—āļĩāđˆ 1 [āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļ—āļĩāđˆāđ€āļ›ïœ’āļ™ Failed
āđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļĄāļĩāļāļēāļĢāļ™āđāļēāļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āđ„āļ›āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļāļąāļšāđ„āļŸāļĨ Output.xml āļ‹āļķāđˆāļ‡āļ–āļēāđ„āļĄïœŠāļ•āļĢāļ‡āļāļąāļ™
āļāđ‡āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāđ€āļ›ïœ’āļ™ Failed āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļāļēāļĢāļĢāļąāļ™āļ„āļĢāļąāđ‰āļ‡āđāļĢāļ āļ‹āļķāđˆāļ‡āļĒāļąāļ‡āđ„āļĄïœŠāļĄāļĩāļ‚āļ­āļĄāļđāļĨāđƒāļ™ Output.xml āđƒāļŦāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļš
āļˆāļķāļ‡āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāđ€āļ›ïœ’āļ™ Failed āđāļ•āļ–āļēāđ€āļĢāļēāđ€āļĨāļ·āļ­āļ Run āđƒāļ™āļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ› āđ‚āļ”āļĒāļ—āļĩāđˆāđ„āļĄïœŠāđ„āļ”āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āļēāđƒāļ™ Input.xml
āļˆāļ°āļ—āđāļēāđƒāļŦāđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ•āļĢāļ‡āļāļąāļšāļ‚āļ­āļĄāļđāļĨāđƒāļ™ Output.xml āļāđ‡āļˆāļ°āđ„āļĄïœŠāđāļŠāļ”āļ‡āļœāļĨāđ€āļ›ïœ’āļ™ Failed āļ­āļĩāļāļ•āļ­āđ„āļ›
āļ”āļąāļ‡āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 11
āļĢāļđāļ›āļ—āļĩāđˆ 11 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™ TestCase1
81
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Listing āļ—āļĩāđˆ 1 āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āđ„āļŸāļĨ Output.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<m:HelloSampleOperationResponse
xmlns:m="http://j2ee.netbeans.org/wsdl/HelloBPEL/HelloSample">
<resultType>Hello Thana</resultType>
</m:HelloSampleOperationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
82
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 11: BPEL for Writing to File
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ·āđˆāļ­āđ€āļ‚āļĩāļĒāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ„āļ”āļĢāļąāļšāļœāļđāđƒāļŠïœ‹āļ‡āļēāļ™āļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ
BPEL
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ FileBPEL
2. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš SOAPBinding
3. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš FileBinding
4. āļžāļąāļ’āļ™āļē BPEL Process
5. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
6. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase
7. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ Web Application
1. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ FileBPEL
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ
āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module
āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ FileBPEL āđāļĨāļ§āļāļ” Finish
2. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš SOAPBinding
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš SOAPBinding āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process
āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™ āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āđ€āļĨāļ·āļ­āļ New > WSDL Document
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ DataIO āļāđāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›ïœ’āļ™
Concrete WSDL Document āđāļĨāļ°āļāđāļēāļŦāļ™āļ” Binding āđ€āļ›ïœ’āļ™ SOAP āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ RPC Literal
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļĨāļ§āļāļ” Next
83
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļē WSDL Document
3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ id āļāļ” Add āđāļĨāļ§āđ€āļžāļīāđˆāļĄ input
āļŠāđāļēāļŦāļĢāļąāļš firstName, lastName, salary (int) āđāļĨāļ°āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāđāļēāļŦāļ™āļ” Message Part
Name āđ€āļ›ïœ’āļ™ result āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish
84
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠāļ„āļē Input āđāļĨāļ° Output Messages
3. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš FileBinding
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš FileBinding āđ€āļžāļ·āđˆāļ­āđ€āļ‚āļĩāļĒāļ™āļĨāļ‡āđ„āļŸāļĨ
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āđƒāļŦāđ€āļĨāļ·āļ­āļ New > WSDL Document
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ FileResult āđƒāļŦāđ€āļĨāļ·āļ­āļ WSDL Type:
āđ€āļ›ïœ’āļ™ Concrete WSDL Document Binding āđ€āļ›ïœ’āļ™ FILE āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ Write āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next
85
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠāļ„āļēāļŠāđāļēāļŦāļĢāļąāļš New WSDL Document
3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļāđāļēāļŦāļ™āļ”āļ„āļē Path: āđ„āļ›āļ—āļĩāđˆ C:SOAoutput āđ‚āļ”āļĒāļāļ” Browse āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļ Path:
(āļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡ folder āļ™āļĩāđ‰āļ‚āļķāđ‰āļ™āļĄāļēāļïœŠāļ­āļ™) āđāļĨāļ°āđ€āļĨāļ·āļ­āļ File Exists: āđ€āļ›ïœ’āļ™ Append to Existing File
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Finish
86
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ„āļŸāļĨ
4. āļāļēāļĢāļžāļąāļ’āļ™āļē BPEL Process
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
4.1 āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link
1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ fileBPEL.bpel āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DataIO.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āđāļ—āļ›āđ€āļ—āļēāļ—āļēāļ‡āļ‹ïœ‹āļēāļĒāļĄāļ·āļ­āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design
2. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ DataIOPartnerLink
3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ FileResult.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ·āļ­āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡
design
4. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ FilePartnerLink
87
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ DataIOPartnerLink āđāļĨāļ° FilePartnerLink āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel
4.2 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive
1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ
Receive1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ
Partner Link: āđ€āļ›ïœ’āļ™ DataIOPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ inData āđāļĨāļ§āļāļ” OK
4.3 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply
1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡
design āļŦāļĨāļąāļ‡āļˆāļēāļāļ˜āļļāļĢāļāļĢāļĢāļĄ start
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner
Link: āđ€āļ›ïœ’āļ™ DataIOPartnerLink
88
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ outData āđāļĨāļ§āļāļ” OK
4.4 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļŠāđāļēāļŦāļĢāļąāļš write
āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡
design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Invoke1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke1
āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ invokeWriteToFile
āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ FilePartnerLink āđāļĨāļ° Operation: āđ€āļ›ïœ’āļ™ write
āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name:
āđ€āļ›ïœ’āļ™ inFile āđāļĨāļ§āļāļ” OK
4.5 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign
1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWriteToFile
2. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄāļđāļĨāđƒāļ™āđ‚āļŦāļ™āļ” inData
āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāļĄāļ·āļ­ āđ‚āļ”āļĒāđ€āļĨāļ·āļ­āļ String > Concat āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡
1. firstName āđ€āļ‚āļēāđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 1
2. ‘ ‘ āđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 2 (āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ›āļļāļĄ Space Bar āļšāļ™āļ„āļĩāļĒāļšāļ­āļĢāļ”)
3. lastName āđ€āļ‚āļēāđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 3
4. ‘ => ‘ āđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 4
5. salary āđ€āļ‚āļēāđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 5
6. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡ return String āđ„āļ›āļĒāļąāļ‡ part1 āđƒāļ™ inFile āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ·āļ­ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
89
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āđāļĨāļ° invokeWriteToFile
āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļˆāđāļēāļ™āļ§āļ™āđāļ–āļ§āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļĨāļēāļāđ€āļ‚āļēāđ„āļ›āļ—āļĩāđˆ āļ‚āļ­āļ‡ Concat
āļˆāđāļēāļ™āļ§āļ™āđāļ–āļ§āļāđ‡āļˆāļ°āļ–āļđāļāđ€āļžāļīāđˆāļĄāđƒāļŦāļ—āļąāļ™āļ—āļĩ
3. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWriteToFile āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āđ€āļĨāļ·āļ­āļ String > String Literal
āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļēāđ€āļ›ïœ’āļ™ Success āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļŸïœāļĨāļ”āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ string literal āļāļąāļš result āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ outData
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ invokeWriteToFile āđāļĨāļ° end
5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
90
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš
6. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPEL āđ€āļĨāļ·āļ­āļ Clean and Build
5. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļĢāļąāļ™ FileBPEL āļšāļ™ BPEL Engine āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™
JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ FileCompositeApp āđāļĨāļ§āļāļ” Finish
4. āđƒāļŦāļĨāļēāļāđ‚āļ›āļĢāđ€āļˆïœŒāļ„ FileBPEL āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđƒāļŠïœŠāđƒāļ™ JBI Modules āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design
5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ FileCompositeApp āđ€āļĨāļ·āļ­āļ Clean and Build āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9
91
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡ Service Assembly āļ‚āļ­āļ‡ FileCompositeApp
6. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase
1. āļ—āđāļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ FileCompositeApp
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” FileCompositeApp > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
4. āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļ™ FileBPEL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ DataIO.wsdl āđāļĨāļ§āļāļ” Next
5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ DataIOOperation āđāļĨāļ§āļāļ” Finish
6. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļ”āļąāļ‡āļ™āļĩāđ‰
<id>1234</id>
<firstName>Somjai</firstName>
<lastName>Jaidee</lastName>
<salary>38000</salary>
7. āļāļ”āļ›āļļāļĄ Save āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run
8. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10
āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™ TestCase1
9. āđāļĨāļ°āļˆāļ°āđ„āļ”āđ„āļŸāļĨ output.xml āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ c:SOAoutput āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļ­āļĄāļđāļĨāļ”āļąāļ‡āļ™āļĩāđ‰
Somjai Jaidee => 38000
92
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ Web Application
āļ—āđāļēāļāļēāļĢāļ„āļ™āļŦāļēāļ•āđāļēāđāļŦāļ™ïœŠāļ‡ url āļ‚āļ­āļ‡ soap:address āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđƒāļ™ Service Assembly āļ‚āļ­āļ‡ FileCompositeApp āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ DataIOPort āđ€āļĨāļ·āļ­āļ Clone WSDL to
edit āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 11
āļĢāļđāļ›āļ—āļĩāđˆ 11 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ Clone WSDL Port to edit āļ‚āļ­āļ‡ DataIOPort
2. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ DataIOPort āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties
3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Properties āđƒāļŦāļ—āđāļēāļāļēāļĢ copy āļ„āļēāļ‚āļ­āļ‡ Location āđƒāļ™ soap:address
4. Location āļ‚āļ­āļ‡ soap:address āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™āļ•āļąāļ§āđāļ›āļĢāļ—āļĩāđˆāļŠāļ·āđˆāļ­ ${HttpDefaultPort} āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”āļđāļ„āļēāļ‚āļ­āļ‡
${HttpDefaultPort} āđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāđāļ—āļ› Services āđ‚āļŦāļ™āļ” Servers > GlassFish Server 3.1.2 >
JBI > Binding Components > sun-http-binding āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ properties āļˆāļ°āđ€āļŦāđ‡āļ™ Default
HTTP Port Number āļ‹āļķāđˆāļ‡āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™ 9080
5. āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›ïœāļ” Web Browser āđāļĨāļ§ paste āļ„āļēāļ—āļĩāđˆ copy āđ„āļ§ïœ‹ āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āļēāļ‚āļ­āļ‡ URL
āđƒāļŦāđ€āļ›ïœ’āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ http://localhost:9080/DataIOService/DataIOPort?WSDL
āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™āļ„āļēāļ‚āļ­āļĄāļđāļĨāļ•āļēāļ‡āđ†
āļˆāļēāļāļ™āļąāđ‰āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āđāļēāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āļ­āļĄāļđāļĨāļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ FileBPUI āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder
āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļšProject āđ„āļ§ïœ‹
4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6
āđāļĨāļ§āļāļ” Finish
5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web
Services āđāļĨāļ° File Types āđ€āļ›ïœ’āļ™ Web Service Client āđāļĨāļ§āļāļ” Next
6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ·āļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠïœŠ URL āđ€āļ›ïœ’āļ™
http://localhost:9080/DataIOService/DataIOPort?WSDL (āļ„āļ§āļĢāļˆāļ°āļ—āđāļēāļāļēāļĢ copy āļĄāļēāļˆāļēāļ
Web Browser āđ„āļĄïœŠāļ„āļ§āļĢāļ—āļĩāđˆāļˆāļ°āļžāļīāļĄāļžïœŽāđ€āļ­āļ‡)
93
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > HTML
8. āļāđāļēāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™ employeeInput āđāļĨāļ§āļāļ” Finish
9. āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ employeeInput.html āļ”āļąāļ‡āļ™āļĩāđ‰
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="EmployeeServlet" method="post">
ID: <input name="id" /><br>
Firstname: <input name="firstname"/><br>
Lastname: <input name="lastname"/><br>
Salary: <input name="salary"/><br><br>
<input type="submit" value="Insert" />
</form>
</body>
</html>
10. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Servlet
11. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļāđāļēāļŦāļ™āļ”āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ EmployeeServlet āđāļĨāļ° Package: āđ€āļ›ïœ’āļ™ controller āđāļĨāļ§āļāļ” Finish
12. āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ EmployeeServlet.java āđƒāļŦāļĨāļš Comment
āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒ /* â€Ķ */ āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally
13. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Code āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļ Call Web Service
Operation āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļ›āļ—āļĩāđˆ DataIOOperation āđāļĨāļ§āļāļ” OK
14. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ EmployeeServlet.java āļ”āļąāļ‡āļ™āļĩāđ‰ (āđāļŠāļ”āļ‡āđ€āļ‰āļžāļēāļ°āđ€āļĄāļ˜āļ­āļ”
processRequest)
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try { // Call Web Service Operation
org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port =
service.getDataIOPort();
// TODO initialize WS operation arguments here
java.lang.String id = request.getParameter("id");
java.lang.String firstname = request.getParameter("firstname");
java.lang.String lastname = request.getParameter("lastname");
String tmp = request.getParameter("salary");
int salary = Integer.parseInt(tmp);
// TODO process result here
java.lang.String result = port.dataIOOperation(id, firstname,
lastname, salary);
out.println("Result = "+result);
94
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
} catch (Exception ex) {
out.println(ex);
} finally {
out.close();
}
}
15. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ FileBPUI āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Clean and Build
16. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ employeeInput.html āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Run File
17. āļŦāļĨāļąāļ‡āļˆāļēāļāđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 12
āļĢāļđāļ›āļ—āļĩāđˆ 12 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨ āđāļĨāļ°āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”
18. āđāļĨāļ°āđ„āļŸāļĨ output.xml āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ c:SOAoutput āļˆāļ°āļĄāļĩāļ‚āļ­āļĄāļđāļĨāļ”āļąāļ‡āļ™āļĩāđ‰
Somjai Jaidee => 38000
Nipa Jingjai => 738000
95
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 12 Simple BPEL Invoking Web Services
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™ Business Process āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Internal Web Service āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āļĄāļēāđ€āļ­āļ‡
āđāļĨāļ° External Web Service āļ‚āļ­āļ‡āļ—āļĩāđˆāļ­āļ·āđˆāļ™āđ† āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđ āđ‚āļ›āļĢāđāļāļĢāļĄ Web Service āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āļ„āļ·āļ­ TaxService
āļ—āļĩāđˆāļĄāļĩāđ‚āļ­āđ€āļ›āļ­āļĢāđ€āļĢāļŠāļąāļ™āļ—āļĩāđˆāļŠāļ·āđˆāļ­ calculateTax āđāļĨāļ° External Web Service āļ„āļ·āļ­āđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ„āđāļēāļ™āļ§āļ“āļ­āļąāļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ—āļĩāđˆāļ­āļĒāļđāļ—āļĩāđˆ
http://www.webservicex.com/CurrencyConvertor.asmx?wsdl
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
1. āļžāļąāļ’āļ™āļē Web Services
2. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSBPEL
3. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL
4. āļžāļąāļ’āļ™āļē Business Process āļŠāđāļēāļŦāļĢāļąāļšāđ€āļĢāļĩāļĒāļ Web Service
5. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
6. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase
7. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL
8. āļāļģāļŦāļ™āļ” External WSDL Document
9. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ Client WSDL āđƒāļŦāļĄïœŠ
10. āļžāļąāļ’āļ™āļē Business Process āđƒāļŦāļĄïœŠāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļ External Web Service
11. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļˆāđ‡āļ„ Composite Application āļŠāđāļēāļŦāļĢāļąāļšāđ€āļĢāļĩāļĒāļ Business Process āđƒāļŦāļĄïœŠ āđāļĨāļ°āļ—āđāļēāļāļēāļĢāļ—āļ”āļŠāļ­āļš
āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē calculateTax Web Service āđ€āļŠïœŠāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļšāđƒāļ™
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ—āļĩāđˆāļœïœŠāļēāļ™āļĄāļē āđ‚āļ”āļĒāļĄāļĩ source code āļ”āļąāļ‡āļ™āļĩāđ‰
@WebService
public class TaxService {
@WebMethod
public double calculateTax(@WebParam(name = "income") double income) {
return 0.1 * income;
}
}
96
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSBPEL
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ
āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module āđāļĨāļ§āļāļ”
Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ WSBPEL āđāļĨāļ§āļāļ” Finish
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™
āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WSBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡
New > WSDL Document
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ WebProcessWSDL āļāđāļēāļŦāļ™āļ” WSDL
Type: āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āļāđāļēāļŦāļ™āļ” Binding āđ€āļ›ïœ’āļ™ SOAP āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ RPC
Literal āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ inputData
(āđ€āļĄāļ·āđˆāļ­āđƒāļŠïœŠāļ„āļēāđ€āļŠāļĢāđ‡āļˆāđāļĨāļ§ āļ•āļ­āļ‡āļāļ”āļ›āļļāļĄ Enter āļ”āļ§āļĒāđ€āļŠāļĄāļ­ āļĄāļīāļ‰āļ°āļ™āļąāđ‰āļ™āļ„āļēāļˆāļ°āļāļĨāļąāļšāđ„āļ›āđ€āļ›ïœ’āļ™ part1 āđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄ)
āđāļĨāļ°āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ outputData āļāļ” Next āđāļĨāļ§āļāļ”
Finish
āļāļēāļĢāļžāļąāļ’āļ™āļē Business Process
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„
āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” partner link āļŠāđāļēāļŦāļĢāļąāļš Web Services āļŠāļ­āļ‡āļŠāļļāļ”āļ„āļ·āļ­ TaxService āđāļĨāļ°
WebProcessWSDL āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
97
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ WebProcessWSDL.wsdl
āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļĄāļēāđ„āļ§ïœ‹āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design (āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āļĩāđˆāđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠïœŠāđƒāļ™ )
āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ”āļ„āļē Name:
āđ€āļ›ïœ’āļ™ ClientPartnerLink āđāļĨāļ§āļāļ” OK
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” TaxWSDemo > Web Services āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxService
āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Generate and Copy WSDL ...
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Generate and Copy WSDL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ src āļ āļēāļĒāđƒāļ• WSBPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ
1 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” OK
āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Generate and Copy WSDL
4. āļĨāļēāļ TaxService.wsdl āđ„āļ›āđ„āļ§ïœ‹āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™
TaxPartnerLink āļ‹āļķāđˆāļ‡āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡ PartnerLink āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡ WSBPEL
98
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive
1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ
Receive1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ
Partner Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ inData āđāļĨāļ§āļāļ” OK
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply
1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Process End
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner
Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ outData āđāļĨāļ§āļāļ” OK
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļŠāđāļēāļŦāļĢāļąāļš calcualteTax
1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Invoke1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ
Invoke1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ invokeWS āđāļĨāļ°āđ€āļĨāļ·āļ­āļ
Partner Link: āđ€āļ›ïœ’āļ™ TaxPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Operation: āđ€āļĨāļ·āļ­āļ calculateTax
5. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ TaxIn āđāļĨāļ§āļāļ” OK
6. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ TaxOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
99
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡ BPEL Process āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļāđ‚āļ­āđ€āļ›āļ­āļĢāđ€āļĢāļŠāļąāļ™ calculateTax
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign
1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” inputData
āđƒāļ™āļŠïœŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” income āđƒāļ™āļŠïœŠāļ§āļ™ TaxIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4
āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āđāļĨāļ° invokeWS
3. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
100
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠïœŠāļ§āļ™
TaxOut āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” outputData āđƒāļ™āļŠïœŠāļ§āļ™ outData āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē
āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ invokeWS āđāļĨāļ° end
5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš
6. āļāļ”āļ›āļļāļĄ Save āđāļĨāļ° Clean and Build
101
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļĢāļąāļ™ WSBPEL āļšāļ™ BPEL Engine āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™
JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite
Application āđāļĨāļ§āļāļ” Next
3. āļāļģāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ WSCompositeApp āđāļĨāļ§āļāļ” Finish
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” WSCompositeApp āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Add JBI Module
5. āđƒāļŦāđ€āļĨāļ·āļ­āļāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSBPEL āđāļĨāļ§āļāļ”āļ›āļļāļĄ Add Project JAR Files
6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļžāļīāđˆāļĄāđ‚āļŦāļ™āļ” WSBPEL.jar āļ āļēāļĒāđƒāļ• WSCompositeApp > JBI Module
7. āļ—āļģāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp
8. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Service Assemblyāļˆāļ°āđ€āļŦāđ‡āļ™ CASA Editor āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āļ‹āļķāđˆāļ‡ WSBPEL āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ BPEL
module āļˆāļ°āļ–āļđāļāđ€āļĢāļĩāļĒāļāđ‚āļ”āļĒ SOAP request āđāļ•āđ„āļĄïœŠāđ€āļŦāđ‡āļ™TaxPartnerLink āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āđƒāļ”
āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡ CASA Editor āļ‚āļ­āļ‡ WSBPEL
9. āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļ Web Service āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŠïœŠāļ§āļ™ WSDL Ports
āļ‚āļ­āļ‡ CASA Editor āđāļĨāļ°āļ—āļģāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
102
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļˆāļēāļ WSBPELāđ„āļ›āļĒāļąāļ‡ SOAP
10. āļĢāļ°āļšāļļ endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ casaPort1 āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļē
Location āđ€āļ›ïœ’āļ™ http://localhost:8080/TaxWSDemo/TaxService āđāļĨāļ° Endpoint Name āđ€āļ›ïœ’āļ™
TaxService
11. Save āđāļĨāļ°āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp
āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase
1. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” WSCompositeApp > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
3. āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļ™ WSBPEL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ WebProcessWSDL.wsdl āđāļĨāļ§āļāļ” Next
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ WebProcessWSDLOperation āđāļĨāļ§āļāļ” Finish
5. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļŠïœŠāļ§āļ™ inputData āļ”āļąāļ‡āļ™āļĩāđ‰
<inputData>400000</inputData>
6. āļāļ”āļ›āļļāļĄ Save āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run
7. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āļ™āļĩāđ‰
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<m:WebProcessWSDLOperationResponse
xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/WebProcessWSDL">
<outputData xmlns="">33500.0</outputData>
</m:WebProcessWSDLOperationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
103
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļ
āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄïœŠāļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļ™āđ„āļ” āđƒāļŦāđ„āļ›āļ—āļĩāđˆ GlassFish Server 3.1.2 > JBI > Service Assemblies āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9
āđāļĨāļ§āļ—āļģāļāļēāļĢ Undeploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ­āļ·āđˆāļ™āđ† āļ­āļ­āļāļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđƒāļŦāđ€āļŦāļĨāļ·āļ­āđ€āļ‰āļžāļēāļ°āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp
āđāļĨāļ§āļĨāļ­āļ‡āļĢāļąāļ™āđƒāļŦāļĄïœŠāļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡
āļĢāļđāļ›āļ—āļĩāđˆ 9 āļāļēāļĢ Updeploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ­āļ·āđˆāļ™āđ† āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ Service Assemblies āļ­āļ­āļāļ—āļąāđ‰āļ‡āļŦāļĄāļ”
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL
āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ
āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
4. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module āđāļĨāļ§āļāļ”
Next
6. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExternalWSBPEL āđāļĨāļ§āļāļ” Finish
104
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļžāļąāļ’āļ™āļē External WSDL
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āļ­āđ„āļ›āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ External Web Service āļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļ„āđāļēāļ™āļ§āļ“āļ­āļąāļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™
āđ‚āļ”āļĒāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āļ•āļ­āļ‡āļĢāļ°āļšāļļ WSDL āļ‚āļ­āļ‡ External Web Service āļ”āļąāļ‡āļāļĨāļēāļ§ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ExternalWSBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files
āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other..
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ XML āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ External WSDL
Document(s) āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āđ€āļĨāļ·āļ­āļ Form URL: āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļēāđ€āļ›ïœ’āļ™
http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āđāļĨāļ§āļāļ” Finish
4. āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL āļˆāļ°āđāļŠāļ”āļ‡āđ‚āļŦāļ™āļ” www.webservicex.com āļ—āļĩāđˆāļĄāļĩ
CurrencyConvertor.asmx.wsdl āļ‚āļķāđ‰āļ™āļĄāļē
5. External WSDL āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļĄāļēāļˆāļ°āļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļ•āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļ WSDL āļ™āļĩāđ‰āļˆāļ°āđ„āļĄïœŠāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ° compile
āđƒāļ™ NetBeans 7.1 āđ„āļ” āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļĄāļĩ Port Types, Bindings āđāļĨāļ° Services āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ HttpGet āđāļĨāļ° HttpPost
āļ­āļĒāļđ āđƒāļŦāļ—āļģāļāļēāļĢāļĨāļšāļŠïœŠāļ§āļ™āđ€āļŦāļĨāļēāļ™āļąāđ‰āļ™āļ­āļ­āļ āđ‚āļ”āļĒāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ”āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āļ­āļ‡āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Delete
āļˆāļ™āđ€āļŦāļĨāļ·āļ­āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡ WSDL āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 11
āļĢāļđāļ›āļ—āļĩāđˆ 10 WSDL āļ—āļĩāđˆāļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļāļĄāļē
105
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 11 WSDL āļ—āļĩāđˆāļ–āļđāļāļ•āļ­āļ‡
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ Client WSDL āđƒāļŦāļĄïœŠ
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™
āļĄāļēāđƒāļŦāļĄïœŠāđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ” āđ‚āļ”āļĒāđƒāļ™āļāļĢāļ“āļĩāļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŦāļĄāļĩ input parameter āļŠāļ­āļ‡āļ•āļąāļ§āļ„āļ·āļ­
fromCurrency āđāļĨāļ° toCurrency āđ‚āļ”āļĒāļĄāļĩ output parameter āļ„āļ·āļ­ result āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WSBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡
New > WSDL Document
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ ExternalWSProcessWSDL āļāđāļēāļŦāļ™āļ”
WSDL Type: āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āļāđāļēāļŦāļ™āļ” Binding āđ€āļ›ïœ’āļ™ SOAP āđāļĨāļ° Types āđ€āļ›ïœ’āļ™
RPC Literal āđāļĨāļ§āļāļ” Next
3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ fromCurrency āđƒāļŦāđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ”
xsd:String āđāļĨāļ° toCurrency āđƒāļŦāđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” xsd:String āđāļĨāļ°āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Output: āļāđāļēāļŦāļ™āļ” Message
Part Name āđ€āļ›ïœ’āļ™ result āđƒāļŦāđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” xsd:String āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 12 āļāļ” Next āđāļĨāļ§āļāļ” Finish
106
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 12 āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļē WSDL Document
āļāļēāļĢāļžāļąāļ’āļ™āļē Business Process āđƒāļŦāļĄïœŠāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļ External Web Service
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āđƒāļŦāļĄïœŠāļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ External
Web Service āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
107
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļŠāļĢāļēāļ‡ BPEL Process
1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WSBPEL āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > BPEL Process..
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New BPEL Process āļāļģāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExternalWSBPEL āđāļĨāļ§āļāļ” Finish
āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” partner link āļŠāđāļēāļŦāļĢāļąāļš Web Services āļŠāļ­āļ‡āļŠāļļāļ”āļ„āļ·āļ­
ExternalWSProcessWSDL āđāļĨāļ° CurrencyConvertor.asmx.wsdl āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™
ExternalWSProcessWSDL.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļĄāļēāđ„āļ§ïœ‹āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design
āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ”āļ„āļē Name:
āđ€āļ›ïœ’āļ™ ClientPartnerLink āđāļĨāļ§āļāļ” OK
2. āļĨāļēāļ CurrencyConvertor.asmx.wsdlāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđ„āļ›āđ„āļ§ïœ‹āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design
āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ ExternalWSPartnerLink
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive
1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ
Receive1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ
Partner Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ inData āđāļĨāļ§āļāļ” OK
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply
1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Process End
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner
Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ outData āđāļĨāļ§āļāļ” OK
108
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļŠāđāļēāļŦāļĢāļąāļš calcualteTax
1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Invoke1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ
Invoke1
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ invokeWS āđāļĨāļ°āđ€āļĨāļ·āļ­āļ
Partner Link: āđ€āļ›ïœ’āļ™ ExternalWSPartnerLink
4. āđƒāļ™āļŠïœŠāļ­āļ‡ Operation: āđ€āļĨāļ·āļ­āļ conversionRate
5. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ ConversionRateIn āđāļĨāļ§āļāļ” OK
6. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ”
Name: āđ€āļ›ïœ’āļ™ ConversionRateOut āđāļĨāļ§āļāļ” OK
āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign
1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” fromCurrency
āđƒāļ™āļŠïœŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” FromCurrency āđƒāļ™āļŠïœŠāļ§āļ™ ConversionRateIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē
āđāļĨāļ° toCurrency āđƒāļ™āļŠïœŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” ToCurrency āđƒāļ™āļŠïœŠāļ§āļ™ ConversionRateIn
āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 13
āļĢāļđāļ›āļ—āļĩāđˆ 13 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āđāļĨāļ° invokeWS
3. āđƒāļ™āđ„āļŸāļĨ ExtrenalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette
āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
109
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļģāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ”
ConversionRateResult āđƒāļ™āļŠïœŠāļ§āļ™ ConversionRateOut āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” result āđƒāļ™āļŠïœŠāļ§āļ™
outData āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 14
āļĢāļđāļ›āļ—āļĩāđˆ 14 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ invokeWS āđāļĨāļ° end
5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 15
āļĢāļđāļ›āļ—āļĩāđˆ 15 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš
6. āļāļ”āļ›āļļāļĄ Save āđāļĨāļ° Clean and Build
110
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļĢāļąāļ™ ExternalWSBPEL āļšāļ™ BPEL Engine
āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project
2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite
Application āđāļĨāļ§āļāļ” Next
3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExternalWSCompositeApp āđāļĨāļ§āļāļ” Finish
4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” ExternalWSCompositeApp āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Add JBI Module
5. āđƒāļŦāđ€āļĨāļ·āļ­āļāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL āđāļĨāļ§āļāļ”āļ›āļļāļĄ Add Project JAR Files
6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļžāļīāđˆāļĄāđ‚āļŦāļ™āļ” WSBPEL.jar āļ āļēāļĒāđƒāļ• WSCompositeApp > JBI Module
7. āļ—āļģāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp
8. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Service Assembly āļˆāļ°āđ€āļŦāđ‡āļ™ CASA Editor āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 16 āļ‹āļķāđˆāļ‡ WSBPEL āļ—āļĩāđˆāđ€āļ›ïœ’āļ™
BPEL module āļˆāļ°āļ–āļđāļāđ€āļĢāļĩāļĒāļāđ‚āļ”āļĒ SOAP request āđāļ•āđ„āļĄïœŠāđ€āļŦāđ‡āļ™TaxPartnerLink āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āđƒāļ”
āļĢāļđāļ›āļ—āļĩāđˆ 16 āđāļŠāļ”āļ‡ CASA Editor āļ‚āļ­āļ‡ WSBPEL
9. āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļ Web Service āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap12 āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŠïœŠāļ§āļ™ WSDL Ports
āļ‚āļ­āļ‡ CASA Editor āđāļĨāļ°āļ—āļģāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 17
111
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļđāļ›āļ—āļĩāđˆ 17 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļˆāļēāļ ExternalWSBPELāđ„āļ›āļĒāļąāļ‡ SOAP12
10. āļĢāļ°āļšāļļ endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ casaPort1 āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļē
Location āđ€āļ›ïœ’āļ™ http://www.webservicex.com/CurrencyConvertor.asmx āđāļĨāļ° Endpoint Name
āđ€āļ›ïœ’āļ™ CurrencyConvertor
āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase
1. āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSCompositeApp
2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” ExternalWSCompositeApp > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test
Case
3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next
4. āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļ™ WSBPEL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ ExternalWSProcessWSDL.wsdl āđāļĨāļ§āļāļ” Next
5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ ExternalWSProcessWSDLOperation āđāļĨāļ§āļāļ” Finish
6. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļ”āļąāļ‡āļ™āļĩāđ‰
<fromCurrency>USD</fromCurrency>
<toCurrency>THB</toCurrency>
112
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļ”āļ›āļļāļĄ Save āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run
8. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āļ™āļĩāđ‰
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<m:ExternalWSProcessWSDLOperationResponse
xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/ExternalWSProcessWSDL">
<result xmlns:msgns="http://www.webserviceX.NET/" xmlns="">31.49</result>
</m:ExternalWSProcessWSDLOperationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

More Related Content

PDF
āđ‡Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
PDF
āļŠāļĢāđ‰āļēāļ‡ Soap web services āļ‡āđˆāļēāļĒāđ†
PDF
Google App Engine Using Eclipse
DOC
āļ āļēāļĐāļē Jsp
PDF
Hand-on Exercise Java Web Programming
PDF
Java Web programming Using Eclipse
PDF
Java Web programming Using NetBeans
PDF
lesson3 JSP
āđ‡Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + Glas...
āļŠāļĢāđ‰āļēāļ‡ Soap web services āļ‡āđˆāļēāļĒāđ†
Google App Engine Using Eclipse
āļ āļēāļĐāļē Jsp
Hand-on Exercise Java Web Programming
Java Web programming Using Eclipse
Java Web programming Using NetBeans
lesson3 JSP

What's hot (8)

PPTX
āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āđ‰āļ§āļĒ Net beans
PDF
SOA Using GlassFishESB and NetBeans [in Thai]
PDF
Java Web Services and SOA Using GlassFish openESB and NetBeans
PDF
lesson2 JSP
DOC
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
PDF
HTML PHP MySQL āļŠāļģāļŦāļĢāļąāļšāđ€āļ§āđ‡āļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļĄāļ­āļĢāđŒāļĄāļ·āļ­āđƒāļŦāļĄāđˆ
PPTX
āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ‚āļ”āļĒāđƒāļŠāđ‰ Net bean
PDF
Php training
āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āđ‰āļ§āļĒ Net beans
SOA Using GlassFishESB and NetBeans [in Thai]
Java Web Services and SOA Using GlassFish openESB and NetBeans
lesson2 JSP
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
HTML PHP MySQL āļŠāļģāļŦāļĢāļąāļšāđ€āļ§āđ‡āļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļĄāļ­āļĢāđŒāļĄāļ·āļ­āđƒāļŦāļĄāđˆ
āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ‚āļ”āļĒāđƒāļŠāđ‰ Net bean
Php training
Ad

Viewers also liked (6)

PDF
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
PDF
lesson6
PDF
lesson1 JSP
PDF
lesson4 JSP
PDF
01 āļ„āļ§āļēāļĄāļĢāļđāđ‰āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢ web programming
DOC
āđāļœāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰ āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒ āļĄ.2
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
lesson6
lesson1 JSP
lesson4 JSP
01 āļ„āļ§āļēāļĄāļĢāļđāđ‰āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢ web programming
āđāļœāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰ āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒ āļĄ.2
Ad

Similar to Java Web Services and SOA Exercises [in Thai] (20)

PDF
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
PDF
āļ„āļđāđˆāļĄāļ·āļ­āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļšāļšāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļļāļ„āļĨāļēāļāļĢ āļāđˆāļēāļĒāđ€āļ”āļīāļ™āļĢāļ– āđāļ‚āļ§āļ‡āļ™āļ„āļĢāļŠāļ§āļĢāļĢāļ„āđŒ āļāļēāļĢāļĢāļ–āđ„āļŸāđāļŦāđˆāļ‡āļ›...
PDF
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
PDF
Joomla-installation
PDF
Java Web Programming Using NetBeans 6.5
PDF
Websocket & HTML5
PDF
āļ„āļđāđˆāļĄāļ·āļ­ Joomla
PDF
Joomla
PDF
āđ‹Java Web Programming on Cloud Computing using Google App Engine
PDF
650 1
PPTX
āđ‚āļ›āļĢāđāļāļĢāļĄ Net beans
PDF
Hotspotubuntu8
PDF
āļŠāļĢāđ‰āļēāļ‡āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ”āđ‰āļ§āļĒWordpress
PDF
Scan tool 3
PDF
Gisāļšāļĩ
PDF
Web dav android (1)
PDF
Web dav android
PDF
webprogramming eclipse-jsp
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
āļ„āļđāđˆāļĄāļ·āļ­āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļšāļšāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļļāļ„āļĨāļēāļāļĢ āļāđˆāļēāļĒāđ€āļ”āļīāļ™āļĢāļ– āđāļ‚āļ§āļ‡āļ™āļ„āļĢāļŠāļ§āļĢāļĢāļ„āđŒ āļāļēāļĢāļĢāļ–āđ„āļŸāđāļŦāđˆāļ‡āļ›...
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
Joomla-installation
Java Web Programming Using NetBeans 6.5
Websocket & HTML5
āļ„āļđāđˆāļĄāļ·āļ­ Joomla
Joomla
āđ‹Java Web Programming on Cloud Computing using Google App Engine
650 1
āđ‚āļ›āļĢāđāļāļĢāļĄ Net beans
Hotspotubuntu8
āļŠāļĢāđ‰āļēāļ‡āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ”āđ‰āļ§āļĒWordpress
Scan tool 3
Gisāļšāļĩ
Web dav android (1)
Web dav android
webprogramming eclipse-jsp

More from IMC Institute (20)

PDF
āļ™āļīāļ•āļĒāļŠāļēāļĢ Digital Trends āļ‰āļšāļąāļšāļ—āļĩāđˆ 14
PDF
Digital trends Vol 4 No. 13 Sep-Dec 2019
PDF
āļšāļ—āļ„āļ§āļēāļĄ The evolution of AI
PDF
IT Trends eMagazine Vol 4. No.12
PDF
āđ€āļžāļĢāļēāļ°āđ€āļŦāļ•āļļāđƒāļ” Digitization āđ„āļĄāđˆāļ•āļ­āļšāđ‚āļˆāļ—āļĒāđŒ Digital Transformation
PDF
IT Trends 2019: Putting Digital Transformation to Work
PDF
āļĄāļđāļĨāļ„āđˆāļēāļ•āļĨāļēāļ”āļ”āļīāļˆāļīāļ—āļąāļĨāđ„āļ—āļĒ 3 āļ­āļļāļ•āļŠāļēāļŦāļāļĢāļĢāļĄ
PDF
IT Trends eMagazine Vol 4. No.11
PDF
āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāļ—āļģ Digital transformation
PDF
āļšāļ—āļ„āļ§āļēāļĄ The New Silicon Valley
PDF
āļ™āļīāļ•āļĒāļŠāļēāļĢ IT Trends āļ‚āļ­āļ‡ IMC Institute āļ‰āļšāļąāļšāļ—āļĩāđˆ 10
PDF
āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāļ—āļģ Digital transformation
PDF
The Power of Big Data for a new economy (Sample)
PDF
āļšāļ—āļ„āļ§āļēāļĄ Robotics āđāļ™āļ§āđ‚āļ™āđ‰āļĄāđƒāļŦāļĄāđˆāļŠāļđāđˆāļšāļĢāļīāļāļēāļĢāđ€āļ‰āļžāļēāļ°āļ—āļēāļ‡
PDF
IT Trends eMagazine Vol 3. No.9
PDF
Thailand software & software market survey 2016
PPTX
Developing Business Blockchain Applications on Hyperledger
PDF
Digital transformation @thanachart.org
PDF
āļšāļ—āļ„āļ§āļēāļĄ Big Data āļˆāļēāļāļšāļĨāđ‡āļ­āļ thanachart.org
PDF
āļāļĨāļĒāļļāļ—āļ˜āđŒ 5 āļ”āđ‰āļēāļ™āļāļąāļšāļāļēāļĢāļ—āļģ Digital Transformation
āļ™āļīāļ•āļĒāļŠāļēāļĢ Digital Trends āļ‰āļšāļąāļšāļ—āļĩāđˆ 14
Digital trends Vol 4 No. 13 Sep-Dec 2019
āļšāļ—āļ„āļ§āļēāļĄ The evolution of AI
IT Trends eMagazine Vol 4. No.12
āđ€āļžāļĢāļēāļ°āđ€āļŦāļ•āļļāđƒāļ” Digitization āđ„āļĄāđˆāļ•āļ­āļšāđ‚āļˆāļ—āļĒāđŒ Digital Transformation
IT Trends 2019: Putting Digital Transformation to Work
āļĄāļđāļĨāļ„āđˆāļēāļ•āļĨāļēāļ”āļ”āļīāļˆāļīāļ—āļąāļĨāđ„āļ—āļĒ 3 āļ­āļļāļ•āļŠāļēāļŦāļāļĢāļĢāļĄ
IT Trends eMagazine Vol 4. No.11
āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāļ—āļģ Digital transformation
āļšāļ—āļ„āļ§āļēāļĄ The New Silicon Valley
āļ™āļīāļ•āļĒāļŠāļēāļĢ IT Trends āļ‚āļ­āļ‡ IMC Institute āļ‰āļšāļąāļšāļ—āļĩāđˆ 10
āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāļ—āļģ Digital transformation
The Power of Big Data for a new economy (Sample)
āļšāļ—āļ„āļ§āļēāļĄ Robotics āđāļ™āļ§āđ‚āļ™āđ‰āļĄāđƒāļŦāļĄāđˆāļŠāļđāđˆāļšāļĢāļīāļāļēāļĢāđ€āļ‰āļžāļēāļ°āļ—āļēāļ‡
IT Trends eMagazine Vol 3. No.9
Thailand software & software market survey 2016
Developing Business Blockchain Applications on Hyperledger
Digital transformation @thanachart.org
āļšāļ—āļ„āļ§āļēāļĄ Big Data āļˆāļēāļāļšāļĨāđ‡āļ­āļ thanachart.org
āļāļĨāļĒāļļāļ—āļ˜āđŒ 5 āļ”āđ‰āļēāļ™āļāļąāļšāļāļēāļĢāļ—āļģ Digital Transformation

Java Web Services and SOA Exercises [in Thai]

  • 1. 1 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Hand-on Exercises Java Web Services and SOA Using NetBeans IDE with Open ESB GlassFish Server and MySQL Database Assoc.Prof.Dr. Thanachart Numnonda and Assist.Prof.Dr. Thanisa Kruawaisayawan April 2013
  • 2. 2 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercises Exercise 1: Calling Existing Web Services 3 Exercise 2: Java Web Services 11 Exercise 3: Axis2 Web Services 16 Exercise 4: āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MySQL Database 22 Exercise 5: Java Web Services from Session Bean (1) 29 Exercise 6: Java Web Services from Session Bean (2) 40 Exercise 7: RESTful Web Services 53 Exercise 8: Google Map Web Services 57 Exercise 9: āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āđ‡āļšāđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļ­āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB 64 Exercise 10: Developing a Simple Synchronous BPEL Program 72 Exercise 11: BPEL for Writing to File 82 Exercise 12: Simple BPEL Invoking Web Services 95
  • 3. 3 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 1: Calling Existing Web Services āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Services āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđāļĨāļ§ āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļĨāļ·āļ­āļāļĄāļē 3 āļšāļĢāļīāļāļēāļĢāļ”āļąāļ‡āļ™āļĩāđ‰ āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 1 āļ­āļąāļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ€āļ‡āļīāļ™āļ•āļĢāļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ›āļĢāļ°āđ€āļ—āļĻ āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 2 āđ€āļĨāļ‚āļ›āļĢāļ°āļˆāđāļēāļ•āļąāļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™āļ‚āļ­āļ‡ āļāļĢāļĄāļŠāļĢāļĢāļžāļēāļāļĢ āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 3 āļĢāļēāļ„āļēāļ™āđ‰āđāļēāļĄāļąāļ™āļĨāļēāļŠāļļāļ”āļ‚āļ­āļ‡ āļ›āļ•āļ—. āđ‚āļ”āļĒāļˆāļ°āđƒāļŠïœ‹ soapUI, NetBeans āđāļĨāļ° GlassFish Server āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 1 āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Services āđ‚āļ”āļĒāđƒāļŠïœ‹ soapUI āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Open Source āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠ āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄāđƒāļŠïœ‹āļāļąāļ™āļ­āļĒāļēāļ‡āļāļ§ïœ‹āļēāļ‡āļ‚āļ§āļēāļ‡ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđ„āļ›āļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āđ„āļ”āļ—āļĩāđˆ www.soapui.org āđ‚āļ”āļĒāđ€āļĄāļ·āđˆāļ­āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđāļĨāļ§ āđƒāļŦāļ—āđāļēāļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠ āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New soapUI Project 2. āđƒāļ™āļŠïœŠāļ­āļ‡ Initial WSDL āđƒāļŦāđƒāļŠïœŠ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1
  • 4. 4 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ soapUI Project āđƒāļ™ soapUI 3. āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ”āļ›āļļāļĄ OK āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ™āļĩāđ‰āļ‚āļķāđ‰āļ™āļĄāļē 4. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ConversionRate āļ‚āļ­āļ‡ CurrencyConvertorSoap āđāļĨāļ§āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Request1 5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ 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>
  • 5. 5 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 6. āļāļ”āļ›āļļāļĄ 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>31.403/ConversionRateResult> </ConversionRateResponse> </soap:Body> </soap:Envelope> āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 2 āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļ”āļŠāļ­āļšāļāļēāļĢāđƒāļŠïœ‹āļ‡āļēāļ™ SoupUI āļāļąāļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ—āļĩāđˆāđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāđāļēāļ•āļąāļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™ āļ§ïœŠāļēāļ–āļđāļāļ•āļ­āļ‡āļŦāļĢāļ·āļ­āđ„āļĄïœŠ āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ soapUI āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New soapUI Project 2. āđƒāļ™āļŠïœŠāļ­āļ‡ Initial WSDL āđƒāļŦāđƒāļŠïœŠ https://rdws.rd.go.th/ServiceRD/CheckTINPINService.asmx?WSDL āđāļĨāļ§āļāļ” OK 3. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ServicePIN āđƒāļ™ CheckTINPINServiceSoap āđāļĨāļ§āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Request1 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āļ„āļēāļ‚āļ­āļ‡ SOAP Request āđƒāļŦāļ—āđāļēāļāļēāļĢāđƒāļŠïœŠāļ„āļēāļ‚āļ­āļ‡ username āđāļĨāļ° password āđ€āļ›ïœ’āļ™ anonymous āđāļĨāļ°āđƒāļŠïœŠāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāđāļēāļ•āļąāļ§āļ›āļĢāļ°āļŠāļēāļŠāļ™āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļš āđ‚āļ”āļĒāđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđ„āļ”āļ”āļąāļ‡āļ™āļĩāđ‰ : <chec:ServicePIN> <!--Optional:--> <chec:username>anonymous</chec:username> <!--Optional:--> <chec:password>anonymous</chec:password> <!--Optional:--> <chec:PIN>3605699082386</chec:PIN> </chec:ServicePIN> : 5. āļāļ”āļ›āļļāļĄ submit request (āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒāļŠāļĩāđ€āļ‚āļĩāļĒāļ§) āļ—āļĩāđˆāļ­āļĒāļđāļ—āļēāļ‡āļ‹ïœ‹āļēāļĒāļšāļ™ āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ„āļ” SOAP Response āļāļĨāļąāļšāļĄāļēāļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡ :
  • 6. 6 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <CheckingResult diffgr:id="CheckingResult1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> <ID>3605699082386</ID> <DigitOk>true</DigitOk> </CheckingResult> <Message diffgr:id="Message1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> <Code>W00000</Code> <Description>āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“&lt;br> Success "</Description> </Message> </NewDataSet> </diffgr:diffgram> : āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ—āļĩāđˆ 3 āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service Client āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Web Application Project āļ‚āļķāđ‰āļ™āđƒāļŦāļĄïœŠ āđ€āļžāļ·āđˆāļ­āđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ Web Services āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Next 4. āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 Web āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļĨāļ§āļāļ” Finish
  • 7. 7 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Application 5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” ExistingWSDemo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web Services āđāļĨāļ° File Types āđ€āļ›ïœ’āļ™ Web Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ·āļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠïœŠ URL āđ€āļ›ïœ’āļ™ http://www.pttplc.com/webservice/pttinfo.asmx?wsdl āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļĨāļ§āļāļ” Finish
  • 8. 8 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client 7. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļˆāļ°āļĄāļĩ Folder āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web Service References āļ‚āļķāđ‰āļ™āļĄāļē 8. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ New > Servlet āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļāđāļēāļŦāļ™āļ”āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ PTTServlet āđāļĨāļ° Package: āđ€āļ›ïœ’āļ™ servlets āđāļĨāļ§āļāļ” Finish 9. āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ PTTServlet.java āđƒāļŦāļĨāļš sourcecode āļ—āļĩāđˆāļ­āļĒāļđāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally 10. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Code āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļ Call Web Service Operation āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ operation āļ‚āļ­āļ‡ Web Service 11. āđ€āļĨāļ·āļ­āļ CurrentOilPrice āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļĨāļ§āļāļ” OK
  • 9. 9 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Operation: CurrentOilPrice āļ‚āļ­āļ‡āļ›āļ•āļ—. 12. āđ€āļžāļīāđˆāļĄ code āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ PTTServlet.java āļ”āļąāļ‡āļ™āļĩāđ‰ @WebServlet(name = "PTTServlet", urlPatterns = {"/PTTServlet"}) public class PTTServlet extends HttpServlet { @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/www.pttplc.com/pttinfo.asmx.wsdl") private com.pttplc.ptt_webservice.PTTInfo service; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.print(currentOilPrice("TH")); } finally { out.close(); } } : private String currentOilPrice(java.lang.String language) { com.pttplc.ptt_webservice.PTTInfoSoap port = service.getPTTInfoSoap(); return port.currentOilPrice(language); } } 13. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ ExistingWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Clean and Build
  • 10. 10 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 14. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ PTTServlet.java āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Run File āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāđ€āļ›ïœ’āļ™āļĢāļēāļ„āļēāļ™āđ‰āđāļēāļĄāļąāļ™āļĨāļēāļŠāļļāļ” āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6 āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service Operation: CurrentOilPrice āļ‚āļ­āļ‡āļ›āļ•āļ—.
  • 11. 11 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 2: Java Web Services āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services āļŠāđāļēāļŦāļĢāļąāļš Java EE āđ‚āļ”āļĒāđƒāļŠïœ‹āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-WS āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services Provider āļšāļ™ Java EE Server āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-WS āļˆāļ°āļŠïœŠāļ§āļĒāļ—āđāļēāđƒāļŦāļāļēāļĢāļŠāļĢāļēāļ‡āđāļĨāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Services āļ”āļ§āļĒāļ āļēāļĐāļē Java āđ€āļ›ïœ’āļ™āđ„āļ›āđ„āļ”āļ‡ïœŠāļēāļĒāļ‚āļķāđ‰āļ™ āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services āļˆāļ°āđāļšïœŠāļ‡āđ„āļ”āđ€āļ›ïœ’āļ™āļŠāļ­āļ‡āļŠïœŠāļ§āļ™āļ„āļ·āļ­ Web Service Requester (Client) āđāļĨāļ° Web Service Provider (Server) āļ‹āļķāđˆāļ‡āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service Provider āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāđ„āļ” 2 āļ§āļīāļ˜āļĩāļ„āļ·āļ­ 1. Web Services āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ Web Server āđ‚āļ”āļĒāđƒāļŠïœ‹ Java Servlet 2. Web Services āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ Application Server āđ‚āļ”āļĒāđƒāļŠïœ‹ Session Bean āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŠïœ‹ NetBeans āļŠāļĢāļēāļ‡ Web Service āļ—āļĩāđˆāļŠāļ·āđˆāļ­ calculateTax āđ‚āļ”āļĒāđƒāļŠïœ‹ Servlet āļ‹āļķāđˆāļ‡āļˆāļ°āļĢāļąāļ™āļ­āļĒāļđāļšāļ™ GlassFish Server 3.1.2 Server āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡ Web Services āļāļēāļĢāļŠïœŠāļ‡ SOAP message āđāļĨāļ° WSDL āļ‚āļ­āļ‡ Services āļāļēāļĢāļžāļąāļ’āļ™āļē calculateTax Web Service āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Web Application Project āļ‚āļķāđ‰āļ™āđƒāļŦāļĄïœŠ āđ€āļžāļ·āđˆāļ­āđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļš Web Service āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ TaxWSDemo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ 4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 Web āđāļĨāļ§āļāļ” Finish 5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxWSDemo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web Services āđāļĨāļ°āđ€āļĨāļ·āļ­āļ File Types āđ€āļ›ïœ’āļ™ Web Service āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service āļāđāļēāļŦāļ™āļ” Web Service Name: āđ€āļ›ïœ’āļ™ TaxService āđāļĨāļ° Package: āđ€āļ›ïœ’āļ™ ws āđāļĨāļ§āļāļ” Finish 7. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ›āļĢāļ°āļāļēāļĻ Web Services āļ—āļĩāđˆāļŠāļ·āđˆāļ­ TaxService āđƒāļ™āđ‚āļŦāļ™āļ” Web Services āļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđāļĨāļ°āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ TaxService.java 8. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” TaxWSDemo > Web Services āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxService āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Add Operationâ€Ķ 9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Add Operation āļāđāļēāļŦāļ™āļ” Method āđ€āļ›ïœ’āļ™ calculateTax āļŠāļ™āļīāļ”āļ‚āļ­āļ‡ Return Type āđ€āļ›ïœ’āļ™
  • 12. 12 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan double āđāļĨāļ°āļāļ”āļ›āļļāļĄ Add āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄ Input parameter āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Name āđ€āļ›ïœ’āļ™ income āđāļĨāļ° Type āđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” double āđāļĨāļ§āļāļ” OK 10. āļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđāļ—āļ› Source āļ‚āļ­āļ‡ TaxService.java āđāļĨāļ°āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āđ€āļĄāļ˜āļ­āļ” calculateTax āļ”āļąāļ‡āļ™āļĩāđ‰ import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService() public class TaxService { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } } } 11. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxWSDemo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Clean and Build āļˆāļēāļāļ™āļąāđ‰āļ™āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxWSDemo āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡ āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Deploy āļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Service 1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ TaxService āđƒāļ™ Web Services āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Test Web Service āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļ”āļŠāļ­āļš Web Service āđƒāļ™ Netbeans 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļŦāļ™ïœ‹āļēāļˆāļ­āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ€āļĢāļēāļ›ïœ†āļ­āļ™āļ‚āļ­āļĄāļđāļĨāļ­āļīāļ™āļžāļļāļ• āļ‹āļķāđˆāļ‡āļ„āļ·āļ­āļˆāđāļēāļ™āļ§āļ™āđ€āļ‡āļīāļ™āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ„āđāļēāļ™āļ§āļ“āļ āļēāļĐāļĩ āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āđƒāļŠïœŠāļ•āļąāļ§āđ€āļĨāļ‚āđ€āļ›ïœ’āļ™ 730000 āđāļĨāļ°āļāļ”āļ›āļļāļĄ calculateTax āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
  • 13. 13 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļŠāđāļēāļŦāļĢāļąāļšāđƒāļŦāļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļ Web Service 3. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Services āđāļĨāļ°āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ” āļžāļĢāļ­āļĄāļ—āļąāđ‰āļ‡āđāļŠāļ”āļ‡āļ„āļē SOAP Request āđāļĨāļ° SOAP Response āļ”āļąāļ‡āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
  • 14. 14 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļžāļĢāļ­āļĄāļ—āļąāđ‰āļ‡ SOAP Request āđāļĨāļ° SOAP Response 4. āļŦāļĨāļąāļ‡āļˆāļēāļāļāļ” Back āļāļĨāļąāļšāļĄāļēāļ—āļĩāđˆāļŦāļ™ïœ‹āļēāđ€āļ”āļīāļĄāđāļĨāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ WSDL āļ‚āļ­āļ‡ Web Service āļ™āļĩāđ‰āđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāđ€āļĨāļ·āļ­āļāļ—āļĩāđˆ WSDL File āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļ„āļĨāļīāđŠāļāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ WSDL
  • 15. 15 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļ url āļŠāļ·āđˆāļ­ http://localhost:8080/TaxWSDemo/TaxServiceService?WSDL āđāļĨāļ°āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡ WSDL 6. āđ‚āļ›āļĢāđāļāļĢāļĄ Web Service āļˆāļ°āļ–āļđāļāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļšāļ™ GlassFish Server 3.1.2 āļŠāļēāļĄāļēāļĢāļ–āļ”āļđāđ„āļ”āļˆāļēāļāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ GlassFish Server 3.1.2 āđƒāļ™āđāļ—āļ› Services āđāļĨāļ°āđ€āļĨāļ·āļ­āļ View Admin Console āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6 āļŦāļĢāļ·āļ­āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›ïœāļ” Web Browser āđāļĨāļ°āđ€āļĢāļĩāļĒāļ url āļ—āļĩāđˆ http://localhost:4848 āđ‚āļ”āļĒāļĄāļĩ user āđ€āļ›ïœ’āļ™ admin āđāļĨāļ° password āđ€āļ›ïœ’āļ™ adminadmin āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāļ”āļđ Admin Console
  • 16. 16 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 3: Axis2 Web Services āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 Web Services āļšāļ™ Tomcat Web Server āđāļĨāļąāļ§āļ—āļ”āļĨāļ­āļ‡āļžāļąāļ’āļ™āļē Web Service āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 āļšāļ™ Tomcat āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļĄāļ”āļđāļĨ Axis2 āđ€āļžāļ·āđˆāļ­āļ—āđāļēāđƒāļŦ Tomcat āđ€āļ›ïœ’āļ™ Web Service Provider āļ—āļĩāđˆāļ—āđāļēāļ‡āļēāļ™āļ āļēāļĒāđƒāļ• Axis2 Framework āđ‚āļ”āļĒ Axis2 āļĄāļĩāļ‚āļ­āļ”āļĩāđ€āļŦāļ™āļ·āļ­ JAX-WS API āđƒāļ™āđāļ‡ïœŠāļ—āļĩāđˆāļ§ïœŠāļē Axis2 āļĄāļĩ WS-Security āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ€āļĢāđ‡āļ§āļāļ§ïœŠāļē āļ‹āļķāđˆāļ‡āļāļēāļĢāļžāļąāļ’āļ™āļēāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļ—āđāļēāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŸāļĨ axis2.war āļˆāļēāļ http://ws.apache.org/axis2/ 2. āļ„āļąāļ”āļĨāļ­āļāđ„āļŸāļĨ axis2.war āļ āļēāļĒāđƒāļ•āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ—āļĩāđˆāļŠāļ·āđˆāļ­ webapps āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ CATALINA_BASE āļ‚āļ­āļ‡ Tomcat 3. āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄïœŠāļ—āļĢāļēāļšāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ Catalina Base āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ„āļ™āļŦāļēāđ„āļ”āđ‚āļ”āļĒāđ€āļ›ïœāļ”āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Services āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Servers āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Properties āļ‚āļ­āļ‡ Apache Tomcat āđ‚āļ”āļĒāđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Server āļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ Catalina Base āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 1 āļĢāļđāļ›āļ—āļĩāđˆ 1 āļāļēāļĢāļŦāļēāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ Catalina Base 4. āļˆāļ°āđ„āļ”āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ āļēāļĒāđƒāļ• webapps āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 2
  • 17. 17 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ‚āļ­āļ‡ webapps āļ āļēāļĒāļŦāļĨāļąāļ‡āļˆāļēāļāļ„āļąāļ”āļĨāļ­āļāđ„āļŸāļĨ axis2.war 5. āļ—āđāļēāļāļēāļĢ Start/Restart Tomcat āđāļĨāļ§āļ—āļ”āļŠāļ­āļš Axis2 āđ‚āļ”āļĒāļāļēāļĢāđ€āļĨāļ·āļ­āļ url āļ—āļĩāđˆāļŠāļ·āđˆāļ­ http://localhost:8084/axis2/ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3 āđ‚āļ”āļĒāļ āļēāļĒāđƒāļ™ Services āļˆāļ°āļĄāļĩāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ•āļąāļ§āļ­āļĒāļēāļ‡āļŠāļ·āđˆāļ­ Version āļĢāļąāļ™āļ­āļĒāļđ āļĢāļđāļ›āļ—āļĩāđˆ 3 āļŦāļ™ïœ‹āļēāļˆāļ­āļ‚āļ­āļ‡ Tomcat Axis2
  • 18. 18 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 6. āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ™āļĩāđ‰āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠïœŠāļ™ Soap UI āđ‚āļ”āļĒāļ­ïœ‹āļēāļ‡āļ­āļīāļ‡āļ–āļķāļ‡ WSDL āļ—āļĩāđˆ http://localhost:8084/axis2/services/Version?wsdl āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 Plugin āļŠāđāļēāļŦāļĢāļąāļš NetBeans āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Axis2 Plugin āđ€āļžāļ·āđˆāļ­āļ—āđāļēāđƒāļŦ NetBeans āļŠāļēāļĄāļēāļĢāļ–āļžāļąāļ’āļ™āļē Axis2 Web Services āđ„āļ”āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ Tools > Plugins 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Plugins āđ€āļĨāļ·āļ­āļāđāļ—āļ› Downloaded āđāļĨāļ§āļāļ”āļ›āļļāļĄ Add Plugins āđāļĨāļ§āđ€āļĨāļ·āļ­āļāđ„āļ›āļ—āļĩāđˆāđ„āļŸāļĨ org- netbeans-modules-websvc-axis2.nbm āļ‹āļķāđˆāļ‡āđ„āļ”āļ—āđāļēāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āļĄāļēāļïœŠāļ­āļ™āļŦāļ™ïœ‹āļēāļ™āļĩāđ‰ 3. āļāļ”āļ›āļļāļĄ Install āđāļĨāļ§āļāļ”āļ›āļļāļĄ Next āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāļĒāļ­āļĄāļĢāļąāļšāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚ āđāļĨāļ°āļāļ”āļ›āļļāļĄ install āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡ 4. āđ€āļĄāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ€āļŠāļĢāđ‡āļˆāļŠāļīāđ‰āļ™āđāļĨāļ§ āđƒāļŦāđ€āļĨāļ·āļ­āļ Restart IDE Now āđ€āļžāļ·āđˆāļ­ restart āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ āđāļĨāļ§āļāļ”āļ›āļļāļĄ Finish āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Tools > Plugin 5. āļˆāļēāļāļ™āļąāđ‰āļ™āļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢ Config Tomcat āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ– deploy Axis2 Web Service āđ„āļ”āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđ‚āļ”āļĒāđƒāļŦāđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Tools > Options 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Options āđ€āļĨāļ·āļ­āļāđāļ—āļ› Axis2 āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļē Axis2 .aar Files āđ€āļ›ïœ’āļ™āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ—āļĩāđˆāđ€āļĢāļēāļ•āļīāļ”āļ•āļąāđ‰āļ‡ axis2.war āļĨāļ‡āđ„āļ› āđāļĨāļ°āļāđāļēāļŦāļ™āļ”āļ„āļē Axis URL āđ€āļ›ïœ’āļ™ http://localhost:8084/axis2/ 7. āļāđāļēāļŦāļ™āļ” username āđāļĨāļ° password āļ‚āļ­āļ‡Tomcat Manager āđƒāļŦāļ–āļđāļāļ•āļ­āļ‡ āļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļĨāļ§āļāļ”āļ›āļļāļĄ OK [āļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ Tomcat Users āļŠāļēāļĄāļēāļĢāļ–āļ„āļ™āļŦāļēāđ„āļ”āļˆāļēāļāđ„āļŸāļĨ CATALINA_BASE/conf/tomcat-users.xml]
  • 19. 19 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 4 āļāļēāļĢ Config āļ„āļēāļŠāđāļēāļŦāļĢāļąāļš Tomcat Axis2 āļāļēāļĢāļžāļąāļ’āļ™āļē Axis2 Web Service āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Axis2 Web Service āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java āđāļĨāļ° Java Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ Axis2Demo āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ Director āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļšāđ„āļŸāļĨāđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Finish 4. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Axis2Demo āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web Services āđāļĨāļ° Axis2 Service from Java āđāļĨāļ§āļāļ” Next
  • 20. 20 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 6. āđ€āļĨāļ·āļ­āļāļŠïœŠāļ­āļ‡ Create Empty Web Service āđāļĨāļ§āļāļ” Next 7. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ› āļāđāļēāļŦāļ™āļ”āļŠāļ·āđˆāļ­ Class Name āđ€āļ›ïœ’āļ™ TaxServices āđāļĨāļ° Package āđ€āļ›ïœ’āļ™ ws āđāļĨāļ§āļāļ” Finish 8. āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ source code āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāđ€āļĄāļ˜āļ­āļ”āļ—āļĩāđˆāļŠāļ·āđˆāļ­ calculateTax āļ”āļąāļ‡āļ™āļĩāđ‰ package ws; public class TaxServices { public double calculateTax(double income) { return 0.1 * income; } } 9. āļ—āđāļēāļāļēāļĢ Deploy Web Services āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Axis Web Services āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ•āđ‚āļŦāļ™āļ” Axis2Demo āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Deploy to Server āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 5 āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢ Deploy Axis Web Services to Server 10. āļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ”āđ‚āļ”āļĒāļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđāļĨāļ°āļžāļīāļĄāļžïœŽ URL: http://localhost:8084/axis2/ āļˆāļēāļāļ™āļąāđ‰āļ™āļ„āļĨāļīāđŠāļ Services āļˆāļ°āđ€āļŦāđ‡āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ—āļĩāđˆāļŠāļ·āđˆāļ­ TaxServices āļ­āļĒāļđ āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 6
  • 21. 21 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡ TaxServices āļ āļēāļĒāđƒāļ™ Services 11. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ—āļ”āļŠāļ­āļšāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ™āļĩāđ‰āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠïœŠāļ™ Soap UI āđ‚āļ”āļĒāļ­ïœ‹āļēāļ‡āļ­āļīāļ‡āļ–āļķāļ‡ WSDL āļ—āļĩāđˆ http://localhost:8084/axis2/services/TaxServices?wsdl āđ„āļ” 12. āđ‚āļ”āļĒāļŦāļĨāļąāļ‡āļˆāļēāļāļāļēāļĢāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Request1 āđāļĨāļ°āđƒāļŠïœŠāļ„āļē income āđ€āļŠāļĢāđ‡āļˆāđāļĨāļ§ āļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™ port āļˆāļēāļ 8080 āđ€āļ›ïœ’āļ™ 8084 āļïœŠāļ­āļ™āļāļēāļĢāļĢāļąāļ™ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļĨāļ° 8 āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ edit current.. āđ€āļžāļ·āđˆāļ­āđ€āļ›āļĨāļĩāđˆāļĒāļ™ Port āļ‚āļ­āļ‡ axis2 āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™ Port āļ‚āļ­āļ‡ axis2 āļˆāļēāļ 8080 āđ€āļ›ïœ’āļ™ 8084 āļïœŠāļ­āļ™āļāļēāļĢāļĢāļąāļ™
  • 22. 22 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 4: āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MySQL Database āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āļ™āđƒāļŠïœ‹āļ‡āļēāļ™ Database Tool āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš Table test āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āļŠāđāļēāļŦāļĢāļąāļšāđ€āļ›ïœ’āļ™āļ•āļąāļ§āļŠïœŠāļ§āļĒāđƒāļŦāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™ āđ€āļŠïœŠāļ™āļ›āļāļ•āļīāļ–āļēāļˆāļ° create table āļāđ‡āļ•āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™ SQL āđāļ• Tool āļ™āļĩāđ‰āļĄāļĩ GUI āļĄāļēāļŠïœŠāļ§āļĒ āļ—āđāļēāđƒāļŦāļĨāļ”āļ‚āļ­āļœāļīāļ”āļžāļĨāļēāļ” āđāļĨāļ° āļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļķāđ‰āļ™ āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰āļāļēāļĢāļ—āđāļēāđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ•āļ­āļ‡āļĄāļĩāļāļēāļĢ download āđāļĨāļ°āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL āđāļĨāļ° MySQL Workbench āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢ download āđ„āļ”āļˆāļēāļāđ€āļ§āđ‡āļš http://dev.mysql.com/ āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­ MySQL āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ MySQL Workbench 1. āđƒāļŦāđ€āļ›ïœāļ”āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL Workbench āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 1 āļˆāļēāļāļ™āļąāđ‰āļ™āļ—āđāļēāļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ āļĢāļđāļ›āļ—āļĩāđˆ 1 āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āļ‡āļēāļ™ Program MySQL Workbench 2. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Connection Name āđƒāļŠïœŠ Password āļ—āļĩāđˆāļāđāļēāļŦāļ™āļ”āđ„āļ§ïœ‹āđƒāļ™āļ•āļ­āļ™āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQLāļ‹āļķāđˆāļ‡āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™ root āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 2 āļĢāļđāļ›āļ—āļĩāđˆ 2 āļāļēāļĢāđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­ Connection āđ€āļžāļ·āđˆāļ­āđ€āļ‚āļēāđ„āļ›āļˆāļąāļ”āļāļēāļĢ Database
  • 23. 23 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡ books āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ‚āļ”āļĒāđƒāļŦāļ­āļĒāļđāļ āļēāļĒāđƒāļ• Schema āļ—āļĩāđˆāļŠāļ·āđˆāļ­ test āđ‚āļ”āļĒ Table āļ™āļĩāđ‰āļāđāļēāļŦāļ™āļ”āđƒāļŦāļĄāļĩ Column āļ•āļēāļ‡āđ† āļ”āļąāļ‡āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆ 1 āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆ 1 Table books āļŠāļ·āđˆāļ­Column āļŠāļ™āļīāļ” āļ‚āļ™āļēāļ” Primary Key Index isbn varchar 20 Y Y title varchar 70 - - author varchar 50 - - price float - - - āđ€āļĢāļēāļˆāļ°āđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL WorkBench āđƒāļ™āļāļēāļĢāļ—āļĩāđˆāļˆāļ°āļŠāļĢāļēāļ‡ Tableāļ™āļĩāđ‰āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āļēāļ‡āđ† āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļ„āļĨāļīāđŠāļāļ—āļĩāđˆ icon āļŠāļ·āđˆāļ­Add Table... āđāļĨāļ§āđƒāļŠïœŠāļŠāļ·āđˆāļ­table āđāļĨāļ° āļŠāļ·āđˆāļ­ field āļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆ 1 āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļĨāļ§āļāļ”āļ›āļļāļĄ Apply
  • 24. 24 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āļāļēāļĢāđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡ 2. āļŦāļĢāļ·āļ­āđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ SQL Statement āļāđ‡āđ„āļ” āđ‚āļ”āļĒāļ™āđāļēāđ„āļ›āđƒāļŠïœŠāļ—āļĩāđˆāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Query1 āđāļĨāļ§ āļāļ” icon āļŠāļēāļĒāļŸïœ†āļēāļŠāļĩāđ€āļŦāļĨāļ·āļ­āļ‡āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™ CREATE TABLE BOOKS ( ISBN VARCHAR(20) NOT NULL , TITLE VARCHAR(70) NULL , AUTHOR VARCHAR(50) NULL , PRICE FLOAT NULL , PRIMARY KEY (ISBN) ); 3. āđ€āļ›ïœāļ” Tables books āļˆāļ°āđ€āļŦāđ‡āļ™ Column āļ•āļēāļ‡āđ† āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 4
  • 25. 25 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 4 āļœāļĨāļĨāļąāļžāļ˜ïœŽāļˆāļēāļāļāļēāļĢāļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡ āļāļēāļĢāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āđƒāļ™ MySQL WorkBench āļ āļēāļĒāļŦāļĨāļąāļ‡āļˆāļēāļāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļˆāļ°āļ•āļīāļ”āļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāļĨāļ‡āđƒāļ™ Table āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āļēāļ‡āđ†āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Table books āļ”āļēāļ™āļ‚āļ§āļē āļˆāļ°āđ„āļ” SQL Editor āđƒāļŦāļ›ïœ†āļ­āļ™āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āđ€āļ›ïœ’āļ™ INSERT INTO books VALUES ('123', 'JAVA', 'Numnonda', 2500.00); INSERT INTO books VALUES ('456', 'SOA', 'Numnonda', 3000.00) ;
  • 26. 26 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āđāļĨāļ§ āļ„āļĨāļīāđŠāļāļ—āļĩāđˆ icon āļŠāļēāļĒāļŸïœ†āļēāļŠāļĩāđ€āļŦāļĨāļ·āļ­āļ‡ āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 5 āļŦāļĢāļ·āļ­āļāļ”Ctrl+Shift+Enter āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™āļ„āđāļēāļŠāļąāđˆāļ‡ SQL āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļĢāļđāļ›āļ—āļĩāđˆ 5 āļāļēāļĢ Executeāļ„āđāļēāļŠāļąāđˆāļ‡āđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ 2. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ”āļđāļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ›ïœ†āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ€āđāļĨāļ§āļĨāļ·āļ­āļ Select Rows – Limit 1000 āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 6 āļĢāļđāļ›āļ—āļĩāđˆ 6 āļāļēāļĢāđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāđƒāļ™ Table āļŠāļ·āđˆāļ­ books
  • 27. 27 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 3. āđ€āļĄāļ·āđˆāļ­āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Database āđāļĨāļ§āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹ NetBeans āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš Database āđ„āļ”āđ‚āļ”āļĒāļŠāđāļēāļŦāļĢāļąāļš Netbeans 7.3 āđƒāļŦāđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāđāļ—āļ› Services āļˆāļ°āđ€āļŦāđ‡āļ™ MySQL Driver āļ—āļĩāđˆāļĄāļĩāļĄāļēāđƒāļŦāđāļĨāļ§ āļ‹āļķāđˆāļ‡āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Databases > Drivers āļˆāļ°āđ€āļŦāđ‡āļ™ Driver āļ—āļĩāđˆāļŠāļ·āđˆāļ­ MySQL āđƒāļŦāļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļē āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Connect Using 4. āđƒāļŦāļ—āđāļēāļāļēāļĢāļĢāļ°āļšāļļāļ„āļēāļ‚āļ­āļ‡ Host: āđāļĨāļ° Port: āđ€āļ›ïœ’āļ™ localhost āđāļĨāļ° 3306 (āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄïœŠāđ„āļ”āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ port āļ•āļ­āļ™ āļ•āļīāļ”āļ•āļąāđ‰āļ‡) āļ•āļēāļĄāļĨāđāļēāļ”āļąāļš 5. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļĢāļ°āļšāļļāļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ•āļīāļ”āļ•āļ­ (āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļĢāļ°āļšāļļ test) 6. āļŠāđāļēāļŦāļĢāļąāļš User Name: āđāļĨāļ° Password: āđƒāļŦāđƒāļŠïœŠāļ„āļēāļ•āļēāļĄāļ—āļĩāđˆāļāđāļēāļŦāļ™āļ”āđ„āļ§ïœ‹āđƒāļ™āļ•āļ­āļ™āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ MySQL āļ‹āļķāđˆāļ‡āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™ root āđāļĨāļ° root āđ‚āļ”āļĒāđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāđ„āļ”āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļąāļš Database Connection
  • 28. 28 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 7. āļāļ” OK āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Runtime āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš Database āļˆāļ°āđ€āļŦāđ‡āļ™ Connection āđƒāļŦāļĄïœŠāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8 āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡ Connection āđ„āļ›āļĒāļąāļ‡ test Database 5. āļ–āļēāļ‚āļĒāļēāļĒāđāļ—āļš jdbc:mysql://localhost:3306/test āļˆāļ°āđ€āļŦāđ‡āļ™āļĢāļēāļĒāļāļēāļĢ test > Tables > books āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ View Data... āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9 āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļāđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄāļđāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ books 6. āļˆāļ°āđ€āļŦāđ‡āļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļ•āļēāļĢāļēāļ‡ books āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10 āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļ‚āļ­āļĄāļđāļĨāđƒāļ™āļ•āļēāļĢāļēāļ‡ Books
  • 29. 29 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 5: Java Web Services from Session Bean (1) āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Enterprise Java Bean (EJB) āđ‚āļ”āļĒāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāļšāļ™ GlassFish Server 3.1.2 āđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļšāļ™ Application Server āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāļ”āļ§āļĒ Entity Class āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļāļąāļšāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđāļĨāļ° Session Bean āđ€āļžāļ·āđˆāļ­āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Entity Class āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļžāļīāđˆāļĄ āđāļïœ‹āđ„āļ‚ āđāļĨāļ° āļĨāļšāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡ books āđ„āļ” āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļŠāļĢāļēāļ‡ Enterprise Application Project 2. āļžāļąāļ’āļ™āļē Entity Class 3. āļžāļąāļ’āļ™āļē Session Bean 4. āļžāļąāļ’āļ™āļē Web Application 5. āļžāļąāļ’āļ™āļē Java Web Services āļˆāļēāļ Session Bean āļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļ•āļīāļ”āļ•āļ­āļāļąāļš MySQL Database āđ„āļ” āđƒāļŦāļ—āđāļēāļāļēāļĢāļ”āļđāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ GlassFish āļˆāļēāļāđƒāļ™ NetBeans āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļ„āļĨāļīāđŠāļāļ—āļĩāđˆ tab Services āđƒāļ™ NetBeans 2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ GlassFish āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ Servers āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŦāļēāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ GlassFish 3. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ”āļđāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ domain āđƒāļ™ GlassFish Server āļˆāļēāļ Domains Folder: āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
  • 30. 30 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ Domain āđƒāļ™ GlassFish 4. āđ„āļ›āļĒāļąāļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ Domain āđƒāļ™ GlassFish āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ™āđāļēāđ„āļŸāļĨ mysql-connector-java-5.1.19-bin.jar (MySQL Driver) āđ„āļ›āđƒāļŠïœŠāđ„āļ§ïœ‹āđƒāļ™ folder lib āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3 āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠ MySQL Driver āļ āļēāļĒāđƒāļ™ Domain āļ‚āļ­āļ‡ GlassFish 5. Restart GlassFish āđ‚āļ”āļĒāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ•āļĢāļ‡ GlassFish āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ NetBeans āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Restart āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4
  • 31. 31 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢ Restart GlassFish Server āļāļēāļĢāļŠāļĢāļēāļ‡ Enterprise Application Project āđ€āļĢāļēāļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĄ Enterprise Application āļ‹āļķāđˆāļ‡āļĄāļĩāļ—āļąāđ‰āļ‡ EJB Module āđāļĨāļ° Web Module āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄïœŠāļ‚āļķāđ‰āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File => New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Enterprise āđ€āļ›ïœ’āļ™ Enterprise Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ BookApp āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš project āđ„āļ§ïœ‹ āļāļ” Next 4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 āđāļĨāļ°āđƒāļŦāđ€āļĨāļ·āļ­āļāļŠïœŠāļ­āļ‡ Create EJB Module: āđāļĨāļ° Create Web Application Module: āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
  • 32. 32 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Enterprise Application 5. āļāļ” Finish āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class āđ‚āļ›āļĢāđāļāļĢāļĄ EJB 3.0 āļˆāļ°āđƒāļŠïœ‹āļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Entity āđ€āļžāļ·āđˆāļ­āđ€āļ›ïœ’āļ™āļ­āļ­āļ›āđ€āļˆāđ‡āļ„āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļšāļ•āļēāļĢāļēāļ‡āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļŠāļĢāļēāļ‡ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Books.java āļˆāļēāļāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āļ‹āļķāđˆāļ‡āļĄāļĩāļāļēāļĢāļŠāļĢāļēāļ‡āļĄāļēāļïœŠāļ­āļ™āđāļĨāļ§ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-ejb āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity Classes from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: āđ€āļ›ïœ’āļ™ New Data Sourceâ€Ķ āđ‚āļ”āļĒāđƒāļŠïœŠāļŠāļ·āđˆāļ­ JNDI Name: jdbc/test āđāļĨāļ°āđ€āļĨāļ·āļ­āļāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āđ„āļ›āļĒāļąāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ test āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
  • 33. 33 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Data Source 4. āļāļ” OK āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Add All >> āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāļ™āđāļēāļĄāļēāļŠāļĢāļēāļ‡ Entity Class āļ‹āļķāđˆāļ‡āļˆāļ°āđ„āļ” Selected Tables: āđ€āļ›ïœ’āļ™ books āļāļ” Next āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7
  • 34. 34 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļˆāļēāļ Data Source 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āđāļĨāļ°āđƒāļŦāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§ïœŠāļē Crate Persistence Unit āđ„āļ”āļ–āļđāļāđ€āļĨāļ·āļ­āļāđ„āļ§ïœ‹ āļ‹āļķāđˆāļ‡ Persistence Unit āļˆāļ°āđ€āļ›ïœ’āļ™āļ•āļąāļ§āļāđāļēāļŦāļ™āļ”āđƒāļŦ EJB Container āļ‚āļ­āļ‡ Application Server āļĢāļđāđ„āļ”āļ§ïœŠāļē Entity Class āļˆāļ°āļ–āļđāļāļ„āļ§āļšāļ„āļļāļĄāļ”āļ§āļĒ Entity Manager āļ•āļąāļ§āđƒāļ” āđāļĨāļ°āđ€āļ›ïœ’āļ™āļ•āļąāļ§āļāđāļēāļŦāļ™āļ” Data Source āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āļāļąāļš Entity Manager āļ™āļĩāđ‰ 6. āđ„āļĄïœŠāļˆāđāļēāđ€āļ›ïœ’āļ™āļ•āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āļēāđƒāļ”āđ† āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
  • 35. 35 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class 7. āđ€āļĄāļ·āđˆāļ­āļāļ” Finish āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ persistence.xml āđƒāļ™ package: Configuration Files āđāļĨāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ Books.java āđƒāļ™ package: entity āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļˆāļ°āđƒāļŠïœ‹ Session Bean āđƒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļ­āļāļąāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ­āļ·āđˆāļ™āđ† āļ āļēāļĒāļ™āļ­āļ EJB Container āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŦāļĨāļēāļ™āļąāđ‰āļ™āļˆāļ°āļ•āļīāļ”āļ•āļ­āļāļąāļš Entity Class āđ‚āļ”āļĒāļœïœŠāļēāļ™ Session Bean āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Session Bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­ BooksFacade.java āļ—āļĩāđˆāļĄāļĩ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļïœ‹āđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ books āđ‚āļ”āļĒāđƒāļŠïœ‹ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Books.java āđāļĨāļ° EntityManager āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-ejb āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Session Beans for Entity Classes āđāļĨāļ§āļāļ” Next 3. āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Add All >> āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ sb āđāļĨāļ°āđ€āļĨāļ·āļ­āļ local āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļĨāļ§āļāļ” Finish
  • 36. 36 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Bean 5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļŠāļĢāļēāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ BooksFacade.java āđāļĨāļ° BooksFacadeLocal.java āđƒāļ™ package āļ—āļĩāđˆāļŠāļ·āđˆāļ­ sb āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ›āļĢāđāļāļĢāļĄ EJB āļˆāļ°āđ€āļ›ïœ’āļ™āļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Business Logic āđ€āļ—āļēāļ™āļąāđ‰āļ™ āļāļēāļĢāļžāļąāļ’āļ™āļēāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Presentation āļˆāļ°āļ•āļ­āļ‡āđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļŦāļĢāļ·āļ­ Java SE āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™ isbn āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āđƒāļ™āļŦāļ™ïœ‹āļēāđ€āļ§āđ‡āļš findBook.html āđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĩāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļĩāđˆāļŠāļ·āđˆāļ­ ShowBook.java āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ”āļąāļ‡āļāļĨāļēāļ§āļ­āļ­āļāļĄāļē āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html āđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļžāļˆāļ—āļĩāđˆāđƒāļŠïœ‹āđāļŠāļ”āļ‡āļŸāļ­āļĢāļĄāļŠāđāļēāļŦāļĢāļąāļšāđƒāļŦāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™ isbn āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Otherâ€Ķ 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ HTML āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™ findBook āđāļĨāļ§āļāļ” Finish 4. āđ€āļ‚āļĩāļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ findBook.html āļ•āļēāļĄ Listing āļ—āļĩāđˆ 1 āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļĨāļēāļ icon āļ›āļĢāļ°āđ€āļ āļ— HTML Forms āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āđ€āļžāļ·āđˆāļ­āļŠāļēāļĄāļēāļĢāļ–āđƒāļŦāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āļ‡ïœŠāļēāļĒāļ‚āļķāđ‰āļ™
  • 37. 37 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Listing 1 āđ‚āļ›āļĢāđāļāļĢāļĄ findBook.html <html> <head> <title></title> </head> <body> <form action="ShowBook" method="POST"> <h2>Search Book from ISBN </h2> Enter ISBN <input type="text" name="isbn" value="" /> <input type="submit" value="Find" /> </form> </body> </html> 2. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ ShowBook.java āđ‚āļ›āļĢāđāļāļĢāļĄ ShowBook.java āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļĩāđˆāļˆāļ°āļ­ïœŠāļēāļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ ISBN āļ—āļĩāđˆāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™āļĄāļēāļˆāļēāļāļŦāļ™ïœ‹āļē findBook.html āđāļĨāļ°āļˆāļ°āđ€āļĢāļĩāļĒāļāđ€āļĄāļ˜āļ­āļ” find() āļ‚āļ­āļ‡ session bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­ BooksFacade āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BookApp-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New FileāđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ ShowBook āđāļĨāļ° Package: āđ€āļ›ïœ’āļ™ servlets āļāļ” Next āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Codeâ€Ķ > Call Enterprise Beanâ€Ķ 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Call Enterprise Bean āđ€āļĨāļ·āļ­āļ BooksFacade āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ BookApp-ejb āđāļĨāļ§āļāļ” OK 6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļžāļīāđˆāļĄ Source code āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ EJB āļ”āļąāļ‡āļ™āļĩāđ‰ @EJB private BooksFacadeLocal booksFacade; 7. āđƒāļŦāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ 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 ShowBook</title>");
  • 38. 38 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan out.println("</head>"); out.println("<body>"); String isbn = request.getParameter("isbn"); Books book = booksFacade.find(isbn); out.println("Title: " + book.getTitle()+ "<BR>"); out.println("Author: " + book.getAuthor() + "<BR>"); out.println("Price: " + book.getPrice() + "<BR>"); out.println("</body>"); out.println("</html>"); out.close(); } 9. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ Fix Imports āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ import āļ„āļĨāļēāļŠāļ•āļēāļ‡āđ† āđāļĨāļ§ Save āđ‚āļ›āļĢāđāļāļĢāļĄ āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ•āļĢāļ‡ BookApp āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Clean and Build 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ BookApp (āđ„āļĄïœŠāđƒāļŠïœŠ BookApp-ejb āļŦāļĢāļ·āļ­ BookApp-war) 3. āđ€āļĨāļ·āļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™ http://localhost:8080/BookApp-war/findBook.html āđƒāļŦāđ€āļĢāļēāļ—āļ”āļĨāļ­āļ‡āđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨ 4. āđ€āļĄāļ·āđˆāļ­āļāļ”āļ›āļļāļĄ Find āđ‚āļ›āļĢāđāļāļĢāļĄāļāđ‡āļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10 āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āļāļēāļĢāļžāļąāļ’āļ™āļē Java Web Services āļˆāļēāļ Session Bean 1. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļŠïœŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļīāļāļēāļĢāļ‚āļ­āļ‡ Stateless Session Bean āđ„āļ›āđ€āļ›ïœ’āļ™ Web Services āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāđāļïœ‹āđ„āļ‚āđ„āļŸāļĨ BooksFacade.java āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āđ‚āļŦāļ™āļ” BookApp-ejb āļ”āļąāļ‡āļ™āļĩāđ‰
  • 39. 39 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan @WebService @Stateless public class BooksFacade extends AbstractFacade<Books> implements BooksFacadeLocal { @PersistenceContext(unitName = "BookApp-ejbPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public BooksFacade() { super(Books.class); } @WebMethod public Books findBookDetailsByIsbn(String isbn) { Query query = em.createNamedQuery("Books.findByIsbn").setParameter("isbn", isbn); return (Books) query.getSingleResult(); } } 2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ Fix Imports āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ import āļ„āļĨāļēāļŠāļ•āļēāļ‡āđ† (javax.jws.WebService, javax.jws.WebMethod āđāļĨāļ° javax.persistence.Query) āđāļĨāļ§ Save āđ‚āļ›āļĢāđāļāļĢāļĄ 3. āļĨāļ­āļ‡āļ—āļ”āļŠāļ­āļšāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļˆāļēāļāđƒāļ™ NetBeans (āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠïœ‹ Test Web Service āđāļĨāļ°āđ€āļ‚āļĩāļĒāļ™ code) āđāļĨāļ°āđ‚āļ”āļĒāđƒāļŠïœ‹ Soap UI 4. āđƒāļŦāļ—āļ”āļĨāļ­āļ‡āđ€āļžāļīāđˆāļĄāđ€āļĄāļ˜āļ­āļ”āļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļīāļāļēāļĢāđ€āļ›ïœ’āļ™ Web Services āđ€āļŠïœŠāļ™ findBookDetailsByTitle
  • 40. 40 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 6: Java Web Services from Session Bean (2) āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Services āļŠāđāļēāļŦāļĢāļąāļš Java EE āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļšāļ™ Server āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ Java EE āđ‚āļ”āļĒāļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-WS āļ‹āļķāđˆāļ‡āđƒāļ™āļāļĢāļ“āļĩāļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŠïœ‹ NetBeans āļŠāļĢāļēāļ‡ Web Services Method āļ—āļĩāđˆāļŠāļ·āđˆāļ­ findEmployeeDetails āļˆāļēāļ Session Bean āđ‚āļ”āļĒ Service āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ„āļ™āļŦāļēāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ employee āļˆāļēāļ table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments 2. āļŠāļĢāļēāļ‡ EJB Module 3. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class 4. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean 5. āļŠāļĢāļēāļ‡ Web Application 1. āļāļēāļĢāļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđƒāļŦāļ—āđāļēāļāļēāļĢāļ„āļąāļ”āļĨāļ­āļ script āļ•āļ­āđ„āļ›āļ™āļĩāđ‰ āđāļĨāļ§āđƒāļŠïœŠāđƒāļ™ SQL Command Editor āļ‚āļ­āļ‡ NetBeans āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢ Run SQL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 create table `test`.DEPARTMENTS ( DEPARTMENT_ID INT not null primary key, DEPARTMENT_NAME VARCHAR(30) not null ); insert into departments values(90,'Executive'); create table `test`.EMPLOYEES ( EMPLOYEE_ID INT not null primary key, FIRST_NAME VARCHAR(20), LAST_NAME VARCHAR(25) not null, DEPARTMENT_ID INT, FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON UPDATE CASCADE ); insert into employees values(100,'Steven','King',90); insert into employees values(101,'Neena','Kochhar',90);
  • 41. 41 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Run SQL āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡āļ•āļēāļĢāļēāļ‡ āđ‚āļ”āļĒāđ€āļĄāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ”āļđāđƒāļ™ tables āļ‚āļ­āļ‡ test āļˆāļ°āļžāļš table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđāļĨāļ° departments āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2 āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļ–āļđāļāļŠāļĢāļēāļ‡āļ‚āļķāđ‰āļ™āļĄāļē āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Module 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Enterprise āđ€āļ›ïœ’āļ™ EJB Module āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļĨāļ§āļāļ” Next
  • 42. 42 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ EJB Module 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ EmployeeWS āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļšāđ„āļŸāļĨāđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Next 4. āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE 6 āđāļĨāļ§āļāļ” Finish āļāļēāļĢāļžāļąāļ’āļ™āļē Employees and Departments Entity Classes 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity Classes from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: āđ€āļ›ïœ’āļ™ jdbc/test āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āđ„āļ›āļĒāļąāļ‡āļ•āļēāļĢāļēāļ‡ test āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL
  • 43. 43 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļ›āļ—āļĩāđˆāļ•āļēāļĢāļēāļ‡ EMPLOYEES āđāļĨāļ§āļāļ” Add > āđāļĨāļ°āļ„āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ Include Related Tables āđ„āļ§ïœ‹āļ•āļēāļĢāļēāļ‡ EMPLOYEES āđāļĨāļ° DEPARTMENTS āļˆāļ°āļ–āļđāļāļĒāļēāļĒāļĄāļēāļ­āļĒāļđāđƒāļ™ Selected Tables: āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļĨāļ§āļāļ” Next āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļŠāđāļēāļŦāļĢāļąāļš EMPLOYEES āđāļĨāļ° DEPARTMENTS 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āđāļĨāļ° Finish
  • 44. 44 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāļĢāļ°āļšāļļ Package āļŠāđāļēāļŦāļĢāļąāļš Entity Classs āļ—āļĩāđˆāļŠāļĢāļēāļ‡āļ‚āļķāđ‰āļ™āļĄāļē āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Session Bean āđ‚āļ›āļĢāđāļāļĢāļĄNetBeans āļˆāļ°āļĄāļĩ Wizard āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Session Bean āļˆāļēāļ Entity Class āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļïœ‹āđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ tableāļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļš Entity Class āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New FileāđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Session Beans for Entity Classes āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Session Beans for Entity Classes āļāļ” Add All >> āđāļĨāļ§āļ„āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ Include Referenced Class āđ„āļ§ïœ‹ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next
  • 45. 45 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Beans For Entity Classes 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ sb āđāļĨāļ°āđ€āļĨāļ·āļ­āļ local āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļĨāļ§āļāļ” Finish āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ Session Bean
  • 46. 46 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ” Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Employees, Departments āđāļĨāļ° Session Bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­ AbstractFacade, EmployeesFacade, EmployeesFacadeLocal āđ‚āļ”āļĒāđ€āļĄāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āđāļĨāļ§ āļˆāļ°āļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8 āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ EmployeeWS āļ—āļĩāđˆāļ–āļđāļāļŠāļĢāļēāļ‡āļ‚āļķāđ‰āļ™ āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service Methods: findEmployeeDetails āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Web Services Method āļ—āļĩāđˆāļŠāļ·āđˆāļ­ findEmployeeDetails āđƒāļ™ Session Bean āļ—āļĩāđˆāļŠāļ·āđˆāļ­ EmployeesFacade.java āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļˆāļēāļāđāļšāļšāļïœƒāļāļŦāļąāļ” Enterprise Java Bean āđ‚āļ”āļĒ Services āļ™āļĩāđ‰āļˆāļ°āļ„āļ·āļ™āļ„āļē first_name, last_name āđāļĨāļ° department_name āļ‚āļ­āļ‡ employee āđ‚āļ”āļĒāļāļēāļĢāļ„āļ™āļŦāļēāļˆāļēāļ employee_id āļ—āļĩāđˆāļ›ïœ†āļ­āļ™āđ€āļ‚āļēāļĄāļē āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ EmployeesFacade.java āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Insert Codeâ€Ķ > Add Business Methodâ€Ķāļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
  • 47. 47 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļīāđˆāļĄāđ€āļĄāļ˜āļ­āļ”āđƒāļ™ Session Bean 2. āđ€āļžāļīāđˆāļĄ source code āđ‚āļ”āļĒāđ€āļžāļīāđˆāļĄāļ„āđāļēāļŠāļąāđˆāļ‡ annotation āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļāļēāļĻāđƒāļŦ session bean āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™ Web Service āđāļĨāļ°āđ€āļĄāļ˜āļ­āļ” findEmployeeDetails āđ€āļ›ïœ’āļ™ Web Services Method āđ‚āļ”āļĒāļĄāļĩāļ„āđāļēāļŠāļąāđˆāļ‡āļ”āļąāļ‡āļ™āļĩāđ‰ @WebService @Stateless public class EmployeesFacade extends AbstractFacade<Employees> implements EmployeesFacadeLocal { @PersistenceContext(unitName = "EmployeeWSPU") private EntityManager em; protected EntityManager getEntityManager() { return em;
  • 48. 48 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan } public EmployeesFacade() { super(Employees.class); } @WebMethod public List<String> findEmployeeDetails(int employee_id) { ArrayList<String> result = new ArrayList<String>(); Employees employee = em.find(Employees.class, employee_id); result.add("First name: " + employee.getFirstName()); result.add("Last name: " + employee.getLastName()); Departments department = employee.getDepartmentId(); result.add("Department name: " + department.getDepartmentName()); return result; } } 2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Fix Imports āļāļ” OK āđāļĨāļ§āļāļ”āļ›āļļāļĄ Save 3. āļ—āđāļēāļāļēāļĢ Clean and Build āđāļĨāļ° Deploy Project 4. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ EmployeeFacade āđƒāļ™ Web Services āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Test Web Service 5. āļāļ” WSDL File āđƒāļ™āļŦāļ™ïœ‹āļē Web Browser āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢ copy URL āļ‚āļ­āļ‡ WSDL File āđ„āļ§ïœ‹ āđ€āļŠïœŠāļ™ http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL
  • 49. 49 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Web Application āļšāļ™ Apache Tomcat āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļ—āļĩāđˆāļŠāļ·āđˆāļ­ findEmployeeDetails āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ EmployeeWSClient āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ Apache Tomcat 7.0.14.0 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 āđāļĨāļ§āļāļ” Finish 4. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWSClient āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other.. 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web Services āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Web Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client āđ€āļĨāļ·āļ­āļ WSDL URL: āđāļĨāļ°āđƒāļŠïœŠāļ„āļē http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL 7. āļāļ” Finish āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ Web Service Reference āđ‚āļ”āļĒāļĄāļĩ Service āļŠāļ·āđˆāļ­ EmployeesFacade 8. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” EmployeeWSClient āđāļĨāļ§āđ€āļĨāļ·āļ­āļ New > Servlet.. 9. āļāđāļēāļŦāļ™āļ” Servlet Name: āđ€āļ›ïœ’āļ™ EmployeeServlet āđƒāļŠïœŠāđƒāļ™ Package: servlets āļāļ” Next 10. āļāđāļēāļŦāļ™āļ” URL Pattern(s): āđ€āļ›ïœ’āļ™ /findEmployee āđāļĨāļ§āļāļ” Finish 11. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļĨāļēāļāđ‚āļŦāļ™āļ” findEmployeeDetails āļĨāļ‡āđƒāļ™āđ„āļŸāļĨ EmployeeServlet.java āļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļžāļīāđˆāļĄ source code āđƒāļŦāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđƒāļŦāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ source code āđƒāļ™āļŠïœŠāļ§āļ™āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āļ”āļąāļ‡āļ™āļĩāđ‰ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { String id = request.getParameter("id"); int employee_id = Integer.parseInt(id); List<String> result = findEmployeeDetails(employee_id);
  • 50. 50 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan for (String s : result) { out.print(s + "<BR>"); } } finally { out.close(); } } private static java.util.List<java.lang.String> findEmployeeDetails(int arg0) { sb.EmployeesFacadeService service = new sb.EmployeesFacadeService(); sb.EmployeesFacade port = service.getEmployeesFacadePort(); return port.findEmployeeDetails(arg0); } 12. āļāļ”āļ›āļļāļĄ Save āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—āđāļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ EmployeeWSClient 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ EmployeeServlet āđ‚āļ”āļĒāđƒāļŦāđƒāļŠïœŠāļ„āļēāļ‚āļ­āļ‡ URI āđ€āļ›ïœ’āļ™ /findEmployee?id=100 āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5
  • 51. 51 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļē id āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡ employee id=100 3. āļ—āļ”āļĨāļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™ http://localhost:8084/EmployeeWSClient/findEmployee?id=101 āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
  • 52. 52 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡ employee id=101 4. āļ­āļēāļˆāļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ findEmployee.html āđ€āļžāļ·āđˆāļ­āļĢāļąāļšāļ„āļē employee id āļˆāļēāļāļœāļđāđƒāļŠïœ‹ āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ”āđƒāļŦ findEmployee.html āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ EmployeeServlet āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ­āļĩāļāļ—āļĩ
  • 53. 53 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 7: RESTful Web Services āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ RESTful Web Services āđ‚āļ”āļĒāđƒāļŠïœ‹āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ JAX-RS āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Web Services āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļˆāļēāļāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MySQL āļœïœŠāļēāļ™āļŠāļļāļ”āļ„āđāļēāļŠāļąāđˆāļ‡ Java Persistence API (JPA) āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļŠāļĢāļēāļ‡ Web Application Project 2. āļžāļąāļ’āļ™āļē Entity Class 3. āļžāļąāļ’āļ™āļē RESTful Web Service āļˆāļēāļ Entity Class 4. āļ—āļ”āļŠāļ­āļš RESTful Web Service āļˆāļēāļ Entity Class 1. āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project āđ€āļĢāļēāļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĄ Web Application āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄïœŠāļ‚āļķāđ‰āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Project āđ€āļ›ïœ’āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ RestfulWS āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ Directory āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āļāļ” Next 4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āđāļĨāļ° Java EE 6 Web āđāļĨāļ§āļāļ” Finish 2. āļāļēāļĢāļžāļąāļ’āļ™āļē Entity Class āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Employees.java āļ‹āļķāđˆāļ‡āļˆāļ°āđ€āļ›ïœ’āļ™āļ­āļ­āļ›āđ€āļˆāđ‡āļ„āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļšāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļŠāļ·āđˆāļ­ employees āđƒāļ™ Oracle āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity Classes from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: āđ€āļ›ïœ’āļ™ jdbc/test
  • 54. 54 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āļāļ” OK āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāđ€āļ‰āļžāļēāļ° books āđāļĨāļ§āļāļ” Add > 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āđāļĨāļ°āļāļ” Finish 3. āļāļēāļĢāļžāļąāļ’āļ™āļē Restful Web Service āļˆāļēāļ Entity Class āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Restful Web Services āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđ‚āļ”āļĒāļœïœŠāļēāļ™ Entity Class āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āđ„āļ” āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web Services āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ RESTful Web Services from Entity Classes āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New RESTful Web Services from Entity Class āļāļ” Add All >> āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļĨāļ§āļāļ” Next āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Finish āļĢāļđāļ›āļ—āļĩāđˆ 1 āļāļēāļĢāđ€āļĨāļ·āļ­āļ Entity Class āļŠāđāļēāļŦāļĢāļąāļš RESTful Web Service
  • 55. 55 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āļāļēāļĢāļ—āļ”āļŠāļ­āļš RESTful Web Service āļˆāļēāļ Entity Class āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš RESTful Web Services āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” RestfulWS āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Test Restful Web Services 2. āđ‚āļ›āļĢāđāļāļĢāļĄ Browser āļˆāļ°āđāļŠāļ”āļ‡ uri āļ‚āļ­āļ‡ RESTful Web Services āđƒāļŦāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ‚āļŦāļ™āļ” entity.books āđāļĨāļ°āļ„āļĨāļīāđŠāļāļ›āļļāļĄ Test āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 2 āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđ
  • 56. 56 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 3. āđƒāļŦāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ {id} āđāļĨāļ°āļ—āļ”āļĨāļ­āļ‡āļ›ïœ†āļ­āļ™āļ‚āļ­āļĄāļđāļĨ id āđ€āļ›ïœ’āļ™ 111 āđāļĨāļ§āļāļ”āļ›āļļāļĄ Test āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ•āļąāļ§āļ­āļĒāļēāļ‡āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3 āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļĩāđˆāļĄāļĩ id (isbn) āđ€āļ—āļēāļāļąāļš 111 4. āļ—āļ”āļĨāļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™ methodāđ€āļ›ïœ’āļ™ DELETE āđ€āļžāļ·āđˆāļ­āļ—āļ”āļĨāļ­āļ‡āļ—āđāļēāļāļēāļĢāļĨāļšāļ‚āļ­āļĄāļđāļĨāļ­āļ­āļāļˆāļēāļāļ•āļēāļĢāļēāļ‡ books
  • 57. 57 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 8: Google Map Web Services āđāļšāļšāļïœƒāļāļŦāļąāļ”āđƒāļ™āļšāļ—āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļ•āļąāļ§āļ­āļĒāļēāļ‡āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services āđāļĨāļ°āđƒāļŠïœ‹ Web Application āđ€āļĢāļĩāļĒāļāđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāđ€āļāđ‡āļšāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ 2. āļŠāļĢāļēāļ‡ Enterprise Application Project 3. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class 4. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean) 5. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java 6. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java 1. āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ table āđāļĨāļ°āđ€āļ•āļĢāļĩāļĒāļĄāļ‚āļ­āļĄāļđāļĨāđ€āļžāļ·āđˆāļ­āđƒāļŠïœ‹āđƒāļ™āđāļšāļšāļïœƒāļāļŦāļąāļ” āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ bkk_hospital āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ Oracle āđ‚āļ”āļĒāđƒāļŦāļ—āđāļēāļāļēāļĢāļĢāļąāļ™āđ„āļŸāļĨ 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;
  • 58. 58 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital', '2 Prannok road Siriraj Bangkoknoi', 'Bangkok', '10700'); INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital', '51/3 Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900'); INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital', 'Phaya Thai Road, Phaya Thai', 'Bangkok', '10400'); 2. āļāļēāļĢāļŠāļĢāļēāļ‡ Enterprise Application Project āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļŠāļĢāļēāļ‡ Project āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ Enterprise Application āđ‚āļ”āļĒāļĄāļĩ Entity Class āļ—āļĩāđˆāļŠāļ·āđˆāļ­ BkkHospital āđ€āļžāļ·āđˆāļ­āļ—āđāļē ORM (Obeject Relational Mapping) āļāļąāļš table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ bkk_hospital āđāļĨāļ°āļĄāļĩāđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ·āđˆāļ­āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđƒāļŦāļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļ āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļˆāļēāļāđƒāļ™ Google Map āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java EE āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Projects āđ€āļ›ïœ’āļ™ Enterprise Application Project āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name: āđ€āļ›ïœ’āļ™ BkkHospitalGoogleMap āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location: āđ€āļ›ïœ’āļ™ Directory āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āđāļĨāļ§āļāļ” Finish 3. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Entity Class āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Entity Class āļˆāļēāļ table āļ—āļĩāđˆāļŠāļ·āđˆāļ­ bkk_hospital āļ‹āļķāđˆāļ‡āļĄāļĩāļāļēāļĢāļŠāļĢāļēāļ‡āļĄāļēāļïœŠāļ­āļ™āđāļĨāļ§ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Entity Classes from Database āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Entity Classes from Database āđƒāļŦāđ€āļĨāļ·āļ­āļ Data Source: jdbc/test 4. āđ€āļĨāļ·āļ­āļ bkk_hospital āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Add āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāđƒāļŦāđ€āļ›ïœ’āļ™ Selected Tables: āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ entity āđāļĨāļ§āļāļ” Finish
  • 59. 59 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean) āđ‚āļ›āļĢāđāļāļĢāļĄ BkkHospitalFacade āļˆāļ°āđ€āļ›ïœ’āļ™ Session Bean āđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡ Business method āđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡ āđāļïœ‹āđ„āļ‚ āļĨāļš āđāļĨāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡ table āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļąāļš Entity Class āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-ejb āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Persistence āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Session Beans for Entity Classes āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Session Beans for Entity Classes āļāļ” Add All > > āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ–āļąāļ”āđ„āļ›āđƒāļŦāļĢāļ°āļšāļļ Package: āđ€āļ›ïœ’āļ™ sb āļŠïœŠāļ§āļ™āļ„āļēāļ­āļ·āđˆāļ™āđ† āđ€āļ›ïœ’āļ™āļ•āļēāļĄāļ—āļĩāđˆāļ•āļąāđ‰āļ‡āđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Finish 5. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļē Servlet āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ·āđˆāļ­āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļš āļ­āļĒāļđāđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļˆāļ°āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ‚āļ­āļ‡ radio āđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļ āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđāļĨāļ§āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰ āļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļĩāđˆāļŠāļ·āđˆāļ­ DisplayLocation.java āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđ‚āļ”āļĒāđƒāļŠïœ‹ Google Map Web Services āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HospitalSelector.java āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Java Servlet āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Class Name: āđ€āļ›ïœ’āļ™ HospitalSelector āđāļĨāļ° Package āđ€āļ›ïœ’āļ™ controller āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļŦāļĨāļš Comment āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒ /* â€Ķ */ āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally 5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Code āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļ Call Enterprise Bean āđāļĨāļ§āđ€āļĨāļ·āļ­āļ BkkHospitalFacade āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ BkkHospitalGoogleMap-ejb āđāļĨāļ§āļāļ” OK 6. āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ source code āđƒāļŦāđ€āļ›ïœ’āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();
  • 60. 60 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan try { List<BkkHospital> hospitals = bkkHospitalFacade.findAll(); 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><br>"); } out.println("<input type='submit' value='Show Location' />"); out.println("</form>"); } finally { out.close(); } 7. āļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Fix Imports 8. Run āđ‚āļ›āļĢāđāļāļĢāļĄ āđāļĨāļ°āļžāļīāļĄāļžïœŽ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™ http://localhost:8080/BkkHospitalGoogleMap-war/HospitalSelector āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āļĢāļđāļ›āļ—āļĩāđˆ 1 āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āđ‡āļšāđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āđ€āļĨāļ·āļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ
  • 61. 61 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 6. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java āđ‚āļ›āļĢāđāļāļĢāļĄ DisplayLocation.java āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ‚āļ­āļ‡ Google Map āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āđāļœāļ™āļ—āļĩāđˆāļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļ—āļĩāđˆāđ€āļĨāļ·āļ­āļāļˆāļēāļ HospitalSelector.java āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New FileāđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Web āđ€āļĨāļ·āļ­āļ File Types: āđ€āļ›ïœ’āļ™ Servlet āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Class Name: āđ€āļ›ïœ’āļ™ DisplayLocation āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Package āđ€āļ›ïœ’āļ™ controller āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest() āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Insert Code.. > Call Enterprise Bean ...āđāļĨāļ§āđ€āļĨāļ·āļ­āļ BkkHospitalFacade āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ BkkHospitalGoogleMap-ejb 5. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Services āđāļĨāļ§āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Web Services > Google > Map Service 6. āļĨāļēāļāđ€āļ‹āļ­āļĢāļ§āļīāļŠ getGoogleMap āļĄāļēāđƒāļŠïœŠāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ—āļĩāđˆāđāļŠāļ”āļ‡ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ 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(); try { Object id = (Object) new Integer(request.getParameter("hospital_id")); BkkHospital hospital = bkkHospitalFacade.find(id); String address = hospital.getName() + ", " + hospital.getCity(); java.lang.Integer zoom = 15; String iframe = "false"; out.println("<h1>Google Map for " + hospital.getName() + "</h1>"); RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe); out.println(result.getDataAsString()); } finally { out.close(); }
  • 62. 62 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 7. āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĩāđ‰āļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ‚āļ­āļ‡ Google Map āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢāļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āļ—āļĩāđˆ url āļ—āļĩāđˆāļŠāļ·āđˆāļ­ http://code.google.com/apis/maps/signup.html āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ”āļ„āļē My web site URL āđ€āļ›ïœ’āļ™ http://localhost:8080 āđāļĨāļ§āļāļ”āļ›āļļāļĄ Generate API Key 8. āļ—āđāļēāļāļēāļĢāļāđ‡āļ­āļšāļ›ïœ‚āļ„āļē API Key āļ—āļĩāđˆāđ„āļ”āđ„āļ›āđƒāļŠïœŠāđƒāļ™āđ„āļžāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ googlemapservices.properties āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” BkkHospitalGoogleMap-war > Source Packages > org.netbeans.saas.google āļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āđ€āļŠïœŠāļ™ api_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm- All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ BkkHospitalGoogleMap āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Build āđāļĨāļ° Deploy 2. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ BkkHospitalGoogleMap āđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢ Run 3. āļžāļīāļĄāļžïœŽ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›ïœ’āļ™ http://localhost:8080/BkkHospitalGoogleMap- war/HospitalSelector āđāļĨāļ°āđƒāļŦāđ€āļĨāļ·āļ­āļāđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāđ€āļžāļ·āđˆāļ­āļ”āļđāļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļˆāļēāļāđƒāļ™ Google Map āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
  • 63. 63 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āļœāļĨāļĨāļąāļžāļ˜ïœŽāđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨāļˆāļēāļāđƒāļ™ Google Map
  • 64. 64 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 9: āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āđ‡āļšāđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļ­āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠïœ‹ Java Servlet āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļ›ïœ’āļ™ NoSQL āļ­āļĒāļēāļ‡ MongoDB āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļāđ‡āļšāļ‚āļ­āļĄāļđāļĨāđāļšāļš Document āđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ JSON āđāļĨāļ°āļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļšāļ‚āļ­āļĄāļđāļĨāļ‚āļ™āļēāļ”āđƒāļŦāļïœŠāđ„āļ” āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ•āļīāļ”āļ•āļąāđ‰āļ‡ MongoDB 2. āļ—āļ”āļĨāļ­āļ‡āđƒāļŠïœ‹ MongoDB 3. āđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MongoDB 1. āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ MongoDB āđ‚āļ›āļĢāđāļāļĢāļĄāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđƒāļ™āļĢāļ°āļšāļšāļ›āļŽāļīāļšāļąāļ•āļīāļāļēāļĢāļ—āļĩāđˆāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļ—āļąāđ‰āļ‡ Windows, Mac OS āļŦāļĢāļ·āļ­ Linux āļŠāđāļēāļŦāļĢāļąāļšāļšāļ™āļĢāļ°āļšāļšāļ›āļŽāļīāļšāļąāļ•āļīāļāļēāļĢ Windows āļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āđ„āļŸāļĨ Binary āļˆāļēāļāđ€āļ§āđ‡āļšāđ„āļ‹āļ• http://www.mongodb.org/downloads āļ‹āļķāđˆāļ‡āđ€āļĄāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢāļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāļ”āļąāļ‡āļāļĨāļēāļ§āđāļĨāļ§ āđƒāļŦāļ—āđāļēāļāļēāļĢ unzip āđ€āļāđ‡āļšāđ„āļŸāļĨāđ„āļ§ïœ‹āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ—āļĩāđˆāļ•āļ­āļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āļĄāļĩāđ„āļŸāļĨāļ•āļēāļ‡āđ† āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 1
  • 65. 65 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 1 āđ„āļŸāļĨāđ„āļšāļ™āļēāļĢāļĩāđˆāļ•āļēāļ‡āđ† āļ‚āļ­āļ‡ MongoDB āļ‹āļķāđˆāļ‡āđ„āļŸāļĨāļ—āļĩāđˆāļŠāđāļēāļ„āļąāļāļāđ‡āļ„āļ·āļ­ â€Ē mongod.exe āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ Database Server â€Ē mongo.exe āļ—āļĩāđˆāđ€āļ›ïœ’āļ™āļŦāļ™ïœ‹āļēāļˆāļ­āļ‚āļ­āļ‡ admin āđ‚āļ”āļĒ Default MongoDB āļˆāļ°āđ€āļāđ‡āļšāļ‚āļ­āļĄāļđāļĨāđ„āļ§ïœ‹āļ—āļĩāđˆāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ datadb āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āđ„āļ›āļŠāļĢāļēāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆāļ”āļąāļ‡āļāļĨāļēāļ§ āļ āļēāļĒāđƒāļ• Drive C 2. āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđƒāļŠïœ‹ MongoDB āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ—āļ”āļĨāļ­āļ‡āļāļēāļĢāđƒāļŠïœ‹āļ‡āļēāļ™ MongoDB āđ‚āļ”āļĒāļāļēāļĢāđ€āļ›ïœāļ”āđ‚āļ›āļĢāđāļāļĢāļĄ Mongo.exe āļ‹āļķāđˆāļ‡āļāđ‡āļˆāļ°āđ€āļ›ïœ’āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ command shell āļ‚āļ­āļ‡ administrator āđāļĨāļ°āđ‚āļ”āļĒ Default āļāđ‡āļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŠïœ‹āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāļ·āđˆāļ­ test āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ° āđāļŠāļ”āļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđƒāļŠïœ‹āļ­āļĒāļđāđ„āļ” āđ‚āļ”āļĒāļāļēāļĢāļžāļīāļĄāļžïœŽāļ„āđāļēāļŠāļąāđˆāļ‡ > db
  • 66. 66 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļ„āđāļēāļŠāļąāđˆāļ‡āļ—āļĩāđˆāļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļŠāļ·āđˆāļ­āļāļēāļ™āļ‚āļ­āļĄāļđāļĨ (database) āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ„āļ·āļ­ >show dbs āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāđƒāļŦāļĄïœŠāļ—āļĩāđˆāļŠāļ·āđˆāļ­āļ§ïœŠāļē mydatabase āđ‚āļ”āļĒāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ >use mydatabase āļ„āđāļēāļŠāļąāđˆāļ‡āļ—āļĩāđˆāļˆāļ°āđāļŠāļ”āļ‡ Tables āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄāļđāļĨāļ„āļ·āļ­ >show collections āđāļĨāļ°āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāļ”āļđāļ„āđāļēāļŠāļąāđˆāļ‡āđƒāļ™āļāļēāļĢāļŠïœŠāļ§āļĒāđ€āļŦāļĨāļ·āļ­āđ‚āļ”āļĒ >help āļŠāđāļēāļŦāļĢāļąāļšāđƒāļ™āļ•āļąāļ§āļ­āļĒāļēāļ‡āļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļ—āđāļēāļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­ āļŠāļ­āļ‡āđ€āļĨāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ > db.books.insert({isbn:"555123", author:"thanachart", title:"Introduction to MongoDB", price:1200}) āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāđ„āļ”āđ‚āļ”āļĒāļ„āđāļēāļŠāļąāđˆāļ‡āļ•āļ­āđ„āļ›āļ™āļĩāđ‰ > new_book = {isbn:"555124", author:"James Gosling", title: "Java SE", price: 1400} > db.books.insert(new_book) āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ”āļđāļ‚āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āļˆāļēāļāļ„āđāļēāļŠāļąāđˆāļ‡ > db.books.find() āļ‹āļķāđˆāļ‡āļāđ‡āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āļ™āļĩāđ‰ { "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1200 } { "_id" : ObjectId("511fb24e7c199204a9f733a6"), "isbn" : "555124", "author" : "James Gosling", "title" : "Java SE", "price" : 1400 }
  • 67. 67 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰ id āļˆāļ°āđ€āļ›ïœ’āļ™ index āđƒāļ™āļāļēāļĢāļĢāļ°āļšāļļāļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āļ‚āļ­āļĄāļđāļĨ āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āļ„āļ™āļŦāļēāļ‚āļ­āļĄāļđāļĨāļŠāđāļēāļŦāļĢāļąāļš āļĢāļēāļĒāļāļēāļĢāđƒāļ”āđ† āđ„āļ”āđ€āļŠïœŠāļ™ āļāļēāļĢāļ„āļ™āļŦāļēāļ•āļēāļĄāļŠāļ·āđˆāļ­āļœāļđāđāļ•āļ‡ > db.books.find({author:"thanachart"}) āļŦāļĢāļ·āļ­āļ­āļēāļˆāļ•āļ­āļ‡āļāļēāļĢāļ„āļ™āļŠāļ·āđˆāļ­āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļĩāđˆāļĄāļĩāļ„āđāļēāļ§ïœŠāļē Mongo > db.books.find({title:/Mongo/}) āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ° update āļ‚āļ­āļĄāļđāļĨ āđ€āļŠïœŠāļ™āļ•āļ­āļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĢāļēāļ„āļēāļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļĩāđˆāđāļ•āļ‡āđ‚āļ”āļĒ thanachart āđ€āļ›ïœ’āļ™ 1300 āđ‚āļ”āļĒāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡ > db.books.update({author:"thanachart"},{$set: {price:1300}}) āđ€āļĢāļēāļˆāļ°āļĨāļ­āļ‡āļ—āđāļēāļāļēāļĢāđ€āļžāļīāđˆāļĄ comment āļ‚āļ­āļ‡āļŦāļ™āļąāļ‡āļŠāļ·āļ­āđ€āļŠïœŠāļ™āļĄāļĩāļœāļđāļ­ïœŠāļēāļ™āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Somchai āļ­āļēāļˆāļĄāļēāđƒāļŦāļ„āļ§āļēāļĄāđ€āļŦāđ‡āļ™āļ§ïœŠāļēāļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ‚āļ­āļ‡ James Gosling āđ€āļ›ïœ’āļ™ â€œgood reading book” āđ‚āļ”āļĒāđ€āļĢāļēāļ­āļēāļˆāđƒāļŠïœ‹āļ„āđāļēāļŠāļąāđˆāļ‡āļ”āļąāļ‡āļ™āļĩāđ‰ > new_comment = {reader:"Somchai", date: new Date(), text: "good reading book"} > db.books.update({author:/James/},{$push: {comment:new_comment}}) āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āđ„āļ”āļ‚āļ­āļĄāļđāļĨāļ™āļĩāđ‰āđƒāļŦāļĄïœŠāđ€āļ›ïœ’āļ™ { "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1300 } { "_id" : ObjectId("511fb24e7c199204a9f733a6"), "author" : "James Gosling", "comment" : [ { "reader" : "Somchai", "date" : ISODate("2013-02-16T16:45:07.309Z"), "text" : "good reading book" } ], "isbn" : "555124", "price" : 1400, "title" : "Java SE" } 3. āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļš MongoDB āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ°āđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠāļ·āđˆāļ­āļĄāļ•āļ­āļāļąāļšāļāļēāļ™āļ‚āļ­āļĄāļđāļĨ MongoDB āđ„āļ”āļŦāļĨāļēāļĒāđāļšāļš āđāļ•āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āđƒāļŠïœ‹ MongoDB Driver āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļˆāļ°āļ”āļēāļ§āļ™ïœŽāđ‚āļŦāļĨāļ”āļĄāļēāđ„āļ”āļˆāļēāļ https://github.com/mongodb/mongo-java- driver/downloads
  • 68. 68 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āđƒāļ™āļ—āļĩāđˆāļ™āļĩāđ‰āļˆāļ°āļŠāļēāļ˜āļīāļ•āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļ­āļĄāļđāļĨāļĨāļ‡āđƒāļ™ MongoDB āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āđƒāļŦāļĄāļĩ āđ‚āļ›āļĢāđāļāļĢāļĄ addBook.html āđāļĨāļ° thankyou.html āļ”āļąāļ‡ Listing āļ—āļĩāđˆ 1 āđāļĨāļ° 2 āđāļĨāļ°āļ—āđāļēāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ WebBaseDB āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļš Project āđ„āļ§ïœ‹ āđāļĨāļ§āļāļ” Next 4. āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ Apache Tomcat āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 Web āđāļĨāļ§āļāļ” Finish 5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > HTML āļāļģāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™ addBook āđāļĨāļ§āļāļ” Finish 6. āđ€āļ‚āļĩāļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ addBook.html āļ•āļēāļĄ Listing āļ—āļĩāđˆ 1 Listing āļ—āļĩāđˆ 1 āđ‚āļ›āļĢāđāļāļĢāļĄ addBook.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Add a new book</title> </head> <body><h1>Add a new book</h1><P> <form action="MongoDBServlet" method="POST"> ISBN : <input type="text" name="isbn" value="" size="15"/> <BR> Title : <input type="text" name="title" value="" size="50"/> <BR> Author : <input type="text" name="author" value="" size="50"/> <BR> Price : <input type="text" name="price" value="" size="10"/> <BR> <input type="submit" value="Add" /> </form> </body> </html> 7. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > HTML āļāļģāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™ thankyou āđāļĨāļ§āļāļ” Finish 8. āđ€āļ‚āļĩāļĒāļ™ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ thankyou.html āļ•āļēāļĄ Listing āļ—āļĩāđˆ 2 Listing āļ—āļĩāđˆ 2 āđ‚āļ›āļĢāđāļāļĢāļĄ thankyou.html <html> <head> <title>Thank you</title> </head> <body> <H1>Thank you for inserting data </H1> </body>
  • 69. 69 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan </html> 9. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New → Servlet āļāļģāļŦāļ™āļ” Java Package āđ€āļ›ïœ’āļ™ controller, Class Name āđ€āļ›ïœ’āļ™ MongoDBServlet āđāļĨāļ§āļāļ” Finish 10. copy āđ„āļŸāļĨ mongo-2.10.1.jar āđ„āļ›āđ„āļ§ïœ‹āļ—āļĩāđˆāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ āđ‚āļ”āļĒāđƒāļŦ Copy āđ„āļ›āļ§āļēāļ‡āļ—āļĩāđˆ directory /lib āļ‚āļ­āļ‡ Apache Tomcat (āļ‹āļķāđˆāļ‡ Default āļ­āļĒāļđāļ—āļĩāđˆ C:Program FilesApache Software FoundationTomcat 6.0lib) 11. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ editor āđƒāļŦāđāļïœ‹āđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ MongoDBServlet.java āđƒāļŦāđ€āļ›ïœ’āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ—āļĩāđˆ 3 Listing āļ—āļĩāđˆ 3 āđ‚āļ›āļĢāđāļāļĢāļĄ MongoDBServlet.java package controller; import java.io.IOException; import java.io.PrintWriter; import java.net.UnknownHostException; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.Mongo; /** * Servlet implementation class MongoDBServlet */ @WebServlet("/MongoDBServlet") public class MongoDBServlet extends HttpServlet { private static final long serialVersionUID = 1L; Mongo m = null; public void init() {
  • 70. 70 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan try { m = new Mongo( "localhost" ); System.out.println("Connected"); } catch (Exception ex) { System.out.println(ex); } } 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>Add a new book</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1> Add a new book </h1>"); try { String isbn = request.getParameter("isbn"); String author = request.getParameter("author"); String title = request.getParameter("title"); String priceStr = request.getParameter("price"); float price = Float.parseFloat(priceStr); DB db = m.getDB( "test" ); BasicDBObject book = new BasicDBObject(); book.put("isbn", isbn); book.put("author", author); book.put("title", title); book.put("price", price); DBCollection coll = db.getCollection("books"); coll.insert(book); RequestDispatcher obj = request.getRequestDispatcher("thankyou.html"); obj.forward(request, response); } catch (UnknownHostException ex) { out.println("Error " + ex); return; } out.println("</body>");
  • 71. 71 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan out.println("</html>"); out.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } 4 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB 2. āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āļ‡āļēāļ™āļŦāļ™ïœ‹āļē addBook.html āđāļĨāļ§āļ—āļ”āļŠāļ­āļšāļāļĢāļ­āļāļ‚āļ­āļĄāļđāļĨ 3. āđ„āļ›āļ—āļĩāđˆāđ‚āļ›āļĢāđāļāļĢāļĄ admin āļ‚āļ­āļ‡ MongoDB āđāļĨāļ§āđ€āļĢāļĩāļĒāļāļ„āđāļēāļŠāļąāđˆāļ‡ db.books.find() āļˆāļ°āđ€āļŦāđ‡āļ™āļ‚āļ­āļĄāļđāļĨāđƒāļŦāļĄïœŠāļ—āļĩāđˆāļ›ïœ†āļ­āļ™āđ€āļ‚āļēāļĄāļē
  • 72. 72 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 10: Developing a Simple Synchronous BPEL Program āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļĨāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— BPEL āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™ Business Process āđāļšāļš Synchronous āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļāļēāļĢāđƒāļŠïœ‹ NetBeans āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™āļŸāļĢāļĩāđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— IDE āđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ·āđˆāļ­āļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āđāļĨāļ°āđ„āļŸāļĨ BPEL āđāļĨāļ°āđƒāļŠïœ‹ GlassFish āļ‹āļķāđˆāļ‡āđ€āļ›ïœ’āļ™ Open Source Application Server āļ—āļĩāđˆāļĄāļēāļžāļĢāļ­āļĄāļāļąāļš Open ESB āđƒāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ BPEL Process āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āđƒāļ™āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰ āđ€āļ›ïœ’āļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāđ€āļžāļ·āđˆāļ­āļ—āđāļēāļāļēāļĢāļ„āļąāļ”āļĨāļ­āļāļ‚āļ­āļ„āļ§āļēāļĄ āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ HelloBPEL 2. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL 3. āļžāļąāļ’āļ™āļē BPEL Process 4. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application 1. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ HelloBPEL āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ HelloBPEL āđāļĨāļ§āļāļ” Finish 2. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄāđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” HelloBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL DocumentāļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ HelloSample āđ€āļĨāļ·āļ­āļ WSDL Types: āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Type: āđ€āļ›ïœ’āļ™ RPC Literal āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āđ€āļžāļ·āđˆāļ­āđ„āļ›āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›
  • 73. 73 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļŠāļĢāļēāļ‡ WSDL Document āđ€āļ›ïœ’āļ™āđāļšāļš SOAP 3. āđƒāļ™āļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ inputType (āđ€āļĄāļ·āđˆāļ­āđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨāđ€āļŠāļĢāđ‡āļˆāđāļĨāļ§ āļ•āļ­āļ‡āļāļ” Enter āļŦāļ™āļķāđˆāļ‡āļ„āļĢāļąāđ‰āļ‡āđ€āļŠāļĄāļ­) āđāļĨāļ°āļŠïœŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ resultType āļ‹āļķāđˆāļ‡āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2
  • 74. 74 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļąāļš WSDL Document 4. āļāļ” Next > āđāļĨāļ§āļāļ” Finish āļˆāļ°āđ„āļ”āđ„āļŸāļĨ HelloSample.wsdl āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 3
  • 75. 75 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨ HelloSample.wsdl 3. āļāļēāļĢāļžāļąāļ’āļ™āļē BPEL Process āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1) āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ helloBPEL.bpel āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ HelloSample.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§ïœ‹āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļžāļīāđˆāļĄ PartnerLink āđ€āļ‚āļēāđ„āļ›āđƒāļ™ helloBPEL.bpel
  • 76. 76 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 2) āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļ­āļ„āļ­āļ™ Edit āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļšāļ™āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ PartnerLink1 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ inputVar āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļāļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 5 āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāđƒāļŦāļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive 5. āļāļ” OK āļˆāļ°āđ„āļ” HelloBPEL.bpel āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 6
  • 77. 77 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡āļāļēāļĢāļĢāļąāļšāļ„āļēāđ€āļ‚āļēāļĄāļēāļˆāļēāļ PartnerLink1 3) āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Process End 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ„āļĨāļīāđŠāļāđ„āļ­āļ„āļ­āļ™ Edit āļ‚āļ­āļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ PartnerLink1 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ outputVar āđāļĨāļ§āļāļ” OK 4) āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨ HelloBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđ€āļžāļ·āđˆāļ­āđ„āļ›āļĒāļąāļ‡āđāļ—āļ› Mapper āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” inputType āļ‚āļ­āļ‡ inputVar āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” resultType āļ‚āļ­āļ‡ outputVar āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē (āđ€āļ›ïœ’āļ™āļāļēāļĢāļāđ‡āļ­āļ›āļ›ïœ‚āļ„āļēāļˆāļēāļāļ­āļīāļ™āļžāļļāļ•āđ„āļ›āļĒāļąāļ‡āđ€āļ­āļēāļ—āļžāļļāļ•) āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 7
  • 78. 78 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāļ‚āļ­āļ‡ inputType āđ„āļ›āļĒāļąāļ‡ resultType 3. āđ€āļĄāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļāļĨāļąāļšāļĄāļēāļ—āļĩāđˆāđāļ—āļ› Design āļˆāļ°āđ„āļ” BPEL Process āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8 āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡ helloBPEL.pbel 4. āļāļ”āļ›āļļāļĄ Save
  • 79. 79 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļĢāļąāļ™ SampleBPEL āļšāļ™ BPEL Engine āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File => New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ HelloApplication āđāļĨāļ§āļāļ” Finish 4. āđƒāļŦāļĨāļēāļāđ‚āļ›āļĢāđ€āļˆïœŒāļ„ HelloBPEL āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđƒāļŠïœŠāđƒāļ™ JBI Modules āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9 āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡āđ€āļžāļīāđˆāļĄ JBI Modules āđƒāļ™ HelloApplication 5. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ HelloApplication āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Clean and Build āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10 āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆïœŒāļ„ HelloApplication
  • 80. 80 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ HelloApplication āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Deploy 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” HelloApplication > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ HelloSample.wsdl āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ HelloBPEL āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ HelloSampleOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļŠïœŠāļ§āļ™ inputType āļ”āļąāļ‡āļ™āļĩāđ‰ <inputType>Hello Thana</inputType> 7. āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run 8. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™ Listing āļ—āļĩāđˆ 1 [āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļ—āļĩāđˆāđ€āļ›ïœ’āļ™ Failed āđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļĄāļĩāļāļēāļĢāļ™āđāļēāļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āđ„āļ›āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļāļąāļšāđ„āļŸāļĨ Output.xml āļ‹āļķāđˆāļ‡āļ–āļēāđ„āļĄïœŠāļ•āļĢāļ‡āļāļąāļ™ āļāđ‡āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāđ€āļ›ïœ’āļ™ Failed āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļāļēāļĢāļĢāļąāļ™āļ„āļĢāļąāđ‰āļ‡āđāļĢāļ āļ‹āļķāđˆāļ‡āļĒāļąāļ‡āđ„āļĄïœŠāļĄāļĩāļ‚āļ­āļĄāļđāļĨāđƒāļ™ Output.xml āđƒāļŦāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļš āļˆāļķāļ‡āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāđ€āļ›ïœ’āļ™ Failed āđāļ•āļ–āļēāđ€āļĢāļēāđ€āļĨāļ·āļ­āļ Run āđƒāļ™āļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ› āđ‚āļ”āļĒāļ—āļĩāđˆāđ„āļĄïœŠāđ„āļ”āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āļēāđƒāļ™ Input.xml āļˆāļ°āļ—āđāļēāđƒāļŦāđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ•āļĢāļ‡āļāļąāļšāļ‚āļ­āļĄāļđāļĨāđƒāļ™ Output.xml āļāđ‡āļˆāļ°āđ„āļĄïœŠāđāļŠāļ”āļ‡āļœāļĨāđ€āļ›ïœ’āļ™ Failed āļ­āļĩāļāļ•āļ­āđ„āļ› āļ”āļąāļ‡āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļĒāļēāļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 11 āļĢāļđāļ›āļ—āļĩāđˆ 11 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™ TestCase1
  • 81. 81 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Listing āļ—āļĩāđˆ 1 āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āđ„āļŸāļĨ Output.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:HelloSampleOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/HelloBPEL/HelloSample"> <resultType>Hello Thana</resultType> </m:HelloSampleOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
  • 82. 82 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 11: BPEL for Writing to File āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Business Process āđ€āļžāļ·āđˆāļ­āđ€āļ‚āļĩāļĒāļ™āļ‚āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ„āļ”āļĢāļąāļšāļœāļđāđƒāļŠïœ‹āļ‡āļēāļ™āļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāđƒāļŠïœ‹āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ FileBPEL 2. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš SOAPBinding 3. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš FileBinding 4. āļžāļąāļ’āļ™āļē BPEL Process 5. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application 6. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase 7. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ Web Application 1. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ FileBPEL āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ FileBPEL āđāļĨāļ§āļāļ” Finish 2. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš SOAPBinding āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš SOAPBinding āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™ āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āđ€āļĨāļ·āļ­āļ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ DataIO āļāđāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āļāđāļēāļŦāļ™āļ” Binding āđ€āļ›ïœ’āļ™ SOAP āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ RPC Literal āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļĨāļ§āļāļ” Next
  • 83. 83 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļē WSDL Document 3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ id āļāļ” Add āđāļĨāļ§āđ€āļžāļīāđˆāļĄ input āļŠāđāļēāļŦāļĢāļąāļš firstName, lastName, salary (int) āđāļĨāļ°āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ result āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next āđāļĨāļ§āļāļ” Finish
  • 84. 84 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠāļ„āļē Input āđāļĨāļ° Output Messages 3. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš FileBinding āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļš FileBinding āđ€āļžāļ·āđˆāļ­āđ€āļ‚āļĩāļĒāļ™āļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āđƒāļŦāđ€āļĨāļ·āļ­āļ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ FileResult āđƒāļŦāđ€āļĨāļ·āļ­āļ WSDL Type: āđ€āļ›ïœ’āļ™ Concrete WSDL Document Binding āđ€āļ›ïœ’āļ™ FILE āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ Write āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Next
  • 85. 85 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠāļ„āļēāļŠāđāļēāļŦāļĢāļąāļš New WSDL Document 3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļāđāļēāļŦāļ™āļ”āļ„āļē Path: āđ„āļ›āļ—āļĩāđˆ C:SOAoutput āđ‚āļ”āļĒāļāļ” Browse āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļ Path: (āļˆāļ°āļ•āļ­āļ‡āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡ folder āļ™āļĩāđ‰āļ‚āļķāđ‰āļ™āļĄāļēāļïœŠāļ­āļ™) āđāļĨāļ°āđ€āļĨāļ·āļ­āļ File Exists: āđ€āļ›ïœ’āļ™ Append to Existing File āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” Finish
  • 86. 86 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļēāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ„āļŸāļĨ 4. āļāļēāļĢāļžāļąāļ’āļ™āļē BPEL Process āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 4.1 āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link 1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ fileBPEL.bpel āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ DataIO.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āđāļ—āļ›āđ€āļ—āļēāļ—āļēāļ‡āļ‹ïœ‹āļēāļĒāļĄāļ·āļ­āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design 2. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ DataIOPartnerLink 3. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ FileResult.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āđāļ—āļšāđ€āļ—āļēāļ—āļēāļ‡āļ‚āļ§āļēāļĄāļ·āļ­āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design 4. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ•āļĢāļ‡āļ‚āļ­āļ„āļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ FilePartnerLink
  • 87. 87 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡āļ•āđāļēāđāļŦāļ™ïœŠāļ‡āļ‚āļ­āļ‡ DataIOPartnerLink āđāļĨāļ° FilePartnerLink āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel 4.2 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ DataIOPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ inData āđāļĨāļ§āļāļ” OK 4.3 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļŦāļĨāļąāļ‡āļˆāļēāļāļ˜āļļāļĢāļāļĢāļĢāļĄ start 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ DataIOPartnerLink
  • 88. 88 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ outData āđāļĨāļ§āļāļ” OK 4.4 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļŠāđāļēāļŦāļĢāļąāļš write āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Invoke1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke1 āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ invokeWriteToFile āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ FilePartnerLink āđāļĨāļ° Operation: āđ€āļ›ïœ’āļ™ write āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ inFile āđāļĨāļ§āļāļ” OK 4.5 āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWriteToFile 2. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļĄāļđāļĨāđƒāļ™āđ‚āļŦāļ™āļ” inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāļĄāļ·āļ­ āđ‚āļ”āļĒāđ€āļĨāļ·āļ­āļ String > Concat āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡ 1. firstName āđ€āļ‚āļēāđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 1 2. ‘ ‘ āđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 2 (āđ‚āļ”āļĒāļāļēāļĢāļāļ”āļ›āļļāļĄ Space Bar āļšāļ™āļ„āļĩāļĒāļšāļ­āļĢāļ”) 3. lastName āđ€āļ‚āļēāđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 3 4. ‘ => ‘ āđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 4 5. salary āđ€āļ‚āļēāđ€āļ›ïœ’āļ™ String āļŠïœŠāļ­āļ‡āļ—āļĩāđˆ 5 6. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡ return String āđ„āļ›āļĒāļąāļ‡ part1 āđƒāļ™ inFile āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļĄāļ·āļ­ āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6
  • 89. 89 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āđāļĨāļ° invokeWriteToFile āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļˆāđāļēāļ™āļ§āļ™āđāļ–āļ§āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļĨāļēāļāđ€āļ‚āļēāđ„āļ›āļ—āļĩāđˆ āļ‚āļ­āļ‡ Concat āļˆāđāļēāļ™āļ§āļ™āđāļ–āļ§āļāđ‡āļˆāļ°āļ–āļđāļāđ€āļžāļīāđˆāļĄāđƒāļŦāļ—āļąāļ™āļ—āļĩ 3. āđƒāļ™āđ„āļŸāļĨ fileBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWriteToFile āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āđ€āļĨāļ·āļ­āļ String > String Literal āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļēāđ€āļ›ïœ’āļ™ Success āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļŸïœāļĨāļ”āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ string literal āļāļąāļš result āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ outData āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ invokeWriteToFile āđāļĨāļ° end 5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
  • 90. 90 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš 6. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPEL āđ€āļĨāļ·āļ­āļ Clean and Build 5. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļĢāļąāļ™ FileBPEL āļšāļ™ BPEL Engine āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ FileCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļŦāļĨāļēāļāđ‚āļ›āļĢāđ€āļˆïœŒāļ„ FileBPEL āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āļĄāļēāđƒāļŠïœŠāđƒāļ™ JBI Modules āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design 5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ FileCompositeApp āđ€āļĨāļ·āļ­āļ Clean and Build āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9
  • 91. 91 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļŠāļ”āļ‡ Service Assembly āļ‚āļ­āļ‡ FileCompositeApp 6. āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase 1. āļ—āđāļēāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ FileCompositeApp 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” FileCompositeApp > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļ™ FileBPEL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ DataIO.wsdl āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ DataIOOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļ”āļąāļ‡āļ™āļĩāđ‰ <id>1234</id> <firstName>Somjai</firstName> <lastName>Jaidee</lastName> <salary>38000</salary> 7. āļāļ”āļ›āļļāļĄ Save āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run 8. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 10 āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļąāļ™ TestCase1 9. āđāļĨāļ°āļˆāļ°āđ„āļ”āđ„āļŸāļĨ output.xml āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ c:SOAoutput āļ‹āļķāđˆāļ‡āļĄāļĩāļ‚āļ­āļĄāļđāļĨāļ”āļąāļ‡āļ™āļĩāđ‰ Somjai Jaidee => 38000
  • 92. 92 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 7. āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ Web Application āļ—āđāļēāļāļēāļĢāļ„āļ™āļŦāļēāļ•āđāļēāđāļŦāļ™ïœŠāļ‡ url āļ‚āļ­āļ‡ soap:address āļ•āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđƒāļ™ Service Assembly āļ‚āļ­āļ‡ FileCompositeApp āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ DataIOPort āđ€āļĨāļ·āļ­āļ Clone WSDL to edit āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 11 āļĢāļđāļ›āļ—āļĩāđˆ 11 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ Clone WSDL Port to edit āļ‚āļ­āļ‡ DataIOPort 2. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ DataIOPort āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties 3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Properties āđƒāļŦāļ—āđāļēāļāļēāļĢ copy āļ„āļēāļ‚āļ­āļ‡ Location āđƒāļ™ soap:address 4. Location āļ‚āļ­āļ‡ soap:address āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™āļ•āļąāļ§āđāļ›āļĢāļ—āļĩāđˆāļŠāļ·āđˆāļ­ ${HttpDefaultPort} āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”āļđāļ„āļēāļ‚āļ­āļ‡ ${HttpDefaultPort} āđ„āļ”āļˆāļēāļāļāļēāļĢāđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāđāļ—āļ› Services āđ‚āļŦāļ™āļ” Servers > GlassFish Server 3.1.2 > JBI > Binding Components > sun-http-binding āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ·āļ­āļ properties āļˆāļ°āđ€āļŦāđ‡āļ™ Default HTTP Port Number āļ‹āļķāđˆāļ‡āļˆāļ°āļĄāļĩāļ„āļēāđ€āļ›ïœ’āļ™ 9080 5. āļ—āļ”āļŠāļ­āļšāđ‚āļ”āļĒāđ€āļ›ïœāļ” Web Browser āđāļĨāļ§ paste āļ„āļēāļ—āļĩāđˆ copy āđ„āļ§ïœ‹ āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āļēāļ‚āļ­āļ‡ URL āđƒāļŦāđ€āļ›ïœ’āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ http://localhost:9080/DataIOService/DataIOPort?WSDL āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ·āđˆāļ­āđƒāļŦāļœāļđāđƒāļŠïœ‹āļ›ïœ†āļ­āļ™āļ„āļēāļ‚āļ­āļĄāļđāļĨāļ•āļēāļ‡āđ† āļˆāļēāļāļ™āļąāđ‰āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—āđāļēāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āļ­āļĄāļđāļĨāļĨāļ‡āđ„āļŸāļĨ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Java Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ FileBPUI āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Project Location āđ€āļ›ïœ’āļ™ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāđ‡āļšProject āđ„āļ§ïœ‹ 4. āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļ Server āđ€āļ›ïœ’āļ™ GlassFish Server 3.1.2 āļāđāļēāļŦāļ™āļ” Jave EE Version: āđ€āļ›ïœ’āļ™ Java EE 6 āđāļĨāļ§āļāļ” Finish 5. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ Web Services āđāļĨāļ° File Types āđ€āļ›ïœ’āļ™ Web Service Client āđāļĨāļ§āļāļ” Next 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Web Service Client āđƒāļŦāđ€āļĨāļ·āļ­āļ WSDL URL: āđāļĨāļ§āđƒāļŠïœŠ URL āđ€āļ›ïœ’āļ™ http://localhost:9080/DataIOService/DataIOPort?WSDL (āļ„āļ§āļĢāļˆāļ°āļ—āđāļēāļāļēāļĢ copy āļĄāļēāļˆāļēāļ Web Browser āđ„āļĄïœŠāļ„āļ§āļĢāļ—āļĩāđˆāļˆāļ°āļžāļīāļĄāļžïœŽāđ€āļ­āļ‡)
  • 93. 93 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 7. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > HTML 8. āļāđāļēāļŦāļ™āļ” HTML File Name: āđ€āļ›ïœ’āļ™ employeeInput āđāļĨāļ§āļāļ” Finish 9. āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ employeeInput.html āļ”āļąāļ‡āļ™āļĩāđ‰ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="EmployeeServlet" method="post"> ID: <input name="id" /><br> Firstname: <input name="firstname"/><br> Lastname: <input name="lastname"/><br> Salary: <input name="salary"/><br><br> <input type="submit" value="Insert" /> </form> </body> </html> 10. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” FileBPUI āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Servlet 11. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļāđāļēāļŦāļ™āļ”āļŠāļ·āđˆāļ­āđ€āļ›ïœ’āļ™ EmployeeServlet āđāļĨāļ° Package: āđ€āļ›ïœ’āļ™ controller āđāļĨāļ§āļāļ” Finish 12. āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” processRequest āđƒāļ™āđ„āļŸāļĨ EmployeeServlet.java āđƒāļŦāļĨāļš Comment āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ­āļĒāļđāļ āļēāļĒāđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒ /* â€Ķ */ āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally 13. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ„āđāļēāļŠāļąāđˆāļ‡ try āđāļĨāļ° finally āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Insert Code āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāđ€āļĨāļ·āļ­āļ Call Web Service Operation āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļ›āļ—āļĩāđˆ DataIOOperation āđāļĨāļ§āļāļ” OK 14. āļˆāļēāļāļ™āļąāđ‰āļ™āđƒāļŦāļ—āđāļēāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ EmployeeServlet.java āļ”āļąāļ‡āļ™āļĩāđ‰ (āđāļŠāļ”āļ‡āđ€āļ‰āļžāļēāļ°āđ€āļĄāļ˜āļ­āļ” processRequest) protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { // Call Web Service Operation org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port = service.getDataIOPort(); // TODO initialize WS operation arguments here java.lang.String id = request.getParameter("id"); java.lang.String firstname = request.getParameter("firstname"); java.lang.String lastname = request.getParameter("lastname"); String tmp = request.getParameter("salary"); int salary = Integer.parseInt(tmp); // TODO process result here java.lang.String result = port.dataIOOperation(id, firstname, lastname, salary); out.println("Result = "+result);
  • 94. 94 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan } catch (Exception ex) { out.println(ex); } finally { out.close(); } } 15. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ FileBPUI āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Clean and Build 16. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ employeeInput.html āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Run File 17. āļŦāļĨāļąāļ‡āļˆāļēāļāđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 12 āļĢāļđāļ›āļ—āļĩāđˆ 12 āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠïœŠāļ‚āļ­āļĄāļđāļĨ āđāļĨāļ°āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ—āļĩāđˆāđ„āļ” 18. āđāļĨāļ°āđ„āļŸāļĨ output.xml āđƒāļ™āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ c:SOAoutput āļˆāļ°āļĄāļĩāļ‚āļ­āļĄāļđāļĨāļ”āļąāļ‡āļ™āļĩāđ‰ Somjai Jaidee => 38000 Nipa Jingjai => 738000
  • 95. 95 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan Exercise 12 Simple BPEL Invoking Web Services āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™ Business Process āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Internal Web Service āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āļĄāļēāđ€āļ­āļ‡ āđāļĨāļ° External Web Service āļ‚āļ­āļ‡āļ—āļĩāđˆāļ­āļ·āđˆāļ™āđ† āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđ āđ‚āļ›āļĢāđāļāļĢāļĄ Web Service āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™āļ„āļ·āļ­ TaxService āļ—āļĩāđˆāļĄāļĩāđ‚āļ­āđ€āļ›āļ­āļĢāđ€āļĢāļŠāļąāļ™āļ—āļĩāđˆāļŠāļ·āđˆāļ­ calculateTax āđāļĨāļ° External Web Service āļ„āļ·āļ­āđ€āļ‹āļ­āļĢāļ§āļīāļŠāļ„āđāļēāļ™āļ§āļ“āļ­āļąāļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ—āļĩāđˆāļ­āļĒāļđāļ—āļĩāđˆ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļžāļąāļ’āļ™āļē Web Services 2. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSBPEL 3. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL 4. āļžāļąāļ’āļ™āļē Business Process āļŠāđāļēāļŦāļĢāļąāļšāđ€āļĢāļĩāļĒāļ Web Service 5. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application 6. āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase 7. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL 8. āļāļģāļŦāļ™āļ” External WSDL Document 9. āļžāļąāļ’āļ™āļēāđ„āļŸāļĨ Client WSDL āđƒāļŦāļĄïœŠ 10. āļžāļąāļ’āļ™āļē Business Process āđƒāļŦāļĄïœŠāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļ External Web Service 11. āļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđāļˆāđ‡āļ„ Composite Application āļŠāđāļēāļŦāļĢāļąāļšāđ€āļĢāļĩāļĒāļ Business Process āđƒāļŦāļĄïœŠ āđāļĨāļ°āļ—āđāļēāļāļēāļĢāļ—āļ”āļŠāļ­āļš āļāļēāļĢāļžāļąāļ’āļ™āļē Web Services āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē Web Service āļ™āļĩāđ‰āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē calculateTax Web Service āđ€āļŠïœŠāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļšāđƒāļ™ āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ—āļĩāđˆāļœïœŠāļēāļ™āļĄāļē āđ‚āļ”āļĒāļĄāļĩ source code āļ”āļąāļ‡āļ™āļĩāđ‰ @WebService public class TaxService { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { return 0.1 * income; } }
  • 96. 96 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSBPEL āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ WSBPEL āđāļĨāļ§āļāļ” Finish āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ WSDL āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™ āđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ” āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WSBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ WebProcessWSDL āļāđāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āļāđāļēāļŦāļ™āļ” Binding āđ€āļ›ïœ’āļ™ SOAP āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ RPC Literal āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ inputData (āđ€āļĄāļ·āđˆāļ­āđƒāļŠïœŠāļ„āļēāđ€āļŠāļĢāđ‡āļˆāđāļĨāļ§ āļ•āļ­āļ‡āļāļ”āļ›āļļāļĄ Enter āļ”āļ§āļĒāđ€āļŠāļĄāļ­ āļĄāļīāļ‰āļ°āļ™āļąāđ‰āļ™āļ„āļēāļˆāļ°āļāļĨāļąāļšāđ„āļ›āđ€āļ›ïœ’āļ™ part1 āđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄ) āđāļĨāļ°āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡Output: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ outputData āļāļ” Next āđāļĨāļ§āļāļ” Finish āļāļēāļĢāļžāļąāļ’āļ™āļē Business Process āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” partner link āļŠāđāļēāļŦāļĢāļąāļš Web Services āļŠāļ­āļ‡āļŠāļļāļ”āļ„āļ·āļ­ TaxService āđāļĨāļ° WebProcessWSDL āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰
  • 97. 97 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ WebProcessWSDL.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļĄāļēāđ„āļ§ïœ‹āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design (āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļāđ„āļ›āļ—āļĩāđˆāđāļ—āļšāđ€āļ—āļēāđ† āđāļĨāļ°āđƒāļŠïœŠāđƒāļ™ ) āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ”āļ„āļē Name: āđ€āļ›ïœ’āļ™ ClientPartnerLink āđāļĨāļ§āļāļ” OK 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” TaxWSDemo > Web Services āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” TaxService āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Generate and Copy WSDL ... 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Generate and Copy WSDL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩāđˆ src āļ āļēāļĒāđƒāļ• WSBPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 1 āļˆāļēāļāļ™āļąāđ‰āļ™āļāļ” OK āļĢāļđāļ›āļ—āļĩāđˆ 1 āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Generate and Copy WSDL 4. āļĨāļēāļ TaxService.wsdl āđ„āļ›āđ„āļ§ïœ‹āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ TaxPartnerLink āļ‹āļķāđˆāļ‡āļˆāļ°āđ„āļ”āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 2 āļĢāļđāļ›āļ—āļĩāđˆ 2 āđāļŠāļ”āļ‡ PartnerLink āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡ WSBPEL
  • 98. 98 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ inData āđāļĨāļ§āļāļ” OK āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Process End 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ outData āđāļĨāļ§āļāļ” OK āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļŠāđāļēāļŦāļĢāļąāļš calcualteTax 1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Invoke1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ invokeWS āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ TaxPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Operation: āđ€āļĨāļ·āļ­āļ calculateTax 5. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ TaxIn āđāļĨāļ§āļāļ” OK 6. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ TaxOut āđāļĨāļ§āļāļ” OK āļˆāļ°āđ„āļ” BPEL Process āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 3
  • 99. 99 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 3 āđāļŠāļ”āļ‡ BPEL Process āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļāđ‚āļ­āđ€āļ›āļ­āļĢāđ€āļĢāļŠāļąāļ™ calculateTax āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” inputData āđƒāļ™āļŠïœŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” income āđƒāļ™āļŠïœŠāļ§āļ™ TaxIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 4 āļĢāļđāļ›āļ—āļĩāđˆ 4 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āđāļĨāļ° invokeWS 3. āđƒāļ™āđ„āļŸāļĨ WSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
  • 100. 100 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” return āđƒāļ™āļŠïœŠāļ§āļ™ TaxOut āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” outputData āđƒāļ™āļŠïœŠāļ§āļ™ outData āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 5 āļĢāļđāļ›āļ—āļĩāđˆ 5 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ invokeWS āđāļĨāļ° end 5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 6 āļĢāļđāļ›āļ—āļĩāđˆ 6 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš 6. āļāļ”āļ›āļļāļĄ Save āđāļĨāļ° Clean and Build
  • 101. 101 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļĢāļąāļ™ WSBPEL āļšāļ™ BPEL Engine āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļāļģāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ WSCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” WSCompositeApp āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ·āļ­āļāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSBPEL āđāļĨāļ§āļāļ”āļ›āļļāļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļžāļīāđˆāļĄāđ‚āļŦāļ™āļ” WSBPEL.jar āļ āļēāļĒāđƒāļ• WSCompositeApp > JBI Module 7. āļ—āļģāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp 8. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Service Assemblyāļˆāļ°āđ€āļŦāđ‡āļ™ CASA Editor āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 7 āļ‹āļķāđˆāļ‡ WSBPEL āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ BPEL module āļˆāļ°āļ–āļđāļāđ€āļĢāļĩāļĒāļāđ‚āļ”āļĒ SOAP request āđāļ•āđ„āļĄïœŠāđ€āļŦāđ‡āļ™TaxPartnerLink āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āđƒāļ” āļĢāļđāļ›āļ—āļĩāđˆ 7 āđāļŠāļ”āļ‡ CASA Editor āļ‚āļ­āļ‡ WSBPEL 9. āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļ Web Service āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŠïœŠāļ§āļ™ WSDL Ports āļ‚āļ­āļ‡ CASA Editor āđāļĨāļ°āļ—āļģāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 8
  • 102. 102 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 8 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļˆāļēāļ WSBPELāđ„āļ›āļĒāļąāļ‡ SOAP 10. āļĢāļ°āļšāļļ endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ casaPort1 āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļē Location āđ€āļ›ïœ’āļ™ http://localhost:8080/TaxWSDemo/TaxService āđāļĨāļ° Endpoint Name āđ€āļ›ïœ’āļ™ TaxService 11. Save āđāļĨāļ°āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase 1. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” WSCompositeApp > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 3. āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļ™ WSBPEL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ WebProcessWSDL.wsdl āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ WebProcessWSDLOperation āđāļĨāļ§āļāļ” Finish 5. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļŠïœŠāļ§āļ™ inputData āļ”āļąāļ‡āļ™āļĩāđ‰ <inputData>400000</inputData> 6. āļāļ”āļ›āļļāļĄ Save āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run 7. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āļ™āļĩāđ‰ <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:WebProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/WebProcessWSDL"> <outputData xmlns="">33500.0</outputData> </m:WebProcessWSDLOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
  • 103. 103 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļ āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄïœŠāļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļ™āđ„āļ” āđƒāļŦāđ„āļ›āļ—āļĩāđˆ GlassFish Server 3.1.2 > JBI > Service Assemblies āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 9 āđāļĨāļ§āļ—āļģāļāļēāļĢ Undeploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ­āļ·āđˆāļ™āđ† āļ­āļ­āļāļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđƒāļŦāđ€āļŦāļĨāļ·āļ­āđ€āļ‰āļžāļēāļ°āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp āđāļĨāļ§āļĨāļ­āļ‡āļĢāļąāļ™āđƒāļŦāļĄïœŠāļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡ āļĢāļđāļ›āļ—āļĩāđˆ 9 āļāļēāļĢ Updeploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļ­āļ·āđˆāļ™āđ† āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ Service Assemblies āļ­āļ­āļāļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL āđāļšāļšāļïœƒāļāļŦāļąāļ”āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„āļŠāđāļēāļŦāļĢāļąāļš Service Oriented Architecture āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄïœŠ āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 4. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ BPEL Module āđāļĨāļ§āļāļ” Next 6. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExternalWSBPEL āđāļĨāļ§āļāļ” Finish
  • 104. 104 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļžāļąāļ’āļ™āļē External WSDL āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āļ­āđ„āļ›āļˆāļ°āđ€āļ›ïœ’āļ™āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ External Web Service āļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļ„āđāļēāļ™āļ§āļ“āļ­āļąāļ•āļĢāļēāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™ āđ‚āļ”āļĒāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļāļˆāļ°āļ•āļ­āļ‡āļĢāļ°āļšāļļ WSDL āļ‚āļ­āļ‡ External Web Service āļ”āļąāļ‡āļāļĨāļēāļ§ āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” ExternalWSBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New File āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ XML āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ External WSDL Document(s) āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āđ€āļĨāļ·āļ­āļ Form URL: āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļēāđ€āļ›ïœ’āļ™ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āđāļĨāļ§āļāļ” Finish 4. āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL āļˆāļ°āđāļŠāļ”āļ‡āđ‚āļŦāļ™āļ” www.webservicex.com āļ—āļĩāđˆāļĄāļĩ CurrencyConvertor.asmx.wsdl āļ‚āļķāđ‰āļ™āļĄāļē 5. External WSDL āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļĄāļēāļˆāļ°āļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 10 āđāļ•āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļ WSDL āļ™āļĩāđ‰āļˆāļ°āđ„āļĄïœŠāļŠāļēāļĄāļēāļĢāļ–āļ—āļĩāđˆāļˆāļ° compile āđƒāļ™ NetBeans 7.1 āđ„āļ” āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļĄāļĩ Port Types, Bindings āđāļĨāļ° Services āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ HttpGet āđāļĨāļ° HttpPost āļ­āļĒāļđ āđƒāļŦāļ—āļģāļāļēāļĢāļĨāļšāļŠïœŠāļ§āļ™āđ€āļŦāļĨāļēāļ™āļąāđ‰āļ™āļ­āļ­āļ āđ‚āļ”āļĒāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ”āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āļ­āļ‡āđāļĨāļ§āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ Delete āļˆāļ™āđ€āļŦāļĨāļ·āļ­āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļ‚āļ­āļ‡ WSDL āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 11 āļĢāļđāļ›āļ—āļĩāđˆ 10 WSDL āļ—āļĩāđˆāļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļāļĄāļē
  • 105. 105 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 11 WSDL āļ—āļĩāđˆāļ–āļđāļāļ•āļ­āļ‡ āļāļēāļĢāļžāļąāļ’āļ™āļēāđ„āļŸāļĨ Client WSDL āđƒāļŦāļĄïœŠ āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ WSDL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āļ—āļĩāđˆāļˆāļ°āļžāļąāļ’āļ™āļēāļ‚āļķāđ‰āļ™ āļĄāļēāđƒāļŦāļĄïœŠāđ€āļžāļ·āđˆāļ­āđƒāļŦāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđ€āļ›ïœ’āļ™āđ€āļ§āđ‡āļšāđ€āļ‹āļ­āļĢāļ§āļīāļŠāđ„āļ” āđ‚āļ”āļĒāđƒāļ™āļāļĢāļ“āļĩāļˆāļ°āļāđāļēāļŦāļ™āļ”āđƒāļŦāļĄāļĩ input parameter āļŠāļ­āļ‡āļ•āļąāļ§āļ„āļ·āļ­ fromCurrency āđāļĨāļ° toCurrency āđ‚āļ”āļĒāļĄāļĩ output parameter āļ„āļ·āļ­ result āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WSBPEL āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” Process Files āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > WSDL Document 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New WSDL Document āļāđāļēāļŦāļ™āļ” File Name: āđ€āļ›ïœ’āļ™ ExternalWSProcessWSDL āļāđāļēāļŦāļ™āļ” WSDL Type: āđ€āļ›ïœ’āļ™ Concrete WSDL Document āđāļĨāļ°āļāđāļēāļŦāļ™āļ” Binding āđ€āļ›ïœ’āļ™ SOAP āđāļĨāļ° Types āđ€āļ›ïœ’āļ™ RPC Literal āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ› āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Input: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ fromCurrency āđƒāļŦāđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” xsd:String āđāļĨāļ° toCurrency āđƒāļŦāđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” xsd:String āđāļĨāļ°āļŠāđāļēāļŦāļĢāļąāļšāļŠïœŠāļ§āļ™āļ‚āļ­āļ‡ Output: āļāđāļēāļŦāļ™āļ” Message Part Name āđ€āļ›ïœ’āļ™ result āđƒāļŦāđ€āļ›ïœ’āļ™āļŠāļ™āļīāļ” xsd:String āļ”āļąāļ‡āļĢāļđāļ›āļ—āļĩāđˆ 12 āļāļ” Next āđāļĨāļ§āļāļ” Finish
  • 106. 106 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 12 āļāļēāļĢāļāđāļēāļŦāļ™āļ”āļ„āļē WSDL Document āļāļēāļĢāļžāļąāļ’āļ™āļē Business Process āđƒāļŦāļĄïœŠāđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļ External Web Service āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ BPEL āļŠāđāļēāļŦāļĢāļąāļšāļ™āļīāļĒāļēāļĄ Business Process āđƒāļŦāļĄïœŠāļ—āļĩāđˆāļˆāļ°āđƒāļŠïœ‹āđƒāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ External Web Service āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ”āļąāļ‡āļ™āļĩāđ‰
  • 107. 107 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļŠāļĢāļēāļ‡ BPEL Process 1. āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆāđ‚āļŦāļ™āļ” WSBPEL āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĨāļ·āļ­āļāļ„āđāļēāļŠāļąāđˆāļ‡ New > BPEL Process.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New BPEL Process āļāļģāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExternalWSBPEL āđāļĨāļ§āļāļ” Finish āļāļēāļĢāđ€āļžāļīāđˆāļĄ partner link āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āļˆāļ°āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” partner link āļŠāđāļēāļŦāļĢāļąāļš Web Services āļŠāļ­āļ‡āļŠāļļāļ”āļ„āļ·āļ­ ExternalWSProcessWSDL āđāļĨāļ° CurrencyConvertor.asmx.wsdl āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆāđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ ExternalWSProcessWSDL.wsdl āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āļĄāļēāđ„āļ§ïœ‹āļ āļēāļĒāđƒāļ•āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ PartnerLink1 [Partner Link] – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ”āļ„āļē Name: āđ€āļ›ïœ’āļ™ ClientPartnerLink āđāļĨāļ§āļāļ” OK 2. āļĨāļēāļ CurrencyConvertor.asmx.wsdlāđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Projects āđ„āļ›āđ„āļ§ïœ‹āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļēāļ‚āļ­āļ‡āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āđ‚āļ”āļĒāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ ExternalWSPartnerLink āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive 1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Receive āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āļ•āļĢāļ‡āļšāļĨāđ‡āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ§ïœŠāļēāļ‡āđ€āļ›āļĨāļē 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Receive āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Receive1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Receive1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Receive1 [Receive] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ start āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ inData āđāļĨāļ§āļāļ” OK āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply 1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Reply āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ Process End 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Reply āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Reply1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Reply1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Reply1 [Reply] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ end āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ ClientPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ outData āđāļĨāļ§āļāļ” OK
  • 108. 108 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļŠāđāļēāļŦāļĢāļąāļš calcualteTax 1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Invoke āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end 2. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļāđāļēāļŦāļ™āļ”āļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke āļ—āļĩāđˆāļŠāļ·āđˆāļ­ Invoke1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Design āđƒāļŦāļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ˜āļļāļĢāļāļĢāļĢāļĄ Invoke1 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ Invoke1 [Invoke] - – Property Editor āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ invokeWS āđāļĨāļ°āđ€āļĨāļ·āļ­āļ Partner Link: āđ€āļ›ïœ’āļ™ ExternalWSPartnerLink 4. āđƒāļ™āļŠïœŠāļ­āļ‡ Operation: āđ€āļĨāļ·āļ­āļ conversionRate 5. āđƒāļ™āļŠïœŠāļ­āļ‡ Input Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Input Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ ConversionRateIn āđāļĨāļ§āļāļ” OK 6. āđƒāļ™āļŠïœŠāļ­āļ‡ Output Variable: āļāļ”āļ›āļļāļĄ Create.. āđ€āļĄāļ·āđˆāļ­āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Output Variable āđāļŠāļ”āļ‡āļ‚āļķāđ‰āļ™ āđƒāļŦāļāđāļēāļŦāļ™āļ” Name: āđ€āļ›ïœ’āļ™ ConversionRateOut āđāļĨāļ§āļāļ” OK āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign 1. āđƒāļ™āđ„āļŸāļĨ ExternalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ start āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign1 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āđāļēāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” fromCurrency āđƒāļ™āļŠïœŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” FromCurrency āđƒāļ™āļŠïœŠāļ§āļ™ ConversionRateIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđāļĨāļ° toCurrency āđƒāļ™āļŠïœŠāļ§āļ™ inData āļ—āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” ToCurrency āđƒāļ™āļŠïœŠāļ§āļ™ ConversionRateIn āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 13 āļĢāļđāļ›āļ—āļĩāđˆ 13 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ start āđāļĨāļ° invokeWS 3. āđƒāļ™āđ„āļŸāļĨ ExtrenalWSBPEL.bpel āđ€āļĨāļ·āļ­āļāđāļ—āļ› Design āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Assign āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ design āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ āļ˜āļļāļĢāļāļĢāļĢāļĄ invokeWS āļāļąāļšāļ˜āļļāļĢāļāļĢāļĢāļĄ end
  • 109. 109 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āđ€āļĨāļ·āļ­āļāļ˜āļļāļĢāļāļĢāļĢāļĄ Assign2 āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ BPEL Mapper āļ—āļģāļāļēāļĢāđ‚āļĒāļ‡āđ‚āļŦāļ™āļ” ConversionRateResult āđƒāļ™āļŠïœŠāļ§āļ™ ConversionRateOut āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‹ïœ‹āļēāļĒāđ€āļ‚āļēāļāļąāļšāđ‚āļŦāļ™āļ” result āđƒāļ™āļŠïœŠāļ§āļ™ outData āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 14 āļĢāļđāļ›āļ—āļĩāđˆ 14 āđāļŠāļ”āļ‡ Business Rule āļĢāļ°āļŦāļ§ïœŠāļēāļ‡ invokeWS āđāļĨāļ° end 5. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ BPEL āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 15 āļĢāļđāļ›āļ—āļĩāđˆ 15 āđāļŠāļ”āļ‡ BPEL Process āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš 6. āļāļ”āļ›āļļāļĄ Save āđāļĨāļ° Clean and Build
  • 110. 110 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ Composite Application āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļ›ïœ’āļ™āļāļēāļĢāļŠāļĢāļēāļ‡ Composite Application āđ€āļžāļ·āđˆāļ­āļ—āļĩāđˆāļĢāļąāļ™ ExternalWSBPEL āļšāļ™ BPEL Engine āļ—āļĩāđˆāđƒāļŠïœ‹āļĄāļēāļ•āļĢāļāļēāļ™ JBI āđ‚āļ”āļĒāļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰ 1. āđ€āļĨāļ·āļ­āļāđ€āļĄāļ™āļđ File > New Project 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Project āđƒāļŦāđ€āļĨāļ·āļ­āļ Categories āđ€āļ›ïœ’āļ™ SOA āđāļĨāļ° Projects āđ€āļ›ïœ’āļ™ Composite Application āđāļĨāļ§āļāļ” Next 3. āļāđāļēāļŦāļ™āļ” Project Name āđ€āļ›ïœ’āļ™ ExternalWSCompositeApp āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” ExternalWSCompositeApp āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Add JBI Module 5. āđƒāļŦāđ€āļĨāļ·āļ­āļāđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSBPEL āđāļĨāļ§āļāļ”āļ›āļļāļĄ Add Project JAR Files 6. āđ‚āļ›āļĢāđāļĢāļĄ NetBeans āļˆāļ°āđ€āļžāļīāđˆāļĄāđ‚āļŦāļ™āļ” WSBPEL.jar āļ āļēāļĒāđƒāļ• WSCompositeApp > JBI Module 7. āļ—āļģāļāļēāļĢ Clean and Build āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ WSCompositeApp 8. āļ”āļąāļšāđ€āļšāļīāđ‰āļĨāļ„āļĨāļīāđŠāļāļ—āļĩāđˆ Service Assembly āļˆāļ°āđ€āļŦāđ‡āļ™ CASA Editor āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 16 āļ‹āļķāđˆāļ‡ WSBPEL āļ—āļĩāđˆāđ€āļ›ïœ’āļ™ BPEL module āļˆāļ°āļ–āļđāļāđ€āļĢāļĩāļĒāļāđ‚āļ”āļĒ SOAP request āđāļ•āđ„āļĄïœŠāđ€āļŦāđ‡āļ™TaxPartnerLink āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹ Web Service āđƒāļ” āļĢāļđāļ›āļ—āļĩāđˆ 16 āđāļŠāļ”āļ‡ CASA Editor āļ‚āļ­āļ‡ WSBPEL 9. āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļ Web Service āļ—āļĩāđˆāļˆāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠïœ‹āđƒāļŦāļĨāļēāļāđ„āļ­āļ„āļ­āļ™ soap12 āļ—āļĩāđˆāļ­āļĒāļđāđƒāļ™ palette āļĄāļēāđ„āļ§ïœ‹āđƒāļ™āļŠïœŠāļ§āļ™ WSDL Ports āļ‚āļ­āļ‡ CASA Editor āđāļĨāļ°āļ—āļģāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ”āļąāļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢāļđāļ›āļ—āļĩāđˆ 17
  • 111. 111 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan āļĢāļđāļ›āļ—āļĩāđˆ 17 āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļˆāļēāļ ExternalWSBPELāđ„āļ›āļĒāļąāļ‡ SOAP12 10. āļĢāļ°āļšāļļ endpoint āļ‚āļ­āļ‡ WSDL port āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨāļīāđŠāļāļ‚āļ§āļēāļ—āļĩāđˆ casaPort1 āđāļĨāļ§āđ€āļĨāļ·āļ­āļ Properties āđāļĨāļ§āļāđāļēāļŦāļ™āļ”āļ„āļē Location āđ€āļ›ïœ’āļ™ http://www.webservicex.com/CurrencyConvertor.asmx āđāļĨāļ° Endpoint Name āđ€āļ›ïœ’āļ™ CurrencyConvertor āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāļœïœŠāļēāļ™ TestCase 1. āļ—āļģāļāļēāļĢ Deploy āđ‚āļ›āļĢāđ€āļˆāđ‡āļ„ ExternalWSCompositeApp 2. āđƒāļ™āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Project āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” ExternalWSCompositeApp > Test āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ New Test Case 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāđ‡āļ­āļ New Test Case āđƒāļŦāļāđāļēāļŦāļ™āļ” Test Case Name: āđ€āļ›ïœ’āļ™ TestCase1 āđāļĨāļ§āļāļ” Next 4. āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļ™ WSBPEL āđƒāļŦāđ€āļĨāļ·āļ­āļāđ„āļŸāļĨ WSDL āđ€āļ›ïœ’āļ™ ExternalWSProcessWSDL.wsdl āđāļĨāļ§āļāļ” Next 5. āđƒāļ™āļŦāļ™ïœ‹āļēāļ–āļąāļ”āđ„āļ›āđƒāļŦāđ€āļĨāļ·āļ­āļ ExternalWSProcessWSDLOperation āđāļĨāļ§āļāļ” Finish 6. āļŦāļ™ïœ‹āļēāļ•āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ Input.xml āđƒāļŦāđāļïœ‹ source code āļ”āļąāļ‡āļ™āļĩāđ‰ <fromCurrency>USD</fromCurrency> <toCurrency>THB</toCurrency>
  • 112. 112 Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan 7. āļāļ”āļ›āļļāļĄ Save āđ€āļĨāļ·āļ­āļāđ‚āļŦāļ™āļ” TestCase1 āđāļĨāļ§āļ„āļĨāļīāđŠāļāļ‚āļ§āļēāđ€āļĨāļ·āļ­āļ Run 8. āļˆāļ°āđ€āļŦāđ‡āļ™āļœāļĨāļĨāļąāļžāļ˜ïœŽāļ›āļĢāļēāļāļŽāđƒāļ™āđ„āļŸāļĨ Output.xml āļ”āļąāļ‡āļ™āļĩāđ‰ <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:ExternalWSProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/ExternalWSProcessWSDL"> <result xmlns:msgns="http://www.webserviceX.NET/" xmlns="">31.49</result> </m:ExternalWSProcessWSDLOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>