2012-10-11 216 views
2

我是JPA的新手。我的代碼試圖連接到Oracle 10.3數據庫來填充一些表。但是,在它進入代碼羣之前,它會在EntityManagerFactoryImpl.createEntityManager(String)中拋出一個NullPointerException異常。我已經驗證emf變量不爲空。下面是相關的代碼Populator.java,這就像許多實例教程:爲什麼EntityManagerFactoryImpl.createEntityManager()會導致NullPointerException?

public static void main(String[] args) { 
    EntityManagerFactory emf = 
     Persistence.createEntityManagerFactory("LeaveSchedulerJPA"); 
    EntityManager em = emf.createEntityManager(); 

的異常跟蹤是:

[EL Severe]: 2012-10-11 14:37:02.415--ServerSession(37999235)--java.lang.NullPointerException 
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:950) 
    at org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator.buildMessage(ExceptionMessageGenerator.java:47) 
    at org.eclipse.persistence.exceptions.ValidationException.errorDecryptingPassword(ValidationException.java:864) 
    at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:124) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:1183) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateServerSession(EntityManagerSetupImpl.java:1450) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:372) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:164) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:221) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:209) 
    at com.engilitycorp.leaveschedulerjpa.Populator.main(Populator.java:28) 

我的persistence.xml如下。當我從Eclipse中使用它來生成與表相對應的類時,指定的URL將起作用。有任何想法嗎?

<?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="LeaveSchedulerJPA" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>com.engilitycorp.leaveschedulerjpa.Holiday</class> 
     <class>com.engilitycorp.leaveschedulerjpa.Leave</class> 
     <class>com.engilitycorp.leaveschedulerjpa.LeaveType</class> 
     <class>com.engilitycorp.leaveschedulerjpa.Notification</class> 
     <class>com.engilitycorp.leaveschedulerjpa.NotificationType</class> 
     <class>com.engilitycorp.leaveschedulerjpa.Role</class> 
     <class>com.engilitycorp.leaveschedulerjpa.User</class> 
     <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/> 
      <property name="javax.persistence.jdbc.user" value="leavescheduler"/> 
      <property name="javax.persistence.jdbc.password" value="xxxx"/> 
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
     </properties> 
    </persistence-unit> 
</persistence> 
+1

錯誤不喜歡它是你的...它告訴發生了一個錯誤,但是當它要找到資源包(一個榮耀的屬性文件)來將相應的消息放入異常中時它找不到捆綁。我會檢查所有JPA jar是否在類路徑中。然後你會發現真正的錯誤:-D – SJuan76

+0

SJuan76:謝謝你的想法。我的應用程序編譯得很好 - 找到了所有的javax.persistence。*類。運行時需要什麼,編譯時不存在? (我正在編譯並從Eclipse中運行。) – kc2001

+0

我不知道eclipse持久化的結構,告訴你哪個jar丟失了(假設我是對的),但是如果從那個jar中只使用bundle,那麼你會在編譯時沒有看到錯誤,因爲沒有檢查bundle的存在。 – SJuan76

回答

0

問題是,我試圖測試持久性,就像它是一個獨立的Java應用程序一樣。該文檔指出EntityManagerFactoryImpl維護「對活動ServerSession的引用」。當我在WebLogic中運行相同的代碼時,它運行良好。

一位同事能夠運行與獨立Java應用程序相同的代碼。我還沒有弄清楚關鍵配置差異是什麼。

相關問題