InitialDirContext Throwing ServiceUnavailableException socket closed

Any assistance is appreciated.

Problems occurring when multiple DirContext instances are created. Attempting to make a SSL connection to Active Directory on port 636. A single successful context can be established in the below code.However, a second instantiation of InitialDirContext(env) results in a javax.naming.ServiceUnavailableException: [domain]:636; socket closed error. Multiple contexts are desired to establish a connection pool.

A few items to note. Establishing four unsecure DirContext on port 389 works successfully. I can establish a DirContext on port 636, use the context, close the context then establish new contexts without a problem. A server certificate was imported to the C:\j2sdk1.4.2_11\jre\lib\security\cacerts file. Testing on a local computer. Below is sample code:

publicstaticvoid main(String[] args){

try{

System.setProperty("javax.net.debug","all");

// Set up the environment for creating the initial context

Hashtable env =new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

env.put(Context.SECURITY_PRINCIPAL,"[USER DN]");

env.put(Context.SECURITY_CREDENTIALS,"[PWD]");

//NON SSL

//env.put(Context.PROVIDER_URL, "ldap://[server]:389");

//SSL

env.put(Context.PROVIDER_URL,"ldap://[server]:636");

env.put(Context.SECURITY_PROTOCOL,"ssl");

env.put(Context.SECURITY_AUTHENTICATION,"simple");

// Create the initial context

DirContext ctx =null;

DirContext ctx2 =null;

DirContext ctx3 =null;

DirContext ctx4 =null;

try{

//Works every time...

ctx =new InitialDirContext(env);

}catch (NamingException e){

e.printStackTrace();

}

try{

//Fails on port 636, works on port 389

ctx2 =new InitialDirContext(env);

}catch (NamingException e){

e.printStackTrace();

}

try{

//Works on port 636 (after 2nd attempt fails) and port 389

ctx3 =new InitialDirContext(env);

}catch (NamingException e){

e.printStackTrace();

}

try{

//Fails on port 636, works on port 389

ctx4 =new InitialDirContext(env);

}catch (NamingException e){

e.printStackTrace();

}

Attributes attrs = ctx.getAttributes("[A USER DN]");

System.out.println("Total attributes returned: " + attrs.size());

try{

ctx.close();

ctx2.close();

ctx3.close();

ctx4.close();

}catch (NamingException e){

e.printStackTrace();

}

}catch (Exception ex){

ex.printStackTrace();

}

System.exit(0);

}

The java debug statements at the second exception:

Thread-1, WRITE: TLSv1 Handshake, length = 121

Thread-1, received EOFException: ignored

Thread-1, called closeInternal(false)

Thread-1, SEND TLSv1 ALERT: warning, description = close_notify

Plaintext before ENCRYPTION: len = 18

0000: 01 00 0F 78 84 EE 16 24F6 99 B0 83 52 14 FF 86 ...x...$....R...

0010: 29 3C )<

Thread-1, WRITE: TLSv1 Alert, length = 18

Thread-1, called close()

Thread-1, called closeInternal(true)

Again, any assistance is appreciated.

[5357 byte] By [IAMNEILa] at [2007-10-2 20:20:46]
# 1
> Multiple contexts are desired to establish a connection pool.The JNDI LDAP provider already does connection pooling so you don't need multiple initial contexts at all.
ejpa at 2007-7-13 23:03:10 > top of Java-index,Security,Java Secure Socket Extension (JSSE)...