2012-10-11 2 views
2

나는 JPA를 처음 사용합니다. 일부 테이블을 채우려면 Oracle 10.3 데이터베이스에 연결하려고 내 코드. 그러나 코드가 채워지기 전에 EntityManagerFactoryImpl.createEntityManager (String)에 NullPointerException을 발생시킵니다. emf 변수가 null이 아닌지 이미 확인했습니다. 여기에 단지 많은 튜토리얼 예제처럼 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은 다음과 같습니다. 지정된 URL은 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 병이 클래스 경로에 있는지 확인합니다. 그럼 진짜 오류를 찾을 수 있습니다 : - D – SJuan76

+0

SJuan76 : 아이디어 주셔서 감사합니다. 내 애플리케이션이 잘 컴파일되어 모든 javax.persistence. * 클래스가 발견됩니다. 컴파일 타임에 존재하지 않는 런타임에 무엇이 필요합니까? (저는 컴파일과 실행 둘다 Eclipse에서 실행 중입니다.) – kc2001

+0

어느 항아리가 빠졌는지 알려주는 식 지속성의 구조를 알지 못합니다.하지만 그 항아리에서만 번들을 사용한다면 번들의 존재가 확인되지 않기 때문에 컴파일 타임에 오류를 볼 수 없습니다. – SJuan76

답변

0

문제는 독립형 Java 응용 프로그램 인 것처럼 지속성을 테스트하려고 시도하는 것으로 나타났습니다. 설명서에는 EntityManagerFactoryImpl이 "활성 ServerSession에 대한 참조"를 유지한다는 내용이 나와 있습니다. WebLogic 내에서 동일한 코드를 실행하면 정상적으로 작동합니다.

동료가 독립 실행 형 Java 응용 프로그램과 동일한 코드를 실행할 수있었습니다. 중요한 구성 차이가 무엇인지 아직 알지 못했습니다.

관련 문제