JPA 2.0和EclipseLink 2.0的身份验证错误

时间:2014-08-27 14:24:30

标签: jpa eclipselink

我是JPA的新手。我使用maven,eclipselink 2.0和jpa 2.0。我使用数据库连接创建了实体。这是我的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="certifications" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/com/ni/ds_edata_soa_nontx</jta-data-source>
        <class>com.ni.apps.engineering.certification.entities.NicdsCliCertificationStg</class>
        <class>com.ni.apps.engineering.certification.entities.NicdsCliCertificationStgPK</class>
        <class>com.ni.apps.engineering.certification.entities.NicdsCliUpMapping</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>          
        <properties>                        
            <property name="javax.persistence.jdbc.password" value="soa_user"/>
            <property name="javax.persistence.jdbc.user" value="soa_user"/>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
            <property name="eclipselink.logging.level.sql" value="FINE"/>           
        </properties>       
    </persistence-unit>
</persistence>

这是我在尝试运行该应用时遇到的错误。

detailMessage&#34;异常[EclipseLink-4002](Eclipse Persistence Services - 2.3.1.v20111018-r10243):org.eclipse.persistence.exceptions.DatabaseException \ r \ n内部异常:java.sql.SQLException:java .sql.SQLException:用户:NI,未通过身份验证。\ r \ n \ n错误代码:0&#34; (id = 114)

正如你所看到的那样,没有任何东西被称为&#34; NI&#34;在我的坚持。唯一被称为NI的是我从中拉出表来创建实体的模式。 JTA数据源是我的weblogic中的内容的精确副本。

有什么想法吗?

- EDIT-- 这就是我获取EntityManager的方法

private EntityManagerFactory emf;

    protected EntityManager getEntityManager(){
        if(emf == null){
            emf = Persistence.createEntityManagerFactory("certifications");
        }
        return emf.createEntityManager(); //This is where it fails
    }

1 个答案:

答案 0 :(得分:0)

您正在使用应用程序服务器提供的JTA DataSource,因此EclipseLink已经初始化了EntityManager。我认为您不需要其他属性,因为EclipseLink正在以数据方式创建

连接
ds.getConnection(username, password);

而不是

ds.getConnection();

如果适合您,请尝试删除属性javax.persistence.jdbc.password,javax.persistence.jdbc.user和javax.persistence.jdbc.driver以及ee。

编辑:您正在使用配置为从应用程序服务器(在您的情况下为WebLogic)中使用的EclipseLink,因为您使用JTA DataSource和JNDI查找从应用程序服务器获取DataSource连接。 但是,您以一种非Java EE环境(例如独立的JavaSE客户端)的方式使用EclipseLink(请参阅here)。

如果您需要某处的EntityManager,请让WebLogic进行初始化,例如:在Servlet中它看起来像这样:

@WebServlet(urlPatterns = { "/Test" })
public class TestServlet {
  @PersistenceContext(unitName = "certifications")
  private EntityManager entityManager;
}