2016-04-11 58 views
0

我正在檢查一個java網頁代碼,實際上是一個Liferay portlet的基礎網站。什麼是java「Context」類用於?

我正在檢查服務器端.java文件,並在DAO模式文件中查看程序員如何處理數據庫連接。我已經習慣了Java SE的,你通常會得到一個Connection對象調用到DriverManager類,但在這裏,事情是相當不同:

initContext = new InitialContext(); 
envContext = (Context) initContext.lookup("java:/comp/env"); 
ds = (DataSource) envContext.lookup("jdbc/SSMoracle"); 
conn = ds.getConnection(); 

這樣做,對象conn獲取到一個數據庫中的正確連接,它完美的工作。我從來沒有看到它是如何工作的,尤其是Context班。

這個類是做什麼的,爲什麼它使用而不是使用調用DriverManager來獲得正確連接的類?我會很高興知道!

+0

語境是一個接口。 –

+0

它是JNDI的基礎類。你需要閱讀一些文檔。太寬泛。 – EJP

回答

2

它是JNDI的Java命名和目錄接口的一部分。這是Java EE容器提供的服務之一。

應用程序可以在JNDI中查找數據源(用於數據庫訪問)。管理員可以在Java EE容器的管理控制檯中定義和配置數據源。

您在問題中的代碼行完全是這樣的:通過JNDI查找DataSource,然後從DataSource獲取數據庫連接。

看一看,例如,Apache Tomcat上的文檔,看看它是如何工作的時候,你會使用Tomcat servlet容器:JNDI Resources HOW-TOJNDI Datasource HOW-TO

+0

謝謝!但是,爲什麼我應該使用它而不是簡單地使用連接檢索抽象類(它使用DriverManager)?換句話說,你認爲在J2EE項目中使用JNDI是必須的嗎? – Zerok

+0

因爲這給管理員提供了一箇中央位置來管理數據庫連接(在Java EE服務器的管理控制檯中),並且因爲它可以執行[連接池](https://en.wikipedia.org/wiki/Connection_pool )。 – Jesper

+0

連接池是否足以提高性能,考慮將JNDI和連接池應用於每個Java EE項目? – Zerok