J2EEwebservice开发(五)把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. import javax.ejb.SessionBean; 
  3. import javax.ejb.SessionContext; 
  4. import javax.ejb.CreateException; 
  5. public class WebServiceBean implements SessionBean { 
  6.     SessionContext sessionContext; 
  7.     public void ejbCreate() throws CreateException { 
  8.     } 
  9.     public void ejbRemove() { 
  10.     } 
  11.     public void ejbActivate() { 
  12.     } 
  13.     public void ejbPassivate() { 
  14.     } 
  15.     public void setSessionContext(SessionContext sessionContext) { 
  16.         this.sessionContext = sessionContext; 
  17.     } 
  18.     public void hello() { 
  19.         System.out.println("hello"); 
  20.     } 
  21. package ejb; 
  22. import javax.ejb.EJBObject; 
  23. import java.rmi.RemoteException; 
  24. public interface WebService extends EJBObject { 
  25.     public void hello() throws RemoteException; 
  26. package ejb; 
  27. import javax.ejb.EJBHome; 
  28. import javax.ejb.CreateException; 
  29. import java.rmi.RemoteException; 
  30. public interface WebServiceBeanHome extends EJBHome { 
  31.   public WebService create() throws CreateException, RemoteException; 

没有什么好多说的 .

定义一个 Web 服务接口

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

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

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

文章题目:J2EEwebservice开发(五)把ejb发布为web服务
标题来源:http://www.shufengxianlan.com/qtweb/news0/326600.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联