我构建了一个具有独立“核心”层的应用程序,该层也用于构建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实现怎么样?
我不应该只使用MySQL DataSource?
我在Java EE 7中读到,DataSources使用起来更简单(https://blogs.oracle.com/arungupta/entry/default_datasource_in_java_ee)。那么,Java 7有什么突破吗?我应该在Java 7中绝对使用的新DataSource提供程序?
结论: 是的,我迷路了,我不知道DataSource使用的“黄金标准”是什么。谢谢你的帮助。
答案 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/