Problem Solved. BarException was extending from RuntimeException instead of
Exception. That was causing all the problems.
--
shiv
[EMAIL PROTECTED]
Shiv Kumar wrote:
> No replies so far.. Forwarding again ..
>
> Hi all
>
> I have the following scenario in my deployment :-
>
> +-----+ +-----+ +-----+
> | A |----------------->| B |------------------->| C |
> +-----+ +-----+ +-----+
> Stateless Stateless Entity
> Session Session (CMP)
>
> foo() ----- calls -----> bar() ----- calls -----> finder()
>
> throw throw throw
> BarException BarException ObjectNotFoundException
>
> This is what I expect from the beans :
>
> The finder in bean C should throw FinderException. Bean B should
> catch this exception and throw BarException. Bean A should throw
> BarException back to the caller. The caller is the actual client
> program. The client expects BarException to be thrown in the given
> scenario.
>
> The only bean which updates the database is Bean C. That too, it does not
> update more than one table. Therefore, it is not necessary that updates
> should happen within a transaction. Since database update is not
> happening within a transaction, bean B and A also need not execute their
> methods within a transaction.
>
> The transactional attribute in all the three bean's ejb-jar.xml is :
>
> <container-transaction>
> <method>
> <ejb-name>BeanX</ejb-name> // where X = A, B, C
> <method-intf>Remote</method-intf>
> <method-name>*</method-name>
> </method>
> <trans-attribute>Required</trans-attribute>
>
> When I deploy the beans and run the client, this is what happens :
>
> 1. Client class A.foo()
>
> 2. A.foo() calls B.bar()
>
> 3. B.bar() calls C.finder()
>
> 4. C.finder() throws ObjectNotFoundException (shouldnt it throw
> FinderException? Anyway that's ok).
>
> 5. B.bar() catches Exception and throws BarException
>
> 6. A.foo() gets javax.transaction.TransactionRolledBackException
> instead of BarException. The method foo() is written this way to
> re-throw BarException.
>
> ...
> }
> catch (BarException e) {
> throw e; // re-throw
> }
> catch (Exception e) {
> throw new EJBException(e);
> }
>
> Since foo() does not get BarException (it is lost), it goes the
> catch(Exception) clause and so EJBException is thrown.
>
> 7. The client gets EJBException whereas it is expecting
> BarException. It doesnt know what to do with this Exception and
> so it fails :-(
>
> This is my question. What changes should I make to the bean or to the
> transactional attributes so that BarException is thrown all the way back
> till the client?
>
> Im using Weblogic 5.1 on NT.
__________________________________________________
Do You Yahoo!?
Talk to your friends online with Yahoo! Messenger.
http://im.yahoo.com
===========================================================================
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".