java - 应用程序的哪个数据源同时用于独立和 webapp 上下文(Java 7、Tomcat 7)?

标签 java jdbc datasource jndi desktop-application

我构建了一个应用程序,它有一个独立的“核心”层,也用于构建一个 webapp(它是一个 Maven 多模块项目,有一个“核心”模块和一个“webapp”模块,它有对“核心”模块的依赖)。 它使用 MySQL 数据库。我尝试实现一个 DataSource,它在两种上下文中都适用(在独立上下文中只有 1 个连接就足够了)。

在阅读了很多关于 DataSources 的文档之后,我不得不说我有点迷茫了。我得出的结论是,也许我应该使用 Tomcat JDBC Connection Pool .我的问题是:

1) 在独立上下文中,我应该如何提供使用数据源的配置,知道此配置将由 Tomcat 在 webapp 上下文中提供(因此独立配置不应覆盖 Tomcat 配置)?

  • 我应该做类似 in this other question 的事情吗?在仅在独立上下文中调用的方法中?但是如何在 webapp 上下文中看到 Tomcat 已经提供了 DataSource?

  • 或者我应该使用 bean 定义吗?但是这个 bean 怎么不会在 webapp 上下文中使用呢?

2) 其他池化数据源实现呢?

结论: 是的,我迷路了,我不知道 DataSource 使用的“黄金标准”是什么。感谢您的帮助。

最佳答案

您可以在核心模块中查找数据源。您需要创建 JNDI Datasource in Tomcat对于 webapp 模块和 Standalone JNDI support用于独立模块。

例如从数据源获取 Connection 在两个上下文中是相同的:

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");
Connection conn = ds.getConnection();

但数据源的配置不同。在 Tomcat 中,您会在链接中的示例中看到类似的内容。

<Context>
<Resource name="jdbc/MySQLDB" ... />
</Context>

standalone 中的资源名称必须与 standalone 中的 ctx.lookup 调用相同:

Properties prop = new Properties();
prop.put("java:comp/env/jdbc/MySQLDB", ds1);

独立模块中的InitialContextFactory必须独立于核心模块创建。

关于 com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource 参见 this . Tomcat 使用 Apache 软件基金会的 DBCP 库,您也可以在自己的非 Java EE 代码中使用这些库:http://jakarta.apache.org/commons/dbcp/

有关 Tomcat 中的 JDBC 连接池,请参阅 this对于 Apache DBCP 池,请参阅 this .

关于java - 应用程序的哪个数据源同时用于独立和 webapp 上下文(Java 7、Tomcat 7)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212600/

相关文章:

jdbc - 如果我有 JDBC 连接,如何在 DB2 上获取当前模式?

java - JDBC MySQL 存储过程抛出异常 "Parameter number 2 is not an OUT parameter"?

来自 2 个 StringCollections 的 C# Repeater.DataSource

java - Ignition.ignite 返回 "Grid instance was not properly started or was already stopped"

java - 世界图 block 生成器

java - SQLite:executeQuery() 返回空结果集

java - JDBC连接池管理

c# - Winform 数据源更新

java - 初学者 Java 循环/数组作业

java - Junit 4 执行顺序与 Junit 5