小编今天带大家了解J2EE web service开发中如何把ejb发布为web服务,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“J2EE web service开发中如何把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; }
没有什么好多说的 .
定义一个 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 文件加上
客户端调用程序
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服务”的全部内容了,学会的朋友赶紧操作起来吧。相信亿速云小编一定会给大家带来更优质的文章。谢谢大家对亿速云网站的支持!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。