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

Java 围绕JDBC资源和JDBC连接池的一些混淆,java,jakarta-ee,jpa,glassfish,Java,Jakarta Ee,Jpa,Glassfish,我正要连接到我的数据库,我正在使用EJB和JPA。我最近开始使用这些技术,因此我在理解这一点时遇到了一些问题:) 我知道使用JPA需要persistence.xml。我知道,就是在这个文件中配置如何连接到数据库的。然而,似乎有多种方法可以做到这一点 在persistence.xml文件和Glassfish中定义用户名、数据库、密码等属性有什么区别(或者我应该在什么时候使用这一个选项而不是另一个?)?优点/缺点(如有) 在我发布的图片下面,我有JDBC资源和JDBC连接池。我对这两个词的术语有点困

我正要连接到我的数据库,我正在使用EJB和JPA。我最近开始使用这些技术,因此我在理解这一点时遇到了一些问题:) 我知道使用JPA需要persistence.xml。我知道,就是在这个文件中配置如何连接到数据库的。然而,似乎有多种方法可以做到这一点

在persistence.xml文件和Glassfish中定义用户名、数据库、密码等属性有什么区别(或者我应该在什么时候使用这一个选项而不是另一个?)?优点/缺点(如有)

在我发布的图片下面,我有JDBC资源和JDBC连接池。我对这两个词的术语有点困惑。我们为什么不在JDBC资源中添加诸如用户名、数据库、密码等属性呢?有人能解释一下他们之间的区别和他们的意思吗

JDBC资源

JDBC资源(数据源)为应用程序提供了一种 连接到数据库。通常,管理员创建一个JDBC 由部署在数据库中的应用程序访问的每个数据库的资源 域名。(但是,可以为一个数据库创建多个JDBC资源。) 数据库。)

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

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

在“JDBC资源”中,您可以将那些容器管理的JDBC数据源绑定到一个或多个JNDI名称,以便部署的web应用程序可以使用JNDI


persistence.xml
中,可以指定是使用本地数据源还是使用容器管理的数据源。如果要使用容器管理的数据源,则应指定其JNDI名称。使用容器管理的数据源的优点是,您可以在多个web应用程序之间共享单个数据源。对于JPA来说,它还有一个优点,即您可以使用JTA(容器管理事务),这样您就不需要在每个方法中调用
事务.begin()
提交()
回滚()
等。那么,您什么时候在persistence.xml中设置属性呢?当您在JavaSE中有一个应用程序时?但除此之外,它本质上与您可以在persistence.xml中定义的属性相同?是的,只有在普通的JavaSE应用程序中,它才有意义(例如,当您想对JPA项目进行单元测试时)。在JavaEE容器中,您确实希望使用容器管理的数据源进行JTA,这样您的EJB就可以在事务上下文中很好地完成工作。通常,您在web项目中提供另一个
persistence.xml
,它继承了JPA项目中的类,并将事务类型重写为JTA,同时提供一个指向容器管理数据源的JNDI名称的
。Okey,然后我想我开始理解了:)我正在阅读EnterpriseJavaBeans 3.1,我还没有接触到JNDI和JTA,所以理解这些部分有点困难,但我已经做到了!