J2EE web service开发(五)把ejb发布为web服务

开发 后端
本文讲述了J2EE web service开发中如何将ejb发布为web服务。利用 ejb 的一大好处就是容器管理的事务,再就是在必须用 ejb 的情况下又同时需要 web 服务这种情况。

把 ejb 作为 web 服务发布比 JSE 端点要复杂些 . 并且只有无状态会话 Bean 才能发布成 Web 服务 . 利用 ejb 的一大好处就是容器管理的事务 . 但是 spring 同样能做到这个 , 这一点不再具有很大的吸引力了 . 那么剩下的好处估计就只有用在必须用 ejb 的情况下又同时需要 web 服务这种情况了 . EJB 端点跟 JSE 端点跟一个不同点在于 : 不需要在 web.xml 文件中配置 servlet 映射 , 但是需要在 ejb-jar.xml 文件中配置 web 服务端点接口 . 另一个不同之处就是不需要一个实现 web 服务接口的具体类 . Jboss 4.04 版本下具体实现 .

建立一个无状态会话 bean

  1. package ejb;   
  2.  
  3. import javax.ejb.SessionBean;   
  4. import javax.ejb.SessionContext;   
  5. import javax.ejb.CreateException;   
  6. public class WebServiceBean implements SessionBean {   
  7.     SessionContext sessionContext;   
  8.     public void ejbCreate() throws CreateException {   
  9.     }   
  10.     public void ejbRemove() {   
  11.     }   
  12.     public void ejbActivate() {   
  13.     }   
  14.     public void ejbPassivate() {   
  15.     }   
  16.  
  17.     public void setSessionContext(SessionContext sessionContext) {   
  18.         this.sessionContext = sessionContext;   
  19.     }   
  20.  
  21.     public void hello() {   
  22.         System.out.println("hello");   
  23.     }   
  24. }   
  25.  
  26.  
  27. package ejb;   
  28.  
  29. import javax.ejb.EJBObject;   
  30. import java.rmi.RemoteException;   
  31.  
  32. public interface WebService extends EJBObject {   
  33.     public void hello() throws RemoteException;   
  34. }   
  35.  
  36. package ejb;   
  37.  
  38. import javax.ejb.EJBHome;   
  39. import javax.ejb.CreateException;   
  40. import java.rmi.RemoteException;   
  41.  
  42. public interface WebServiceBeanHome extends EJBHome {   
  43.   public WebService create() throws CreateException, RemoteException;   
  44. }   

没有什么好多说的 .

定义一个 Web 服务接口

  1. package ejb;   
  2.  
  3. import java.rmi.*;   
  4. public interface WebServiceTest extends Remote {   
  5.     public void hello() throws RemoteException;   
  6. }   

生成 Web 服务所需的配置文件 :

  1. < configuration xmlns="http://www.jboss.org/jbossws-tools"   
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3.    xsi:schemaLocation="http://www.jboss.org/jbossws-tools http://www.jboss.org/jbossws-tools/schema/jbossws-tool_1_0.xsd">   
  4.   < java-wsdl>   
  5.     < service name="WebServiceTest" style="rpc" endpoint="ejb.WebServiceTest"/>   
  6.     < namespaces target-namespace="http://ejb" type-namespace="http://ejb"/>   
  7.     < mapping file="jaxrpc-mapping.xml"/>   
  8.     < webservices ejb-link="WebServiceBean"/>   
  9.   < /java-wsdl>   
  10. < /configuration>   

利用 Jboss 自带的工具生成 Web 服务所需要的布署文件 . wstools -cp  classes -config wstools-config.xml

把生成的布署文件放到 META-INF 文件夹而不是 JSE 端点的 web-INF 文件夹下 .

修改 ejb-jar.xml 文件加上 ejb.WebServiceTest 元素 , 注意顺序 .OK 打包发布 .

客户端调用程序

  1. package ejb;   
  2.  
  3. import java.net.URL;   
  4. import javax.xml.rpc.*;   
  5. import javax.xml.namespace.QName;   
  6. import javax.naming.*;   
  7. import javax.rmi.PortableRemoteObject;   
  8. import javax.naming.InitialContext;   
  9. import java.util.Hashtable;   
  10.  
  11. public class ClientTest {   
  12.  
  13.     private WebServiceTest getPort() throws Exception {   
  14.         ServiceFactory factory = ServiceFactory.newInstance();   
  15.         URL wsdlURL = new URL("http://hechang:8080/ejb/TestService?wsdl");   
  16.         QName qname = new QName("http://ejb""WebServiceTest");   
  17.         Service service = factory.createService(wsdlURL, qname);   
  18.         WebServiceTest port = (WebServiceTest) service.getPort(WebServiceTest.class);   
  19.         return port;   
  20.     }   
  21.  
  22.     private WebService ejbTest() throws Exception {   
  23.         Hashtable environment = new Hashtable();   
  24.         environment.put(Context.INITIAL_CONTEXT_FACTORY,   
  25.                         "org.jnp.interfaces.NamingContextFactory");   
  26.         environment.put(Context.URL_PKG_PREFIXES,   
  27.                         "org.jboss.naming:org.jnp.interfaces");   
  28.         environment.put(Context.PROVIDER_URL, "jnp://localhost:1099");   
  29.         Context context = new InitialContext(environment);   
  30.         Object ref = context.lookup("WebServiceBean");   
  31.         WebServiceBeanHome webServiceHome = (WebServiceBeanHome) PortableRemoteObject.   
  32.                                         narrow(ref, WebServiceBeanHome.class);   
  33.         WebService webService = webServiceHome.create();   
  34.         return webService;   
  35.     }   
  36.  
  37.     public static void main(String[] args) throws Exception {   
  38.         ClientTest clienttest = new ClientTest();   
  39.         WebServiceTest webService = clienttest.getPort();   
  40.         webService.hello();   
  41.         WebService webService2=clienttest.ejbTest();   
  42.         webService2.hello();   
  43.     }   
  44. }   

以上介绍了J2EE web service开发中将ejb发布为web服务的方法。

【编辑推荐】

  1. j2ee web service开发(三)SAAJ带附件的soap消息
  2. j2ee web service开发(二)动态代理与动态调用
  3. j2ee web service开发(一) 映射数组复杂类型
  4. J2ee学习经验和流程
  5. j2ee web service开发(四)soap报头与处理
责任编辑:book05 来源: csdn
相关推荐

2009-06-22 11:50:00

J2EE Web应用快速开发

2009-06-22 10:59:00

J2EE web se

2009-06-22 10:09:00

J2EE web se

2009-06-22 09:56:00

J2EE web se

2009-06-22 09:48:00

J2EE web se

2009-06-22 10:04:00

J2EE web se

2009-06-12 08:54:22

EJB术语J2EE

2009-06-18 16:13:14

J2EE开发

2012-02-21 09:48:10

JavaJ2EE

2009-06-23 08:06:46

J2EE体系架构J2EE模型J2EE设计模式

2009-06-10 14:10:23

J2EE学习J2EE是什么

2012-06-17 13:24:00

JRebelJ2EEJava

2012-03-21 09:13:35

JavaJRebel

2009-06-11 17:06:11

J2EE历史Java EE概述

2009-06-10 13:37:06

J2EE可伸缩性J2EE灵活性J2EE维护

2009-06-22 17:09:00

J2EE项目开发流程

2009-06-23 16:48:26

J2EE常见问题J2EE平台

2012-01-17 10:22:07

JavaJ2EEJBoss

2011-04-07 13:05:23

DBSight搜索关系型数据库

2011-06-01 11:08:08

J2EE
点赞
收藏

51CTO技术栈公众号