簡體   English   中英

Java - DBCP vs JNDI?

[英]Java - DBCP vs JNDI?

我是一個新手,我創建了一些simlpe Java Swing應用程序。 我能夠使用apache commons DBCP來創建連接池並訪問數據源。

我最近開始使用JSP和Servlets創建基於Java web的應用程序。 我學會了使用JNDI來訪問數據源。 我更新XML文件並使用InitialContext()和lookup(“java:comp / env”),就是這樣!!!! 我使用Apache Tomcat作為我的Servlet / JSP容器。

1.但是數據庫連接池在哪里創建?

2.如果是,那么這是否意味着JNDI以某種方式在內部使用DBCP?

當我必須為Swing應用程序創建DBCP時,我必須首先創建一個GenericObjectPool實例,然后創建一個連接工廠對象,最后創建一個PoolableConnectionFactory對象來創建將用於獲取連接的Datasource。

JNDI是一種將對象從系統的一個部分傳遞到另一個部分的機制(在類加載器的技術術語中)。 這對於Java Runtime中的類和接口(如String或DataSource)非常有用。

這意味着在您的情況下,JNDI只是一種傳輸機制,您需要在其他地方定義實際的連接池。 大多數Web容器都有一個用於定義系統范圍連接池的機制,然后JNDI允許您訪問它。

Tomcat為JNDI數據源使用Apache DBCPApache Pool的自定義實現。 這些庫位於$CATALINA_HOME/lib/tomcat-dbcp.jar中的單個JAR中。

主程序包是org.apache.tomcat.dbcp以避免與Apache Commons的常規程序包沖突。

JNDI是一種通過查找定位遠程資源的機制。 它與連接池庫沒有任何共同之處。 這些庫(其中c3p0,DBCP和BoneCP最為着名)允許您創建能夠池連接和/或語句的數據源。 如果您的應用程序中使用此數據源,則無需使用JNDI,如果它位於遠程系統上(例如,在Tomcat中),則需要使用JNDI來訪問數據源。

作為旁注,你為什么選擇使用老式的Servlet / JSP組合? 使用JSP successor,facelets是JSF 2.x中首選的視圖技術,這是一個更好的主意。

另一個評論是將數據源的管理轉移到一個眾所周知的框架。 一個方向可能是使用ORM(例如,Hibernate)來管理您的數據源(這是在考慮連接池時創建的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM