Documentation de développement
- Organisation du code source
- Sources créées
- Détails des classes
Organisation du code source
La version 2 de clover se découpe en plusieurs modules qui correspondent à des rôles fonctionnels spécifiques :- cloveretl.engine : ce module correspond au moteur de CloverETL ;
- cloveretl.lookup : ce module contient le code relatif au lookup pour les bases de données ;
- cloveretl.sequence : ce module permet de créer des séquences ;
- cloveretl.component : ce module contient l'ensemble des composants (noeuds) de Clover ;
- cloveretl.connection : ce module contient les éléments permettant d'effectuer des connections ;
- cloveretl.thirdparty : ce module contient le code issu de sources autre que Clover.
Sources créées
Le code source propre à Linagora a été créé dans le module thirdparty. À terme, il devrait être intégré à CloverETL dans les modules « component » et « connection ».Voici l'arborescence des sources :com
`-- linagora
|-- connection
`-- LdapConnection.java
|-- component
| |-- LdapEntryExists.java
| |-- LdapReader.java
| `-- LdapWriter.java
`-- ldap
|-- Jetel2LdapData.java
|-- Ldap2JetelData.java
|-- LdapFormatter.java
`-- LdapParser.javaDétails des classes
LdapConnection
Fonctionnement général
Cette classe permet de créer une connexion Clover vers un annuaire LDAP. Concrètement, cette classe donne la possibilité d'ajouter dans la partie "global" du fichier de configuration XML du graphe d'alimentation un connexion de type LDAP en plus des connections de type JDBC. Cette connexion peut alors être utilisée dans les composants nécessitant l'accès à un annuaire.Ce composant permet de créer des connexions anonymes ou authentifiées grâce à une authentification simple (utilisateur + mot de passe).D'un point de vu plus technique, cette classe fournit les méthodes de haut niveau permettant d'interagir avec un contexte JNDI (et donc un annuaire LDAP), telles que les méthodes de création du contexte, de recherche et de modification. Ces méthodes constituent une surcouche à l'API JNDI de Sun dans le cadre de la manipulation de l'annuaire LDAP à travers une connexion CloverETL.Paramètres XML
Voici le détail de la syntaxe XML à utiliser afin de configurer une connexion LDAP dans CloverETL :| Nom de l'attribut | Optionnel | Défaut | Définition |
|---|---|---|---|
| type | non | LDAP | type de connexion, valeur à mettre : "LDAP" |
| id | non | identification de la connexion | |
| hostname | oui | localhost | le nom d'hôte du serveur LDAP |
| port | oui | 389 | le numéro de port du serveur LDAP |
| user | oui | DN de l'utilisateur pour effectuer une connexion authentifiée | |
| password | oui | mot de passe de l'utilisateur pour effectuer une connexion authentifiée | |
| threadSafeConnection | oui | true | permet d'éviter les problèmes de concurrence en environnement multi-threadés lorsque plusieurs composants utilisent la connexion |
<Connection type="LDAP" id="LdapConnection0" hostname="ldap.foo.com" port="1389" user="cn=Manager,dc=foo,dc=bar" password="managerpassword"><Connection type="LDAP" id="LdapConnection0">Composants Clover LDAP
LdapReader
Fonctionnement général
Ce composant permet d'effectuer des recherches dans un annuaire LDAP. Il utilise un connexion LDAP et est paramétré par les attributs classiques d'une requête de recherche LDAP, à savoir :- un DN de base pour la recherche,
- un filtre de recherche LDAP,
- la portée (ou étendue) de la recherche.
Description des entrées et sorties
Ce paragraphe décrit les entrées et sorties du composant, ainsi que les données attendues et fournies sur chacune d'elles.| Type | Numéro | Rôle |
|---|---|---|
| sortie | 0 | sortie standard des enregistrements lus dans l'annuaire |
Paramètres XML
Voici le détail de la syntaxe XML à utiliser afin de configurer un composant LdapReader dans CloverETL :| Nom de l'attribut | Optionnel | Défaut | Définition |
|---|---|---|---|
| id | non | identifiant du composant | |
| type | non | LDAP_READER | type de composant : "LDAP_READER" |
| ldapConnection | non | identifiant de la connexion à utiliser | |
| base | non | DN de base de la recherche. | |
| scope | oui | OBJECT | Portée de la recherche à effectuer, valeur parmi : OBJECT : la recherche ne porte que sur l'objet correspond à base SUBTREE : sous arbre dont la racine est base ONELEVEL : recherche sur les enfants de base |
| filter | oui | (objectClass=*) | Filtre à appliquer à la recherche. La syntaxe à utiliser est la même que pour les filtres LDAP |
<Node ldapConnection="LdapConnection0" id="INPUT1" type="LDAP_READER" scope="SUBTREE" filter="uid=*" base="ou=people,dc=uninett,dc=no"><Metadata id="InMetadata"> <Record name="inEmployees" type="delimited"> <Field name="dn" type="string" delimiter=";" /> <Field name="uid" type="string" delimiter=";" /> <Field name="mail" type="string" delimiter=";" /> <Field name="employeeNumber" type="integer" delimiter=";" /> <Field name="l" type="string" delimiter="\\n"/> </Record> </Metadata>
LdapWriter
Fonctionnement général
Ce composant permet d'effectuer des mises à jour du contenu de l'annuaire. Il utilise une connexion LDAP pour contacter l'annuaire sur lequel est effectué la mise à jour. Les différents type de mises à jour sont définies par les actions disponibles, qui peuvent être des ajouts, suppression ou renommage d'entrées, ou des ajouts, suppressions ou modification d'attributs.Chaque enregistrement Clover est traité en fonction de l'action choisie afin d'effectuer la requête LDAP appropriée.Les noms des champs des métadonnées doivent correspondre aux noms des attributs des objets cibles. De plus, il doit exister un champ nommé "dn" dont la valeur est le DN de l'entrée qui doit être modifiée par l'enregistrement.Enfin, aucune vérification a priori n'est effectuée sur la consistance ni sur la validité des données (valeurs, format, etc). Les entrées non-valides pour l'action demandée seront refusées au niveau de l'annuaire. En particulier, dans le cas d'ajout d'entrées, tous les champs obligatoires pour la classe d'objet de l'entrée doivent être renseignés.Description des entrées et sorties
Ce paragraphe décrit les entrées et sorties du composant, ainsi que les données attendues et fournies sur chacune d'elles.| Type | Numéro | Rôle |
|---|---|---|
| entrée | 0 | entrée standard des enregistrements à écrire, modifier ou supprimer dans l'annuaire |
| sortie | 0 | sortie d'erreur : les enregistrements provoquant une exception lors de leur traitement sont envoyés sur cette sortie |
Paramètres XML
Voici le détail de la syntaxe XML à utiliser afin de configurer un composant LdapReader dans CloverETL :| Nom de l'attribut | Optionnel | Défaut | Définition |
|---|---|---|---|
| id | non | identifiant du composant | |
| type | non | LDAP_WRITER | type de composant : "LDAP_WRITER" |
| ldapConnection | non | identifiant de la connexion à utiliser | |
| action | non | add_entries | Type d'action à effectuer, choisir parmi : add_entries : ajouter des entrées remove_entries : enlever les entrées spécifiées rename_entries : renommer des entrées. La valeur du nouveau DN doit être spécifiée dans le champ "newDn" replace_attributes : remplacer les attributs spécifiés remove_attributes : enlever les attributs spécifiés |
<Node ldapConnection="LdapConnection0" id="LDAP_Output0" type="LDAP_WRITER" action="add_entries"><Metadata id="OutMetadata"> <Record name="outEmployees" type="delimited"> <Field name="dn" type="string" delimiter=";" /> <Field name="departmentNumber" type="integer" delimiter=";" /> <Field name="mail" type="string" delimiter="\\n" /> </Record> </Metadata>
LdapEntryExists
Fonctionnement général
Cette classe utilise encore une fois une connexion LDAP. Son rôle est de vérifier l'existence dans l'annuaire définit par la connexion des enregistrements qui lui sont fournis en entrée. Les enregistrements sont alors triés en deux groupes, ceux présents dans l'annuaire (qui sont envoyés sur la sortie 0 du composant) et ceux absents (envoyés sur la sortie 1 du composant).Attention, ce composant est à utiliser avec précaution : si le contenu de l'annuaire sur lequel est effectué le test d'existence est modifié au cours de l'exécution du graphe, les résultats peuvent ne pas être cohérents avec les différents états de l'annuaire (en effet, nous pouvons rencontrer des problèmes race condition, l'ensemble de CloverETL étant multi-threadé et chaque composant étant exécuté en parallèle des autres).Description des entrées et sorties
Ce paragraphe décrit les entrées et sorties du composant, ainsi que les données attendues et fournies sur chacune d'elles.| Type | Numéro | Rôle |
|---|---|---|
| entrée | 0 | entrée standard des enregistrements à écrire, modifier ou supprimer dans l'annuaire |
| sortie | 0 | sortie standard : les entrées trouvées sont envoyées sur cette sortie (comportement par défaut, voir le paramètre switchOutputs) |
| sortie | 1 | sortie standard : les entrées non trouvées sont envoyées sur cette sortie (comportement par défaut, voir le paramètre switchOutputs) |
| sortie | 2 | sortie d'erreur : les enregistrements provoquant une exception lors de leur traitement sont envoyés sur cette sortie |
Paramètres XML
Voici le détail de la syntaxe XML à utiliser afin de configurer un composant LdapReader dans CloverETL :| Nom de l'attribut | Optionnel | Défaut | Définition |
|---|---|---|---|
| id | non | identifiant du composant | |
| type | non | LDAP_ENTRY_EXISTS | type de composant : "LDAP_ENTRY_EXISTS" |
| ldapConnection | non | identifiant de la connexion à utiliser | |
| switchOutputs | oui | false | Inverser les sorties. Si "true", les entrées trouvées sont envoyées sur la sortie 1, les entrées non trouvées sont envoyées sur la sortie 0 |
<Node ldapConnection="LdapConnection0" id="LDAP_entry_exists_0" type="LDAP_ENTRY_EXISTS"><Metadata id="OutMetadata"> <Record name="outEmployees" type="delimited"> <Field name="dn" type="string" delimiter=";" /> <Field name="departmentNumber" type="integer" delimiter=";" /> <Field name="mail" type="string" delimiter="\\n" /> </Record> </Metadata>
Classes utilitaires
Le paquet « com.linagora.ldap » contient l'ensemble du code liant l'API de Clover à l'API JNDI de Sun. Ce code permet de créer une connexion Clover, fournit les outils permettant d'effectuer des requêtes en lecture ou en écriture sur l'annuaire, et de transformer les données JNDI en données Clover (ou inversement).Le rôle précis de chaque classe est décrit ci-dessous.LdapParser
Cette classe est la classe qui permet de faire le lien entre une connexion à un annuaire et les données LDAP, le composant LdapReader et les données Clover ETL.Elle a deux rôles :- elle prend en charge le traitement des requêtes LDAP effectuées sur la connexion ; en particulier, elle traite les exceptions JNDI qui peuvent être générées par la connexion ;
- elle transforme les données LDAP en données Clover ETL en utilisant la classe Ldap2JetelData et les métadonnées du composant LdapReader lié.
PDF
History

