2013-10-29 5 views
0

JavaSE 응용 프로그램에서 JPA를 사용 중이며 데이터베이스 연결을 관리하고 객체를 데이터베이스에 유지하는 클래스를 작성했습니다. 데이터베이스 연결에 대한 연결 매개 변수는 클래스 생성자를 사용하여 전달되며 클래스에는 연결 매개 변수의 유효성을 검사하는 메서드가 있습니다.JPA 연결 속성을 확인하는 방법은 무엇입니까?

public class DatabaseManager{ 

    private EntityManagerFactory entityManagerFactory = null; 

    public DatabaseManager(String connectionDriver, String connectionUrl, String username, String password) { 

     Properties props = new Properties(); 

     props.put("javax.persistence.jdbc.driver", connectionDriver); 
     props.put("javax.persistence.jdbc.url", connectionUrl); 
     props.put("javax.persistence.jdbc.user", username); 
     props.put("javax.persistence.jdbc.password", password); 

     entityManagerFactory = Persistence.createEntityManagerFactory("name of persistence unit", props); 
    } 

    public boolean checkConnection(){ 

     try{ 
      entityManagerFactory.createEntityManager(); 
     }catch(Exception e){ 
      return false; 
     } 

     return true; 
    } 
} 

checkConnection 메서드를 호출하면 지정된 매개 변수를 사용하여 새 entitymanager를 만들려고합니다. 연결을 설정할 수없는 경우 entitymanagerfactory는 예외를 throw하고 메서드는 false를 반환합니다. 나는 다음과 같은 결과를 볼 수있는 방법을 테스트 할 때
는 :

  • 모든 매개 변수가 올바른지를 - 예상대로> 메소드는 true를 반환합니다.
  • URL 또는 사용자 이름이 올바르지 않습니다. -> 메서드가 예상대로 false를 반환합니다.
  • drivername 또는 사용자 암호가 정확하지 않음 -> 메서드가 true를 반환하지만 false를 반환해야합니다. < - 이것은 내 문제입니다.

    누군가가 이와 같이 작동하는 이유와 일부 데이터베이스 테이블에 데이터를 쓰지 않고 연결 매개 변수를 테스트하는 적절한 방법이 무엇인지 말해 줄 수 있습니까?
    현재 EclipseLink를 사용하고 있지만 공급자와 독립적 인 방식으로 찾고 있습니다.

    답변 해 주셔서 감사합니다.

답변

0

EntityManager를 생성해도 그 시점에서 아무런 연결도 만들 필요가 없습니다. JPA 구현은 예를 들어 첫 번째 지속 또는 플러시가 될 때까지 연결 획득을 지연시킬 수 있습니다 (JPA 스펙은 연결을 획득해야 할시기를 정의하지 않습니다).

DB 자격 증명을 확인하기 위해 간단한 몇 줄의 JDBC를 사용하지 않는 이유는 무엇입니까? 최소한 JPA 구현이 연결을 처리하기로 결정한 방식과는 독립적으로 작동합니다. JPA 구현은 연결을 얻기 위해 JPA 구현이 사용하는 거의 확실하므로 이름에 "jdbc"가 있습니다.

0

JPA 2.0 Specification 가입일 8.2.1

요소 이름 및 트랜잭션 타입 속성과 다음 서브 요소로 구성 지속성 단위 설명 공급자 JTA 데이터 소스, 비 JTA 데이터 -source, mapping-file, jar-file, class, exclude-unlisted-classes, 공유 캐시 모드, 유효성 검사 모드 및 등록 정보가 있습니다.

이름 속성은 이어야합니다.; 다른 속성 및 요소는 (선택 사항)입니다. 이들의 의미는 다음 하위 섹션에서 설명합니다.

엔티티 관리자는이 는 지속성 단위 이름이 필요로 만들 수 연결을 필요로하지 않는다, 나는 당신이 당신의 연결을 확인하는 간단한 JDBC 연결을 만들 DataNucleus suggesion 함께 가야한다고 생각합니다.

관련 문제