JSF2 및 EJB stateless와 함께 Glassfish 3.1을 사용하여 Oracle DB를 쿼리하고 작성합니다. 이 웹 응용 프로그램에서 사용자가 채우려는 테이블에는 기본 키가 있습니다. 사용자가 새 레코드를 추가하려고하면 em.persist를 호출하는 ejb 메소드가 호출됩니다. 이제 사용자가 이미 사용 된 기본 키 값이있는 레코드를 추가하려고하면 EJB에서 예외가 발생합니다. 데이터베이스에 오류가 발생했음을 나타내는 메시지를 사용자에게 팝업하고 싶습니다. 그러나 JSF 관리 빈이 EJB 예외를 잡을 수있는 방법을 알 수 없습니다. 어떨까요?JSF + EJB 응용 프로그램에서 DB 예외를 catch하십시오.
답변
EJB는 시스템 예외 및 응용 프로그램 예외의 개념이 ... 형 왜냐하면 userexecption ... 얻을 열거 이유에서 예외입니다.
EntityExistsException
과 같은 런타임 예외는 시스템 예외입니다. 이것들은 다른 트랜잭션들 사이에서 트랜잭션을 롤백시키고 EJB 인스턴스 bean을 폐기 (파기)시킵니다. 가장 중요한 문제는 EJBException
입니다.
이러한 예외를 포착하는 데 필요한 마법은 없습니다.
백업 콩 :
@EJB
private DAOBean daoBean;
public void savePerson(Entity e) {
try {
daoBean.save(e);
} catch (EJBException e) {
FacesMessage message = new FacesMessage("entity is already exists.");
FacesContext.getCurrentInstance.addMessage(null, message);
}
}
EJB :
private EntityManager em;
public void save(Entity e) {
em.persist(e);
}
주 당신이 볼 수있는 예외의 원인을 검색 할 수 있습니다
는 다음 그냥 작동합니다, 위의 페트르에서 코드를 조정 if가 EntityExistsException
또는 아닙니다 (간결을 위해 위에 생략 된). 당신은 아마이 경우에 대한 귀하의 EJB 인스턴스를 파괴 할 필요가 없기 때문에
는 더 나은 패턴은 RuntimeException
에서 상속 true로 설정 rollback
속성으로 @ApplicationException
와 주석이 자신의 예외를 정의하는 것입니다.
예.
@ApplicationException(rollback = true)
public class MyException extends RuntimeException {
public MyException(Throwable cause) {
super(cause);
}
}
는 랩 당신이 예외로하여 EJB에서 EntityExistsException
및 던져 그것을 잡을 수있어.
아니요 오류 코드 또는 부울 성공/실패를 사용하는 것이 좋습니다. 이것은 잘 알려진 안티 패턴이며 코드의 오류가 발생하기 쉽습니다.
사용자 지정 예외 클래스를 만들 수 있습니다. 가능한 예외 옵션의 열거 형 값이있는 UserException
이라고 가정 해 보겠습니다.
EJB에서는 메소드를 Throwable로 정의 할 수 있습니다. 예외를 throw해야하는 경우.
JSF-SiteBean에서는 간단한 try/catch 만 사용해야합니다.
등
- 1. 멋지게 예외를 catch하십시오.
- 2. 동일한 메서드에서 예외를 throw하고 catch하십시오.
- 3. 별도의 JSF 및 EJB 응용 프로그램
- 4. JSF 응용 프로그램에서 파일로드
- 5. try-catch 메커니즘없이 순수한 C에서 예외를 catch하십시오.
- 6. 부스트 테스트 : 사용자 정의 예외를 catch하십시오.
- 7. 응용 프로그램에서 DB 추상화
- 8. 응용 프로그램에서 예외를 추적하는 방법
- 9. JSF 관리 - 콩 EJB 주입
- 10. EJB 또는 Spring이없는 JSF + JPA?
- 11. Glassfish 웹 응용 프로그램에서 EJB 삽입
- 12. JSF Managed Bean에서 @EJB 호출
- 13. jsf beans와 ejb beans의 차이점
- 14. 특정 HttpException 만 catch하십시오.
- 15. JSF/Facelets의 : 설정`내 JSF/Facelets의 응용 프로그램에서
- 16. n 계층을 처리 할 때 호출 스택에서 예외를 catch하십시오.
- 17. 내가 응용 프로그램에서 예외를 많이보고 있어요
- 18. 애플릿 또는 응용 프로그램에서 오류 예외를 catch해야합니까?
- 19. ipad : 응용 프로그램에서 크래시가 예외를 생성하지 않습니다?
- 20. Weld CDI를 jboss 6의 JSF 1.2 EJB 응용 프로그램에 통합하십시오.
- 21. 는 JSF 응용 프로그램에서 작동하지 않는
- 22. JSF 응용 프로그램에서 PayPal을 통합하는 방법
- 23. 내 jsf 응용 프로그램에서 jquery 충돌을 피하십시오
- 24. JSF 응용 프로그램에서 페이지를 찾을 수 없습니까?
- 25. JSF 응용 프로그램에서 스마트 인터페이스 사용
- 26. 웹 응용 프로그램에서 JSF 파일 구성
- 27. JSF 응용 프로그램에서 스레드 누수를 수정하려면 어떻게합니까?
- 28. JSF : javax.faces.resources 내 응용 프로그램에서 참조되지
- 29. jsf 웹 응용 프로그램에서 log4j로 로그
- 30. JSF 응용 프로그램에서 인터넷 연결없이 GoogleMaps에 액세스
알려 주셔서 감사합니다. 어떻게 작동하는지 잘 모르겠습니다. BTW, 그게 내가 아는 한 쓴 이유야. –