应用程序的哪个DataSource在独立和webapp上下文(Java 7,Tomcat 7)中都使用了?

时间:2013-03-04 22:44:21

标签: java jdbc datasource jndi desktop-application

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

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

1)在独立上下文中,我应该如何提供配置以使用DataSource,因为知道这个配置将由Tomcat在webapp上下文中提供(因此独立配置不应该覆盖Tomcat配置)?

  • 我是否应该在仅在独立上下文中调用的方法中执行in this other question之类的操作?但是我如何在webapp上下文中看到Tomcat已经提供了DataSource?

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

2)其他池化DataSource实现怎么样?

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

1 个答案:

答案 0 :(得分:2)

您可以在核心模块中查找DataSource。您需要为webapp模块创建JNDI Datasource in Tomcat,为独立模块创建Standalone JNDI support

e.g。从两个上下文中获取数据源中的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>

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

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

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

关于com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource,请参阅this。 Tomcat使用Apache Software Foundation的DBCP库,您也可以在自己的非Java EE代码中使用它:http://jakarta.apache.org/commons/dbcp/

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