2012-08-15 45 views
0

我想知道JNDI和Spring之間的關係是什麼? Spring是JNDI的高級版本嗎?兩者都用於從字符串名稱創建對象。 我們能說一個For JNDI應用服務器是否需要提供命名服務?另一方面,我們可能不需要應用程序服務器,因此可以在Java SE上使用Spring?JNDI,Spring和JMX之間的關係

最後,我們可以把JMX放在JNDI和Spring之間的關係上嗎?在低層有沒有一些共同的邏輯?

回答

5

只是爲了澄清一些定義:

  • Spring:Spring Framework是一個開源的應用程序框架控制容器的反演。
  • JNDI:Java命名和目錄接口,一種允許Java軟件客戶端通過名稱查找數據和對象的目錄服務的Java API。 Java管理擴展(Java Management Extensions,JMX)是一種Java技術,提供用於管理和監視應用程序,系統對象,設備(例如打印機)和麪向服務的網絡的工具。

JNDI主要是一組Java接口,它們定義了命名系統應如何在Java中工作,以便可以將多種服務抽象爲簡單的JNDI接口。例如,文件系統,LDAP服務器和DNS服務器都可以作爲JNDI服務來訪問。

企業Java(Java EE)廣泛使用JNDI將對象存儲在通用地址中,其他服務可通過名稱找到它們。 JNDI不需要應用程序服務器,但Java EE應用程序服務器幾乎總是需要(並提供)JNDI服務。

春天是不是一個JNDI實現,並且不需要 JNDI,但不支持它,這意味着你可以在Spring容器啓動一個JNDI服務,訪問JNDI基於資源和使用Spring內置的JNDI支持類。

JMX定義了一個關於如何爲Java應用程序提供管理接口,工具和運行時「透明」的標準。除了JMX遠程連接器經常以java遠程對象的形式構建並綁定到JNDI服務(以便遠程客戶端可以查找並連接到JMX託管應用程序)之外,JNDI和JMX之間沒有太多重疊。

Spring不需要需要 JMX,但在其框架庫中提供了對它的支持,並且這經常用作將基於JMX的服務添加到Spring託管應用程序或服務的簡化方法。

它聽起來不像你需要 JNDI,正如你所說,如果你的應用程序將被Spring管理的基於Java SE,你會有一些相當專業化的需求來調用JNDI。

對於JMX,Spring確實很容易將JMX「工具」添加到您的Spring託管Java SE應用程序中。 我的意見:我覺得(可能是錯誤的),你需要開發更多的專業知識才能解決這個問題,因爲它可能是一個嚴重的側軌。

+0

以下對JNDI的解釋對我很有用:「除了以傳統方式使用目錄之外,Java應用程序還可以將其用作Java對象的存儲庫,即存儲和檢索Java對象,例如, Java打印客戶機程序應該能夠從目錄中查找打印機對象並將數據流發送到打印機對象進行打印「 – 2012-08-16 07:49:22

+0

Spring的範圍僅限於您的容器內的應用程序。 JNDI是一個全球命名API,可以插入許多不同的命名/目錄體系結構。 http://stackoverflow.com/questions/11315755/which-issue-does-jndi-solve-that-applicationcontext-does-not-solve-in-spring – 2012-08-16 14:04:05