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!
>
>

Odpovedet emailem