title: ERROR: Need to specify class name in environment or system property LDAP and JNDI
body: <p>This is my code:</p>
  
  <pre><code>     public class TestConnection {
  
  public static void main(String[] args) {
      String password = "s3cret";
      Map&lt;String, String&gt; env = new HashMap&lt;String, String&gt;();
      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
      }
  
  }
  
      }
  </code></pre>
  
  <p>I got this error (catch 2) : 
  <em>javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial</em></p>
  
  <p>I have looked for a lot of solutions, but I don't get the error.
  Where is the problem?
  Maybe the context, but I think that the code is perfectly correct.</p>