我们正在使用websphere应用服务器8.5.0.0。我们有一个要求,我们必须查询LDAP服务器以获取客户详细信息。我尝试按照here和here所述配置连接池。
我传递了以下JVM参数
-Dcom.sun.jndi.ldap.connect.pool.maxsize=5
-Dcom.sun.jndi.ldap.connect.pool.timeout=60000
-Dcom.sun.jndi.ldap.connect.pool.debug=all
以下是示例代码段
Hashtable<String,String> env = new Hashtable<String,String>();
...
...
env.put("com.sun.jndi.ldap.connect.pool", "true");
env.put("com.sun.jndi.ldap.connect.timeout", "5000");
InitialDirContext c = new InitialDirContext(env);
...
...
c.close();
我这里有两个问题
当我第6次调用该服务时,我收到javax.naming.ConnectionException:等待连接时超时超时:5000ms。我检查了连接池调试日志,我注意到尽管在finally块中安全地关闭了上下文,但连接并没有立即返回到池中。连接在一段时间后释放,并在发布后的某个时间后过期。如果我再次调用该服务,它将连接到LDAP服务器,但正在创建新连接。
我尝试执行代码,我能够看到连接池调试日志。但是日志记录在System.Err日志中。这是一个问题吗?我可以忽略它吗?
但是当我将代码作为独立应用程序运行(多线程循环50次)时,会立即返回/释放连接。
任何人都可以让我知道我做错了什么?