把 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;
 - }
 
没有什么好多说的 .
定义一个 Web 服务接口
- package ejb;
 - import java.rmi.*;
 - public interface WebServiceTest extends Remote {
 - public void hello() throws RemoteException;
 - }
 
生成 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>
 
利用 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();
 - }
 - }
 
以上介绍了J2EE web service开发中将ejb发布为web服务的方法。
                新闻标题:J2EEwebservice开发(五)把ejb发布为web服务
                
                地址分享:http://www.csdahua.cn/qtweb/news0/326600.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网