You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Norval Hope (JIRA)" <ji...@apache.org> on 2006/11/07 11:58:51 UTC

[jira] Updated: (DIRSERVER-760) reading .schema files at server start-up

     [ http://issues.apache.org/jira/browse/DIRSERVER-760?page=all ]

Norval Hope updated DIRSERVER-760:
----------------------------------

    Attachment: schema_branch.patch

Here is an initial patch of a working server (at least given the testing I've done) against https://svn.apache.org/repos/asf/directory/branches/apacheds-schema , where no output from the Maven schema plugin is used in the server.xml file (I ran ./apache/server_main/apacheds.bat).

This is obviously a work in progress to show the job can be done, and one possible implementational approach. There are a number of significant questions that still need to be addressed by some developers more knowledgeable about ApacheDS then myself:
  1. Maven support: currently I ran by looking up the .schema files in ./apache/server_main/conf/*.schema (configured via ./apache/server_main/server.xml, which I also copied into the installers dir). I copied these files manually to test, but presume they should be copied from apache/core/src/main/schema to somewhere else for packaging in all supported release packages. Even if the standard .schema files are packaged in .jars, I think it is important that a dir outside of jars can be easily configured to accept extra .schema files not included in the standard build.
    a. Currently extra content (not attribute types or object classes) that is associated with a .schema file, but which must be manually maintained is found by looking for a matching ???SchemaAdditions class (eg SystemSchemaAdditions associated with "00_system.schema") using reflection. A more explicit approach would be better but simply using Spring is problematic as the major variable in the manual configurations is the code (normalizer/comparator etc) for each item, and having a separate class for each them is most probably not a viable approach.
  2. Tidy up: I haven't removed any code made defunct by this patch, but there is some (eg BootstrapSchemaLoader). There was some ThreadLocal support in this class which I don't understand the motivation for, so I may have missed something.
    a. I don't understand the reasoning behind the BootstrapRegistries versus the GlobalRegistries, and it seems to me that ultimately a single Registries flavour should be supported, and it should support schema being contributed to the server dynamically after it has started up (for instance on a custom partition being dynamically activated).
     b. Some refactoring of project modules will most probably be required if my implementation approach is accepted. In particular the apache/core-plugin module should perhaps be deleted and the Antlr support in it moved to apache/core.
  3. Once more knowledgeable peeps then I have weighed in so that the details are clearer, I'm happy to document the details.

> reading .schema files at server start-up
> ----------------------------------------
>
>                 Key: DIRSERVER-760
>                 URL: http://issues.apache.org/jira/browse/DIRSERVER-760
>             Project: Directory ApacheDS
>          Issue Type: New Feature
>          Components: core
>    Affects Versions: 1.5.1
>         Environment: N/A
>            Reporter: Norval Hope
>         Attachments: schema_branch.patch, schema_loader.patch
>
>
> I am submitting a patch for a feature I required, and which I've seen a number of queries about on the DEV list. Currently the only way to get new .schema information into ApacheDS is to use the Maven2 plugin, requiring a rebuild of the server (not to mention working around problems like methods being generated which are too long for Java to handle).
> Instead this patch adds support for reading of  specified .schema files from server.xml at server startup, via a new interface SchemaLoader and a default implementation FileSystemSchemaLoader. The latter supports reading all files matching a specified regex in a specified directory (in which case users must be careful to ensure that files appear lexicographically before their dependant files, ala init.rc in Linux) or reading an ordered list of file names under a specified directory. An example server.xml snippet is as follows:
>     <property name="bootstrapSchemas">
>       <set>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.AutofsSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.CorbaSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.CoreSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.CosineSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.ApacheSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.CollectiveSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.InetorgpersonSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.JavaSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.Krb5kdcSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.NisSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.SystemSchema"/>
>         <bean class="org.apache.directory.server.core.schema.bootstrap.ApachednsSchema"/>
>       </set>
>     </property>
>     <property name="schemaLoaders">
>         <list>
>             <bean class="org.apache.directory.server.core.schema.FileSystemSchemaLoader">
>                 <constructor-arg><value>./</value></constructor-arg>
>                 <!--<constructor-arg><value>.*_openldap.schema</value></constructor-arg>-->
>                 <constructor-arg>
>                     <list>
>                         <value>my1_openldap.schema</value>
>                         <value>my2_openldap.schema</value>
>                     </list>
>                 </constructor-arg>
>             </bean>
>         </list>
>     </property>
> noting that the Maven2 style approach is of course still supported where desired. A list is used so that multiple SchemaLoader implementations can be appended if required (which I do). 
> I have also included SchemaFromSearchConverter which can read a schema from another directory via conventional query, which may come in useful for people using ApacheDS as a virtual directory container of sorts. It is not required by the core patch and can be excluded if no generic use is seen for it.
> A few issues are still outstanding:
>    1. Is the patch seen as worthwhile by the DEV list and/or are there any issues with my implementation of it?
>    2. At it's core the patch uses the OpenLdapSchemaParser to read the .schema files, which is currently only available in the Maven2 plugin artifact     
> <groupId>org.apache.directory.server</groupId>
> <artifactId>apacheds-core-plugin</artifactId>
>    
>     which is a bit clunky as it means people need to include this jar in their classpath (or in the UberJar). Perhaps this parsing component should be separated from the rest of the maven plugin to tidy this up (I don't know maven well enough to do this myself).
>    
>    3. If the feature and implementation are ok, what further steps should I take re preparing the patch for inclusion?
> Thanks (by the way I was previously known as Norbert Reilly)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira