JDBC驱动程序是否应包含在WAR中?

时间:2010-09-22 15:14:53

标签: java servlets jdbc

我们正在开发一种商业软件产品。它支持Oracle,MySQL和SQL * Server后端(我们也使用H2进行测试)。我们使用特定版本的JDBC驱动程序对这些不同的数据库进行集成测试。 Maven处理这一切非常漂亮。

将应用程序打包为WAR时,如果包含JDBC驱动程序,是否可以?什么是标准做法?

由于我们不知道哪个数据库可以提前使用,我们必须将它们全部包含在内。目标servlet容器是Tomcat和Jetty,但是一些客户也希望在WebSphere和JBoss中运行。

所以servlet包含和应用程序服务器都带有自己的JDBC驱动程序?我们会发生冲突吗另一个问题是我们已经开发并测试了一个版本的驱动程序,如果客户使用其他版本,我们可能会遇到问题。

目前我们使用Spring数据源bean,但正在转向数据源的JNDI查找。

3 个答案:

答案 0 :(得分:8)

  

所以servlet包含和应用程序服务器都带有自己的JDBC驱动程序?

有些人(例如WebLogic)。

  

我们的冲突会发生吗?

他们不应该。不确定在应用程序级别创建独立连接池时会选择您的(这完全取决于类加载器委派模式)。

  

另一个问题是我们已经开发并测试了一个版本的驱动程序,如果客户使用其他版本,我们可能会遇到问题。

列出支持的版本。

  

目前我们使用Spring数据源bean,但正在转向数据源的JNDI查找。

如果这意味着使用应用程序服务器提供的连接池,则必须在容器级别安装驱动程序,而不是在应用程序级别。这不知何故结束了讨论。

答案 1 :(得分:6)

在大多数应用程序中,JDBC驱动程序不作为应用程序的一部分提供。

如果您运送JDBC驱动程序,则意味着您必须为要支持的所有数据库提供驱动程序。它增加了许多不必要的库。

只是不添加任何驱动程序,并告诉用户在需要时将相关的JAR文件放在服务器库中。

答案 2 :(得分:3)

除了在war文件中包含驱动程序的技术优点之外,您还应检查驱动程序的许可,并确保它可由第三方分发。