Hi

Wait a minute - You are catching the DataIntegrityViolationException and
throwing a UserExistsException in you bean, hence the
DataIntegrityViolationException will never get to your managed bean

Hermod

-----Opprinnelig melding-----
Fra: Manfred Geiler [mailto:[EMAIL PROTECTED]
Sendt: 29. november 2004 19:03
Til: MyFaces Discussion
Emne: Re: Managed Bean can't catch checked exception


Perhaps a Classloader problem?
If the DataIntegrityViolationException was loaded twice by different 
Classloaders for some reason, the Class instances would not be equal to 
the JVM. So the saveUser might not catch it but the bean method does.
Try to make sure that your UserExistsException is really thrown.

HTH,
Manfred


Matt Raible wrote:

> Bill Dudney wrote:
> 
>> This is really weird Matt.
> 
> 
> You're telling me, I was baffled when I saw this behavior.  I tried 
> getting my UserManager as a managed property and from the servlet 
> context - the issue happens using both strategies.
> 
>>
>> There is nothing that I know of that would be causing your code not 
>> to  catch the exception. Are you getting the DataIntegrityException?
> 
> 
> 
> Yeah, it catches the RuntimeException (DataIntegrityViolation), but
not 
> the checked exception.
> 
>>
>> Also have you steped it through the debugger?
> 
> 
> 
> Yep.  It sounds strange enough that I'm doing something wrong, but I'm

> pretty sure the issue below is what I experienced.
> 
> Matt
> 
>>
>> TTFN,
>>
>> -bd-
>>
>> On Nov 29, 2004, at 9:00 AM, Matt Raible wrote:
>>
>>> I'm experiencing a strange issue.  I am calling a Spring-managed 
>>> bean  from my managed-bean and for some reason, the bean won't catch

>>> a  checked exception.  Here's the method that throws the exception:
>>>
>>>    public void saveUser(User user) throws UserExistsException {
>>>        try {
>>>            dao.saveUser(user);
>>>        } catch (DataIntegrityViolationException e) {
>>>            throw new UserExistsException("User '" + 
>>> user.getUsername()  +
>>>                                          "' already exists!");
>>>        }
>>>    }
>>>
>>> In my bean I have:
>>>
>>>        try {
>>>            userManager.saveUser(user);
>>>        } catch (UserExistsException ue) {
>>>            log.warn(ue.getMessage());
>>>
>>>            // for some reason - MyFaces doesn't seem to catch this  
>>> exception
>>>        } catch (DataIntegrityViolationException e) {
>>>            log.warn(e.getMessage());
>>>            addError("errors.existing.user",
>>>                     new Object[] { user.getUsername(), 
>>> user.getEmail()  });
>>>
>>>            return "editProfile";
>>>        }
>>>
>>> Is there some sort of rule that says "only catch Runtime 
>>> Exceptions"?   Also, is there anything in MyFaces/JSF for exception 
>>> handling?   Spring/Struts/WebWork all allow me to configure a 
>>> specific page to go  to when a particular exception is thrown.  I'd 
>>> rather not do it in  web.xml since I tend to use that for more 
>>> generic exceptions.  Here's  how I do it with Struts:
>>>
>>> 1.  struts-config.xml:
>>>
>>>    <global-exceptions>
>>>       <exception key="error.required"  
>>> type="org.springframework.dao.DataAccessException"
>>>                  path="/dataAccessFailure.jsp"/>
>>>    </global-exceptions>
>>>
>>> 2.  dataAccessFailure.jsp:
>>>
>>> <%@ include file="/taglibs.jsp" %>
>>>
>>> <h3>Data Access Failure</h3>
>>> <p>
>>>    <c:out  
>>>
value="${requestScope['org.apache.struts.action.EXCEPTION'].message}"/ >
>>> </p>
>>>
>>> <!--
>>> <%
>>> Exception ex = (Exception)  
>>> request.getAttribute("org.apache.struts.action.EXCEPTION");
>>> ex.printStackTrace(new java.io.PrintWriter(out));
>>> %>
>>> -->
>>>
>>> <a href="<c:url value='/'/>" onclick="history.back(); return  
>>> false">&#171; Back</a>
>>>
>>> Thanks,
>>>
>>> Matt
>>>
> 
> 
> 
> 


* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

This email with attachments is solely for the use of the individual or
entity to whom it is addressed. Please also be aware that the DnB NOR Group
cannot accept any payment orders or other legally binding correspondence with
customers as a part of an email. 

This email message has been virus checked by the virus programs used
in the DnB NOR Group.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Reply via email to