Wednesday, April 22, 2009

EJB 3 Web Service Overview

Menggunakan JavaEE 5, kita bisa menggunakan POJO atau EJB 3 stateless session bean untuk membangun web service. Ada beberapa spesification dalam JavaEE 5 untuk membangun web service, antara lain :

1. Java API for XML-based Web Service 2.0 (JAX-WS 2.0), inti web service dan merupakan ekstensi dari JAX-RPC 1.0
2. Java API for XML Binding 2.0, binding dari WSDL ke Java.
3. WS Basic Profile 1.1, interoperability dengan .NET.
4. Web Services Metadata 2.0, pendekatan metadata untuk mendefinisikan web service.
5. Java API for XML-RPC 1.1, untuk kompatibility dengan JavaEE 1.4 web service.

Implementasi WS : POJO atau EJB3 Stateless Session Bean

Berikut perbandingan yang diberikan Debu Panda antara POJO web service dan EJB web service :


Implementasi EJB3 & JAX-WS 2.0

Membangun web service dengan EJB3 sesuai tabel di atas, memberikan lebih banyak keuntungan, dalam hal ini dari service-service yang ditawarkan oleh EJB container. Karena itu kita akan membahas web service dengan EJB3. Beberapa annotation yang digunakan dalam web service adalah sbb :

@WebService
Digunakan untuk memberitahu EJB container bahwa bean tersebut adalah sebuah web service. Annotation ini bisa diletakkan pada bean class atau interface. Jika diletakkan pada bean class maka EJB container akan men-generate-kan interfacenya.

@Remote
public interface BidManagerWS {...}

@Stateless
@WebService(targetNamespace="urn:edu/mat/test/webservice")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT)
public class BidManagerWSBean implements BidManagerWS {...}

selanjutnya saat deploy interface akan digenerate. Perhatikan bahwa interface yang dimaksud bukan interface session bean. Karena kita menggunakan session bean sebagai web service maka kita tetap menggunakan annotation @Remote dan @Stateless. Dan di bean class kita tambahkan annotation @WebService. Interface hasil generate saat deployment definitely bukan session interface di atas. Sebagai contoh berikut adalah interface yang dimaksud :

@WebService(name = "BidManagerWSBean", targetNamespace = "urn:edu/mat/test/webservice")
@XmlSeeAlso({
ObjectFactory.class
})
public interface BidManagerWSBean {...}

Interface hasil generate tersebut bisa digunakan client untuk berkomunikasi dengan web service kita.

@SOAPBinding
Seperti telah disebutkan pada entry sebelumnya bahwa service yang disupport adalah document-oriented dan RPC-oriented. Kita menggunakan annotation ini untuk mengontrol style web service.

@SOAPBinding(style=SOAPBinding.Style.DOCUMENT)
public class ItemManagerWSBean extends BaseStatelessSessionManager { ... }

atau

@SOAPBinding(style=SOAPBinding.Style.DOCUMENT)
public class BidManagerWSBean extends BaseStatelessSessionManager implements BidManagerWS { ... }

@WebMethod
Jika kita menggunakan @WebService pada interface, maka semua public method di interface tersebut akan menjadi methodnya web service. Jika kita menggunakan @WebService pada bean class maka kita harus menggunakan @WebMethod pada method yang diinginkan untuk menjadi method web service. Jika tidak, maka seluruh public method di class bean tersebut akan menjadi methodnya web service (sama seperti pada @WebService di interface).

Jika kita tidak menginginkan suatu public method menjadi methodnya web service maka gunakan : @WebMethod(exclude=true).

@WebMethod
public void deleteItem(String itemId) {...}

@WebParam
Digunakan untuk kustomisasi parameter web service. Nama parameter akan menjadi sama dengan nama pada @WebParam

public Item addItem(@WebParam(name="itemTitle") String itemTitle, @WebParam(name="itemDesc") String itemDesc) {...}

@WebResult
Digunakan untuk kustomisasi return value suatu method web service. Nama return value di WSDL akan menjadi sama dengan pada @WebResult ini

@WebMethod
@WebResult(name="item")
public Item addItem(@WebParam(name="itemTitle") String itemTitle) {...}

@OneWay
Digunakan pada method web service yang tidak memiliki return value alias void return value.

@WebMethod
@OneWay
public void pingServer() {...}

0 comments:

 

©2009 Stay the Same | by TNB