Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

tangkap pengecualian DB di aplikasi JSF + EJB

EJB memiliki konsep pengecualian sistem dan pengecualian aplikasi.

Pengecualian waktu proses, seperti EntityExistsException adalah pengecualian sistem. Ini antara lain akan menyebabkan transaksi dibatalkan dan menyebabkan kacang instance EJB dibuang (dihancurkan). Yang paling penting untuk masalah Anda, mereka akan dibungkus dengan EJBException .

Tidak ada keajaiban untuk menangkap pengecualian ini. Menyesuaikan kode dari Petr di atas,
berikut ini hanya akan berfungsi:

Kacang punggung:

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

Perhatikan bahwa Anda dapat mengambil penyebab pengecualian untuk melihat apakah itu EntityExistsException atau tidak (dihilangkan di atas untuk singkatnya).

Karena Anda mungkin tidak perlu memusnahkan instance EJB Anda untuk kasus ini, pola yang lebih baik adalah mendefinisikan pengecualian Anda sendiri yang mewarisi dari RuntimeException dan dijelaskan dengan @ApplicationException dengan rollback atribut disetel ke true.

Mis.

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

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

Bungkus EntityExistsException Anda di EJB Anda ke dalam pengecualian ini dan lempar dan tangkap.

Saya sangat menyarankan Anda TIDAK untuk menggunakan kode kesalahan atau keberhasilan/kegagalan boolean sebagai hasilnya. Ini adalah pola anti yang terkenal dan membuat kode Anda rentan terhadap kesalahan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa memilih kolom yang ditentukan, dan semuanya, salah di Oracle SQL?

  2. Membuat Profil Di Oracle Untuk Keamanan Pengguna

  3. Jalankan SQL dari file batch

  4. Bagaimana menjalankan prosedur tersimpan Oracle melalui tautan basis data

  5. SQL 'DAN' atau 'ATAU' didahulukan?