Version 3

    JBoss DNA System Repository

    JBoss DNA stores in an internal JCR repository all the configuration and system metadata for the various DNA components.  This JCR repository allows direct access of this information by any component.  And unless specifically stated, this repository can be changed and, if valid and recognizable by the corresponding component, should result in a dynamic change in that component.

     

    This system repository is typically configured as a separate workspace that is reserved for DNA components.  Each component is allowed its own branch, although multiple components may share a main branch.

    The system repository is not to be confused with the application repositories, in which are stored any application content and upon which DNA operates.

     

    Sequencers

    DNA monitors the application repositories and, when certain conditions occur, uses sequencers to process portions of those application repositories.  Each sequencer implementation is described in the system repository, and its metadata used to build the classpath with the dependencies of the implementation and to instantiate the sequencer implementation class.

     

    The structure of the sequencer system branch is as follows:

     

    /
    +- dna:sequencers [nt:unstructured,mix={mix:title}]
    |  +- jcr:description = "The definitions of the sequencers used in JBoss DNA."
    |  +- nameOfSequencer [nt:unstructured;mix={dna:sequencer,dna:javaClass,mix:created,
    |  |                   mix:lastModified,mix:title,dna:taggable}]
    |  |  +- jcr:description = "description for the sequencer"
    |  |  +- dna:classname = "org.jboss.dna.sequencers.java.JavaSequencer"
    |  |  +- dna:classpath = "org.jboss.dna:dna-seq-java:1.0", "log4j:log4j:1.2.14", ...
    |  |  +- dna:runRules = "import ...", “...”, “...”
    |  +- nameOfSequencer2 [nt:unstructured;mix={dna:sequencer,dna:javaClass,mix:created,
    |                       mix:lastModified,mix:title,dna:taggable}]
    |     +- ...
    

     

    Federated Repository Sources

    DNA Federation has the capability of providing a virtual JCR repository whose content and structure is dynamically constructed from one or more sources.  These sources and the information necessary to establish connections to them are maintained in the JBoss DNA System Repository.

     

    +- dna:sources [nt:unstructured,mix={mix:title}]
    |  +- jcr:description = "The configuration information for external information 
    |                        sources integrated into JBoss DNA."
    |  +- nameOfSource [nt:unstructured;mix={dna:source,dna:javaClass,mix:created,
    |                   mix:lastModified,mix:title,dna:taggable}]
    |     +- jcr:description = "description for the source"
    |     +- dna:classname = "org.jboss.dna.jira.JiraDnaSource"
    |     +- dna:classpath = "org.jboss.dna:dna-jira:1.0", "log4j:log4j:1.2.14", ...
    |     +- dna:properties = "org.jboss.dna.jira.url=http://jira.jboss.org", ...
    |     +- ...
    |  +- ...
    

     

    Component Libraries (using Maven 2)

    JBoss DNA instantiates many of the components (e.g., sequencers or federation connectors) as implementations of DNA interfaces.  The dependencies of these implementations may have overlaps or may have conflicts.  DNA addresses this by using a Maven 2 repository of JAR artifacts that are loaded using custom classloaders that are built from the Maven 2 transitive dependency information.

     

    +- dna:library [nt:folder;mix={dna:mavenRepository,mix:title}]
    |  +- jcr:description = "The Maven 2 repository used by JBoss DNA to load 
    |                        all components, plugins and extensions."
    |  +- org [nt:folder;mix={dna:mavenGroup}]
    |  |  +- jboss [nt:folder;mix={dna:mavenGroup}]
    |  |  |  +- dna [nt:folder;mix={dna:mavenGroup}]
    |  |  |  |  +- dna-java [nt:folder;mix={dna:mavenArtifact}]
    |  |  |  |  |  +- 1.0.0 [nt:folder,mix={dna:mavenVersion}] 
    |  |  |  |  |     +- dna-java-1.0.0.jar [nt:file,mix={dna:mavenJar}]
    |  |  |  |  |        +- jcr:created = ['2007...']
    |  |  |  |  |        +- jcr:content = [...]
    |  |  |  |  |     +- dna-java-1.0.0-sources.jar [nt:file,mix={dna:mavenSources}] 
    |  |  |  |  |        +- jcr:created = ['2007...']
    |  |  |  |  |        +- jcr:content = [...]
    |  |  |  |  |     +- dna-java-1.0.0.pom [nt:file,mix={dna:mavenPom}] 
    |  |  |  |  |        +- jcr:created = ['2007...']
    |  |  |  |  |        +- jcr:content = [...]
    |  |  |  |  +- dna-xml [nt:folder;mix={dna:mavenArtifact}]
    |  |  |  |  |  +- ...
    |  |  |  |  +- dna-oracle-ddl [nt:folder;mix={dna:mavenArtifact}]
    |  |  |  |  |  +- ...
    |  |  |  |  +- dna-metamatrix [nt:folder;mix={dna:mavenArtifact}]
    |  |  |  |  |  +- ...
    |  |  |  |  +- dna-xmi [nt:folder;mix={dna:mavenArtifact}]
    |  |  |  |  |  +- ...
    |  |  |  |  +- dna-jira [nt:folder;mix={dna:mavenArtifact}]
    |  |  |  |     +- ...
    |  |  |  +- seam [nt:folder;mix={dna:mavenGroup}]
    |  |  |     +- ...
    |  |  +- apache [nt:folder;mix={dna:mavenGroup}]
    |  |  |  +- ...
    |  |  +- slf4j [nt:folder;mix={dna:mavenGroup}]
    |  |     +- ...
    |  +- com [nt:folder;mix={dna:mavenGroup}]
    |  |  +- ...
    |  +- apache [nt:folder;mix={dna:mavenGroup}]
    |     +- ...
    

     

    Users

    DNA represents users in the system as a branch in the system repository.  Typically, this branch would be populated with a Directory Connector using an external LDAP directory, although other approaches (including in-memory or a custom database connector for self-contained user management).  Not only does this user branch allow DNA to read and use this information, but it also gives DNA the capability to manage the users.

     

    The system repository's users branch is required by DNA to perform user authentication.

     

    +- dna:users [nt:unstructured,mix={mix:title}]
    |  +- jcr:description = "The users that are information for external information 
    |                        sources integrated into JBoss DNA."
    |  +- nameOfSource [nt:unstructured;mix={dna:source,dna:javaClass,mix:created,
    |                   mix:lastModified,mix:title,dna:taggable}]
    |     +- jcr:description = "description for the source"
    |     +- dna:classname = "org.jboss.dna.jira.JiraDnaSource"
    |     +- dna:classpath = "org.jboss.dna:dna-jira:1.0", "log4j:log4j:1.2.14", ...
    |     +- dna:properties = "org.jboss.dna.jira.url=http://jira.jboss.org", ...
    |     +- ...
    |  +- ...
    

     

    Permissions

    DNA represents permissions in the system using two branches in the system repository.  Typically, these branches would be populated with a Directory Connector using an external LDAP directory, although other approaches (including in-memory or a custom database connector for self-contained user management).  Not only does this user branch allow DNA to read and use this information, but it also gives DNA the capability to manage the permissions and groups.

     

    +- dna:groups [nt:unstructured,mix={mix:title}]
    |  +- jcr:description = "The users that are information for external information 
    |                        sources integrated into JBoss DNA."
    |  +- nameOfGroup [nt:unstructured;mix={dna:group,mix:created,mix:lastModified,
    |                  mix:title,dna:taggable}]
    |     +- jcr:description = "description for the group"
    |     +- dna:members [nt:unstructured]
    |        +- dna:member [nt:unstructured,mix={dna:member,mix:created,mix:lastModified]
    |           +- dna:userRef = reference to user (by path or uuid)
    |           +- dna:groupRef = reference to group (by path or uuid)
    |  +- ...
    +- dna:permissions [nt:unstructured,mix={mix:title}]
    |  +- jcr:description = "The users that are information for external information 
    |                        sources integrated into JBoss DNA."
    |  +- nameOfPermission [nt:unstructured;mix={dna:source,mix:created,
    |                       mix:lastModified,mix:title,dna:taggable}]
    |     +- jcr:description = "description for the permission"
    |     +- dna:subjects = references to the users/groups (by paths or uuids)
    |     +- dna:privileges
    |        +- nameOfPrivilege [nt:  ]
    |     +- ...
    |  +- ...