Java-DBCP与JNDI?

Java-DBCP与JNDI?,java,jndi,apache-commons-dbcp,jdbc-pool,Java,Jndi,Apache Commons Dbcp,Jdbc Pool,我是一个新手,我已经创建了一些SimlpeJavaSwing应用程序。我能够使用ApacheCommonsDBCP创建连接池并访问数据源 我最近开始使用JSP和servlet创建基于java web的应用程序。我已经学会了使用JNDI访问数据源。我更新XML文件并使用InitialContext()和lookup(“java:comp/env”),就是这样!!!!我使用ApacheTomcat作为Servlet/JSP容器 1。但是数据库连接池是在哪里创建的? 2。如果是,那么这是否意味着JND

我是一个新手,我已经创建了一些SimlpeJavaSwing应用程序。我能够使用ApacheCommonsDBCP创建连接池并访问数据源

我最近开始使用JSP和servlet创建基于java web的应用程序。我已经学会了使用JNDI访问数据源。我更新XML文件并使用InitialContext()和lookup(“java:comp/env”),就是这样!!!!我使用ApacheTomcat作为Servlet/JSP容器

1。但是数据库连接池是在哪里创建的?

2。如果是,那么这是否意味着JNDI以某种方式在内部使用DBCP?


当我必须为Swing应用程序创建DBCP时,我必须首先创建GenericObjectPool的实例,然后创建一个连接工厂对象,最后创建一个PoolableConnectionFactory对象,以创建将用于获取连接的数据源。

Tomcat使用和的自定义实现。这些库位于一个JAR中,位于
$CATALINA_HOME/lib/tomcat dbcp.JAR


主包是
org.apache.tomcat.dbcp
,以避免与常规包表单发生冲突。

JNDI是一种将对象从系统的一个部分传递到另一个部分的机制(从技术上讲是跨类加载器)。这对于Java运行时中的类和接口(如字符串或数据源)最有用


这意味着在您的情况下,JNDI只是一种传输机制,您需要在别处定义实际的连接池。大多数web容器都有一种定义系统范围连接池的机制,JNDI允许您访问它。

JNDI是一种通过查找来定位远程资源的机制。它与连接池库没有任何共同之处。这些库(其中c3p0、DBCP和BoneCP最为著名)允许您创建具有连接和/或语句池功能的数据源。如果此数据源在应用程序中使用,则不需要使用JNDI,如果它位于远程系统(例如,在Tomcat中),则需要使用JNDI访问数据源

作为补充说明,为什么选择使用老式的Servlet/JSP组合?更好的办法是使用jsp2.x中首选的视图技术JSP继承者facelets


另一个建议是将数据源的管理转移到一个众所周知的框架。一个方向可能是使用ORM(例如Hibernate)来管理您的数据源(它是在考虑连接池的情况下创建的)。

@Paul…但我仍然需要定义连接池?Apache Tomcat不会自动创建它?@Thorbjørn…为web应用程序定义DBCP与为Swing应用程序定义DBCP相同吗?@Thorbjørn…“…在其他地方定义…”可能意味着…它是Java类文件或XML文件?在Tomcat中定义连接池的方法也是配置
,您可能不希望在Tomcat中管理池,而是直接在web应用程序中管理池。只需按照连接池提供程序文档中的描述配置数据源即可。另外,当池由容器管理时,请确保理解Thorbjørn关于系统范围连接池的评论。这意味着所有部署在上面的应用程序都有一个池。