This thread branched off of the previous status thread Emmanuel posted. This topic needs it's own thread.


Before we begin let's consider the different categories of extensions (controls & extended operations):

FYI ADP = Apache Directory Project.
FYI Extensions = Bundles, modules, that extend the codec, like controls and extended operations

  Class (1) [ADP-PROVIDED] 
      - considered part of the standard ldap model
      - must have
      - packaged into API: available out of the box
      - examples:
           * ManageDsaIT
           * PersistentSearch
           * EntryChange
           * Subentries
           * Cascade

  Class (2) [ADP-PROVIDED] non-standard, optional and available as a single extension bundle
      - not considered part of the standard ldap model
      - may be server specific
      - may be custom non-published spec
      - optional, pluggable on demand
      - examples:
           * CreateCertificate
           * StoredProcedure
           * PassordPolicy
           * Replication

  Class (3) [USER-PROVIDED] non-standard, optional and user provided bundle[s]
      - anything under the sun
      - optional


How does this overlap into what we will do to restructure the organization of the shared-ldap module which will eventually break up into separate Maven modules (OSGi bundles)?


Here's one answer with possible configuration:

  o shared-ldap-model
       - holds only standard LDAP model types
       - class 1 ADS-PROVIDED extension POJI/POJO pairs in oadsl.message.controls and oadsl.message.extended

  o shared-ldap-codec
       - holds all the implementation details we want to hide
       - exposes some SPI classes: as little as is needed to write new controls and extended operations
       - contains the default codec service implementation
       - contains class 1 ADS-PROVIDED extension implementation objects (grammars,containers,factories,decorators)

   o shared-ldap-codec-api
       - exposes minimal codec API so it can be used in studio, apacheds, and other applications
       - contains codec service interface
       - codec related utilities

   o shared-ldap-ext
       - contains all class 2 ADS-PROVIDED extension classes in oadsl.extensions.controls & oadsl.extensions.extended
       - exposes extension POJO/POJI and utilities
       - hides extension codec implementations (grammars,containers,factories,decorators)
       - registering one extension registers them all
       - later if need by turned into ldap-ext multi-project, breaking up extensions into per-extension bundles