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 <andrew.bai...@apps4u.co> 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: cib...@redhat.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen