您好,登錄后才能下訂單哦!
小編今天帶大家了解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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。