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