麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Web Service 和 J2EE

2019-11-18 12:54:12
字體:
來源:轉載
供稿:網友

  在前面的文章中,我們已經把握了如何開發、配置和使用簡單的 Web service。我們也了解了一些高級的Web service概念,這其中包括狀態Web service、遠程調用和Web service 安全。本文中我們將開始研究Web service是如何在J2EE環境中工作的。
  理解Web Services和J2EE 集成原理
  當今,許多應用將三層業務邏輯作為標準的J2EE組件來實現。將這些組件用于SOAP Web service幾乎使它們被普遍應用,同時這也提供了一種集成這些組件的簡單機制。J2EE的標準組件體系結構使得這個過程變得相對輕易。
  本文中,我們將解釋如何使J2EE組件以Web service的形式發布,同時也會演示如何應用java Message Service (JMS)可靠地發送SOAP報文。我們將主要討論EnterPRise Java Beans(EJBs),這是因為EJBs是業務邏輯實現中使用最為廣泛的J2EE組件,當然所有演示過的方法也適用于其他的J2EE組件,例如JDBC數據源和JMS隊列。
  標準的J2EE處理
  我們首先來概括一下有關J2EE平臺的一些重要事實。傳統上來說,J2EE客戶端應用程序使用JNDI查找服務器方的J2EE組件。例如,客戶端應用程序查找JNDI中的EJB引用并收到一個EJB客戶端代理。客戶端在后面將使用這個代理來訪問EJB組件。所有的J2EE通信在正常情況下都發生在RMI上。
   Web Service 和 J2EE(圖一)
  圖 1:標準的JNDI使用
  J2EE - 基本方法
  有兩種通過SOAP訪問J2EE資源的方法。我們首先來看看最顯而易見的方法,這種方法可以在EJB四周創建Web service wrapper。該方法非凡適合于這樣的情況:Web service應用不直接映射到單獨EJB并且還需要J2EE 組件的附加信息。我們在第二個例子中將介紹一種以較少代碼實現透明集成的方法。這種方法的主要目標就是將現有的J2EE應用盡可能迅速的以Web service的形式動態發布。這種方法答應我們無須編寫或者修改任何代碼就可以高效的訪問現有的基于SOAP的J2EE應用。
  簡單的股票報價EJB Wrapper 演示樣本
  在這個演示樣本中,我們將介紹EJB wrapper Web service 方法,該方法可以訪問簡單的無狀態session bean:股票報價EJB。該方法雖然很簡單但是卻在許多SOAP框架中得到了廣泛應用。各種實現之間只存在一些細微的區別,這些實現通常會與開發流程的自動化水平相吻合。這種方法要求所實現的Web service包含一個或者多個現有的J2EE 組件。而這個wrapper起到SOAP與 RMI之間的橋梁作用。客戶端將SOAP請求到這個wrapper,然后由wrapper把請求轉換成適合EJB 組件的RMI 請求。我們非凡推薦將該方法主要用于諸如無狀態Bean之類的無狀態J2EE資源。為了用該方法來訪問有狀態的資源,您將需要設置額外的生命周期服務來正確地刪除孤立的有狀態資源。
  我們首先需要執行一些簡單的安裝和配置步驟。
  注重:假如您還沒有下載用來創建指導實例的軟件,請參考30分鐘創建WebService。您還需要下載演示樣本的源代碼demo sources。 這里我們假設您已經把這個文件拷貝到c:/wasp_demo目錄。指導實例中所提到的所有Java源代碼都可以在解壓縮文件demo sources后得到的src子目錄中找到。它們位于com.systinet.demos.包中。同樣,演示樣本中的所有腳本程序都位于bin子目錄。盡管您并不需要下載和使用該軟件來理解這些文章,但是我們還是強烈推薦您這樣做。
  額外的安裝步驟:我們將在J2EE環境中使用Sun J2EE 1.3。(您可以從Sun的 Java website下載所需的軟件)。在安裝完J2EE 1.3 RI之后,您需要配置WASP Web service 運行時間以便使用Sun J2EE RI。這里提到的配置可以通過修改WASP Advanced高級安裝的Bin子目錄中的 env.bat腳本程序來實現。首先將下面一行變為注釋(在該行開始之處添加rem):
  set INSTALLATION_TYPE=standalone
  然后刪除同一文件中的下面一行的注釋:
  set INSTALLATION_TYPE=j2ee
  您需要修改位于c:/wasp_demo/bin Directory的env.bat文件。請為環境變量J2EE_HOME,WASP_HOME和WASP_DEMO設定正確的取值。
  
  一旦您完成了上面提到的安裝和配置步驟,請通過使用startJ2EE 和 startserver啟動J2EE 服務器并運行WASP Web service。
  
  下一步,運行deploy_j2ee 來編譯Java源代碼并配置我們在演示樣本使用的EJBs。
  
  注:在配置EJB之后,您需要重新啟動J2EE 服務器。
  
  假如您查看com.systinet.demos.stock包中的Java源代碼,就會發現StockQuote,StockQuoteHome類 和StockQuoteBean 類使用一個簡單getQuote方法實現了一個相當簡單的無狀態session bean。我們已經通過調用deploy 腳本程序對這個EJB進行了配置。您要確保使用J2EE的治理工具對所有的EJBs進行了正確配置。調用演示樣本bin目錄下的J2EEAdmin程序將啟動治理工具。
  
  現在我們來集中關注圖2中wrapper Web service 的實現。它實現了方法getQuote,該方法包含一個簡單的EJB 調用。首先,它從JNDI得到EJB的有效引用并創建一個EJB實例。然后它將在EJB上調用方法 getQuote,然后刪除該EJB。最后,調用結果返回到Web service 客戶端。在下面的代碼中您可以看到這些步驟:
  
  package com.systinet.demos.stock;
  import javax.naming.InitialContext;
  import javax.naming.Context;
  import javax.naming.NamingException;
  import java.rmi.RemoteException;
  public class StockQuoteService {
  public double getQuote(String symbol) throws Exception {
    // get the JNDI initial context
    System.err.println("Getting J2EE initial context");
    Context jndiContext = new InitialContext();
    // lookup the EJB home
    System.err.println("Looking up EJB Home");
    Object homeRef = jndiContext.lookup("Stock");
    StockQuoteHome home =
    (StockQuoteHome)javax.rmi.PortableRemoteObject.narrow(
    homeRef, StockQuoteHome.class);
    // create the EJB instance
    System.err.println("Creating EJB");
    StockQuote ejb = home.create();
    // call the getQuote method
    System.err.println("Calling getQuote");
    double quote = ejb.getQuote("SUNW");
    System.err.println("SUNW "+quote);
    // remove the EJB
    System.err.println("Removing EJB");
    ejb.remove();
    return quote;
  }
  
  }
  圖 2:簡單的 Web service EJB wrapper (StockQuoteService.java)
   現在我們可以通過運行deploy_service 腳本程序來配置EJB wrapper Web services。然后,運行run_wrapper 腳本程序來啟動Web service 客戶端。客戶端將會通過wrapper Web service來調用EJB。
  注:為了說明wrapper方法的基本原來,我們盡可能使這個演示樣本簡單。然而,實際中的應用通常會復雜一些。wrapper 服務常用于集成多個EJBs的功能和其他的J2EE資源。在這些情況下,wrapper服務通常會顯現不同的編程接口而不是原始的beans。
  透明的J2EE 集成integration
  訪問J2EE資源的另一方法就是使用透明的集成框架。這里,透明是指我們沒有必要來編寫一個wrapper服務或者改變最初的J2EE代碼。假如您希望SOAP客戶端利用現有的J2EE資源或者通過因特網訪問J2EE資源,這種方法就非常有用了。
  下面所描述的透明的J2EE 集成框架將充分利用JNDI框架的優勢,這種優勢提供了一種訪問J2EE資源的抽象機制。正如我們先前所說的,在J2EE的正常流程中,J2EE客戶端將調用JNDI的lookup方法,而客戶端的JNDI提供者把這個請求通過RMI傳遞給J2EE服務器中的JNDI服務。JNDI給客戶端返回一個 J2EE代理。客戶端使用這個代理,通過RMI遠程調用J2EE資源。在這個示例中,我們所使用的客戶端JNDI的提供者支持SOAP而不支持RMI。正如您在圖3中所看到的,當客戶端使用這個提供者發布一個JNDI請求時,該請求將通過SOAP發送到JNDI web service。 這個JNDI web service將在應用程序服務器JNDI中進行實際的查找并獲得J2EE代理。然后JNDI web service將一個基于SOAP的客戶端遠程引用返回給J2EE代理。客戶端應用程序此時就能夠使用這個遠程引用來調用J2EE資源。每一種方法調用都將通過SOAP傳遞給J2EE代理。J2EE代理會把請求重新定向到實際的J2EE資源。您可能會注重到J2EE資源或者客戶端代碼都不需要進行修改。只需在客戶端實施一個配置更改而已,即指向基于SOAP的JNDI提供者。
  Web Service 和 J2EE(圖二)
  圖 3: Web service有權使用JNDI
  注:大多數Web service運行時間服務器和應用程序服務器是在相同的上下文環境中運轉。因此,調用重定向方法將會非常迅速,并且不會降低性能。
  這種方法也適用于非Java的客戶端。因為JNDI Web service是一種標準的Web service,任何的SOAP客戶端都能夠充分利用它的透明調用框架。例如, Microsoft Visual Basic 客戶端可以調用JNDI Web service上的方法查詢并且獲得所請求的J2EE資源的Web service代理。
  對于在Web service運行時間創建的所有組件,JNDI Web service將執行自動遠程碎片賬集。當客戶端應用程序顯式丟棄遠程組件時,根據相關請求,這些組件中的大多數也會被丟棄。但是在松散連接條件下的Web services并不能保證做到適當刪除。這就是LifeCycle服務需要跟蹤并治理所有動態創建資源的原因。這種方法的主要優勢就

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 极品一级片| 国产精品久久久久久久久粉嫩 | 亚洲一区二区在线 | 曰韩黄色片 | 国产毛片aaa一区二区三区视频 | 国产一级毛片高清视频 | 国产午夜免费视频 | 日本特级a一片免费观看 | 911色_911色sss主站色播 | 日本黄色免费片 | 美女扒开腿让男生桶爽网站 | 黄色一级视频 | 欧美日本一 | 黄色一级电影网 | 免费成人| 国产精品爆操 | 精品国产三级a | 免费一级电影 | 99久久婷婷国产综合精品青牛牛 | 国产永久免费观看 | 27xxoo无遮挡动态视频 | 一级黄色免费观看 | 国产一区二区视频网站 | lutube成人福利在线观看 | 成人一级视频 | 国产一区二区成人在线 | 538任你躁在线精品视频网站 | 在线天堂中文字幕 | 国产又粗又爽又深的免费视频 | 97综合| 毛片在哪看 | 国产精品免费一区二区三区都可以 | 草草视频免费观看 | 日本不卡一二三区 | 国产乱淫av片免费观看 | 一级毛片电影院 | 性高潮一级片 | 日韩精品一二三 | 97久久曰曰久久久 | 久久性生活免费视频 | 日韩欧美电影一区二区三区 |