Yes, they have the same effect as both are "system" exceptions, but
throwing a system exception to roll back a transaction is not a good
practice. First, the container must throw away the bean instance.
Second, the container is not required to propagate runtime exceptions
back to the client. As you essentially told the container that a system
level error has occured (i.e. a network failure, or the database is
down), it may try the request again on another machine, etc. In other
words, if you're canceling the transaction based on an application level
condition, explicitly roll it back.

Thanks,
Bob


Paul Kavanagh wrote:
Is throwing a RuntimeException in a session bean method (in order to roll back the tx) the same as
throwing an EJBException (which of course is a subclass of RuntimeException) ? We'd like to use a
subclass of RuntimeException to add logging etc, but are wondering if the container does anything
differently when it sees this particular subclass.

Thanks in advance,
-Paul



-----Original Message-----
From: A mailing list for Enterprise JavaBeans development
[mailto:[EMAIL PROTECTED]]On Behalf Of saroj kumar
Sent: Tuesday, December 17, 2002 5:45 AM
To: [EMAIL PROTECTED]
Subject: Re: CMP Transactions


Hi Juan,

Subclassing will work but doesn't that defeat the purpose
Behind System Exception. As System exception means that there
Is unrecoverable exception and "Bean Instance" needs to be discarded.
But, here we will be throwing a kind of system exception to indicate
Business Exception.

Moreover, it makes life miserable if you want to do some update
In the method and then throw the exception.

Example: I need to update DB to indicate no. of times login failed.

I just try to login and if it is not the correct pwd then just need
To throw an Exception. Before throwing the exception, I need to update
the
DB column for failed attempts. If it were a Subclass of EJBException
then
I need to again Retry on the same bean after getting the same exception.

If it were a business Exception then I need not retry.

Having a mix of Checked Exception and Subclassed EJBException will
result
in explosion of Exceptions Which is not desirable.

Last but not the least, Unchecked exceptions don't force to handle
The exception at compile time but may be a nasty surprise at Runtime.


-Saroj




-----Original Message-----
From: A mailing list for Enterprise JavaBeans development
[mailto:[EMAIL PROTECTED]] On Behalf Of Juan Pablo Lorandi
Sent: Tuesday, December 17, 2002 7:01 PM
To: [EMAIL PROTECTED]
Subject: Re: CMP Transactions


That's defined that way only in EJB 1.1+(Exception handling, section 12
in EJB 1.1, section 18 in EJB 2.0); IMHO, the spec diverts in its
Exception handling from "regular" java exceptions, because the
underlying idea of application exceptions is that the bean's client may
recover from them somehow(by retrying, by changing attributes, etc.).

You're not prohibited to throw system exceptions, and it's a good
practice to propagate exceptions. The point I did miss in my previous
post is that when you throw an application exception (a checked
exception, one that's not a subclass of RuntimeException), you should
clean up first. Sort of:

try {
  // some code
} catch (SomeException e) {
  log.error("While doing Something", e);
  ctx.setRollbackOnly();

  connection.close(); //release resources


  throw new AppException("While doing Something", e); //propagate
errors.
}

Make AppException a subclass of javax.ejb.EJBException.

To wrap it up, basically, your responsibilities as a bean provider are
different depending on the severity of the Exception you've caught and
their impact on your app. If you've encountered an exception
(checked or
not) that you cannot recover from, it's valid to rethrow it wrapped in
EJBException, the TX rollbacks automatically, and the container is in
charge of cleaning up.

Juan Pablo Lorandi
Chief Software Architect
Code Foundry Ltd.
[EMAIL PROTECTED]

Barberstown, Straffan, Co. Kildare, Ireland.
Tel: +353-1-6012050  Fax: +353-1-6012051
Mobile: +353-86-2157900
www.codefoundry.com



-----Original Message-----
From: A mailing list for Enterprise JavaBeans development
[mailto:[EMAIL PROTECTED]] On Behalf Of Bob Lee
Sent: Monday, December 16, 2002 9:27 PM
To: [EMAIL PROTECTED]
Subject: Re: CMP Transactions


Actually, the container will only automatically roll back a
transaction when a system exception is thrown. You should
always roll back explicitly for an application exception.

Bob

Juan Pablo Lorandi wrote:

Depends on the kind of transaction, and the EJB spec

you're working

against. Best is to do both: mark the transaction for
rollback, then

rethrow the exception; just rethrowing the Exception will

work with

most app servers and is a good programming practice.

Sample:

try {
   // some code
} catch (SomeException e) {
   log.error("While doing Something", e);
   ctx.setRollbackOnly();
   throw AppException("While doing Something", e);
}

My 2c,


Juan Pablo Lorandi
*Chief Software Architect*
Code Foundry Ltd.
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>

Barberstown, Straffan, Co. Kildare, Ireland.
Tel: +353-1-6012050  Fax: +353-1-6012051
Mobile: +353-86-2157900
www.codefoundry.com <http://www.codefoundry.com/>

Disclaimer:

Opinions expressed are entirely personal and bear no relevance to
opinions held by my employer. Code Foundry Ltd.'s opinion

is that I

should get back to work.

   -----Original Message-----
   *From:* A mailing list for Enterprise JavaBeans development
   [mailto:[EMAIL PROTECTED]] *On Behalf Of
*BOUTTE Sebastien

   *Sent:* Monday, December 16, 2002 4:02 PM
   *To:* [EMAIL PROTECTED]
   *Subject:* CMP Transactions

   Hi,

   I would like to know if i have to called method
setRollBackOnly on

   session context
   when i want to rollback current transaction or rethrow
the exception

   to the container, and let it do the rollback ?

   Thanks

   S�bastien Boutt�




----------------------------------------------------------------------

--

   Ce message est prot�g� par les r�gles relatives au secret des
   correspondances ; il peut en outre contenir des informations �
   caract�re confidentiel ou prot�g�es par diff�rentes r�gles et
   notamment le secret des affaires ; il est �tabli � destination
   exclusive de son destinataire. Toute divulgation, utilisation,
   diffusion ou reproduction (totale ou partielle) de ce
message, ou

   des informations qu'il contient, doit �tre
pr�alablement autoris�e.

   Tout message �lectronique est susceptible d'alt�ration et son
   int�grit� ne peut �tre assur�e. WFinance et WFinance Conseil
   d�clinent toute responsabilit� au titre de ce message

s'il a �t�

   modifi� ou falsifi�. Si vous n'�tes pas destinataire de
ce message,

   merci de le d�truire imm�diatement et d'avertir l'exp�diteur de
   l'erreur de distribution et de la destruction du message.

   This message is protected by the secrecy of
correspondence rules ;

   furthermore it may contain privileged or confidential
information

   that is protected by law, notably by the secrecy of business
   relations rule ; it is intended solely for the attention of the
   addressee . Any disclosure, use, dissemination or reproduction
   (either whole or partial) of this message or the information
   contained herein is strictly prohibited without prior
consent. Any

   electronic message is susceptible to alteration and its
integrity

   can not be assured. WFinance and WFinance Conseil declines any
   responsibility for this message in the event of alteration or
   falsification.. If you are not the intended recipient, please
   destroy it immediately and notify the sender of the
wrong delivery

   and the mail deletion.



----------------------------------------------------------------------

--

==============================================================
=============
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".


=========================
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".

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".


===========================================================================
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".

===========================================================================
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".

Reply via email to