没有JNDI的Java连接池?

时间:2009-10-16 09:47:09

标签: java datasource connection-pooling jndi

我有一个连接池来从servlet访问MySQL数据库。我使用JNDI获取数据源,JNDI在我的META-INF / context.xml文件中定义。

一切正常,但我必须将MySQL驱动程序JAR放在Tomcat的/ common / lib文件夹中,而不是webapp的WEB-INF / lib;否则JNDI将无法工作(ClassNotFoundException:com.mysql.jdbc.Driver)。

有没有其他方法可以获取数据源,这允许我将JAR放在WEB-INF / lib中?我在互联网上找到的所有例子都在使用JNDI ...

(这是一个非常简单的应用程序,我真的不想为了解决我的问题而导入一些框架的53个JAR:)

谢谢!

5 个答案:

答案 0 :(得分:4)

虽然大多数回复都是关于游泳池的,但我认为这不是你的问题吗?

我认为对您的问题最直接的答案是,只需导入并使用您的驱动程序提供的DataSource实现。你正在使用MySQL Connector / J?那就是MysqlDataSource

有方法可以设置用户名,密码等。

如果你在JNDI中不需要它,那么你不必通过Tomcat在JNDI中配置它。您可以将驱动程序jar保留在WEB-INF / lib中。如果你想围绕该DataSource汇集,实际上只需使用Commons DBCP和Pool。

以下是制作您自己的pooling DataSource out of a given DataSource.

的示例

答案 1 :(得分:1)

你可能会尝试太阳已经建议的东西: Connection Pooling

答案 2 :(得分:1)

如果您不想使用JNDI,那么您不能使用Tomcat的连接池机制,您需要将一个结合到您的应用程序中,这意味着将第三方库添加到您的WAR文件中。它是其中之一,选择权归你所有。

如果您决定使用第三方路线,我建议您使用Apache Commons DBCP(这需要Apache Commons Pool)。

答案 3 :(得分:1)

简单的应用程序增长。框架最初可能看起来有些过分,但很容易逐渐发现你正在重新发明轮子并发展自己的框架。

考虑跟随你的人...他们上网并查找技术,找到常用的,回到你的代码然后!你用不同的方式做到了。

Java EE框架代码,JDBC驱动程序,一切都应该在您的服务器环境中,不需要将它包含在您的应用程序中。所以开销应该很小。当您开发更多应用程序时,这种方法确实会得到回报。

咬紧牙关,为未解决的问题保留创造力。

答案 4 :(得分:0)

我绝对同意你的观点,即数据源应该不在context.xml之内。如果要外部化配置,则必须执行此操作。我们不久前经历了这个过程。这很容易。我不能给你代码,但我可以指出你正确的方向,

  1. 您需要定义<资源>在您自己的配置中找到解析它的方法。您可以使用JAXP,Apache Digester。我很懒,所以我使用Apache Commons Configuration。

  2. <资源>只是名称 - 值对。您需要将它们转换为属性。

  3. 您可以制作这样的数据源,

    DataSource ds = org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(prop);

  4. 执行此操作的副作用是您可以禁用JNDI(useNaming =“false”)以使服务器更轻一些。