Java连接池没有JNDI?

发布于 2024-08-07 21:20:23 字数 385 浏览 5 评论 0原文

我有一个连接池来从 servlet 访问 MySQL 数据库。我使用 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 :)

谢谢!

I've a connection pool to access a MySQL DB from a servlet. I get the data source using a JNDI, which is defined on my META-INF/context.xml file.

Everything is working fine, but I have to place the MySQL driver JAR within Tomcat's /common/lib folder, instead of webapp's WEB-INF/lib; otherwise the JNDI will not work (ClassNotFoundException: com.mysql.jdbc.Driver).

Is there any other way to get the datasource, which allows me to place the JAR inside WEB-INF/lib? All the examples I've found over the Internet are using JNDI...

(It's a quite simple application, I'd really prefer not to have to import 53 JARs of some framework in order to solve my problem :)

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

长梦不多时 2024-08-14 21:20:23

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

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

它上面有方法可以设置用户名、密码等。

如果你在JNDI中不需要它,那么你就不必通过Tomcat在JNDI中配置它。当然,您可以将驱动程序 jar 保存在 WEB-INF/lib 中。事实上,如果您想围绕该数据源进行池化,只需使用 Commons DBCP 和 Pool 即可。

这是制作自己的示例 从给定的数据源中池化数据源。

While most of these replies are about pools, I don't think that's your question?

I think the most direct answer to your question is, simply import and use the DataSource implementation provided by your driver. You're using MySQL Connector/J? then it's MysqlDataSource.

There are methods on it to set username, password, etc.

If you don't need it in JNDI, then you don't have to configure it in JNDI via Tomcat. You can keep the driver jar in WEB-INF/lib, sure. If you want pooling around that DataSource, indeed, just use Commons DBCP and Pool.

Here's an example of making your own pooling DataSource out of a given DataSource.

千鲤 2024-08-14 21:20:23

您可以尝试 sun 已经建议的方法:
连接池

You might try what sun already suggests:
Connection Pooling

丑丑阿 2024-08-14 21:20:23

如果您不想使用 JNDI,那么您就无法使用 Tomcat 的连接池机制,您需要将其合并到您的应用程序中,这意味着将第 3 方库添加到您的 WAR 文件中。这是其中之一,选择权在你。

如果您决定采用第 3 方路线,我建议使用 Apache Commons DBCP (反过来需要 Apache Commons Pool)。

If you don't want to use JNDI, then you can't use Tomcat's connection pool mechanism, you'll need to incorporate one into your application, and that means adding 3rd-party libraries to your WAR file. It's one or the other, the choice is yours.

If you decide to go the 3rd-party route, I suggest using Apache Commons DBCP (which in turn requires Apache Commons Pool).

荆棘i 2024-08-14 21:20:23

简单的应用程序不断增长。框架最初看起来可能有点大材小用,但您很容易逐渐发现自己正在重新发明轮子并发展自己的框架。

考虑一下追随你的人......他们去互联网查找一种技术,发现它常用,然后回到你的代码,瞧!你用不同的方式做到了。

Java EE 框架代码、JDBC 驱动程序,所有内容都应该位于您的服务器环境中,无需将其包含到您的应用程序中。所以开销应该很小。当您开发更多应用程序时,这种方法确实会带来回报。

硬着头皮,把创造力留给未解决的问题。

Simple apps grow. Frameworks may initially seem like overkill, but all too easily you gradually find that you are reinventing wheels and growing your own framework.

Consider the person who comes after you ... they go to the internet and look up a technique, find it commonly used, come back to your code and lo! you did it a different way.

The Java EE framework code, the JDBC drivers, everything should be in your server environment, no need to include it into your app. So the overhead should be quite small. This approach really pays off as you develop more applications.

Bite the bullet, save the creativity for the unsolved problems.

戏蝶舞 2024-08-14 21:20:23

我绝对同意你的观点,数据源应该远离 context.xml。如果您想外部化您的配置,您将必须这样做。不久前我们经历了这个过程。这很容易。我无法给您代码,但我可以为您指出正确的方向,

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

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

  3. 您可以创建这样的数据源,

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

这样做的一个副作用是您可以禁用 JNDI (useNaming="false") 以使服务器变得更轻一些。

I definitely agree with you that datasource should stay out of context.xml. You will have to do this if you want externalize your configuration. We went through this process not long ago. It's quite easy. I can't give you the code but I can point you to the right direction,

  1. You need to define <Resource> in your own configuration and find a way to parse it. You can use JAXP, Apache Digester. I am lazy so I use Apache Commons Configuration.

  2. The <Resource> is just name-value pairs. You need to convert them into Properties.

  3. You can make a datasource like this,

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

A side-effect of doing this is that you can disable JNDI (useNaming="false") to make server a little bit lighter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文