JNDI / OpenLDAP [Résolu]

Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Dernière intervention
26 juillet 2013
- 12 mai 2008 à 16:34 - Dernière réponse : indiana_jules
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Dernière intervention
23 décembre 2008
- 13 mai 2008 à 09:00
Salut tous:


Je suis en train essayer de faire marcher un programme qui utilises l'API JNDI.

Malheureusement, rien ne marche.


Je travaille avec OpenLDAP, j'ai configuré le fichier slapd.conf:


1. J'ai ajouter le schéma de java
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->ucdata-path ./ucdata
include ./schema/core.schema
include ./schema/java.schema

<!-- END TEMPLATE: bbcode_code -->2. J'ai configurer les paramètres de sécurité
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->database bdb
suffix "o=jndi"
rootdn "cn=admin,o=jndi"
rootpw admin

<!-- END TEMPLATE: bbcode_code -->Voici mon code:
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
publicclass Ldap {
 
/**
* @param args
*/
publicstaticvoid main(String[] args){
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost/o=jndi");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,o=jndi");
env.put(Context.SECURITY_CREDENTIALS, "admin");

DirContext ctx = new InitialDirContext(env);

//ctx.bind("cn=number", new Integer(10));

//Object o = ctx.lookup("number");

ctx.close();
}catch(NamingException e){
e.printStackTrace();
}
}
 
}

<!-- END TEMPLATE: bbcode_code -->Lorsque je mets les appels aux
méthodes bind() et lookup() en commentaires le programme ne produit
aucune exception. (ceci dit que le Context est créé avec succès).


Mais lorsque j'essaye de faire un binding une exception est déclenchée:

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn=number'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentContext.p_bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.bind(Unknown Source)
at javax.naming.InitialContext.bind(Unknown Source)
at com.ttn.jndi.Ldap.main(Ldap.java:33)
 

<!-- END TEMPLATE: bbcode_code -->J'attends votre aide.


Cordialement.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
indiana_jules
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Dernière intervention
23 décembre 2008
- 12 mai 2008 à 20:46
3
Merci
Salut,
perso, j'avais fait de la manière suivante:

1) j'ai importé dans OpenLdap un fichier ldif contenant :
dn: dc=julien-ldap,dc=roche
objectclass: top
objectclass: dcObject
objectclass: organization
o: Julien-ldap
dc: julien-ldap

dn: cn=ldap-admin,dc=julien-ldap,dc=roche
objectclass: organizationalRole
cn: ldap-admin

2) Ensuite, dans mon code, j'accédais au LDAP de la manière suivante :
try {
            System.out.println("Connexion au serveur LDAP pour insertion de notre ConcatInt");
            Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://localhost:389/dc=julien-ldap,dc=roche");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, "cn=ldap-admin,dc=julien-ldap,dc=roche");
            env.put(Context.SECURITY_CREDENTIALS, "secret");

            DirContext dircontext = new InitialDirContext(env);
            System.out.println("Connexion au LDAP faite");

            System.out.println("Nous insérons nos éléments");
            dircontext.rebind("cn=concatintimpl", new ConcatIntImpl());

            Attributes attributes = new BasicAttributes(true);
            Attribute attribut = new BasicAttribute("testDeChamp");
            attribut.add("Je remplis mon champ");
            attributes.put(attribut);

            dircontext.rebind("cn=test,cn=concatintimpl", new String("Coucou"));
            System.out.println("Serveur démarré");

            Scanner scanner = new Scanner(System.in);
            System.out.println("Appuyez sur entrée pour quitter le programme");
            scanner.nextLine();

            dircontext.close();
            System.exit(0);

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }

En espèrant que cela puisse t'aider

Voili voilà

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte

Merci indiana_jules 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de indiana_jules
Meilleure réponse
indiana_jules
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Dernière intervention
23 décembre 2008
- 13 mai 2008 à 09:00
3
Merci

Merci indiana_jules 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de indiana_jules
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Dernière intervention
26 juillet 2013
- 12 mai 2008 à 22:01
0
Merci
Salut:

Merci, pour ta réponse. Tout marche bien, jusqu'à cette instruction:

dircontext.rebind("cn= concatintimpl", new ConcatIntImpl());

Est ce que ConcatIntImpl est une classe ordinaire qui implémente l'interface Serializable?

Comme je n'est pas la déclaration de la classe ConcatIntImpl, j'ai fait les changements suivants:

dircontext.rebind("cn=bean", new Bean());


Avec:

public class Bean implements Serializable {
}

J'ai obtenu cette exception:

javax.naming.directory.InvalidAttributeIdentifierException: [LDAP: error code 17 - javaSerializedData: attribute type undefined]; remaining name 'cn =bean'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_rebind(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_rebind(Unknown Source)
    at com.sun.jndi.toolkit.ctx.ComponentContext.p_rebind(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeContext.rebind(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeContext.rebind(Unknown Source)
    at javax.naming.InitialContext.rebind(Unknown Source)
    at jndi.JndiSample.main(JndiSample.java:42)

Normalement, l'attribut "concatintimpl" n'est pas encore définit.

Cordialement.
Commenter la réponse de Ombitious_Developper
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Dernière intervention
26 juillet 2013
- 12 mai 2008 à 22:37
0
Merci
Salut Julien:

Merci infiniment.

Tout marche bien, il ne reste qu'à commencer l'implémentation du pool de connexion pour mon application.
Commenter la réponse de Ombitious_Developper

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.