Hi Craig,

Thanks for your prompt response.

I understand the limitation of boolean attributes, therefore, I suggested to 
move from attribute to annotation.

This way we will have 3 options:
    (1) @Indexed or @Indexed(true)
    (2) @Indexed(false)
    (3) Not using @Indexed at all - which means implied

Regards,

Ilan

  ----- Original Message ----- 
  From: Craig L Russell 
  To: Ilan Kirsh 
  Cc: [email protected] ; JDO Expert Group 
  Sent: Tuesday, January 16, 2007 2:53 AM
  Subject: Re: Thoughts about JDO 2.1 Annotation


  Hi Ilan, 


  Thanks for your constructive comments. I've not yet had a detailed look at 
Andy's proposed annotations, and I'll consider your comments when I review them.


  I have thought about public @interface Indexed { boolean value() default 
true; } and there is an issue in general with using boolean annotations. If you 
don't define a default value for a property, then you must declare it each 
time. But if you define a default value, you cannot tell whether the compiler 
provided it as a default or the user declared it. So for me it makes sense to 
use String indexed() default ""; as Andy suggested.


  More later,


  Craig


  On Jan 15, 2007, at 4:16 PM, Ilan Kirsh wrote:


    Hi all,

    I just added Java 5.0 annotation support to ObjectDB, following the work 
that was contributed by Andy (http://issues.apache.org/jira/browse/JDO-403).
    Andy did a great job, but still there might be a little room for 
improvements. Following are suggestions that might be considered.

    1. Using simple annotations instead of complex attributes
    For instance:
        @PrimaryKey
    instead of:
        @Field(primaryKey=true)
    (or simply @Id as in JPA).

    And another example:
        @Embedded / @Embedded(false)
    Instead of:
        @Field(embedded="true") / @Field(embedded="false")
    which also solves the need to use boolean as string in order to get a third 
state, which doesn't look good.

    This could be done at least for the more common attributes.

    Also, maybe @Index should be defined without unique option, by:
        public @interface Indexed { boolean value() default true; }
    or maybe even by:
        public @interface Unique {}
    and simply used with:
        @Indexed
    Do we really need so many different methods to define a unique index?

    2. Discarding @Array, @Collection and @Map
    It seems logical to move the attributes of @Array, @Collection and @Map to 
@Element, @Key and @Value. The separation (whose origin is in the XML) is 
unclear to me.

    3. Merging all annotations to one package
    Good separation seems to be very difficult. For instance - @Index, which is 
currently in orm has both columns and fields as attributes. Fields are not 
related to orm - just columns. If the separation remains, at least moving 
@Index, @Indices, @Unique, @Uniques, @Element, @Key and @Value that contain 
also non orm information should be pulled out to the main package.

    4. Type attributes should be Class rather than String
    For instance, in Field:
        Class fieldType();
    instead of:
        String fieldType() default "";

    5. RecursionDepth
    Should be added somehow to the fields in @FetchGroup (and removed from 
@Field if unused).

    Regards,

    Ilan Kirsh
    ObjectDB Software
    http://www.objectdb.com




  Craig Russell

  Architect, Sun Java Enterprise System http://java.sun.com/products/jdo

  408 276-5638 mailto:[EMAIL PROTECTED]

  P.S. A good JDO? O, Gasp!


Reply via email to