I've used Hazelcast for use cases like this with great success.  It makes it 
relatively straightforward to implement a distributed data structure.

From: Eyal Golan <egola...@gmail.com<mailto:egola...@gmail.com>>
Reply-To: "user@storm.apache.org<mailto:user@storm.apache.org>" 
<user@storm.apache.org<mailto:user@storm.apache.org>>
Date: Thursday, December 4, 2014 at 11:40 AM
To: "user@storm.apache.org<mailto:user@storm.apache.org>" 
<user@storm.apache.org<mailto:user@storm.apache.org>>
Subject: Re: Shared static data between bolts


Thanks!
All the answers give me good idea.
Here's why I need this list be sharable.
One bolt needs the list for computation.
Another bolt will periodically update the list.
In other words, the list is changeable.

I tried passing it in conf but there are some 3rd party libs in the wrapper.

Anyway, I also need to improve the topology. Separate bolt to two etc. That 
way, it would be easier to handle that cache.

One more question, I thought about giving hazelcast a try.
Create local node and then the bolts will have clients.

What do you think?

Sent from my Android phone

On Dec 4, 2014 9:14 PM, "Kushan Maskey" 
<kushan.mas...@mmillerassociates.com<mailto:kushan.mas...@mmillerassociates.com>>
 wrote:
Hi Eyal,

I had the similar issue earlier. Static objects are not a good way of passing 
the variables around in Storm due to clustered nature of the Storm. You will 
see null for all the static variables.

This is how I implemented mine, for instance I wanted to pass around the server 
properties such and host name and username/password. I read the properties file 
and then created a map of these properties then set it into the Config object. 
Like below.

In topology:

Map<Stirng, Stirng> map = new HashMap();
map.put("hostname", "localhost");
map.put("username", "testuser");
map.put("password", "testpassord");
map.put("port", "1234");

Config config = new Config();

config.put("MY_MAP", map)

In Bolts:

public void prepare(Map stormConf, TopologyContext context) {

HashMap<Stirng, Stirng> map = stormConfig.get("MY_MAP");

}

This how i resolved my problem.Try that if that helps.
--
Kushan Maskey
817.403.7500<tel:817.403.7500>
M. Miller & Associates<http://mmillerassociates.com/>
kushan.mas...@mmillerassociates.com<mailto:kushan.mas...@mmillerassociates.com>

On Thu, Dec 4, 2014 at 1:01 PM, Eyal Golan 
<egola...@gmail.com<mailto:egola...@gmail.com>> wrote:

Hi all,
I am newbie with Storm and having some issues with static objects in the 
topology.
In the main class, where I set the topology, I also set a static object. It's 
actually a wrapper for a collection of strings.
This object needs to he shared between different bolts.
It's big so I want it to be only one instance.

The problem is that when a bolt tries to get this static instance: example - 
MyMain.Shared... It's null. Although I instantiated it in the main method.

I guess I'm doing something wrong.

Thanks for any assistance.

Eyal

Sent from my Android phone

Reply via email to