程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 用Java客戶機調用Web服務: J2SE和J2EE環境中Web服務客戶機簡介(3)

用Java客戶機調用Web服務: J2SE和J2EE環境中Web服務客戶機簡介(3)

編輯:J2SE

JNDI 服務查找

J2EE 容器管理的客戶機被打包成 Enterprise Archives(.EAR)文件,並且在 J2EE 容器中運行。除了 Java 代碼之外,描述符也打包在該歸檔文件中。下面是幾個不同類型的 J2EE 容器管理的客戶機:

應用程序客戶機容器客戶機

Web 容器客戶機:JavaBean 或 Servlet

EJB 容器客戶機:EJB

JAX-RPC 定義了受管客戶機的編程模型,而 JSR 109(“實現企業 Web 服務(Implementing Enterprise Web services)”)定義了 J2EE 容器受管的客戶機的編程模型。JSR 109 的目標之一就是它的客戶機編程模型遵循 JAX-RPC。然而,JSR 109 並沒有推薦使用 JAX-RPC ServiceFactory 。相反,它建議客戶機使用 Java 命名和目錄接口(Java Naming and Directory Interface,JNDI)來獲取服務接口(Service Interface)。這個過程包括下面兩個步驟,同時在 清單2中進行了舉例說明:

實例化本地 JNDI 上下文。

在此上下文中對 Web 服務進行 JNDI 查找。

清單 2. JNDI 服務查找

Context ic = new InitialContext();
Service service = (Service) ctx.lookup("Java:comp/env/service/HelloService");

Web 服務的名稱(在本例中為 java:comp/env/service/HelloService )是在客戶機應用程序的部署描述符中指定的。JSR 109 建議把服務引用的所有邏輯名組織在 service 子目錄中。如果客戶機環境上下文是 Java:comp/env ,您就可以以下面的代碼結束:

service name in context =
clIEnt environment context + "service" subcontext + service name.

在本例中,上下文中的服務名為:

Java:comp/env/ + service/ + HelloService.

service 子上下文(subcontext) + 服務名(例如 service/HelloService )也稱為邏輯上的服務名,是在 Web 服務客戶機應用程序的部署描述符中進行聲明的。

JNDI 查找返回 JAX-RPC Service Interface。J2EE 容器確保在部署描述符中指定的綁定通用 JAX-RPC Service 的實現。您也可以將該查找返回的對象強制轉換成您的 Web 服務的指定接口。這示於 清單3,其中 HelloService 擴展了通用的 JAX-RPC Service 接口。

清單 3. 可供選擇的 JNDI 查找

Context ic= new InitialContext();
HelloServiceInterface service =
   (HelloServiceInterface) ic.lookup("Java:comp/env/service/HelloService");

然後可以使用獲得的服務接口(Service Interface)來獲取靜態存根、動態代理或 DII Call 對象,如下面的“ 服務訪問”部分所述。

服務訪問

在前面的部分中,您看到了 JAX-RPC ServiceFactory 用作 JAX-RPC Services 的工廠。同樣地,JAX-RPC Service 也用作代理和存根的工廠。一旦您實例化了服務,就擁有了三種訪問和調用 Web 服務的方法:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved