2014-08-27 83 views
0

我是JPA的新手。我使用maven,eclipselink 2.0和jpa 2.0。我已經使用數據庫連接創建了這些實體。這是我的persistence.xmlJPA 2.0和EclipseLink 2.0的身份驗證錯誤

<?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「異常[EclipseLink-4002](Eclipse持久性服務 - 2.3.1.v20111018-r10243):org.eclipse.persistence.exceptions.DatabaseException \ r \ n內部異常:java.sql.SQLException:java.sql .SQLException:用戶:NI,未通過身份驗證。\ r \ n錯誤代碼:0「(id = 114)

正如您所看到的,在我的持久性中沒有任何稱爲」NI「的東西。唯一被稱爲NI的是我從中拉出表來創建實體的模式。 JTA數據源與我的weblogic中的內容完全相同。

任何想法?

- 編輯 - 這是我得到的EntityManager

private EntityManagerFactory emf; 

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

回答

0

您正在使用JTA提供數據源的應用服務器,所以的EclipseLink是越來越已經初始化的EntityManager。我想,你不需要額外的屬性,因爲這樣的EclipseLink被創造從數據源連接,

ds.getConnection(username, password); 

,而不是作爲

ds.getConnection(); 

請嘗試刪除屬性javax.persistence.jdbc.password,使用javax。 persistence.jdbc.user和javax.persistence.jdbc.driver和ee,如果它適合你。

編輯:因爲您使用JTA DataSource和JNDI查找從應用程序服務器獲取DataSource連接,所以您正在使用配置爲從應用程序服務器(在您的情況下爲WebLogic)中使用的EclipseLink。 但你一個,就是在非Java EE環境中使用,如獨立的JavaSE客戶端(請參閱here)的方式將EclipseLink。

如果需要EntityManager的地方,讓我們的WebLogic做初始化,例如在Servlet中它看起來像這樣:

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

試過了,但沒有奏效。我添加了更多信息。謝謝! – Nacho321 2014-08-27 17:33:16

+0

您可以從數據源連接正常WebLogic控制檯驗證?它可以是您在WebLogic中數據源配置使用的用戶「NI」和它的用戶名或密碼在WebLogic中被定義incorrecly。 – 2014-08-28 07:44:12

+0

不,weblogic數據源有一個完全不同的用戶/密碼組合。它和我在persistence.xml中的一樣 – Nacho321 2014-08-28 13:33:26