Oracle
 sql >> база данни >  >> RDS >> Oracle

хванете изключение на DB в JSF+EJB приложение

EJB има концепцията за системни изключения и изключения на приложения.

Изключения по време на изпълнение, като EntityExistsException са системни изключения. Те, наред с другото, ще доведат до връщане на всяка транзакция и ще доведат до изхвърляне (унищожаване) на EJB екземплярния компонент. Най-важното за вашия проблем е, че те ще бъдат обвити в EJBException .

Няма магия около улавянето на тези изключения. Коригирането на кода от Petr по-горе,
следното просто ще работи:

Подложка:

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

Имайте предвид, че можете да извлечете причината за изключението, за да видите дали е било EntityExistsException или не (пропуснато по-горе за краткост).

Тъй като вероятно няма нужда да унищожавате своя EJB екземпляр за този случай, по-добър модел е да дефинирате собствено изключение, което наследява от RuntimeException и е анотиран с @ApplicationException с rollback атрибутът е зададен на true.

Напр.

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

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

Увийте вашето EntityExistsException във вашия EJB в това изключение и го хвърлете и хванете.

Силно ви съветвамНЕ за използване на кодове за грешки или булев успех/неуспех като резултат. Това е добре познат анти образец и прави кода ви невероятно податлив на грешки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да използвате XMLImporter и FndXdfCmp в Oracle EBS

  2. INSTR() Функция в Oracle

  3. Фина настройка на Oracle DG40DBC

  4. как да предоставим привилегия на потребител за конкретна схема?

  5. Как да отпечатате 1 до 10, без да използвате цикъл в PL/SQL?