Re: Callback after startup from org.apache.camel.main.Main afterStart()
Chris, Yeah this would work. But only when you use Spring. We should have a common and easier solution for the MainSupport in camel-core. I have logged a ticket https://issues.apache.org/jira/browse/CAMEL-6269 On Wed, Apr 10, 2013 at 4:24 PM, Chris Wolf cwolf.a...@gmail.com wrote: 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 ApplicationListenerContextStartedEvent() { @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 ListCamelContext 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 CallableVoid(){ public Void call() throws Exception { ProducerTemplate template = getCamelTemplate(); fileMonitor.setProducer(template); /* ListCamelContext 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 CallableVoid afterStartCallback; @Override protected void afterStart() throws Exception { if
Re: Callback after startup from org.apache.camel.main.Main afterStart()
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 ApplicationListenerContextStartedEvent() { @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 ListCamelContext 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 CallableVoid(){ public Void call() throws Exception { ProducerTemplate template = getCamelTemplate(); fileMonitor.setProducer(template); /* ListCamelContext 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 CallableVoid afterStartCallback; @Override protected void afterStart() throws Exception { if (afterStartCallback!=null) afterStartCallback.call(); } public CallableVoid getAfterStartCallback() { return afterStartCallback; } public void setAfterStartCallback(CallableVoid afterStartCallback) { this.afterStartCallback
Re: Callback after startup from org.apache.camel.main.Main afterStart()
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 ListCamelContext 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 CallableVoid(){ public Void call() throws Exception { ProducerTemplate template = getCamelTemplate(); fileMonitor.setProducer(template); /* ListCamelContext 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 CallableVoid afterStartCallback; @Override protected void afterStart() throws Exception { if (afterStartCallback!=null) afterStartCallback.call(); } public CallableVoid getAfterStartCallback() { return afterStartCallback; } public void setAfterStartCallback(CallableVoid 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
Re: Callback after startup from org.apache.camel.main.Main afterStart()
Claus, thanks for the reply. Ok I tried that, however, if in the bootstrap code in main just before calling run() I place ListCamelContext 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 CallableVoid(){ public Void call() throws Exception { ProducerTemplate template = getCamelTemplate(); fileMonitor.setProducer(template); /* ListCamelContext 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 CallableVoid afterStartCallback; @Override protected void afterStart() throws Exception { if (afterStartCallback!=null) afterStartCallback.call(); } public CallableVoid getAfterStartCallback() { return afterStartCallback; } public void setAfterStartCallback(CallableVoid 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
Re: Callback after startup from org.apache.camel.main.Main afterStart()
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 CallableVoid(){ public Void call() throws Exception { ProducerTemplate template = getCamelTemplate(); fileMonitor.setProducer(template); /* ListCamelContext 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 CallableVoid afterStartCallback; @Override protected void afterStart() throws Exception { if (afterStartCallback!=null) afterStartCallback.call(); } public CallableVoid getAfterStartCallback() { return afterStartCallback; } public void setAfterStartCallback(CallableVoid 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
Callback after startup from org.apache.camel.main.Main afterStart()
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 CallableVoid(){ public Void call() throws Exception { ProducerTemplate template = getCamelTemplate(); fileMonitor.setProducer(template); /* ListCamelContext 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 CallableVoid afterStartCallback; @Override protected void afterStart() throws Exception { if (afterStartCallback!=null) afterStartCallback.call(); } public CallableVoid getAfterStartCallback() { return afterStartCallback; } public void setAfterStartCallback(CallableVoid afterStartCallback) { this.afterStartCallback = afterStartCallback; } } -- Andrew Bailey Cel - 312 866 95 56 http://www.apps4u.co Chat Skype: apps4u Twitter @apps4uco