com.amazon.carbonado
Annotation Type Independent


@Documented
@Retention(value=RUNTIME)
@Target(value={TYPE,METHOD})
public @interface Independent

A hint for a dependent Repository to allow a Storable property or type to be undefined in the underlying schema. Ordinarily, if a dependent repository cannot find a matching property, it throws MismatchException when the Storage is first retrieved for the storable. This annotation suppresses that exception, and instead makes the property or type unsupported. Any subsequent invocation of a property access method for the independent type or property will cause an UnsupportedOperationException to be thrown.

One example of when this might be used would be to store a calculated field in the cached representation of the object. It is not necessary to prevent implemented methods of the form "get<value>" from being inadvertently interpreted as properties of the storable; any implementation is by definition not a property.

If a correctly matching property actually is found, then this annotation is ignored and the property or type is defined as usual. If the Repository finds a property whose name matches, but whose type does not match, a MismatchException will be thrown regardless of this annotation.

Independent repositories completely ignore this annotation.

Example:

 public interface UserInfo extends Storable<UserInfo> {
     @Independent
     String getName();
     void setName(String name);

     ...
 }
 
Note: If a versioned Storable with an independent property is managed by a replicating repository, updates which modify just the independent property still update the master Storable, in order to get a new record version. Therefore, independent properties should not be used as a performance enhancement which avoids writes to a master repository.

Author:
Brian S O'Neill



Copyright © 2006-2009 Amazon Technologies, Inc.. All Rights Reserved.