Classes that have been enhanced to implement the
PersistenceCapable
interface are referred
to as persistence-capable classes.
Classes that directly access public or protected persistent
fields of persistence-capable classes are called
persistence-aware. Persistence-aware classes
must also be enhanced - each time a persistence-aware class directly
accesses a persistent field of a persistence-capable class, the
enhancer adds code to notify the JDO implementation that the field in
question is about to be read or written. This enables the JDO
implementation to synchronize the field's value with the datastore as
needed. Unless the persistence-aware class is also
persistence-capable, the enhancer does not add code to make the class
implement the PersistenceCapable
interface.
Generally, it is best to keep all of your persistent fields private, or protected but only accessed by persistent subclasses. In addition to the standard arguments in favor of state encapsulation, this approach avoids the hassle of tracking which non-persistent classes must be enhanced as persistence-aware because they happen to access a public or protected field of some persistent class.