you can get it as symbol contributeAliasOverrides( @InjectService("MyRequestExceptionHandler") RequestExceptionHandler myHandler, @Inject @Symbol(TapestryConstants.PRODUCTION_MODE_SYMBOL) boolean productionMode, Configuration<AliasContribution> configuration) {
then pass it to the service Davor Hrg On Feb 19, 2008 12:01 PM, Geoff Callender <[EMAIL PROTECTED]> wrote: > 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] > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]