java - 为什么我们必须在 persistence.xml 中提供数据库凭据

标签 java jakarta-ee jpa jpa-2.0

我们使用的是JPA 2.0,我们在websphere 中创建了数据源,并尝试通过J2SE 应用程序访问数据库。我们收到无效的用户名和密码错误。如果我们在 persistence.xml 中提供用户名和密码,它就可以正常工作。

请任何人解释一下为什么我们必须在 persistence.xml 中提供数据库凭据,因为我们有数据源。

说明:数据源创建成功,测试成功。

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="Printer">

            <jta-data-source>jdbc/TestDataSource</jta-data-source>

            <properties>
                  <property name="openjpa.Optimistic" value="false" />
                  <property name="openjpa.LockManager" value="pessimistic" />
                  <property name="javax.persistence.jdbc.user" value="admin" />
                  <property name="javax.persistence.jdbc.password" value="admin#2" />
                </properties>

      </persistence-unit>
</persistence>

最佳答案

似乎 websphere 中的数据源配置不正确。 Test the database connection通过websphere控制台验证配置。

一个DataSource有 2 种方法来获取连接。如果您通过属性提供凭据,您的 jpa 实现似乎会使用 DataSource.getConnection(String username, String password)

连接属性旨在在 Java SE 环境中使用。在 JEE 中,您应该更喜欢 JNDI 查找。参见8.2.1.9部分JPA 2.0 规范。

关于java - 为什么我们必须在 persistence.xml 中提供数据库凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20882501/

相关文章:

java - 在 servlet 中使用 java.util.Timer 是否安全?

java - 在 Android 中创建 PDF

mysql - 为什么我收到此错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException?

java - EntityManager.flush 有什么作用,为什么需要使用它?

java - Tomcat Classloader 如何在同一个 JVM 中分离不同的 Webapps 对象范围?

java - SWTBot - 等待消息框

java - 如何使用 Struts 和 GlassFish 创建 Java Web 应用程序?

java - OC4J 10.1.3 和表达式语言 (EL) 冲突

java - 调用 EntityManager.merge() 时未设置 ID

java - 我应该更喜欢使用 JPA - 纯 SQL 还是 JPQL 以及如何使用 JPQL 和实体创建/删除表