Yes, just put an entry into the configuration map, something like

        "myclass": "com.esotericsoftware.kryo.serializers.FieldSerializer",

But still, why do you need to instantiate your factory?  Why not just
define it as follows:

        public static class DummyExecutorCreator implements IExecutorCreator
        {
            String name_;
            public DummyExecutorCreator(String name) { this.name_ = name;}
            public static IExecutor create(Map map, TopologyContext tc,
OutputCollector oc) {
                return new DummyExecutor();
            }
        };

and then just call

this.executor_ = DummyExecutorCreator.create(map, tc, oc);

On Fri, Nov 14, 2014 at 9:37 AM, Arthur Andres <[email protected]>
wrote:

> Thanks for the suggestion.
> Maybe I haven't used the right wording.
> I give an instance of the factory to the bolt. The bolt stores the factory
> and it needs to be serialized.
> Ideally I want to create different factories, with different parameters in
> order to have different type of bolts.
> So having a static factory does not really help in this case.
>
> But otherwise would you know how to register a serializer for a bolt
> member.
>
>
> On Fri, Nov 14, 2014 at 2:25 PM, Nathan Leung <[email protected]> wrote:
>
>> Factory create methods are usually static, no? You should just store the
>> string in your bolt and the make the factory create method a static call
>> that takes the string as a parameter.
>> On Nov 14, 2014 9:17 AM, "Arthur Andres" <[email protected]> wrote:
>>
>>> Hi,
>>> I've submitted a question on stackoverflow regarding the serialization
>>> of members of bolts.
>>> I wanted to bring it to the attention of the subscribers of this list:
>>>
>>> http://stackoverflow.com/questions/26931220/how-to-simply-set-up-a-serializer-for-storm-bolt-spout-members
>>>
>>> Thanks.
>>>
>>> PS: here's a copy of the question:
>>> I have a bolt that uses a factory interface to create the tools it uses.
>>> It creates those tools when `prepare` is called. The Factory implementation
>>> only has basic members (strings, integers) that should be serializable by
>>> default.
>>>
>>> When I run my topology I get a `NotSerializableException`, coming from
>>> the factory implementation. I was wondering how I could register a
>>> serializer for the factory.
>>>
>>> here's an example:
>>>
>>>     public class Demo extends BaseRichBolt {
>>>
>>>         public static interface IExecutor
>>>         {
>>>             public void execute( Tuple tuple );
>>>         }
>>>
>>>         public static interface IExecutorCreator
>>>         {
>>>             public IExecutor create( Map map, TopologyContext tc,
>>> OutputCollector oc  );
>>>         };
>>>
>>>         public static class DummyExecutor implements IExecutor
>>>         {
>>>             public void execute( Tuple tuple ) {}
>>>         };
>>>
>>>         public static class DummyExecutorCreator implements
>>> IExecutorCreator
>>>         {
>>>             String name_;
>>>             public DummyExecutorCreator(String name) { this.name_ =
>>> name;}
>>>             public IExecutor create(Map map, TopologyContext tc,
>>> OutputCollector oc) {
>>>                 return new DummyExecutor();
>>>             }
>>>         };
>>>
>>>         public void declareOutputFields(OutputFieldsDeclarer ofd) {
>>>
>>>         }
>>>
>>>         private IExecutor           executor_;
>>>         private IExecutorCreator    creator_;
>>>
>>>         public Demo(IExecutorCreator creator)
>>>         {
>>>             this.creator_ = creator;
>>>         }
>>>
>>>         public void prepare(Map map, TopologyContext tc, OutputCollector
>>> oc) {
>>>             this.executor_ = this.creator_.create(map, tc, oc);
>>>         }
>>>
>>>         public void execute(Tuple tuple) {
>>>             this.executor_.execute(tuple);
>>>         }
>>>
>>>     }
>>> And I get this error when I try to run it in a topology:
>>> `java.io.NotSerializableException: Demo$DummyExecutorCreator`
>>>
>>> As a side note I'm starting to wonder, why don't Storm have you to
>>> register factories instead of Bolts and Spouts. since in the end they get
>>> serialized and copied across the different threads, it'd be probably better
>>> to just give storm a mean to generate those bolts and separate the concerns.
>>>
>>>
>>>
>

Reply via email to