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 >>>>> >>>> >>>>
