2012-05-23 6 views
1

예외가 체크되지 않은이며, 나는 다른 곳에서 읽은에서 그들이 코드에 잡힐 안되는 것 같다에서 최대 절전 모드 예외를 처리하는 방법. 그러나 이는 예를 들어 임시 데이터베이스 오류가 발생하면 스레드가 발생하여 응용 프로그램이 응답하지 않게됩니다. 어떻게해야합니까? 발생독립형 Java 응용 프로그램 Hibernate에 의해 던져

예 예외 :

응용 프로그램이 몇 시간 또는 며칠 동안 실행 된 경우이 문제가 발생
javax.persistence.PersistenceException 
Caused by: org.hibernate.exception.GenericJDBCException: could not insert 
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction 

. 나는 봄 또는 비슷한에 통합 할 때 최대 절전 모드를 사용하는 방법에 대한 이야기를 읽은 대부분

. 따라서 각 웹 요청은 새 스레드를 시작하고 해당 스레드가 종료되면 해당 웹 요청에만 영향을줍니다. 그러나 독립형 Java 응용 프로그램의 경우 어떻게 처리해야합니까?

+0

빠른 답변 감사드립니다. 내 접근 방식은 지금 PersistenceException을 잡아서 PersistenceCheckedException (내 자신의 클래스)을 던져서 무엇을하고 있는지에 따라 처리하는 것이다. 데이터베이스 삽입이 중요하지 않은 경우이를 무시하거나 DB 삽입을 포기하고 클라이언트가 다시 시도 할 수 있습니다. 그게 좋은 것 같니? – GreatFire

답변

2

RuntimeException을 잡는 데는 아무런 문제가 없습니다. 확인되지 않은 것은 당신에게 옵션을주지 않는 것입니다.

당신이 그것을 잡을 수있는 모든 방법으로, (다시 시도하거나 앱 로직에 뭔가를 트리거 같은) 예외를 처리하기위한 마음에서 특정 전략이 있다면!

1

최대 절전 모드 예외는 DAO 또는 다른 어디에서나 처리하는 경우는 응용 프로그램의 디자인에 달려있다, 그들은 당신이 그들을 잡기 위해 강제로하지 않는 선택 해제합니다.

당신이 (캐치) PersistenceException를 처리하고 일어난 나쁜 사용자 뭔가를 통보의 시정 조치를 취할 중 하나를해야합니다 귀하의 경우합니다.

일반적으로 다른 답변에 의해 강조 표시된대로 RuntimeException을 잡는 데 아무런 해가되지 않으며 시정 조치를 취하는 것이 일반적이며 CheckedException 대신에 RuntimeException을 던질 것을 권장합니다.

0

독립 실행 형 응용 프로그램이있는 경우에도 Spring을 사용할 수 있습니다. 하루가 끝날 때, Spring은 당신이 로딩하고 실행하도록 설정 한 자바 클래스의 무리이다. 가운데에는 ApplicationContext.xml 파일의 객체 버전 인 ApplicationContext 객체가 있습니다.

기본적으로, 당신의에서 "공공 정적 무효 메인 (문자열 []에 args)"당신은 당신의 XML 파일에서의 ApplicationContext를 만들 수 있습니다. ApplicationContext는 인터페이스이므로 FileSystemXmlApplicationContext (String configLocation)의 생성자를 호출 할 것입니다.

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/context/support/FileSystemXmlApplicationContext.html#FileSystemXmlApplicationContext(java.lang.String)

체크 아웃 http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/beans.html과 3.2 절에 대해 자세히 살펴 있습니다.

관련 문제