You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jason Rosenberg (JIRA)" <ji...@apache.org> on 2013/09/07 08:30:53 UTC

[jira] [Commented] (KAFKA-1049) Encoder implementations are required to provide an undocumented constructor.

    [ https://issues.apache.org/jira/browse/KAFKA-1049?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13760940#comment-13760940 ] 

Jason Rosenberg commented on KAFKA-1049:
----------------------------------------

I posed this issue to the kafka users mailing list.  There were a couple suggestions:

Jay Kreps suggests that the producer when instantiating an encoder, could first try to use a constructor that takes a VerifiableProperties, and if that is not available, then revert to a simple no-arg constructor.

Joel Koshy suggests that VerifiableProperties could be made to extend Properties, and that might be an easier thing to require for the java api.

My personal feeling, is that it's hard to require implementers of an interface to provide a constructor of a certain signature, since there's no way to enforce this statically at compile time.  Perhaps instead, the interface can include a 'setProperties()' method, that the producer will call right after instantiation.
                
> Encoder implementations are required to provide an undocumented constructor.
> ----------------------------------------------------------------------------
>
>                 Key: KAFKA-1049
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1049
>             Project: Kafka
>          Issue Type: Improvement
>            Reporter: Jason Rosenberg
>            Priority: Minor
>
> So, it seems that if I want to set a custom serializer class on the producer (in 0.8), I have to use a class that includes a special constructor like:
> public class MyKafkaEncoder<MyType> implements Encoder<MyType> {
>   // This constructor is expected by the kafka producer, used by reflection
>   public MyKafkaEncoder(VerifiableProperties props) {
>     // what can I do with this?
>   }
>  @Override
>   public byte[] toBytes(MyType message) {
>     return message.toByteArray();
>   }
> }
> It seems odd that this would be a requirement when implementing an interface.  This seems not to have been the case in 0.7.
> What could my encoder class do with the VerifiableProperties?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira