Home | About | Sematext search-lucene.com search-hadoop.com
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB
 Search Hadoop and all its subprojects:

Switch to Threaded View
Avro >> mail # user >> Best practices for java enums...?


Copy link to this message
-
Re: Best practices for java enums...?
Hi Scott,

How would you envision this working with the avro compiler? Would it be
akin to the capabilites added by
AVRO-1188<https://issues.apache.org/jira/browse/AVRO-1188> where
the existing java enums would be referenced in the importedFiles directory
passed in parameter to the compiler?

Should I file another JIRA for this...?

--
Felix
On Mon, May 13, 2013 at 5:38 PM, Scott Carey <[EMAIL PROTECTED]> wrote:

> It would be nice to be able to reference an existing class when using the
> specific compiler.
>
> If you have an existing "com.mycompany.Foo" enum (or SpecificRecord, or
> Fixed type), then provide the specific compiler with the type prior to
> parsing the schema, it could accept a reference:
>
> {"type":"record", "name":"com.mycompany.Rec", "fields": [
>   {"name":"fooField", "type":"com.mycompany.Foo"}
> ]}
>
> Ordinarily, this would fail to compile, but given a reference to an
> existing compatible type, such as an enum, it could work.
>
> -Scott
>
> On 5/9/13 4:39 PM, "Felix GV" <[EMAIL PROTECTED]> wrote:
>
> Hello,
>
> I'm currently writing an avro schema which includes an enum field that I
> already have as a java enum in my application.
>
> At first, I named the avro field with the same fully qualified name
> (package name dot enum name) as my existing java enum. I then ran the avro
> compiler and found that it overwrote my existing java enum with an
> avro-generated enum.
>
> I find this slightly annoying because my java enum had comments
> documenting the purpose of each enum value, and the avro-generated enum
> doesn't have this.
>
> I see two or three potential solutions:
>
>    1. Accepting to replace my current enum with the avro-generated one in
>    my code base, which I feel I cannot document properly (since I have access
>    to just one doc attribute for the whole enum, instead of per symbol). On a
>    side note, I haven't found any way to have a multi-line doc attribute in an
>    avro schema, so that makes things slightly more annoying still. I wouldn't
>    mind settling on using the avro-generated enums without documentation per
>    symbol if at least I could have one big doc/comment that documents all
>    symbols at once, but since it seems the doc attribute must be a one-liner,
>    this is starting to be a little too messy for my taste...
>    2. Maintaining two separate enums: my manually written (and
>    documented) enum as well as the avro-generated enum. For now, I think this
>    is what I'm going to do, because those enums have little chances of
>    changing anyway, but from a maintenance standpoint, it seems pretty
>    horrendous...
>    3. I guess there's a third way, which would involve creating a script
>    that backs up my enums, compiles all my schemas, and then restores my
>    backed up enums, but this also seems ultra messy :( ... I haven't tested if
>    it'd work (since the manually written enum is missing the $SCHEMA field),
>    but I guess it would...
>
> Am I being OCD about this? or is this a concern that others have bumped
> into? How do you guys deal with this? Did I miss anything in the way avro
> works?
>
> P.S.: I've seen that reflect mappings may be able to work with arbitrary
> java enums, but since they seemed discouraged for performance reasons, I
> haven't digged much in this direction. I'd like to keep using .avsc files
> if possible, but if there's a better way, I can certainly try it.
>
> P.P.S.: We're currently using avro 1.6.1, but if the latest version
> provides a nice way of handling my use case, then I guess I could get us to
> upgrade...
>
> Thanks a lot :) !
>
> --
> Felix
>
>
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB