J2EE web service开发(五)把ejb发布为web服务
创始人
2024-04-04 09:22:04
0

把 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报头与处理

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...