Phát triển 1 JAX-WS EJB3 Stateless Session Bean Web Service
Trong bài viết này, tôi sẽ hướng dẫn cho các bạn 1 demo về việc tạo 1 Staless Session Bean Web Service – một sự kết hợp giữa EJB3 và Web Service. Ở đây chúng ta tạo 1 Web Service dùng cho việc chuyển đổi tiền tệ từ VND saung USD và EUR.
Việt triển khai sẽ thực hiện trên JBOSS, bạn có thể download JBoss tại http://www.jboss.org/download.
Tạo thư mục EJB3_WS, tất cả ứng dụng chúng ta sẽ lưu tại đây.
1. Đầu tiên, bạn viết lớp Remote cho EJB có tên Converter.java và có nội dung như sau:
|
package vovanhai.wordpress.jaxws;
import java.math.BigDecimal; import javax.ejb.Remote; import javax.jws.WebService;
@Remote @WebService(name = “ConverterPortType”, targetNamespace = “http://jaxws.vovanhai.wordpress.com”)
public interface Converter { public BigDecimal VND2USD(BigDecimal dollars); public BigDecimal VND2EUR(BigDecimal rupees); } |
2. Sau đó ta tạo bean, lớp ConverterBean.java có nội dung như sau:
|
package vovanhai.wordpress.jaxws;
import java.math.BigDecimal; import javax.ejb.Stateless; import javax.jws.WebService;
@Stateless @WebService(serviceName = “Converter”, portName = “ConverterPort”, endpointInterface = “vovanhai.wordpress.jaxws.Converter”, targetNamespace = “http://jaxws.vovanhai.wordpress.com”)
public class ConverterBean implements Converter { private BigDecimal usdRate = new BigDecimal(“16700″); private BigDecimal euroRate = new BigDecimal(“19200″);
public BigDecimal VND2USD(BigDecimal dollars) { BigDecimal result = dollars.multiply(usdRate); return result.setScale(2, BigDecimal.ROUND_UP); }
public BigDecimal VND2EUR(BigDecimal euro) { BigDecimal result = euro.multiply(euroRate); return result.setScale(2, BigDecimal.ROUND_UP); } } |
3. Tạo thư mục META-INF trong EJB3_WS. Sau đó tạo deployment descriptor, file ejb-jar.xml có nội dung như sau:
|
<?xml version=“1.0“ encoding=“UTF-8“?> <ejb-jar version=“3.0“ xmlns=“http://java.sun.com/xml/ns/javaee“ xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd“> <display-name>jaxws-converterejb</display-name> <enterprise-beans> <session> <ejb-name>jaxws-converterejb</ejb-name> <service-endpoint>vovanhai.wordpress.jaxws.Converter</service-endpoint> <ejb-class>vovanhai.wordpress.jaxws.ConverterBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> |
OK, mọi thứ đã sẵn sàng, bây giờ bạn bắt đầu biên dịch + triển khai được rồi!
4. Biên dịch: Tạo file build.bat có nội dung
| javac -d . *.java
pause |
Thực thi file này và đảm bảo rằng không có lỗi nào xảy ra.
5. Đóng gói: Tạo file CreateJARFile.bat có nội dung sau
| jar cvf ConvertWSEJB.jar vovanhai/wordpress/jaxws/*.* META-INF/ejb-jar.xml pause |
Chạy file này ta sẽ cófile ConvertWSEJB.jar.
6. Triển khai: Copy file ConvertWSEJB.jar vào thư mục %JBOSS_HOME%\server\default\deploy\.
Kết quả triển khai trên JBOSS console:
| …
11:17:49,495 WARN [EjbMetadataJndiPolicyDecoratorDeployer] Defaulting to DefaultJndiBindingPolicy of “org.jboss.metadata.ejb.jboss.jndipolicy.plugins.BasicJndiBindingPolicy” for Session Bean jaxws-converterejb 11:17:49,651 INFO [JBossASKernel] Added bean(jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=ConverterBean,service=EJB3) to KernelDeployment of: ConvertWSEJB.jar 11:17:49,675 INFO [JBossASKernel] jndi:jaxws-converterejb/remote-vovanhai.wordpress.jaxws.Converter |
Good! Mọi thứ OK, thử link sau để xem xét WSDl: http://127.0.0.1:8080/ConvertWSEJB/jaxws-converterejb?wsdl.
Kết quả như sau:

May quá! Thành công rùi!
Bây giờ là lúc phát triển cliet được rồi đây!
pham cuong said
Cam on bac Hai ve dong gop cac bai viet va cac vi du de hieu va chi tiet. Nhung hien tai cac IDE (MyEclipse, Netbean,…) ho tro gau nhu gan het.
http://www.myeclipseide.com/documentation/quickstarts/webservices/
vovanhai said
học khác với làm bạn à. phải hiểu mọi vấn đề chứ tools thì đầy. Chúc vui!
vuonhongchoem said
Em cũng nghĩ như thầy Hải. Không nên phụ thuộc vào bất kỳ tool gì. Bọn em cũng muốn học để hiểu chứ không phải làm như một cái máy
Em cảm ơn thầy rất nhiều