2009-10-16 76 views
3

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

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

是否有任何其他方式获取数据源,它允许我把JAR放在WEB-INF/lib中?我在互联网上找到的所有示例都使用JNDI ...

(这是一个非常简单的应用程序,我真的不希望导入53个JAR来解决我的问题:)

谢谢!

回答

3

虽然这些答复大部分是关于池,我不认为这是你的问题?

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

有它的方法来设置用户名,密码等

如果你不需要它在JNDI,那么你没有通过Tomcat的配置它的JNDI。当然可以将驱动程序jar保存在WEB-INF/lib中。如果你想围绕这个DataSource,确实只需要使用Commons DBCP和Pool。

下面是制作您自己的示例pooling DataSource out of a given DataSource.

1

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

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

1

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

想想你身后的人......他们上网查找技术,找到常用的技术,回到你的代码中去吧!你做了一个不同的方式。

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

咬住子弹,为未解决的问题节省创造力。

0

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

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

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

  3. 可以使这样的数据源,

    数据源DS = org.apache.commons.dbcp.BasicDataSourceFactory。的createDataSource(丙);

这样做的副作用是可以禁用JNDI(useNaming =“false”)使服务器变得更轻一点。