Hi Michael,
If a bolt of type A on a JVM modifies the shared data, will another bolt of type B on another JVM see the changes? To be clear, I have a use-case where I need multiple bolts of multiple types to be able to read/write on the shared collection. You can think of it as a shared database. In this case, can I still use this solution or do I need to use Hazelcast/Redis/Memcached? Best regards, Huy, Le Van On Thursday, Dec 4, 2014 at 8:53 p.m., Michael Rose <mich...@fullcontact.com>, wrote: 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) Senior Platform Engineer, FullContact mich...@fullcontact.com On Thu, Dec 4, 2014 at 1:34 PM, Eyal Golan <egola...@gmail.com> 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" <egola...@gmail.com> wrote: Thanks Michael and Ben ! Sent from my Android phone On Dec 4, 2014 9:53 PM, "Flint, Ben" <bfl...@popcap.com> 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 <egola...@gmail.com> Reply-To: "user@storm.apache.org" <user@storm.apache.org> Date: Thursday, December 4, 2014 at 11:40 AM To: "user@storm.apache.org" <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> 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 kushan.mas...@mmillerassociates.com On Thu, Dec 4, 2014 at 1:01 PM, Eyal Golan <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