Hi, if we go the CiDIT way and we need some mapping between LDAP entries and Java beans we should consider to use DataNucleus.
DataNucleus is an implementation of JDO and JPA standards, Andy Jefferson already announced it on this list last year. Beside RDBMS it also supports other data stores like LDAP and XML. I worked on the LDAP persistence part recently. A list of mappings that are currently supported for LDAP: - An object is obviously mapped to an entry - Primitives, wrappers of primitives, String, Date, Calendar could be mapped to single-valued attributes - Arrays and Sets of the above types could be mapped to multi-valued attributes (no order and no duplicate values are supported atm) - Relationships between Java objects could be mapped hierarchical, by using DN references or by using attribute references Please see [1] for more information. To go a step further, the same Java beans, mapping configuration and data access layer could be used to access the configuration over the wire. For example it could be used for the configuration UI within Studio. Maybe another advantage - however I'm not sure if possible - could be to use the DataNucleus XML store to map the current configuration file. Kind Regards, Stefan [1] http://www.datanucleus.org/products/accessplatform_1_1/ldap/mapping.html Emmanuel Lecharny wrote: > Ersin ER wrote: >> Let's continue discussion on next generation configuration mechanism for >> ApacheDS in this thread. >> > > I have listed _all_ the parameters we currently want to manage, in all > classes : > > DirectoryService > ---------------- > accessControlEnabled : boolean; > allowAnonymousAccess : boolean > +changeLog : ChangeLog > denormalizeOpAttrsEnabled : boolean > exitVmOnShutdown : boolean > id : String > +journal : Journal > maxPDUSize : int > passordHidden : boolean > replicaId : int > +systemPartition : Partition > workingDirectory : File > *interceptors List<Interceptor> : > org.apache.directory.server.core.interceptor.Interceptor > *partitions Set<? extends Partition> : > org.apache.directory.server.core.partition.Partition > *testEntries List<? extends LdifEntry> : > org.apache.directory.shared.ldap.ldif.Entry > > > ChangeLog > --------- > enabled : boolean > exposeChangeLog : boolean > partitionSuffix : String > revisionsContainerName : String > tagsContainerName : String > +changeLogStore : ChangeLogStore > > > ChangeLogStore > -------------- > No setters... > > > Journal > ------- > enabled : boolean > +journalStore : JournalStore > > > JournalStore > ------------ > fileName : String > workingDirectory : String > > > Partition : JdbmPartition > ------------------------- > cacheSize : int > id : String > optimizerEnabled : boolean > suffix : String > syncOnWrite : boolean > *indexedAttributes Set<Index<?,ServerEntry>> indexedAttributes ) ??? > property( String propertyName, String propertyValue ??? > > > Index : JdbmIndex > ----------------- > attributeId : String > cacheSize : int > numDupLimit : int > wkDirPath : File > > > Interceptor : AuthenticationInterceptor > --------------------------------------- > *authenticators Set<Authenticator> : > org.apache.directory.server.core.authn.Authenticator > > > Authenticator > ------------- > No setters... > > > Interceptor:JournalInterceptor > ------------------------------ > rotation : int > > > LdifEntry > --------- > No setters... > > > LdapService > ----------- > +directoryService : DirectoryService (AbstractProtocolServer) > enabled : boolean (AbstractProtocolServer) > +tcpTransport : TcpTransport (AbstractProtocolServer) > +udpTransport : UdpTransport (AbstractProtocolServer) > catelogBased : boolean (DirectoryBackedService) > searchBaseDn : String (DirectoryBackedService) > allowAnonymousAccess : boolean > certificatePassword : String > confidentialityRequired : boolean > enableLdaps : boolean > keystoreFile : String > maxSizeLimit : int > maxTimeLimit : int > +replicationSystem : ReplicationSystem > saslHost : String > saslPrincipal : String > serviceId : String > serviceName : String > *extendedOperationHandlers Collection<ExtendedOperationHandler> : > org.apache.directory.server.ldap.ExtendedOperationHandler > *saslQop Set<String> : java.lang.String > *saslRealms( List<String> : java.lang.String > *saslMechanismHandlers( Map<String, MechanismHandler> : > MechanismHandler + mech-name > *transportProtocols Set<TransportProtocol> : > org.apache.directory.server.protocol.shared.TransportProtocol > > > ReplicationSystem > ----------------- > *replicaPeers Set<ReplicaPeerConfiguration> : > org.apache.directory.server.ldap.replication.ReplicaPeerConfiguration > > > ReplicaPeerConfiguration > ------------------------ > setInterval : long > setPassword : String > setPrincipalDN : String > setProducer : String > setRefreshOnly : boolean > > > ExtendedOperationHandler > ------------------------ > No setters... > > > MechanismHandler : NtlmMechanismHandler > --------------------------------------- > +ntlmProvider : NtlmProvider > ntlmProviderFqcn : String > > > NtlmProvider > ------------ > No setters... > > > ChangePasswordServer > -------------------- > +directoryService : DirectoryService (AbstractProtocolServer) > enabled : boolean (AbstractProtocolServer) > +tcpTransport : TcpTransport (AbstractProtocolServer) > +udpTransport : UdpTransport (AbstractProtocolServer) > catelogBased : boolean (DirectoryBackedService) > searchBaseDn : String (DirectoryBackedService) > allowableClockSkew : long > emptyAddressesAllowed : boolean > policyCategoryCount : int > policyPasswordLength : int > policyTokenSize : int > primaryRealm : String > servicePrincipal : String > *encryptionTypes EncryptionType[] : EncryptionType > > > DnsServer > --------- > +directoryService : DirectoryService (AbstractProtocolServer) > enabled : boolean (AbstractProtocolServer) > +tcpTransport : TcpTransport (AbstractProtocolServer) > +udpTransport : UdpTransport (AbstractProtocolServer) > catelogBased : boolean (DirectoryBackedService) > searchBaseDn : String (DirectoryBackedService) > > > KdcServer > --------- > +directoryService : DirectoryService (AbstractProtocolServer) > enabled : boolean (AbstractProtocolServer) > +tcpTransport : TcpTransport (AbstractProtocolServer) > +udpTransport : UdpTransport (AbstractProtocolServer) > catelogBased : boolean (DirectoryBackedService) > searchBaseDn : String (DirectoryBackedService) > allowableClockSkew : long > bodyChecksumVerified : boolean > emptyAddressesAllowed : boolean > forwardableAllowed : boolean > kdcPrincipal : String > maximumRenewableLifetime : long > maximumTicketLifetime : long > paEncTimestampRequired : boolean > postdatedAllowed : boolean > primaryRealm : String > proxiableAllowed : boolean > renewableAllowed : boolean > *encryptionTypes( EncryptionType[] : EncryptionType > > > NtpServer > --------- > +directoryService : DirectoryService (AbstractProtocolServer) > enabled : boolean (AbstractProtocolServer) > +tcpTransport : TcpTransport (AbstractProtocolServer) > +udpTransport : UdpTransport (AbstractProtocolServer) > > > TcpTransport > ------------ > setAddress : String (AbstractTransport) > setBackLog : int (AbstractTransport) > setNbThreads : int (AbstractTransport) > setPort : int (AbstractTransport) > > > UdpTransport > ------------ > setAddress : String (AbstractTransport) > setBackLog : int (AbstractTransport) > setNbThreads : int (AbstractTransport) > setPort : int (AbstractTransport) > > > ApacheDS > -------- > allowAnonymousAccess : boolean > ldifDirectory : File > synchPeriodMillis : long > >> BTW, we already have some notes on CiDIT: >> >> http://cwiki.apache.org/DIRxSRVx11/configuration-in-dit-cidit.html >> > This is a good starting point. >
