Package org.apache.jackrabbit.oak.jcr.delegate

This package contains the delegates for the various JCR API entities. While the JCR API implementation classes directly implement the client facing JCR API, they do so without implementing much of the business logic themselves but rather rely on the functionality provided by the delegates. This separation of the JCR functionality into external and internal variants guarantees that JCR API consumers cannot gain access to internals by simply casting to an implementation class. Further it makes internal round-tripping through the JCR API unnecessary since all functionality is provided by the internal interface (i.e. delegates), which simplifies maintaining and checking state invariants.

Responsibilities of JCR API implementation classes:

  • Prevent access to internals.
  • Name/path mapping for both method arguments and return values.
  • Tracking and instantiation of other JCR implementation objects.
  • Conversion from JCR Values to PropertyState instances and vice versa.
  • No direct access to the Oak API
Responsibilities of the delegate classes:
  • Business logic associated with complex JCR operations.
  • Provide means for state invariant checking.
  • Must no refer to neither the JCR API nor its implementation classes.