Précédent   Forum du club des développeurs et IT Pro > Java > Communauté Java > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, et autres ressources pour la rubrique Java.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/10/2010, 13h55   #1
Mobius
Membre éprouvé
 
Avatar de Mobius
 
Inscription : avril 2005
Messages : 461
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 461
Points : 419
Points : 419
Par défaut Librairie d'accès a un annuaire LDAP

Bonjour,

Je viens (enfin!) de publier une librairie d'accès à un annuaire LDAP.
Cette librairie permet d'effectuer simplement un mapping entre les données de l'annuaire et des classes Java.
Le but est de décrire les objets LDAP dans une interface sans avoir a s'occuper de son implémentation.

Pour ceux que ca interesse, j'ai publié les sources sur google code (projet ldapbeans)

Pour le moment seul les sources sont disponible (sous la forme d'un projet maven/eclipse). J'espère pouvoir fournir de la documentation rapidement.

Merci à tous ceux qui le souhaite (et on le courage) de me faire des retours et des critiques.

En espérant que ca facilite la vie de certains développeurs.
__________________
Librairie d'accès LDAP en Java : LdapBeans
et pensez au tag
Mobius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2010, 19h03   #2
deltree
Membre confirmé
 
Inscription : mai 2007
Messages : 242
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 242
Points : 269
Points : 269
Je l'ai un peu testé, je trouve ça bien.
Je ne connaissait pas Apache DS, il n'y a pas moyen de l'initializer en dehors des test?

Sinon question détail, il y a un test qui ne passe pas :ZipFileTest.testZipFile

Suggestion sur le Mécanisme interface/Manager:
tu définis la persistence au niveau du bean interface, ce qui oblige à avoir un interface plutôt qu'un bean et donc à annoter getter et setter,
Est-ce que tu n'aurais pas pu faire comme en JPA/EntityManager: définir persistence au niveau du manager puis l'annotation au niveau de l'attribut privé du bean, quitte à calculer les noms de getter/setter?

Niveau code ce que j'ai testé:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
@RunWith(FrameworkRunner.class)
@CreateLdapServer(transports = { @CreateTransport(protocol = "LDAP", port = 10389) }, allowAnonymousAccess = true)
@ApplyLdifFiles({ "monldap.ldif" })
// @ApplyLdifFiles({ "ldapbeans.ldif" })
public class MonLDAPTest {
    /*
     * ces 3 champs sont utilisés par
     * org.apache.directory.server.core.integ.FrameworkRunner.runChild
     */
    public static DirectoryService service;
    public static boolean isRunInSuite;
    public static LdapServer ldapServer;
 
 
    @Test
    public void testSimple() {
	LdapBeanManager s_Manager = LdapBeanManager.getInstance(
		"ldap://localhost:10389", "ou=system", null, null);
	LdapBeanHelper.getInstance().scanPackage("ldapbeans.bean");
 
	Person person = null;
 
	person = s_Manager.findByDn(Person.class, "cn=John Doe,ou=system");
	// person = s_Manager.findByDn(Person.class, "cn=Kim Wilde,ou=system");
	Assert.assertNotNull(person);
	System.out.println("Person : " + person.getEmployeeNumber());
    }
}
///et dans person.java
[...]
    @LdapAttribute("employeeNumber")
    String getEmployeeNumber();
ça fait du code simple et propre.

( par contre l'employeeNumber que j'ai ajouté fait planter la recherche,il renvoie null. est-ce que j'ai foiré mon ldif? )

Enfin j'encourage une suite à cet outil.
deltree est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2010, 22h37   #3
Mobius
Membre éprouvé
 
Avatar de Mobius
 
Inscription : avril 2005
Messages : 461
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 461
Points : 419
Points : 419
Citation:
Envoyé par deltree Voir le message
Je l'ai un peu testé, je trouve ça bien.
Je ne connaissait pas Apache DS, il n'y a pas moyen de l'initializer en dehors des test?
on peut faire pas mal de chose avec Apache DS, entre autre s'en servire pour avoir un annuaire LDAP embarqué dans une application. C'est expliqué comment faire sur le site d'Apache DS

Citation:
Envoyé par deltree Voir le message
Sinon question détail, il y a un test qui ne passe pas :ZipFileTest.testZipFile
Etonnant, ca passe chez moi. Il faudrait plus de détail (du genre la stack de l'erreur) pour avancer sur le pb. Le mieux est d'ouvrir une anomalie sur le site de ldapbeans.

Citation:
Envoyé par deltree Voir le message
Suggestion sur le Mécanisme interface/Manager:
tu définis la persistence au niveau du bean interface, ce qui oblige à avoir un interface plutôt qu'un bean et donc à annoter getter et setter,
Est-ce que tu n'aurais pas pu faire comme en JPA/EntityManager: définir persistence au niveau du manager puis l'annotation au niveau de l'attribut privé du bean, quitte à calculer les noms de getter/setter?
J'y ai pensé mais je n'aime pas du tout l'idée de devoir écrire une pseudo-implémentation bidon. De plus, je ne vois pas beaucoup d'avantage a cet solution si ce n'est que de ne pas avoir a écrire deux fois l'annotation (une fois pour le getter et une fois pour le setter). Ca ne raccourcis pas le code puisqu'il faut ajouter l'attribut en plus de déclarer le getter et le setter.
Ce n'ai pas que je suis opposé a cette solution mais j'aimerai être un peu plus convaincu.

Citation:
Envoyé par deltree Voir le message
Niveau code ce que j'ai testé:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
@RunWith(FrameworkRunner.class)
@CreateLdapServer(transports = { @CreateTransport(protocol = "LDAP", port = 10389) }, allowAnonymousAccess = true)
@ApplyLdifFiles({ "monldap.ldif" })
// @ApplyLdifFiles({ "ldapbeans.ldif" })
public class MonLDAPTest {
    /*
     * ces 3 champs sont utilisés par
     * org.apache.directory.server.core.integ.FrameworkRunner.runChild
     */
    public static DirectoryService service;
    public static boolean isRunInSuite;
    public static LdapServer ldapServer;
 
 
    @Test
    public void testSimple() {
	LdapBeanManager s_Manager = LdapBeanManager.getInstance(
		"ldap://localhost:10389", "ou=system", null, null);
	LdapBeanHelper.getInstance().scanPackage("ldapbeans.bean");
 
	Person person = null;
 
	person = s_Manager.findByDn(Person.class, "cn=John Doe,ou=system");
	// person = s_Manager.findByDn(Person.class, "cn=Kim Wilde,ou=system");
	Assert.assertNotNull(person);
	System.out.println("Person : " + person.getEmployeeNumber());
    }
}
///et dans person.java
[...]
    @LdapAttribute("employeeNumber")
    String getEmployeeNumber();
ça fait du code simple et propre.

( par contre l'employeeNumber que j'ai ajouté fait planter la recherche,il renvoie null. est-ce que j'ai foiré mon ldif? )
Encore une fois, c'est difficile de t'aider sans la stack de l'erreur ni le fichier LDIF. Tu peux ouvrir une annomalie sur le site de ldapbeans

Citation:
Envoyé par deltree Voir le message
Enfin j'encourage une suite à cet outil.
Merci pour tes encouragements,
Merci beaucoup pour le temps passé a tester l'outil.
Merci également pour les propositions. Si tu en as d'autres n'hésite pas a les marquer sur le site de ldapbeans (encore et toujours).
__________________
Librairie d'accès LDAP en Java : LdapBeans
et pensez au tag
Mobius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 23h37   #4
Mobius
Membre éprouvé
 
Avatar de Mobius
 
Inscription : avril 2005
Messages : 461
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 461
Points : 419
Points : 419
Je viens d'avancer dans le développement de ma librairie.
Deux changements majeurs :
- elle ne fonctionne plus par réflexion mais génère des classes dynamiquement (génération de bytecode grace à ASM)
- possibilité de récupérer d'autre bean (et plus seulement de simple valeur comme des String ou des int)

D'un autre coté, je viens de faire des recherches qui m'ont mis un sacré coup au moral :
Je viens de trouver un projet nommé "object-ldap-mapping" qui fait a peu près ce que je voulais faire. L'approche est un peu différente et la librairie se base sur spring-ldap

Si j'ai bien compris, ca marche comme ce que disait deltree, c'est a dire une approche comme celle de JPA. (Ceci dit, je persiste a dire que mon approche permet d'écrire moins de code et évite d'écrire une implémentation inutile)

Le point positif, c'est que ca fera au moins un heureux (deltree).
Le point négatif, c'est que je doute sur le bienfondé de continuer mes travaux.
__________________
Librairie d'accès LDAP en Java : LdapBeans
et pensez au tag
Mobius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h27.


 
 
 
 
Partenaires

Hébergement Web