JNDI代表Java命名和目錄接口 。 它是用于提供對目錄服務(即帶有對象的服務映射名稱(字符串),對遠程對象或簡單數據的引用)的訪問的API。 這就是所謂的
約束力 。 綁定集稱為上下文 。 應用程序使用JNDI接口訪問資源。
簡而言之,它就像一個帶有String鍵和代表Web資源的Object值的hashmap。 通常,這些資源是根據目錄服務中的層次結構組織的。 級別用分隔符定義(例如對于DNS,“。”,對于LDAP,例如“。”)。 這是一個命名約定 。 每個上下文都有其命名約定。
SPI代表服務提供商接口 。 換句話說,這些是服務的API。 JNDI指定一個SPI來實現目錄服務。 存儲在目錄中的對象可以具有屬性(id和value)。 可以對這些屬性執行CRUD操作。 如果目錄允許,也可以根據對象的屬性搜索對象,而不是提供名稱。 用戶應用程序提供的信息稱為搜索過濾器 。
JNDI解決了哪些問題?
沒有JNDI,遠程資源的位置或訪問信息將必須在應用程序中進行硬編碼或在配置中可用。 維護此信息非常繁瑣且容易出錯。
例如,如果資源已使用另一IP地址重定位在另一臺服務器上,則必須使用此新信息來更新使用此資源的所有應用程序。 使用JNDI,這不是必需的。 僅需要更新相應的資源綁定。 應用程序仍然可以使用其名稱訪問它,并且重定位是透明的。
另一個常見用途是將應用程序從開發環境移至測試環境,最后移至生產環境。 在每個階段,可能要使用不同的數據庫進行開發,測試和生產。 在每種情況下,可以對每個數據庫進行不同的綁定。 該應用程序不需要加注。
什么是LDAP?
LDAP代表輕型目錄應用協議。 它通常在JNDI中用作目錄服務。 今天,公司將LDAP服務器設置為專用于響應JNDI請求。 通常的用途是維護公司員工的名單,以及他們的電子郵件和訪問其他應用程序的憑據。
通過集中這些信息,每個應用程序不必在其自己的數據庫中存儲員工信息的多個副本,這更易于維護,并且不易出錯和出現不一致。
JCA和CCI呢?
JCA代表Java EE連接器體系結構。 它是一種Java技術,通過向應用程序服務器及其應用程序提供連接,從而幫助它們連接到其他信息系統。 JCA為連接器服務定義了自己的SPI。 CCI代表通用客戶端接口 。 它被定義為JCA的一部分。 用戶應用程序用來訪問JCA連接服務的API。
JCA幫助集成單獨開發的信息系統。 通常,用戶應用程序可以使用JCA來連接到這些數據庫(或信息系統),而不是使用JDBC來訪問數據庫(或多或少等同于硬編碼配置)。 JCA實例可以在JDNI目錄中注冊,也可以由用戶應用程序檢索。
Web應用程序呢?
通常,Web應用程序在稱為應用程序服務器的容器中運行。 Web應用程序可以創建自己的JNDI服務來存儲對象,但是它們也可以使用相應的名稱從容器本身檢索這些對象。 在這種情況下,資源(通常是數據庫)是在容器級別配置的。
參考: 什么是JNDI,SPI,CCI,LDAP和JCA? 從我們的JCG合作伙伴 Jerome Versrynge在技術說明博客中獲得。
翻譯自: https://www.javacodegeeks.com/2013/02/what-is-jndi-spi-cci-ldap-and-jca.html