If you want container to rollback the Tx, simply throw new EJBException
(inner exception).  App server will set the tx to rollback, wrap the
EJBException inside a RemoteException and deliver it to client.

Do not throw a checked application exception, as then the app server will
simply send that back to client as is.

(More content from IBM site pasted below.)

HTH

Rich Armstrong
Genetics Software http://www.kromosoft.com
Unique Genetics Newsletter http://www.kromonews.com



http://www-128.ibm.com/developerworks/java/library/j-ejbexcept.html


How the EJB container handles exceptions

The EJB container intercepts every method call on the EJB component. As a
result, every exception that results in a method call is also intercepted by
the EJB container. The EJB specification deals only with handling two types
of exception: application exceptions and system exceptions.

An application exception is defined by the EJB spec as any exception
declared on the method signatures in the remote interface (other than
RemoteException). An application exception is a special scenario in the
business workflow. When this type of exception is thrown, the client is
given a recovery option, usually one that entails processing the request in
a different way. This does not, however, mean that any unchecked exception
declared in the throws clause of a remote-interface method would be treated
as an application exception. The spec states clearly that application
exceptions should not extend RuntimeException or its subclasses.

When an application exception occurs, the EJB container doesn't roll back
the transaction unless it is asked to do so explicitly, with a call to the
setRollbackOnly() method on the associated EJBContext object. In fact,
application exceptions are guaranteed to be delivered to the client as is:
the EJB container does not wrap or massage the exception in any way.

A system exception is defined as either a checked exception or an unchecked
exception, from which an EJB method cannot recover. When the EJB container
intercepts an unchecked exception, it rolls back the transaction and does
any necessary cleanup. Then the container wraps the unchecked exception in a
RemoteException and throws it to the client. Thus the EJB container presents
all unchecked system exceptions to the client as RemoteExceptions (or as a
subclass thereof, such as TransactionRolledbackException).

In the case of a checked exception, the container does not automatically
perform the housekeeping described above. To use the EJB container's
internal housekeeping, you will have to have your checked exceptions thrown
as unchecked exceptions. Whenever a checked system exception (such as a
NamingException) occurs, you should throw javax.ejb.EJBException, or a
subclass thereof, by wrapping the original exception. Because EJBException
itself is an unchecked exception, there is no need to declare it in the
throws clause of the method. The EJB container catches the EJBException or
its subclass, wraps it in a RemoteException, and throws the RemoteException
to the client.

Although system exceptions are logged by the application server (as mandated
by the EJB specification) the logging format will differ from one
application server to another. Often, an enterprise will need to run
shell/Perl scripts on the generated logs in order to access needed
statistics. To ensure a uniform logging format, it is better to log the
exceptions in your code.

Note: The EJB 1.0 spec required that checked system exceptions be thrown as
RemoteExceptions. Starting with EJB 1.1, the spec has mandated that EJB
implementation classes should not throw RemoteException at all.

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".
  • Exception SUBSCRIBE EJB-INTEREST anonymous
    • Re: Exception Rich Armstrong
    • Re: Exception SUBSCRIBE EJB-INTEREST anonymous

Reply via email to