Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

bắt ngoại lệ DB trong ứng dụng JSF + EJB

EJB có khái niệm về ngoại lệ hệ thống và ngoại lệ ứng dụng.

Các ngoại lệ thời gian chạy, như EntityExistsException là các ngoại lệ của hệ thống. Những điều này trong số những người khác sẽ khiến bất kỳ giao dịch nào được khôi phục lại và khiến bean phiên bản EJB bị loại bỏ (bị phá hủy). Quan trọng nhất đối với vấn đề của bạn, chúng sẽ được bao bọc trong một EJBException .

Không có phép thuật nào xung quanh việc bắt những trường hợp ngoại lệ này. Điều chỉnh mã từ Petr ở trên,
những điều sau sẽ chỉ hoạt động:

Đậu hậu:

@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);    
}

Lưu ý rằng bạn có thể truy xuất nguyên nhân của ngoại lệ để xem có phải là EntityExistsException không hoặc không (bỏ qua ở trên cho ngắn gọn).

Vì bạn có thể không cần phải hủy cá thể EJB của mình cho trường hợp này, nên một mẫu tốt hơn là xác định ngoại lệ của riêng bạn kế thừa từ RuntimeException và được chú thích bằng @ApplicationException với rollback thuộc tính được đặt thành true.

Ví dụ:

@ApplicationException(rollback = true)
public class MyException extends RuntimeException {

    public MyException(Throwable cause) {
        super(cause);
    }
}

Kết thúc EntityExistsException của bạn trong EJB của bạn vào ngoại lệ này và ném và bắt nó.

Tôi thực sự khuyên bạn KHÔNG ĐƯỢC để sử dụng mã lỗi hoặc kết quả là thành công / thất bại boolean. Đây là một mẫu chống nổi tiếng và làm cho mã của bạn dễ bị lỗi một cách đáng kinh ngạc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương đương với bảng Oracle Dual trong MS SqlServer là gì?

  2. Chuyển và trả về đối tượng mảng tùy chỉnh trong ibatis và oracle trong java

  3. Tại sao Oracle SQL không cho phép chúng ta sử dụng bí danh cột trong mệnh đề GROUP BY?

  4. cột không được phép ở đây lỗi trong câu lệnh INSERT

  5. Làm thế nào để chuyển đổi dấu thời gian với mili giây sang ngày tháng trong Oracle