Yes, as long as they're in the same JVM. If you have 4 workers, that's 4
JVMs, and 4 copies of the data.

Storm will ensure that if you have 4 bolts of type A, and 8 of type B, that
1 of type A and 2 of type B exist in each JVM. Since the singleton's field
is static, it'll be shared.

Michael Rose (@Xorlev <https://twitter.com/xorlev>)
Senior Platform Engineer, FullContact <http://www.fullcontact.com/>
[email protected]

On Thu, Dec 4, 2014 at 1:34 PM, Eyal Golan <[email protected]> wrote:

> Michael,
> I understand your solution, however, if bolt of type A "wins" the
> initialization, will bolts of type B see the same instance?
>
> Sent from my Android phone
> On Dec 4, 2014 10:26 PM, "Eyal Golan" <[email protected]> wrote:
>
>> Thanks Michael and Ben !
>>
>> Sent from my Android phone
>> On Dec 4, 2014 9:53 PM, "Flint, Ben" <[email protected]> wrote:
>>
>>>  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 <[email protected]>
>>> Reply-To: "[email protected]" <[email protected]>
>>> Date: Thursday, December 4, 2014 at 11:40 AM
>>> To: "[email protected]" <[email protected]>
>>> 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" <
>>> [email protected]> 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
>>>> M. Miller & Associates <http://mmillerassociates.com/>
>>>> [email protected]
>>>>
>>>> On Thu, Dec 4, 2014 at 1:01 PM, Eyal Golan <[email protected]> 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