我想了解以下事项:
当我创建一个EJB项目并将其部署到Glassfish时,我是否在Glassfish的管理员中心设置了JDBC资源/连接池,还是在persistence.xml中添加了用户名,密码等所有不同的属性?我不明白这一点。
我不明白为什么我们同时拥有JDBC资源和JDBC连接池。它是什么,它们之间有什么区别?有人可以解释我这些东西或/并提供一些关于persistence.xml文件及其周围部分的良好链接吗?
答案 0 :(得分:5)
最好定义JDBC资源,而不是将信息放在persistence.xml中。通过这种方式,您将利用连接池。您将在persistence.xml中定义为JDBC资源提供的JNDI名称。
它是什么,它们之间有什么区别
下面我粘贴了Glassfish 3.x帮助的部分内容。看看这个。这真的很有帮助
JDBC连接池
JDBC连接池包含一组在注册连接池时创建的JDBC连接
JDBC资源
Java数据库连接(JDBC)资源(数据源)为应用程序提供了连接数据库的方法。通常,管理员为域中部署的应用程序访问的每个数据库创建JDBC资源;但是,可以为数据库创建多个JDBC资源。
应用程序通过在Java命名和目录接口(JNDI)API树上查找数据源然后请求连接,从连接池获取数据库连接。与数据源关联的连接池提供与应用程序的连接。
将数据源(JDBC)资源视为某种类型的数据服务(连接池)的外观的工厂。在这种情况下,它隐式地从池中获取连接并将其提供给您的应用程序。
示例persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="WebApplication2PU" transaction-type="JTA">
<jta-data-source>jdbc/sample</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>
这一行是我给我的JDBC资源的JNDI名称:
<jta-data-source>jdbc/sample</jta-data-source>
您不需要以这种方式在persistence.xml中定义与数据库连接相关的任何内容......只需要资源的JNDI名称
答案 1 :(得分:0)
在应用程序服务器中配置数据源时,在persistence.xml
中设置的所有内容都是该数据源的JNDI名称。
答案 2 :(得分:0)
我在学习Spring和Hibernate的书中发现了这一点。书名是由 Nicholas S. Williams 编写的 Web应用程序专业Java 。我认为这对很多人都有帮助。
创建持久性配置:
要使用您创建的实体,您必须定义持久性单元。这样做很简单。创建一个 persistence.xml文件与部署描述符没有什么不同,但选项少得多 担心。持久性配置文件的根元素是
<persistence>
。这个 元素可以包含一个或多个<persistence-unit>
元素。没有其他元素 在<persistence>
内。<persistence-unit>
有两个属性:name指定名称 持久性单元和事务类型指示此持久性单元是否使用Java 事务API(JTA)事务或标准本地事务。 您必须指定一个名称,这是您在代码中找到持久性单元的方式。如果没有指定, transaction-type缺省为Java EE应用程序服务器中的JTA和Java中的RESOURCE_LOCAL SE环境或简单的Servlet容器。但是,为了防止意外行为,最好 始终显式设置此值,而不是依赖于默认值。<persistence-unit>
包含以下内部元素。它们都不是必需的(所以<persistence-unit>
可能是空的);但是,您必须指定您在中使用的任何元素 以下顺序:
<description>
包含此持久性单元的有用说明。虽然它有 更容易阅读持久性文件,它没有语义价值。
<provider>
指定javax.persistence.spi的完全限定类名 .PersistenceProvider实现用于此持久性单元。默认情况下,当你 查找持久性单元,API将使用类路径上的第一个JPA提供程序。您 可以包含此元素来强制要求特定的JPA提供者。您可以使用
<jta-data-source>
或<non-jta-data-source>
(但不能同时使用两者) 使用JNDI DataSource资源。您只能使用<jta-data-source>
事务类型是JTA;同样,您可以仅使用<non-jta-data-source>
如果transaction-type是RESOURCE_LOCAL。指定DataSource会导致持久性 单位将该DataSource用于所有实体操作。
<mapping-file>
指定XML映射文件的类路径相对路径。如果你不这样做 指定任何<mapping-file>
,提供程序查找orm.xml。您可以指定多个<mapping-file>
元素使用多个映射文件。您可以使用一个或多个
<jar-file>
元素来指定JAR文件或JAR文件 JPA提供程序应扫描映射注释的实体。任何@Entity,@ Embeddable, @ javax.persistence.MappedSuperclass,或@javax.persistence.Converter类 找到的内容会添加到持久性单元中。您可以使用一个或多个
<class>
元素来表示特定的@Entity,@ Embeddable, 应该添加到持久性单元的@MappedSuperclass或@Converter类。 您必须使用JPA注释注释一个或多个类。使用
<exclude-unlisted-classes />
或<exclude-unlisted-classes>true</exclude-unlisted-classes>
表示提供者不应忽略类 使用<jar-file>
或<class>
指定。省略<exclude-unlisted-classes>
或使用<exclude-unlisted-classes>false</exclude-unlisted-classes>
导致JPA 提供程序扫描JPA注释类的持久性文件的类路径位置。如果 persistence.xml位于JAR文件中,该JAR文件(仅限该JAR文件)被扫描 对于课程。如果persistence.xml位于基于目录的类路径位置(例如/ WEB-INF / classes),扫描该目录(并且只有该目录)的类。之前 Hibernate 4.3.0和Spring Framework 3.2.5,指定此元素的值为false 被错误地解释为真。
<shared-cache-mode>
表示如何在持久性单元中缓存实体(如果是JPA provider支持缓存,这是可选的)。 NONE禁用缓存,而ALL启用 缓存所有实体。 ENABLE_SELECTIVE意味着只有实体注释了@javax .persistence.Cacheable或@Cacheable(true)(或在orm.xml中标记为可缓存) 被缓存。 DISABLE_SELECTIVE导致除注释之外的所有实体的缓存 @Cacheable(false)(或在orm.xml中标记为不可缓存)。默认值, 未知,意味着JPA提供商决定有效默认值是什么。过冬 ORM默认为ENABLE_SELECTIVE,但依赖于此是不可移植的。
<validation-mode>
表示是否以及如何将Bean Validation应用于实体。 NONE表示未启用Bean Validation,而CALLBACK表示提供程序 验证插入,更新和删除的所有实体。 AUTO具有CALLBACK的有效值 如果类路径上存在Bean Validation提供程序,则有效值为NONE(如果不存在) Bean Validation提供程序存在于类路径中。如果启用验证,则为JPA提供程序 配置新的Validator以验证您的实体。如果您已配置特殊 Spring Framework Validator包含您的自定义本地化错误代码,JPA提供程序 忽略它。因此,最好将验证模式设置为NONE并使用Bean Validation 在调用持久层之前。
<properties>
提供了一种指定其他JPA属性的方法,包括标准JPA 属性(例如JDBC连接字符串,用户名和密码或模式生成 设置)以及特定于提供程序的属性(例如Hibernate设置)。你指定 一个或多个使用嵌套元素的属性,每个属性都有一个名称和值 属性。
Nicholas S. Williams, Professional Java for Web Applications, (Indianapolis, Indiana: John Wiley & Sons, Inc., 2014), pg 584-585