Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

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,502 WARN  [Ejb3AnnotationHandler] JBMETA-4: did not find any bean meta data for annotation bean ConverterBean, will create some
11:17:49,632 INFO  [JBossASKernel] Created KernelDeployment for: ConvertWSEJB.jar
11:17:49,635 INFO  [JBossASKernel] installing bean: jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=ConverterBean,service=EJB3
11:17:49,638 INFO  [JBossASKernel]   with dependencies:
11:17:49,640 INFO  [JBossASKernel]   and demands:
11:17:49,642 INFO  [JBossASKernel]      jboss.ejb:service=EJBTimerService
11:17:49,645 INFO  [JBossASKernel]   and supplies:
11:17:49,647 INFO  [JBossASKernel]      Class:vovanhai.wordpress.jaxws.Converter

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,658 INFO  [JBossASKernel] installing bean: jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=jaxws-converterejb,service=EJB3
11:17:49,662 INFO  [JBossASKernel]   with dependencies:
11:17:49,665 INFO  [JBossASKernel]   and demands:
11:17:49,666 INFO  [JBossASKernel]      jboss.ejb:service=EJBTimerService
11:17:49,668 INFO  [JBossASKernel]   and supplies:
11:17:49,669 INFO  [JBossASKernel]      jndi:jaxws-converterejb/remote
11:17:49,671 INFO  [JBossASKernel]      Class:vovanhai.wordpress.jaxws.Converter

11:17:49,675 INFO  [JBossASKernel]      jndi:jaxws-converterejb/remote-vovanhai.wordpress.jaxws.Converter
11:17:49,679 INFO  [JBossASKernel] Added bean(jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=jaxws-converterejb,service=EJB3) to KernelDeployment of: ConvertWSEJB.jar
11:17:49,793 INFO  [SessionSpecContainer] Starting jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=ConverterBean,service=EJB3
11:17:49,799 INFO  [EJBContainer] STARTED EJB: vovanhai.wordpress.jaxws.ConverterBean ejbName: ConverterBean
11:17:49,808 WARN  [SessionSpecContainer] Populating JBoss-specific annotation metadata manually until done by deployers: jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=ConverterBean,service=EJB3
11:17:49,966 INFO  [SessionSpecContainer] Starting jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=jaxws-converterejb,service=EJB3
11:17:49,973 INFO  [EJBContainer] STARTED EJB: vovanhai.wordpress.jaxws.ConverterBean ejbName: jaxws-converterejb
11:17:49,977 WARN  [SessionSpecContainer] Populating JBoss-specific annotation metadata manually until done by deployers: jboss.j2ee:ear=ConvertWSEJB.jar,jar=ConvertWSEJB.jar,name=jaxws-converterejb,service=EJB3
11:17:50,074 WARN  [WebServiceDeployerEJB] Ingore ejb deployment with null class name: org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData@c2c87150{ConverterBean}
11:17:50,083 INFO  [DefaultEndpointRegistry] register: jboss.ws:context=ConvertWSEJB,endpoint=jaxws-converterejb
11:17:50,399 INFO  [WSDLFilePublisher] WSDL published to: file:/C:/javaSoft/jboss-5.0.0.CR2/server/default/data/wsdl/ConvertWSEJB.jar/Converter41501.wsdl
11:17:50,432 INFO  [TomcatDeployment] deploy, ctxPath=/ConvertWSEJB, vfsUrl=ConvertWSEJB.jar
11:17:50,507 WARN  [config] Unable to process deployment descriptor for context’/ConvertWSEJB’

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

May quá! Thành công rùi!

Bây giờ là lúc phát triển cliet được rồi đây!

3 Responses to “Phát triển 1 JAX-WS EJB3 Stateless Session Bean Web Service”

  1. 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/

  2. 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!

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: