Hi John , input.rabbitmq.port is being defined inside a yml file placed inside my config folder which is in one of the dependent projects which my project references .
Ironically , when I run this on LocalCluster everything works absolutely fine . Only when I send it to the cluster is when the problem starts . Just to clear the given yml file is present in the fat jar which I deploy on the remote cluster . Attached below is snapshot . I wonder what changes , when I deploy to remote cluster :( [image: Inline image 1] On Mon, Oct 19, 2015 at 10:23 PM, John Reilly <j...@inconspicuous.org> wrote: > Where is input.rabbitmq.port defined? I would guess that it is a file > that is being read as a resource and that the resource is not available on > the worker ....but I can only guess, not know any specifics about the code > in question... > > > > On Mon, Oct 19, 2015 at 8:27 AM Ankur Garg <ankurga...@gmail.com> wrote: > >> Actually its not only yml , infact none of the dependencies are getting >> injected . Perhaps , it appears to me that it is not able to read Spring >> Annotations . >> >> Btw , do u know how to debug my application deployed on remote cluster >> remotely from Eclipse. >> >> Thanks >> Ankur >> >> On Mon, Oct 19, 2015 at 8:22 PM, Ravi Sharma <ping2r...@gmail.com> wrote: >> >>> you may have to tell Spring that ur .yaml file is ur resource file. >>> >>> Ravi. >>> >>> On Mon, Oct 19, 2015 at 3:25 PM, Ankur Garg <ankurga...@gmail.com> >>> wrote: >>> >>>> Hi Ravi , >>>> >>>> Need your help . So I created a local cluster and deployed my topology >>>> to it . Inside my Spout and Bolts , I am launching a Spring Boot >>>> application wrapped inside a singleton to initialise my context . >>>> Unfortunately , it appears to me that it is not working :(((( and >>>> annotations like @EnableAutoConfiguration is not picking up yml files from >>>> the classpath and injecting their values in the bean. And I am getting >>>> exceptions like >>>> >>>> Error creating bean with name 'inputQueueManager': Injection of >>>> autowired dependencies failed; nested exception is >>>> org.springframework.beans.factory.BeanCreationException: Could not autowire >>>> field: private int >>>> mqclient.rabbitmq.manager.impl.InputQueueManagerImpl.rabbitMqPort; nested >>>> exception is org.springframework.beans.TypeMismatchException: Failed to >>>> convert value of type 'java.lang.String' to required type 'int'; nested >>>> exception is java.lang.NumberFormatException: For input string: >>>> "${input.rabbitmq.port}" at >>>> >>>> has anyone here ever tried injecting dependencies from Spring . I am >>>> not sure why this is not working . >>>> >>>> It works like a charm in Local Cluster and now I am not passing context >>>> as a constructor argument , rather declaring and initializing it inside >>>> each spout and bolts :( . >>>> >>>> Is there any reason why Spring Annotations dont work inside a Remote >>>> Cluster . >>>> >>>> Need help urgently here . >>>> >>>> Thanks >>>> Ankur >>>> >>>> On Sun, Oct 11, 2015 at 1:01 PM, Ankur Garg <ankurga...@gmail.com> >>>> wrote: >>>> >>>>> I think I don't need to Autowire beans inside my spout and bolts . >>>>> >>>>> All I want my context to be available . Since I use Spring Boot , I am >>>>> delegating it to initialise all the beans and set up every bean (reading >>>>> yml file and create DB connections , connections to Message brokers etc ) >>>>> . >>>>> >>>>> On my local cluster I am passing it as a constructor argument to >>>>> Spouts and Bolts . Since all r running in same jvm its available to all >>>>> spouts and bolts . >>>>> >>>>> But in a distributed cluster , this will blow up as Context is not >>>>> serializable and cannot be passed like above . >>>>> >>>>> So the problem is only to make this context available once per jvm . >>>>> Hence I thought I will wrap it under a singleton and make this available >>>>> to >>>>> all spouts and bolts per jvm. >>>>> >>>>> Once I have this context initialized and loaded all I need to do is to >>>>> get the bean which I will do the same way I am doing inside local cluster >>>>> spouts and bolts . >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> On Sun, Oct 11, 2015 at 12:46 PM, Ravi Sharma <ping2r...@gmail.com> >>>>> wrote: >>>>> >>>>>> Yes ur assumption is right >>>>>> Jvm1 will create application contexts say ac1 >>>>>> >>>>>> And jvm2 will create another application instance ac2 >>>>>> >>>>>> And all of it can be done via singleton classes. >>>>>> >>>>>> All bolts and spouts in same jvm instance need to access same >>>>>> application context. >>>>>> >>>>>> I have done same in cluster and it works >>>>>> >>>>>> Remember all spring beans need to be transient and also u need to set >>>>>> required=false in case u r going create spout and bolt using spring >>>>>> >>>>>> Public class mybolt { >>>>>> @aurowired(required=false) >>>>>> Private transient MyServiceBean myServiceBean; >>>>>> >>>>>> .... >>>>>> ... >>>>>> } >>>>>> >>>>>> Ravi >>>>>> On 11 Oct 2015 07:59, "Ankur Garg" <ankurga...@gmail.com> wrote: >>>>>> >>>>>>> Also , I think there can be some instances of spouts/bolts running >>>>>>> on JVM 1 and some on JVM 2 and so on... >>>>>>> >>>>>>> Is it possible for spouts and bolts running on same jvm to access >>>>>>> same applicationContext . >>>>>>> >>>>>>> I am thinking that I can make the place where I launch my spring >>>>>>> Boot application inside a singleton class , and so all the spouts and >>>>>>> bolts running on say JVM1 will have access to same context (instead of >>>>>>> launching it in all spouts and bolts) . And for those in JVM 2 they will >>>>>>> still initialise it once and all the rest will get the same application >>>>>>> Context . >>>>>>> >>>>>>> But all above is theoretical assumption . I still need to try it >>>>>>> out (unfortunately i dont have a cluster setup at my end) but if >>>>>>> possible >>>>>>> please let me know if this can work . >>>>>>> >>>>>>> Thanks >>>>>>> Ankur >>>>>>> >>>>>>> On Sun, Oct 11, 2015 at 11:48 AM, Ankur Garg <ankurga...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Thanks for replying Ravi . >>>>>>>> >>>>>>>> I think your suggestion to make wrapper to read json or xml is a >>>>>>>> very nice Idea indeed . >>>>>>>> >>>>>>>> But , the problem for me here is to have the context (with all >>>>>>>> beans loaded and initialized ) available inside the Spouts and Bolts >>>>>>>> and >>>>>>>> that means inside every running instance of Spouts and Bolts which may >>>>>>>> be >>>>>>>> running on different machines and different jvm. >>>>>>>> >>>>>>>> Agree that when defining topology I dont need Spring Context as I >>>>>>>> just have to define spouts and bolts there. I used context here to >>>>>>>> send >>>>>>>> them to spout and bolt through constructor but it appears from comments >>>>>>>> above that it wont work on distributed cluster . >>>>>>>> >>>>>>>> So , is there some way that once topology gets submitted to run in >>>>>>>> a distributed cluster , I can initialize my context there and someway >>>>>>>> they >>>>>>>> are available to all Spouts and Bolts ..Basically some shared location >>>>>>>> where my application Context can be initialized (once and only once) >>>>>>>> and >>>>>>>> this context can be accessed by >>>>>>>> all instances of Spouts and Bolts ? >>>>>>>> >>>>>>>> Thanks >>>>>>>> >>>>>>>> On Sun, Oct 11, 2015 at 11:20 AM, Ravi Sharma <ping2r...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Basically u will have two context defined at different time/phase >>>>>>>>> >>>>>>>>> When u r about to submit the topology, u need to build topology, >>>>>>>>> that context only need information about spouts and bolts. You don't >>>>>>>>> need >>>>>>>>> any application bean like database accessories or ur services etc, as >>>>>>>>> at >>>>>>>>> this level u r not running ur application but u r just creating a >>>>>>>>> topology >>>>>>>>> and defining how bolts and spouts are connected to each other etc etc >>>>>>>>> >>>>>>>>> Now once topology is submitted, topology will be moved to one of >>>>>>>>> the supervisor node and will start running, all spouts and bolts will >>>>>>>>> be >>>>>>>>> initialized, at this moment u will need ur application context, which >>>>>>>>> doesn't need ur earlier topology context >>>>>>>>> >>>>>>>>> So I will suggest keep both context separate. >>>>>>>>> >>>>>>>>> Topology is not complex to build, smaller topology can be built >>>>>>>>> via code only, I. E. Which bolt listening to which spout, but if u >>>>>>>>> want to >>>>>>>>> go with good design, I say just write a small wrapper to read some >>>>>>>>> json >>>>>>>>> where u can define ur bolts and spouts and use that to build topology >>>>>>>>> (u >>>>>>>>> can use spring but it's not much needed) >>>>>>>>> >>>>>>>>> In past I have done it using both json setting (without spring) >>>>>>>>> and xml setting (with spring) both works good >>>>>>>>> >>>>>>>>> Ravi >>>>>>>>> On 11 Oct 2015 06:38, "Ankur Garg" <ankurga...@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Oh The problem here is I have many beans and which need to be >>>>>>>>>> initialized (some are reading conf from yml files , database >>>>>>>>>> connection , >>>>>>>>>> thread pool initialization etc) . >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Now , I have written a spring boot application which takes care >>>>>>>>>> of all the above and I define my topology inside one of the beans , >>>>>>>>>> Here is >>>>>>>>>> my bean >>>>>>>>>> >>>>>>>>>> @Autowired >>>>>>>>>> ApplicationContext appContext; >>>>>>>>>> >>>>>>>>>> @Bean >>>>>>>>>> public void submitTopology() throws >>>>>>>>>> AlreadyAliveException,InvalidTopologyException { >>>>>>>>>> >>>>>>>>>> TopologyBuilder builder = new TopologyBuilder(); >>>>>>>>>> >>>>>>>>>> builder.setSpout("rabbitMqSpout", new RabbitListnerSpout( >>>>>>>>>> appContext), 10); >>>>>>>>>> >>>>>>>>>> builder.setBolt("mapBolt", new GroupingBolt(appContext), >>>>>>>>>> 10).shuffleGrouping("rabbitMqSpout"); >>>>>>>>>> >>>>>>>>>> builder.setBolt("reduceBolt", new PublishingBolt(appContext), >>>>>>>>>> 10).shuffleGrouping("mapBolt"); >>>>>>>>>> >>>>>>>>>> Config conf = new Config(); >>>>>>>>>> >>>>>>>>>> conf.registerSerialization(EventBean.class); // To be registered >>>>>>>>>> with Kyro for Storm >>>>>>>>>> >>>>>>>>>> conf.registerSerialization(InputQueueManagerImpl.class); >>>>>>>>>> >>>>>>>>>> conf.setDebug(true); >>>>>>>>>> >>>>>>>>>> conf.setMessageTimeoutSecs(200); >>>>>>>>>> >>>>>>>>>> LocalCluster cluster = new LocalCluster(); >>>>>>>>>> >>>>>>>>>> cluster.submitTopology("test", conf, builder.createTopology()); >>>>>>>>>> >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> When this bean is initialized , I already have appContext >>>>>>>>>> initialized by my Spring Boot Application . So , the thing is , I am >>>>>>>>>> using >>>>>>>>>> SpringBoot to initialize and load my context with all beans . >>>>>>>>>> >>>>>>>>>> Now this is the context which I want to leverage in my spouts and >>>>>>>>>> bolts . >>>>>>>>>> >>>>>>>>>> So , if what I suggested earlier does not work on Storm >>>>>>>>>> Distributed Cluster , I need to find a way of initializing my >>>>>>>>>> AppContext >>>>>>>>>> somehow:( >>>>>>>>>> >>>>>>>>>> I would be really thankful if anyone here can help me :( >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thanks >>>>>>>>>> >>>>>>>>>> Ankur >>>>>>>>>> >>>>>>>>>> On Sun, Oct 11, 2015 at 5:54 AM, Javier Gonzalez < >>>>>>>>>> jagon...@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> The local cluster runs completely within a single JVM AFAIK. The >>>>>>>>>>> local cluster is useful for development, testing your topology, >>>>>>>>>>> etc. The >>>>>>>>>>> real deployment has to go through nimbus, run on workers started by >>>>>>>>>>> supervisors on one or more nodes, etc. Kind of difficult to >>>>>>>>>>> simulate all >>>>>>>>>>> that on a single box. >>>>>>>>>>> >>>>>>>>>>> On Sat, Oct 10, 2015 at 1:45 PM, Ankur Garg < >>>>>>>>>>> ankurga...@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Oh ...So I will have to test it in a cluster. >>>>>>>>>>>> >>>>>>>>>>>> Having said that, how is local cluster which we use is too >>>>>>>>>>>> different from normal cluster.. Ideally ,it shud simulate normal >>>>>>>>>>>> cluster.. >>>>>>>>>>>> On Oct 10, 2015 7:51 PM, "Ravi Sharma" <ping2r...@gmail.com> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Ankur, >>>>>>>>>>>>> local it may be working but It wont work in Actual cluster. >>>>>>>>>>>>> >>>>>>>>>>>>> Think about SpringContext is collection of your so many >>>>>>>>>>>>> resoucres, like Database connections , may be HTTP connections , >>>>>>>>>>>>> Thread >>>>>>>>>>>>> pools etc. >>>>>>>>>>>>> These things wont get serialised and just go to other machines >>>>>>>>>>>>> and start working. >>>>>>>>>>>>> >>>>>>>>>>>>> SO basically in init methods of bolt and spout, you need to >>>>>>>>>>>>> call some singloton class like this >>>>>>>>>>>>> >>>>>>>>>>>>> ApplicationContext ac = >>>>>>>>>>>>> SingletonApplicationContext.getContext(); >>>>>>>>>>>>> >>>>>>>>>>>>> SingletonApplicationContext will have a static variable >>>>>>>>>>>>> ApplicationContext and in getContext you will check if static >>>>>>>>>>>>> variable has >>>>>>>>>>>>> been initialised if not then u will initilize it, and then return >>>>>>>>>>>>> it(normal >>>>>>>>>>>>> Singleton class) >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Now when Topolgy will move to any other node, Bolt and spouts >>>>>>>>>>>>> will start and first init call will initialize it and other >>>>>>>>>>>>> bolt/spouts >>>>>>>>>>>>> will just use that. >>>>>>>>>>>>> >>>>>>>>>>>>> As John mentioned, its very important to mark all Spring beans >>>>>>>>>>>>> and Context as transient. >>>>>>>>>>>>> >>>>>>>>>>>>> Hope it helps. >>>>>>>>>>>>> >>>>>>>>>>>>> Ravi. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sat, Oct 10, 2015 at 6:25 AM, Ankur Garg < >>>>>>>>>>>>> ankurga...@gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Javier , >>>>>>>>>>>>>> >>>>>>>>>>>>>> So , I am using a Local cluster on my dev machine where I am >>>>>>>>>>>>>> using Eclipse . Here , I am passing Springs ApplicationContext as >>>>>>>>>>>>>> constructor argument to spouts and bolts . >>>>>>>>>>>>>> >>>>>>>>>>>>>> TopologyBuilder builder = new TopologyBuilder(); >>>>>>>>>>>>>> >>>>>>>>>>>>>> builder.setSpout("rabbitMqSpout", new RabbitListnerSpout( >>>>>>>>>>>>>> appContext), 10); >>>>>>>>>>>>>> >>>>>>>>>>>>>> builder.setBolt("mapBolt", new GroupingBolt(appContext), >>>>>>>>>>>>>> 10).shuffleGrouping("rabbitMqSpout"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> builder.setBolt("reduceBolt", new PublishingBolt(appContext), >>>>>>>>>>>>>> 10).shuffleGrouping("mapBolt"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> Config conf = new Config(); >>>>>>>>>>>>>> >>>>>>>>>>>>>> conf.registerSerialization(EventBean.class); / >>>>>>>>>>>>>> >>>>>>>>>>>>>> conf.registerSerialization(InputQueueManagerImpl.class); >>>>>>>>>>>>>> >>>>>>>>>>>>>> conf.setDebug(true); >>>>>>>>>>>>>> >>>>>>>>>>>>>> LocalCluster cluster = new LocalCluster(); >>>>>>>>>>>>>> >>>>>>>>>>>>>> cluster.submitTopology("test", conf, >>>>>>>>>>>>>> builder.createTopology()); >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> And in my spouts and Bolts , >>>>>>>>>>>>>> >>>>>>>>>>>>>> I make my Application Context variable as static . So when >>>>>>>>>>>>>> it is launched by c;uster.submitTopology , my context is still >>>>>>>>>>>>>> avalilable >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> private static ApplicationContext ctx; >>>>>>>>>>>>>> >>>>>>>>>>>>>> public RabbitListnerSpout(ApplicationContext appContext) { >>>>>>>>>>>>>> >>>>>>>>>>>>>> LOG.info("RabbitListner Constructor called"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> ctx = appContext; >>>>>>>>>>>>>> >>>>>>>>>>>>>> } >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> @SuppressWarnings("rawtypes") >>>>>>>>>>>>>> >>>>>>>>>>>>>> @Override >>>>>>>>>>>>>> >>>>>>>>>>>>>> public void open(Map conf, TopologyContext >>>>>>>>>>>>>> context,SpoutOutputCollector >>>>>>>>>>>>>> collector) { >>>>>>>>>>>>>> >>>>>>>>>>>>>> LOG.info("Inside the open Method for RabbitListner Spout"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> inputManager = (InputQueueManagerImpl) ctx >>>>>>>>>>>>>> .getBean(InputQueueManagerImpl.class); >>>>>>>>>>>>>> >>>>>>>>>>>>>> notificationManager = (NotificationQueueManagerImpl) ctx >>>>>>>>>>>>>> .getBean(NotificationQueueManagerImpl.class); >>>>>>>>>>>>>> >>>>>>>>>>>>>> eventExchange = ctx.getEnvironment().getProperty( >>>>>>>>>>>>>> "input.rabbitmq.events.exchange"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> routingKey = ctx.getEnvironment().getProperty( >>>>>>>>>>>>>> "input.rabbitmq.events.routingKey"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> eventQueue = ctx.getEnvironment().getProperty( >>>>>>>>>>>>>> "input.rabbitmq.events.queue"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> _collector = collector; >>>>>>>>>>>>>> >>>>>>>>>>>>>> LOG.info("Exiting the open Method for RabbitListner Spout"); >>>>>>>>>>>>>> >>>>>>>>>>>>>> } >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> This is working like a charm (my ApplicationContext is >>>>>>>>>>>>>> initialized seperately ) . As we all know , ApplicationContext >>>>>>>>>>>>>> is not >>>>>>>>>>>>>> serializable . But this works well in LocalCluster. >>>>>>>>>>>>>> >>>>>>>>>>>>>> My assumption is that it will work in a seperate Cluster too >>>>>>>>>>>>>> . Is my assumption correct ?? >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Fri, Oct 9, 2015 at 9:04 PM, Javier Gonzalez < >>>>>>>>>>>>>> jagon...@gmail.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> IIRC, only if everything you use in your spouts and bolts is >>>>>>>>>>>>>>> serializable. >>>>>>>>>>>>>>> On Oct 6, 2015 11:29 PM, "Ankur Garg" <ankurga...@gmail.com> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Ravi , >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I was able to make an Integration with Spring but the >>>>>>>>>>>>>>>> problem is that I have to autowire for every bolt and spout . >>>>>>>>>>>>>>>> That means >>>>>>>>>>>>>>>> that even if i parallelize spout and bolt it will get started >>>>>>>>>>>>>>>> to each >>>>>>>>>>>>>>>> instance . Is there some way that I only have to do for bolts >>>>>>>>>>>>>>>> and spouts >>>>>>>>>>>>>>>> once (I mean if I parallelize bolts or spouts individually it >>>>>>>>>>>>>>>> can share the >>>>>>>>>>>>>>>> conf from somewhere) . IS this possible?? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>>> Ankur >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Tue, Sep 29, 2015 at 7:57 PM, Ravi Sharma < >>>>>>>>>>>>>>>> ping2r...@gmail.com> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Yes this is for annotation also... >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> you can call this method in prepare() method of bolt and >>>>>>>>>>>>>>>>> onOpen() method >>>>>>>>>>>>>>>>> in every Spout and make sure you don't use any autowire >>>>>>>>>>>>>>>>> bean before this >>>>>>>>>>>>>>>>> call. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Ravi. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Tue, Sep 29, 2015 at 2:22 PM, Ankur Garg < >>>>>>>>>>>>>>>>> ankurga...@gmail.com> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> > Hi Ravi , >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > Thanks for your reply . I am using annotation based >>>>>>>>>>>>>>>>> configuration and using >>>>>>>>>>>>>>>>> > Spring Boot. >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > Any idea how to do it using annotations ? >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > On Tue, Sep 29, 2015 at 6:41 PM, Ravi Sharma < >>>>>>>>>>>>>>>>> ping2r...@gmail.com> wrote: >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > > Bolts and Spouts are created by Storm and not known to >>>>>>>>>>>>>>>>> Spring Context. >>>>>>>>>>>>>>>>> > You >>>>>>>>>>>>>>>>> > > need to manually add them to SpringContext, there are >>>>>>>>>>>>>>>>> few methods >>>>>>>>>>>>>>>>> > available >>>>>>>>>>>>>>>>> > > i.e. >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> SpringContext.getContext().getAutowireCapableBeanFactory().autowireBeanProperties(this, >>>>>>>>>>>>>>>>> > > AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, false); >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > SpringContext is my own class where i have injected >>>>>>>>>>>>>>>>> SpringContext so >>>>>>>>>>>>>>>>> > > SpringContext.getContext() returns the actuall Spring >>>>>>>>>>>>>>>>> Context >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > Ravi. >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > On Tue, Sep 29, 2015 at 1:03 PM, Ankur Garg < >>>>>>>>>>>>>>>>> ankurga...@gmail.com> >>>>>>>>>>>>>>>>> > wrote: >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > > Hi , >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > I am building a Storm topology with set of Spouts >>>>>>>>>>>>>>>>> and Bolts and also >>>>>>>>>>>>>>>>> > > using >>>>>>>>>>>>>>>>> > > > Spring for Dependency Injection . >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > Unfortunately , none of my fields are getting >>>>>>>>>>>>>>>>> autowired even though I >>>>>>>>>>>>>>>>> > > have >>>>>>>>>>>>>>>>> > > > declared all my spouts and Bolts as @Components . >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > However the place where I am declaring my topology , >>>>>>>>>>>>>>>>> Spring is working >>>>>>>>>>>>>>>>> > > fine >>>>>>>>>>>>>>>>> > > > . >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > Is it because cluster.submitTopology("test", conf, >>>>>>>>>>>>>>>>> > > > builder.createTopology()) >>>>>>>>>>>>>>>>> > > > submits the topology to a cluster (locally it >>>>>>>>>>>>>>>>> spawns different thread >>>>>>>>>>>>>>>>> > > for >>>>>>>>>>>>>>>>> > > > Spouts and Bolts) that Autowiring is not working? >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > Please suggest . >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Javier González Nicolini >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>> >>> >>