You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Roy Truelove (JIRA)" <ji...@apache.org> on 2015/09/04 19:08:45 UTC

[jira] [Comment Edited] (CAMEL-9110) Camel not fully ready before needed in another bean's init

    [ https://issues.apache.org/jira/browse/CAMEL-9110?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14731064#comment-14731064 ] 

Roy Truelove edited comment on CAMEL-9110 at 9/4/15 5:08 PM:
-------------------------------------------------------------

Thanks Claus.  I was able to recreate this with the tip of master (2.16-SNAPSHOT).

I changed the description a bit; it's actually a more general problem.  You can't seem to call any camel producers during any bean's afterPropertiesSet() method, which means that other beans that need camel during their init will fail.  This would be a common scenario for proxies.


was (Author: roytruelove@gmail.com):
Thanks Claus.  I was able to recreate this with the tip of master (2.16-SNAPSHOT).

I changed the description a bit; it's actually a more general problem.  You can't seem to call any camel routes during any bean's afterPropertiesSet() method, which means that other beans that need camel during their init will fail.

> Camel not fully ready before needed in another bean's init
> ----------------------------------------------------------
>
>                 Key: CAMEL-9110
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9110
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.14.1
>         Environment: MacOS
> java version "1.7.0_51"
> Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
>            Reporter: Roy Truelove
>
> (Can reproduce using this repo: https://github.com/roytruelove/camelBug)
> I have:
> * An interface {{ExternalService}} which I've proxied using {{camel:proxy}}, pointing to {{direct:start}}.
> * A class {{UsesExternalServiceDuringInit}} into which the proxy is injected. During its Spring {{afterPropertiesSet()}} initialization method, the proxy is used.
> * A route which defines the {{direct:start}} endpoint.
> The full stack trace can be found below, but the core error that I get when starting Spring is
> {code}
> No consumers available on endpoint: Endpoint[direct://start]. Exchange[Message: BeanInvocation public abstract java.lang.String org.apache.camel.example.spring.ExternalService.someMethodOnExternalService() with null]]
> {code}
> What it looks like is happening (and feel free to correct!) is:
> * Because {{UsesExternalServiceDuringInit}} depends on the {{camel}} bean, {{afterPropertiesSet()}} is called on {{SpringCamelContext}}, but this does not start the routes.
> * {{afterPropertiesSet()}} is called on {{UsesExternalServiceDuringInit}}, expecting its instance of {{ExternalService}} to be ready to use.
> * The routes are not started, so {{direct:start}} is not yet consuming and the init fails.
> From what I see the starting of the routes happens once the spring context is fully initialized, meaning that any calls to the proxy during spring's init will fail.
> BTW I've tried this without a proxy, simply using a ProducerTemplate with the same issue.
> I don't yet have an idea for a fix / workaround - will update if I find one.
> Full stack trace if needed:
> {code}
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:488)
> 	at java.lang.Thread.run(Thread.java:744)
> Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.camel.example.spring.UsesExternalServiceDuringInit#0' defined in file [/Users/roytruelove/src/personal/camel-bugfix2/target/classes/META-INF/spring/camel-context.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1514)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
> 	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
> 	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
> 	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
> 	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
> 	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:636)
> 	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:934)
> 	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
> 	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
> 	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
> 	at org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:217)
> 	at org.apache.camel.spring.Main.doStart(Main.java:157)
> 	at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
> 	at org.apache.camel.main.MainSupport.run(MainSupport.java:149)
> 	at org.apache.camel.main.MainSupport.run(MainSupport.java:353)
> 	at org.apache.camel.spring.Main.main(Main.java:90)
> 	... 6 more
> Caused by: java.lang.reflect.UndeclaredThrowableException
> 	at com.sun.proxy.$Proxy45.someMethodOnExternalService(Unknown Source)
> 	at org.apache.camel.example.spring.UsesExternalServiceDuringInit.afterPropertiesSet(UsesExternalServiceDuringInit.java:11)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
> 	... 23 more
> Caused by: org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: Endpoint[direct://start]. Exchange[Message: BeanInvocation public abstract java.lang.String org.apache.camel.example.spring.ExternalService.someMethodOnExternalService() with null]]
> 	at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:38)
> 	at org.apache.camel.component.bean.AbstractCamelInvocationHandler$1.call(AbstractCamelInvocationHandler.java:110)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> 	at org.apache.camel.component.bean.AbstractCamelInvocationHandler.invokeWithBody(AbstractCamelInvocationHandler.java:128)
> 	at org.apache.camel.component.bean.CamelInvocationHandler.doInvokeProxy(CamelInvocationHandler.java:45)
> 	at org.apache.camel.component.bean.AbstractCamelInvocationHandler.invoke(AbstractCamelInvocationHandler.java:82)
> 	... 27 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)