camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Callback after startup from org.apache.camel.main.Main afterStart()
Date Fri, 05 Apr 2013 14:24:39 GMT
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.bailey@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: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Mime
View raw message