You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Ryan Blue (JIRA)" <ji...@apache.org> on 2015/04/04 19:14:33 UTC

[jira] [Commented] (AVRO-1568) Allow Java polymorphism in Avro for third-party code

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

Ryan Blue commented on AVRO-1568:
---------------------------------

[~sachingoyal], I've been thinking about this issue lately and whether the use case would be covered by the logical types conversions. If it were, then you'd be able to set both the conversion from a third-party object and specifically set its schema. What I like about that way to handle this is that it uses the public API of the third party object, which would be less likely to have problems as that code changes. Using reflection to save the fields of a third-party object violates that object's guarantees by going directly to its private data, but relying on its API has some compatibility guarantees. Of course, the drawback is that you are responsible for maintaining the conversion.

What do you think?

Also, I took a look at the PR and the main thing I see is that it has two {{setSchema}} methods. Why not get the class from of the {{Field}} and use that instead of tying serialization to both type and reference location?

> Allow Java polymorphism in Avro for third-party code
> ----------------------------------------------------
>
>                 Key: AVRO-1568
>                 URL: https://issues.apache.org/jira/browse/AVRO-1568
>             Project: Avro
>          Issue Type: Improvement
>    Affects Versions: 1.7.6
>            Reporter: Sachin Goyal
>
> A large number of Java designs interacting with databases with Hibernate/Couchbase (perhaps, even otherwise) have Java polymorphism of the form:
> {code:java}
> class Base 
> {
>    Integer a = 5;
> }
> class Derived extends Base
> {
>     String b = "Foo";
> }
> class PolymorphicDO
> {
>    Base b = new Derived();
> }
> {code}
> Jackson handles this kind of field by using annotations such as:
> {code}
> @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class”)
> {code}
> If such a thing can be added to Avro, all those Java designs could become immediately usable with Avro. They would also become Hadoop compatible due to AvroSerde.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)