2011-08-07 7 views
3
나는 사용자가 수동으로 DB를 연결해야합니다이 응용 프로그램을 가지고

, 내가 할 그이 줄c3p0 및 JPA 예외를 잡는 방법?

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit", connectionProperties); 

사용자/암호가 올바르지 않거나 잘못된 URL C3P0에 의한 호스트 시간 초과는 연결이 끊어과

그때 내가 콘솔에서

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask, 1853 - A RESOURCE POOL IS PERMANENTLY BROKEN! [[email protected]2a] 

문제를이 얻을 : EMF는 항상 생성되고 내가 할 수있는 방법이 없어처럼 나는 그래서 화면에 사용자 친화적 인 메시지에 변환 할 수있는 예외를 캡처 할 수 없습니다, 그것은이다 언제 파산했는지 말해 n 또는하지

업데이트 : 최대 절전 모드 http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/transactions.html#transactions-demarcation-exceptions

에서 발견하지만 일을 잡을 수 없어 여전히 매 시도 잡을 수 내 기전력을 포위하고

+0

누군가 제 질문을 이해할 수 있습니까? 내가 null 포인터 예외를 잡을 수 있기 때문에 누구도 – javaNoober

답변

0

JPA 스펙은 말한다 Persistence.createEntityManagerFactory은 영속성 단위가 인스턴스화 될 수 없거나 가능한 예외에 대해 아무 것도 기술하지 않은 경우 null을 반환합니다. 결과적으로 프로그래밍 방식으로 이유를 찾아내는 용도로 초콜릿 주전자만큼 사용합니다. JPA 스펙을 작성한 사람들에게 불평하십시오.

+0

이 null을 반환하기를 바라는이 경우에 아무도 믿을 수 없다. 깨진 리소스를 가리키는 활성 entitymanager를 반환한다 ... – javaNoober

+0

EntityManager가 아니라 EntityManagerFactory를 의미합니까? DataNucleus JPA는 특정 상황에서 실제로 PersistenceException을 발생 시키므로 탐지 가능합니다. – DataNucleus

+0

ye는 emf를 의미합니다. DataNucleus를 살펴 보겠습니다. – javaNoober

0

나는 이것이 오래된 스레드라는 것을 알고있다.

그러나 나는 당신과 똑같이하려고 노력하고있었습니다. 큰 검색을 수행하여 답변을 찾을 수 없습니다. 오래 전이 게시물을 올렸고 답변을 얻지 못했습니다.

글쎄 .. 대부분의 Hibernate 코드는 예외를 캐치하고 그것을 로컬 예외 목록에 넣는다.

예를 들어 org.hibernate.tool.hbm2ddl.SchemaUpdate.execute()에서 모든 jdbc 예외를 포착하여 예외 목록에 넣습니다. 아쉽게도이 클래스를 사용하는 코드는 더 이상 개체가 참조되지 않으므로 이러한 예외를 추적하지 못합니다.

모든 예외는 기록되지만 .. 나는 컨트롤 괴물이기 때문에이 동작이 실제로 성가시다. 목록에 예외를 넣는 아이디어는 프레임 워크에 매우 좋습니다. 하지만 다른 쪽에서 사용할 수 없다면 .. 코드가 부풀어 오르는 이유가 무엇인지 분석하여 낭비하는 시간을 낭비하게 만듭니다 (결코 포기하지 않는 사람들을 위해).

데이터베이스에서 몇 가지 기본적인 시작 작업을 수행하고 쿼리 예외가 발생하면 뭔가 잘못되었다는 것을 알고 있습니다. 서블릿의 오류 페이지는보다 일반적이지만 사용자에게 시스템에 많은 버그가 있다는 인상을주지는 않습니다 (hehe, 이것은 잘못된 것 같습니다).

아 .. 그냥 발언. hibernate의 네이티브 초기화를 사용하면 JPA 스펙 문제가 아닙니다 (DataNucleus와 같습니다). JPA에는 초기화 예외가 없다고 생각합니다.

+0

많은 텍스트입니다. 실제 답변을 과장 할 수 있습니까?:) –

+0

정말 대답은 .. 왜 ** 당신이 실제로 할 수없는 ** 작은 설명. ** @ javaNoober가하려고했던 것 ...이 경우에는 Hibernate와 특별히 관련이있다. 그러나 당신은 옳습니다. 이미 선출 된 사람이 있더라도 대답을 강조해야했습니다. – diogocasado

관련 문제