What I did was extend Main, overriding:
protected AbstractApplicationContext createDefaultApplicationContext();

The overridden method looks like:

@Override
public AbstractApplicationContext createDefaultApplicationContext() {
    AbstractApplicationContext appctx =
super.createDefaultApplicationContext();
    appctx.addApplicationListener(new
ApplicationListener<ContextStartedEvent>() {
            @Override
            public void onApplicationEvent(ContextStartedEvent event) {
                LOG.info("********** CONTEXT STARTED...");
     }});

    return appctx;
}

Works for me...

   -Chris



On Tue, Apr 9, 2013 at 9:49 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> 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 <andrew.bai...@apps4u.co>
> 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 <claus.ib...@gmail.com>
> 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 <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
> >>
> >
> >
> >
> > --
> >
> >
> >
> > 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
>

Reply via email to