Le DN ne peut pas être fabriqué. throw new RuntimeException("Unavailable generateDn method") ; }
}
La classe du service JNDI
Il faut nécessairement adapter la classe de service JNDI. En effet, il n'est plus question de retourner une
entrée suivant un identifiant particulier dans une branche particulière. Du fait de la présence de notion
d'arborescence, il est plus judicieux d'utiliser directement le DN de l'entrée LDAP concernée.
La nouvelle classe auto-générée MonOrganisationJNDIService.java se situe au sein du paquetage
org.linagora.ldap.lsc.jndi, dans le répertoire src/impl, et ressemble à ceci :
package org.linagora.ldap.lsc.jndi ;import javax.naming.NamingException ;import
org.linagora.ldap.lsc.beans.monOrganisationBean ;public class MonOrganisationJNDIService {
private static final MonOrganisationJNDIService instance = new MonOrganisationJNDIService() ;
public MonOrganisationJNDIService() {} public static MonOrganisationJNDIService getInstance() {
return instance; } public monOrganisationBean getMonOrganisation(String dn) throws
NamingException { return (monOrganisationBean) monOrganisationBean.getInstance(
JndiServices.getInstance().readEntry(dn,true), dn, monOrganisationBean.class); } }
La classe du service JDBC
Tout le travail de construction de l'arborescence s'effectue au niveau de cette classe. LSC est déjà doté
d'une fonctionnalité permettant de construire une arborescence à partir de données en base. C'est la classe
abstraite OrganizationalUnitJDBCService - au sein du paquetage org.linagora.ldap.lsc.service dans le
répertoire src/impl - qui l'implémente. Détail sur la classe OrganizationalUnitJDBCService Globalement,
cette classe générique permet de construire une arborescence, grâce à quelques méthodes indispensables,
automatiquement appelées : initialize(...) : c'est une méthode publique, appelée généralement dans le
constructeur de la classe même, qui se charge d'effectuer les appels SQL nécessaire afin de récupérer les
données adéquates en vue de tenter de construire une arborescence ; initializeVector(...) : c'est une
méthode privée, appelée par la méthode précédemment citée, et permet de fixer les DNs pour chaque
nœud de l'arborescence construire ; _getOu(...) : c'est une méthode publique, appelée en de rares
occasions directement par le développeur. Elle retourne un objet « flat » de type primaire
fOrganizationalUnit, contenant les informations sélectionnée dans la base ; _getOuIdList(...) : cette méthode
publique retourne l'ensemble des identifiants des entrées en base qui constitueront par la suite les nœuds
de l'arbre ; _getParent(...) ; c'est une méthode publique qui retourne une liste d'identifiants des nœuds
parent à l'identifiant de nœud passé en paramètre ; _getOudIdMemberList(...) : cette méthode publique
particulière retourne l'ensemble des identifiants utilisateur faisant partie intégrante de l'identifiant de nœud
passé en paramètre.
Cette classe possède quelques attributs en plus permettant de recenser les nœuds de différentes façons.
Globalement, il existe : Un attribut de classe privé - ou - qui contient la liste des nœuds retournée telle quelle
par la base de données ; Un attribut de classe privé - orderedOu - qui contient cette même liste, mais
ordonnée par ordre d'apparition, c'est à dire qu'un nœud apparaît après son nœud parent dans cette liste ;
Un attribut de classe privée - ouChildren - qui contient la liste des nœuds fils pour chaque nœud de l'arbre.
Pour finir, la principale particularité réside dans le fait que les classes qui en héritent n'ont juste qu'à fixer les
noms des requêtes SQL, introduites dans le fichier XML associé, et le DN de base de l'arborescence.
Tout ceci fait que cette classe permet de réaliser l'objectif visé initialement. Implémentation de la classe
MonOrganisationJDBCService Cette classe est alors relativement courte. Elle s'appuie fortement sur la
classe OrganizationalUnitJDBCService :
package org.linagora.ldap.lsc.service;import org.linagora.ldap.lsc.Configuration;public class
MonOrganisationJDBCService extends OrganizationalUnitJDBCService { private static final
MonOrganisationJDBCService INSTANCE = new MonOrganisationJDBCService(); public static
MonOrganisationJDBCService getInstance() { return INSTANCE; } public
MonOrganisationJDBCService() { baseDn = Configuration.DN_STRUCTURES_ORGANISATION;
sqlFunctionNameForGetMembersList = "getMonOrganisationMembersList"; sqlFunctionNameForGetObject
= "getMonOrganisation"; sqlFunctionNameForGetObjectList = "getMonOrganisationList";
sqlFunctionNameForGetParentObjectId = "getParentMonOrganisationId"; initialize(); } }
InterLDAP - Wiki - Main - DocumentationTechniqueOrganisation
-3-