围绕JDBC资源和JDBC连接池Glassfish的一些混淆

我即将建立与我的数据库的连接,我正在使用EJB和JPA。 我最近开始做这些技术所以我有一些问题在这一点上理解这一切:)我知道为了使用JPA需要persistence.xml。 我知道,这是我配置如何连接数据库的文件。 然而,似乎有多种方法可以做到这一点。

在persistence.xml文件和Glassfish中定义属性(如用户名,数据库,密码等)会有什么不同(或者我应该何时使用另一种替代方案?)? 优点/缺点,如果有的话。

在我发布的图像下面,我有JDBC资源和JDBC连接池。 我对这两个术语感到困惑。 为什么我们不在JDBC Resources中添加用户名,数据库,密码等属性? 有人可以解释他们之间的区别和他们的意思吗?

JDBC资源

JDBC资源(数据源)为应用程序提供了连接数据库的方法。 通常,管理员为域中部署的应用程序访问的每个数据库创建JDBC资源。 (但是,可以为数据库创建多个JDBC资源。) http://download.oracle.com/docs/cd/E19316-01/820-4335/ablih/index.html

我觉得很奇怪,我们在池中添加了这些属性,但没有在资源中添加,但我可能会误解这些概念。

在此处输入图像描述

在“JDBC连接池”中,您可以创建容器管理的JDBC数据源(具有连接池function)。 数据源至少需要知道JDBC驱动程序,JDBC URL,用户名和密码。

在“JDBC资源”中,您可以将这些容器管理的JDBC数据源绑定到一个或多个JNDI名称,以便它们可以通过JNDI对已部署的Web应用程序使用。

persistence.xml您可以指定是使用本地数据源还是使用容器管理的数据源。 如果要使用容器管理数据源,则应指定其JNDI名称。 使用容器托管数据源的优点是,您可以在多个Web应用程序之间共享单个数据源。 在JPA的情况下,它还具有以下优点:您可以使用JTA(容器管理的事务),这样您就不需要在每个方法中调用transaction.begin()commit()rollback()等。