I should correct an ambiguous statement about Jetty here:
"In this case, Jetty doesn't handle the situation (correctly) because there is no valid RIFE instance to hand it to."
should read:
"In this case, Jetty (correctly) doesn't handle the situation because there is no valid RIFE instance to hand it to."

I also changed the subject on the post.

Josh
--
Joshua Hansen
Up Bear Enterprises
(541) 760-7685 (new #)



Joshua Hansen wrote:
Hi Geert,

Haha -- thanks! :)

I just did quick test on your response 500 question with Jetty using, as you said, PRETTY_ENGINE_EXCEPTIONS set to false. It looks like there are two scenarios:

1) The 500 is caused by a failure in RIFE start up. In this case, Jetty doesn't handle the situation (correctly) because there is no valid RIFE instance to hand it to. Tested by: using rife-crud-1.1-jdk14.jar and rife-crud-1.1-templates.jar w/ a JDK 1.5 installation. These generate a "SEVERE: java.lang.NoClassDefFoundError: rife/retroweaver/ClassLiteral" error for me. Using the rife-crud-1.2-jdk15.jar and rife-crud-1.2-templates.jar works fine. Alternately, I tried just commenting out the datasource in the config.xml, and this only produced a 404, presumably because RIFE is able to correctly identify a misconfiguration and gracefully shuts down allowing the container to not install the mapping or filter.

2) The 500 is caused by an exception in an element in an otherwise valid instance of RIFE. In this case, the error _is_ handled. This also assumes the destination page doesn't have any exceptions of its own. :) Tested by: coding an element to explicitly throw an EngineException, then navigating to that element.

I also went ahead and tried doing a setRequestAttribute() (as you were thinking) with the custom exception I was throwing in scenario 2, and I was able to successfully read it and display it from the destination page. So, your approach should work. Snippets are pasted following my sig.

Josh
--
Joshua Hansen
Up Bear Enterprises
(541) 760-7685 (new #)

======[ Exception-throwing Element snippet ]=========
...
    public void processElement()
    {
EngineException e = new EngineException("Bogus exception. Testing 500 response.");
    setRequestAttribute("exception", e);
    throw e;
    }
...
=================================

======[ 'site.xml' (Destination Element) snippet ]=========
...
    <element id="PAGE505" url="500"
        implementation="com.test.ErrorPage">
        <property name="name">500</property>
    </element>
...
=================================

======[ 'ErrorPage.java' (Destination Element) snippet ]=========
...

    public void processElement()
    {
        Template template = getHtmlTemplate("500");
        if ( hasRequestAttribute("exception") ) {
EngineException e = (EngineException)getRequestAttribute("exception");

            String exString = e.toString();
            String exHtmlText = exString.replaceAll("\n", "<br />\n");
            template.setValue("error",  exHtmlText );
        } else {
            template.setValue("error",  "Unknown Error");
        }
    print(template);
    }
...
=================================

======[ '500.html' template snippet ]=========

<!--I 'common.blueprint'/-->

<!--BV 'content' -->
<h1 class="top">Error</h1>

<!--V 'error'/-->

<a href="[!V 'EXIT:QUERY:home'/]">Home</a>

<!--/BV-->
=================================

======[ 'web.xml' snippets ]=========
...
    <filter-mapping>
        <filter-name>RIFE</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
...
   <error-page>
      <error-code>500</error-code>
      <location>/500</location>
   </error-page>
...
=================================



Geert Bevin wrote:

Hi Joshua,

thanks a lot for adding this page. I'm not sure I told you before, but I think this is a very clever way of still adding error-page handling until RIFE has native support for it. Even without that, it allows you to easily build error-page handling with RIFE for any other solution :-)

Btw, have you tried to do this with other responses too, like 500, when a real exception occurs? (you probably need to set PRETTY_ENGINE_EXCEPTIONS config param to false). If those dispatchers also work, then I wonder if the error handler has access to the same request attributes as the initial handler. If so, I can add the exception itself as a request attribute so that it can be introspected by the error handler.


Best regards,


Geert

On 03 Jul 2006, at 17:33, Joshua Hansen wrote:

Hi Geert,

Good memory! I hadn't forgotten, but now was a good time for me to go ahead and do it. Thanks for checking again and the reminder.

A writeup w/ explanation and slightly restructured info is now posted on the Wiki under Tips and Tricks -> Using RIFE to Serve 404, 403, etc. Responses : http://rifers.org/wiki/display/RIFE/Using+RIFE+to+Serve+404%2C+403% 2C+etc.+Responses

Thanks for all the great work on RIFE!

Josh



Geert Bevin wrote:

Hey Josh,
If you're still planning on putting http://article.gmane.org/ gmane.comp.java.rife.user/2483 on the wiki, I think that this would be the best place now: http://rifers.org/wiki/display/RIFE/ Tips+and +Tricks
Take care,
Geert
On 03 Jul 2006, at 15:31, Joshua Hansen wrote:

Also here.

Josh


Geert Bevin wrote:

Hi guys,
Steve wrote me a small mail to ask if there was trouble with the mailing list. Apparently he hasn't received many of this week's posts. However, they are present in the archives.
Please reply to this message when you get it.
Thanks!
Geert
--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users



_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users

--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users


_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users


--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com


_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users


_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users


_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users

Reply via email to