Také zdravím! To co popisujete je bohužel vlastnost EJB. Pokud se na straně kontejneru vyhodí potomek RunTimeException, tak se ke klientovi (přes RMI) dostane EJBException.
Pokud na straně kontejneru vyhodíte potomka Exception (která se musí zachytávat), tak se ke klientovi (přes RMI) dostane přímo vaše exception. Problém ovšem nastává, pokud vyhodíte potomka Exception a změníte nějaká data v entitě. Provede se merge, i když o to vůbec nestojíte. Proto se musí v EJB vyhazovat potomek RunTimeException. (viz. specifikace ejb-3_0-fr-spec-persistence.pdf str. 64) Lifecycle callback methods may throw runtime exceptions. A runtime exception thrown by a callback method that executes within a transaction causes that transaction to be rolled back. No further lifecycle callback methods will be invoked after a runtime exception is thrown. Fafi Milan Kratochvíl napsal(a): > Zdravim! > > Pisu aplikaci s vyuzitim EJB 3, Sun Application Server 9, TopLink, > PostgreSQL a narazil jsem na problem s odchytavanim vyjimek. Pokud je > neco spatne na strane databaze, vyskoci > org.postgresql.util.PSQLException, kterou TopLink obali do > oracle.toplink.essentials.exceptions.DatabaseException. > Toto se doctu z logu. > > V klientovi, kde volam EJB, ktery pracuje s databazi, ale odchytim jen > EJBException, ktery obaluje javax.transaction.RollbackException a dal > se uz nedozvim nic. > > Existuje nejaka cesta, jak se dopidit k puvodni pricine, tj. k > PSQLExeption? > > Diky moc za jakoukoli radu! > >