Many thanks, Davor. Here's what worked to display a custom exception
report page ONLY IF tapestry.production-mode=true.
In services.AppModule:
public static void bind(ServiceBinder binder) {
binder.bind(RequestExceptionHandler.class,
MyRequestExceptionHandler.class).withId("MyRequestExceptionHandler");
}
public static void
contributeAliasOverrides(@InjectService("MyRequestExceptionHandler")
RequestExceptionHandler myHandler,
Configuration<AliasContribution> configuration) {
configuration
.add(AliasContribution.create(RequestExceptionHandler.class,
myHandler));
}
In services.MyRequestHandler, which is identical to Tapestry's
DefaultRequestExceptionHandler except (1) it gets the production-mode
property (couldn't see how to inject it - we're in the services
package here):
static private final String _productionModeStr =
System.getProperty(TapestryConstants.PRODUCTION_MODE_SYMBOL);
private boolean _productionMode =
Boolean.parseBoolean(_productionModeStr);
and (2) in its handleRequestException(...) method
Page page = null;
if (_productionMode) {
_logger.error("MyExceptionReport page will be shown.");
page = _pageCache.get("MyExceptionReport");
}
else {
_logger.error("Tapestry ExceptionReport page will be shown.");
page = _pageCache.get("ExceptionReport");
}
But I'm still looking forward to the much simpler
https://issues.apache.org/jira/browse/TAPESTRY-2169
Cheers,
Geoff
On 19/02/2008, at 12:47 AM, Davor Hrg wrote:
Alias,
http://tapestry.apache.org/tapestry5/tapestry-core/guide/alias.html
or
decorate
http://wiki.apache.org/tapestry/Tapestry5HowToDecorateService
http://tapestry.apache.org/tapestry5/tapestry-ioc/decorator.html
Davor hrg
On Feb 18, 2008 2:34 PM, Geoff Callender
<[EMAIL PROTECTED]> wrote:
Thanks again, but sorry - no cigar.
00:27:35,038 ERROR [RequestHandler] Construction of service
RequestHandler failed: Error invoking service builder method
org.apache.tapestry.services.TapestryModule.build(Logger, List,
Dispatcher) (at TapestryModule.java:905) (for service
'RequestHandler'): Error invoking service contribution method
org
.apache
.tapestry
.services
.TapestryModule.contributeRequestHandler(OrderedConfiguration,
Context, RequestExceptionHandler, long, long, LocalizationSetter):
Service interface
org.apache.tapestry.services.RequestExceptionHandler
is matched by 2 services: MyRequestExceptionHandler,
RequestExceptionHandler. Automatic dependency resolution requires
that exactly one service implement the interface.
The broader question I don't yet grasp is how to override the
implementation of a core service.
As for exception reporting, it occurred to me that it would be much
simpler to solve with a new component. See what you think of this
thought:
https://issues.apache.org/jira/browse/TAPESTRY-2169
Cheers,
Geoff
On 19/02/2008, at 12:16 AM, Davor Hrg wrote:
binder.bind(MyRequestExceptionHandler.class);
On Feb 18, 2008 12:00 PM, Geoff Callender
<[EMAIL PROTECTED]> wrote:
Thanks for the quick response, but no joy. Now it fails when the
first page is requested because now there are 2 implementations of
the
one service.
21:55:24,145 ERROR [RequestHandler] Construction of service
RequestHandler failed: Error invoking service builder method
org.apache.tapestry.services.TapestryModule.build(Logger, List,
Dispatcher) (at TapestryModule.java:905) (for service
'RequestHandler'): Error invoking service contribution method
org
.apache
.tapestry
.services
.TapestryModule.contributeRequestHandler(OrderedConfiguration,
Context, RequestExceptionHandler, long, long, LocalizationSetter):
Service interface
org.apache.tapestry.services.RequestExceptionHandler
is matched by 2 services: MyRequestExceptionHandler,
RequestExceptionHandler. Automatic dependency resolution requires
that exactly one service implement the interface.
On 18/02/2008, at 9:51 PM, Davor Hrg wrote:
binder.bind(RequestExceptionHandler.class,
MyRequestExceptionHandler
.class).withId("MyRequestExceptionHandler");
On Feb 18, 2008 11:42 AM, Geoff Callender
<[EMAIL PROTECTED]> wrote:
I can't find the right way to configure AppModule. Latest
attempt is
simply to do this:
public static void bind(ServiceBinder binder) {
binder.bind(RequestExceptionHandler.class,
MyRequestExceptionHandler.class);
}
but it seems that's not legal. Stacktrace snippet is:
21:12:45,403 ERROR [[/jumpstart]] Exception starting filter app
java.lang.RuntimeException: Service id 'RequestExceptionHandler'
has
already been defined by
org
.apache
.tapestry
.internal
.services.DefaultRequestExceptionHandler(RequestPageCache,
PageResponseRenderer, Logger) (at
DefaultRequestExceptionHandler.java:
37) and may not be redefined by jumpstart.web.services.MyRequestExceptionHandler
(RequestPageCache, PageResponseRenderer, Logger) (at
MyRequestExceptionHandler.java:43). You should rename one of the
service builder methods.
at
org
.apache
.tapestry.ioc.internal.RegistryImpl.<init>(RegistryImpl.java:
174)
Geoff
On 18/02/2008, at 2:00 AM, Davor Hrg wrote:
yes :)
either that,
or pass the value to your ExceptionReporter
and have customized page for both dev and production :)
Davor Hrg
On Feb 17, 2008 2:49 PM, Geoff Callender
<[EMAIL PROTECTED]> wrote:
So you're suggesting that I test the value of the system
property
tapestry.production-mode in AppModule and use it to condition
whether
I contribute an ExceptionReporter. Is that right?
On 17/02/2008, at 11:49 PM, Davor Hrg wrote:
you can use that symbol in your custom erro page too,
either omit the contribution,
or display different message
On Feb 17, 2008 1:25 PM, Geoff Callender
<[EMAIL PROTECTED]> wrote:
Is there a way to make it use your own custom exception
report
page
only if -Dtapestry.production-mode=true?
On 17/02/2008, at 10:47 PM, Geoff Callender wrote:
I like it - I think it's the right default. Just need to
make
sure
everyone's aware of it.
Geoff
On 17/02/2008, at 9:58 PM, Davor Hrg wrote:
it's exactly that
On Feb 17, 2008 11:20 AM, Chris Poulsen
<[EMAIL PROTECTED]>
wrote:
Hi,
Could this be related to the introduction of production
mode ?
I had to add:
<systemProperties>
<systemProperty>
<name>tapestry.production-mode</
name>
<value>false</value>
</systemProperty>
</systemProperties>
Into the maven-jetty-plugin configuration to get the nice
exception page
HTH
--
Chris
Joost Schouten (ml) wrote:
I'm experiencing the same with 5.0.11
Cheers,
Joost
Geoff Callender wrote:
Is anyone else seeing this? The exception report page
in
T5.0.10 has
no detail - I'm getting only a heading and the
exception,
eg.
An unexpected application exception has occurred.
Render queue error in BeginRender[examples/jodatime/
1:pagelink]:
java.lang.ClassNotFoundException: caught an exception
while
obtaining
a class file for
jumpstart.web.components.DateMidnightField
Cheers,
Geoff
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: users-
[EMAIL PROTECTED]
For additional commands, e-mail: users-
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: users-
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]