Ceci est mon code:
public class TestConnection {
public static void main(String[] args) {
String password = "s3cret";
Map<String, String> env = new HashMap<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/dc=userdev,dc=local");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
//env.put(Context.SECURITY_PRINCIPAL, "uid="+ username +"cn=users"); // replace with user DN
env.put(Context.SECURITY_PRINCIPAL, "cn=dcmanager,cn=users,dc=userdev,dc=local"); // replace with user DN
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext ctx = null;
try {
ctx = new InitialDirContext();
} catch (NamingException e) {
// handle
}
try {
SearchControls controls = new SearchControls();
controls.setSearchScope( SearchControls.SUBTREE_SCOPE);
ctx.search( "", "(objectclass=person)", controls);
// no need to process the results
} catch (NameNotFoundException e) {
e.printStackTrace();
System.out.println("catch 1");
// The base context was not found.
// Just clean up and exit.
} catch (NamingException e) {
System.out.println("catch 2");
e.printStackTrace();
// exception handling
} finally {
// close ctx or do Java 7 try-with-resources http://docs.Oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
}
}
}
J'ai eu cette erreur (catch 2): javax.naming.NoInitialContextException: Besoin de spécifier le nom de la classe dans la propriété d'environnement ou du système, ou en tant que paramètre d'applet, ou dans un fichier de ressources d'application: Java.naming.factory.initial
J'ai cherché beaucoup de solutions, mais je n'ai pas l'erreur. Où est le problème? Peut-être le contexte, mais je pense que le code est parfaitement correct.
Vous devez construire l'objet InitialDirContext en utilisant le fichier env map que vous avez rempli. c'est-à-dire utiliser le code suivant pour le construire;
ctx = new InitialDirContext(env);
For JBOSS AS
créer initialContext
public static final String PKG_INTERFACE="org.jboss.ejb.client.naming";
public static Context initialContext;
public static Context getInitialContext() throws NamingException{
if(initialContext==null){
Properties properties=new Properties();
properties.put(Context.URL_PKG_PREFIXES, PKG_INTERFACE);
initialContext=new InitialContext(properties);
}
public static final String PKG_INTERFACE="org.jboss.ejb.client.naming";
check you are passing correct Sring i.e. "org.jboss.ejb.client.naming" in PKG_INTERFACE .
créer un fichier jboss-ejb-client.properties le placer à la racine de ejbModule et ajouter le dossier ejbModule à classpath contenu pour jboss-ejb-client.properties
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.Host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
Cela devrait être ctx = new InitialDirContext(env, null);
, avec env étant une table de hachage.