storm-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ankur Garg <ankurga...@gmail.com>
Subject Re: Does Storm work with Spring
Date Mon, 19 Oct 2015 17:03:16 GMT
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 <jr@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 <ankurgarg9@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 <ping2ravi@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 <ankurgarg9@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 <ankurgarg9@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 <ping2ravi@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" <ankurgarg9@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 <ankurgarg9@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 <ping2ravi@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" <ankurgarg9@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
<
>>>>>>>>>> jagonzal@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 <
>>>>>>>>>>> ankurgarg9@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" <ping2ravi@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 <
>>>>>>>>>>>>> ankurgarg9@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 <
>>>>>>>>>>>>>> jagonzal@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" <ankurgarg9@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 <
>>>>>>>>>>>>>>>> ping2ravi@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 <
>>>>>>>>>>>>>>>>> ankurgarg9@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 <
>>>>>>>>>>>>>>>>> ping2ravi@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 <
>>>>>>>>>>>>>>>>> ankurgarg9@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
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>>
>>>
>>

Mime
View raw message