java隨記

          堅持就是勝利!

           

          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 服務所需的配置文件 :

          <?xml version="1.0" encoding="UTF-8"?>

          <!--

          ? wstools -cp? classes -config wstools-config.xml

          -->

          ?

          <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 文件加上 <service-endpoint>ejb.WebServiceTest</service-endpoint> 元素 , 注意順序 .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();

          ??? }

          }

          打包?ejb文件下載:EJBModlue.jar

          歡迎加入QQ群:30406099

          posted on 2006-12-04 10:57 傻 瓜 閱讀(3660) 評論(0)  編輯  收藏 所屬分類: j2ee web service

          導航

          統計

          常用鏈接

          留言簿(7)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 伊宁市| 中阳县| 惠安县| 蓬莱市| 桃园县| 集贤县| 祁阳县| 哈密市| 旬邑县| 清新县| 炎陵县| 尤溪县| 沙河市| 大新县| 金华市| 博湖县| 连州市| 乌拉特前旗| 永泰县| 霍山县| 扎鲁特旗| 翁牛特旗| 钟山县| 平顺县| 南宁市| 朝阳市| 尼勒克县| 奉贤区| 宁海县| 弥渡县| 旬阳县| 旅游| 壶关县| 太原市| 西乌珠穆沁旗| 丹江口市| 噶尔县| 龙山县| 双牌县| 新密市| 厦门市|