在独立和webapp上下文(java7、tomcat7)中使用哪个应用程序数据源?

在独立和webapp上下文(java7、tomcat7)中使用哪个应用程序数据源?,java,jdbc,datasource,jndi,desktop-application,Java,Jdbc,Datasource,Jndi,Desktop Application,我构建了一个应用程序,它有一个独立的“核心”层,也用于构建一个webapp(它是一个Maven多模块项目,有一个“核心”模块,还有一个“webapp”模块,它依赖于“核心”模块)。 它使用MySQL数据库。我尝试实现一个数据源,在两种上下文中都可以(在独立上下文中只有一个连接就足够了) 在阅读了大量关于数据源的文档之后,我不得不说我有点迷路了。我得出的结论是,也许我应该使用。我的问题是: 1) 在独立上下文中,如果知道此配置将由Tomcat在webapp上下文中提供(因此独立配置不应覆盖Tomc

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

在阅读了大量关于数据源的文档之后,我不得不说我有点迷路了。我得出的结论是,也许我应该使用。我的问题是:

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

  • 我应该在仅在独立上下文中调用的方法中执行类似操作吗?但是在webapp上下文中,我怎么能看到Tomcat已经提供了数据源呢

  • 还是应该使用bean定义?但是这个bean如何不在webapp上下文中使用呢

2) 其他池数据源实现如何

  • 难道我不应该用这个吗

  • 我读到在JavaEE7中,数据源更易于使用()。那么,Java7有什么突破吗?我绝对应该在Java7中使用的新数据源提供程序

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

您可以在核心模块中查找数据源。您需要为webapp模块和独立模块创建

e、 g.从数据源获取
连接
在两种上下文中都是相同的:

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>
独立模块中的
InitialContextFactory
必须独立于核心模块创建

关于
com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
请参阅。Tomcat使用Apache软件基金会的DBCP库,您也可以在自己的非Java EE代码中使用这些库:


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

感谢您的回答,然后有几个问题:我的“核心”层是一个可以在其他应用程序中使用的库。如果我不希望这些应用程序执行第二个链接中描述的任务,InitialContext应该设置在核心层内,对吗?因此,也许我应该更简单地在核心层执行查找,捕获抛出的异常(如果不是在webapp上下文中),然后在这种情况下设置我自己的连接?这是否有效?如果“核心”包含这样的功能,那么其他应用程序也可以执行这些功能。您可以生成第三个组件(使用自定义的
InitialContextFactory
),该组件可以从独立应用程序调用。我认为此需求功能可能是独立应用程序所独有的,因此您可以将其嵌入此类应用程序中。另一方面,当无法使用JNDI加载数据源时,您可以实现一个连接工厂。可以通过属性文件配置驱动程序。那有效吗?这是一种糟糕的设计模式吗P
Properties prop = new Properties();
prop.put("java:comp/env/jdbc/MySQLDB", ds1);