沒有透徹理解JNDI的意義和作用,就沒有真正掌握J2EE?

JNDI

一、 為什麼要有JNDI

1. JDBC

JDBC操作數據庫的四個步驟:

加載數據庫驅動程序( Class.forName("數據庫驅動類"); )

連接數據庫( Connection con = DriverManager.getConnection() ; )

操作數據庫( Query query = con.prepareStatement(sql).executeQuery ; )

關閉數據庫,釋放連接( con.close() ; )

2. 連接池

所有用戶都需要經過四步操作,但有三步(加載數據庫驅動、連接數據庫、關閉連接)對所有都是一樣

的,只是在操作數據庫上是不一樣的,那麼就造成了性能損耗。

做法:準備一個空間,此空間專門保存全部數據庫連接,以後用戶操作數據庫時直接從空間中取連接,

釋放連接,這就是連接池

3. 連接池的疑慮?

1. 如果沒有任何一個用戶使用連接,那麼應該維持一定數量的連接,等待使用。

2. 如果連接已經滿了,則必須打開新的連接,供更多用戶使用。

3. 如果一個服務器只能有 100個連接,那麼如果有 101個人?應該等待其他用戶釋放連接。

4. 如果一個用戶等待時間太久,則應該告訴用戶,操作是失敗的。

4. Tomcat服務增加數據源配置

Tomcat 4.1.27後增加數據源的配置選項,在服務器上保存著一個數據庫的多個連接。每一個連接通過DataSource可以找到。DataSource 被綁定在 JNDI樹上(為每個DataSource提供一個名字)客戶端通過名稱找到JNDI樹上綁定的DataSource,再由DataSource找到一個連接。

!

那麼在以後操作中,除了連接方式不同,其他操作都一樣,只是關閉的時候不是徹底地關閉數據庫,而是把連接放回連接池中。

二、JNDI 簡介及優點

1. JNDI定義

1) JNDI java命名與文件夾接口(Java Naming And Directory Interface)

2) 區別JDBC:

jdbc 是 java去找數據庫驅動,jndi 是通過你的服務器配置(如:Tomcat)的配置文件 context來找數據

庫驅動。

3) JNDI已成為 J2EE 的標準之一,所有的 J2EE容器都必須提供一個 JNDI的服務器。(就是Tomcat等服務器)

*4) 為什麼使用了連接池還要用 JNDI?*

為了數據庫資源的管理,在容器中配置一個數據庫連接池,使用 JNDI來管理 這樣容器中運行多個服務的

時候,每個服務只需添加一個 jndi 的名稱就可以連接帶數據庫了。

如果不使用 JNDI的方式,直接在項目中配置數據庫連接池,那麼每個項目需要配置一次,如果更改數據

庫地址時,每個項目的數據庫連接方式都要更改,使用 JNDI 時,直接更改 JNDI 裡面的數據庫連接池的配置

就可以了。

一般來說如果目標客戶有專業的應用服務器,比如 WebSphere、WebLogic,就不需要在代碼中配置特定的連接池。

三、JNDI 在 Tomcat中的配置(全局配置)

1. 添加驅動包

例:

mysql : mysql-connect-java-***.jar

  1. 打開server.xml 文件 ( conf / server.xml)
  2. 默認 Resource配置
  3. !

  4. 更改Resource 配置
  5. name="jdbc/mysql"
  6. auth="Container"
  7. type="javax.sql.DataSource"
  8. maxActive="100"
  9. maxIdle="30"
  10. maxWait="10000"
  11. username="root"
  12. password="root"
  13. driverClassName="com.mysql.jdbc.Driver"
  14. url="jdbc:mysql://localhost/cy?useUnicode=truecharacterEncoding=utf-8"/>
  15. 在項目的META-INF 下面建 context.xml 文件
  16. ` `

圖片添加就卡


分享到:


相關文章: