我是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
}
答案 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;
}