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

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

没有什么好多说的 .

定义一个 Web 服务接口

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

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

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

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

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

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

客户端调用程序

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

J2EE web se

2009-06-22 09:56: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-03-21 09:13:35

JavaJRebel

2012-06-17 13:24:00

JRebelJ2EEJava

2009-06-10 13:37:06

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

2009-06-11 17:06:11

J2EE历史Java EE概述

2009-06-22 17:09:00

J2EE项目开发流程

2011-04-07 13:05:23

DBSight搜索关系型数据库

2009-06-23 16:48:26

J2EE常见问题J2EE平台

2012-01-17 10:22:07

JavaJ2EEJBoss

2011-06-01 11:08:08

J2EE
点赞
收藏

51CTO技术栈公众号