Hi Yeah we probably need some API on MainSupport so you can add a custom EventNotifier, which we then add to the CamelContext before its started.
Though another option that may be easier is just to have a beforeStart | beforeStop method which you can implement and do your custom code there. A bit like what you did, but IMHO should have simpler api's than a Callable et all. On Mon, Apr 8, 2013 at 6:34 PM, Andrew Bailey <[email protected]> wrote: > Claus, thanks for the reply. > > Ok I tried that, however, if in the bootstrap code in main just before > calling run() I place > > List<CamelContext> contexts=getCamelContexts(); > System.out.println(contexts); // [] > CamelContext context=contexts.get(0); > //IndexOutOfBoundsException: Index: 0, Size: 0 > context.getManagementStrategy().addEventNotifier(new > MyLoggingSentEventNotifer()); //as in > http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html > run(); > > It produces > [] > Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, > Size: 0 > > Is this a bug or am I doing something wrong? > > > > On Fri, Apr 5, 2013 at 9:24 AM, Claus Ibsen <[email protected]> wrote: > >> Hi >> >> Yeah we could add some methods to the Main class you can override to >> have callbacks after start | before stop etc. >> But you can also just use the event notifier api in Camel for that. >> >> >> >> On Wed, Apr 3, 2013 at 4:17 PM, Andrew Bailey <[email protected]> >> wrote: >> > I have a use case, where I require a fast startup time for camel and wish >> > to avoid classpath scanning. >> > I use the Main class however it appears that its not possible to obtain a >> > ProducerTemplate template = getCamelTemplate(); >> > before calling the run method. (it produces an ArrayOutOfBounds >> exception - >> > I could file a bug for that if you like) >> > >> > What I did was to extend Main (see code fragment below) and add a >> callback >> > called from the afterStart() method, so that user code can access the >> > context, and TypeConverterRegistry (as before that it is not >> initialized). >> > >> > Is there a better way to do it? >> > >> > If not and the developers think its a good idea, I would like to >> contribute >> > the code for a future release. >> > >> > >> > Thanks >> > >> > Andy >> > >> > >> > import org.apache.camel.main.Main; >> > >> > public class ServiceManager extends Main { >> > >> > >> > public static void main(String[] args) throws Exception { >> > ServiceManager example = new ServiceManager(); >> > example.boot(); >> > } >> > >> > public void boot() throws Exception { >> > //cut >> > >> > setAfterStartCallback(new Callable<Void>(){ >> > public Void call() throws Exception >> > { >> > ProducerTemplate template = getCamelTemplate(); >> > >> > fileMonitor.setProducer(template); >> > >> > /* >> > List<CamelContext> contexts=getCamelContexts(); >> > System.out.println(contexts); >> > CamelContext context=contexts.get(0); >> > TypeConverterRegistry converterRegistry = >> > context.getTypeConverterRegistry(); >> > TypeConverter converter = >> > converterRegistry.lookup(String[].class, String.class); >> > System.out.println("Converter "+converter); >> > >> > TypeConverter converter2 = >> > converterRegistry.lookup(List.class, String.class); >> > System.out.println("Converter "+converter2); >> > >> > */ >> > return null; >> > } >> > }); >> > //code cut >> > System.out.println("Starting Camel. Use ctrl + c to terminate the >> > JVM.\n"); >> > run(); >> > } >> > >> > private Callable<Void> afterStartCallback; >> > >> > @Override >> > protected void afterStart() throws Exception { >> > >> > if (afterStartCallback!=null) afterStartCallback.call(); >> > } >> > >> > public Callable<Void> getAfterStartCallback() { >> > return afterStartCallback; >> > } >> > >> > public void setAfterStartCallback(Callable<Void> >> > afterStartCallback) { >> > this.afterStartCallback = afterStartCallback; >> > } >> > } >> > >> > -- >> > >> > >> > >> > Andrew Bailey >> > Cel - 312 866 95 56 >> > >> > http://www.apps4u.co >> > Chat Skype: apps4u >> > Twitter @apps4uco >> >> >> >> -- >> Claus Ibsen >> ----------------- >> Red Hat, Inc. >> FuseSource is now part of Red Hat >> Email: [email protected] >> Web: http://fusesource.com >> Twitter: davsclaus >> Blog: http://davsclaus.com >> Author of Camel in Action: http://www.manning.com/ibsen >> > > > > -- > > > > Andrew Bailey > Cel - 312 866 95 56 > > http://www.apps4u.co > Chat Skype: apps4u > Twitter @apps4uco -- Claus Ibsen ----------------- Red Hat, Inc. FuseSource is now part of Red Hat Email: [email protected] Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen
