in test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapConnectionPoolExtension.java [152:254]
private LdapConnectionPool createLdapConnectionPool(
CreateLdapConnectionPool createLdapConnectionPool,
LdapServer ldapServer,
Class<? extends PooledObjectFactory<LdapConnection>> factoryClass,
Class<? extends LdapConnectionFactory> connectionFactoryClass,
Class<? extends LdapConnectionValidator> validatorClass )
{
LdapConnectionConfig config = new LdapConnectionConfig();
config.setLdapHost( Network.LOOPBACK_HOSTNAME );
config.setLdapPort( ldapServer.getPort() );
config.setName( "uid=admin,ou=system" );
config.setCredentials( "secret" );
if ( ( createLdapConnectionPool.additionalBinaryAttributes() != null )
&& ( createLdapConnectionPool.additionalBinaryAttributes().length > 0 ) )
{
DefaultConfigurableBinaryAttributeDetector binaryAttributeDetector =
new DefaultConfigurableBinaryAttributeDetector();
binaryAttributeDetector.addBinaryAttribute(
createLdapConnectionPool.additionalBinaryAttributes() );
config.setBinaryAttributeDetector( binaryAttributeDetector );
}
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setLifo( createLdapConnectionPool.lifo() );
poolConfig.setMaxTotal( createLdapConnectionPool.maxActive() );
poolConfig.setMaxIdle( createLdapConnectionPool.maxIdle() );
poolConfig.setMaxWaitMillis( createLdapConnectionPool.maxWait() );
poolConfig.setMinEvictableIdleTimeMillis( createLdapConnectionPool
.minEvictableIdleTimeMillis() );
poolConfig.setMinIdle( createLdapConnectionPool.minIdle() );
poolConfig.setNumTestsPerEvictionRun( createLdapConnectionPool
.numTestsPerEvictionRun() );
poolConfig.setSoftMinEvictableIdleTimeMillis( createLdapConnectionPool
.softMinEvictableIdleTimeMillis() );
poolConfig.setTestOnBorrow( createLdapConnectionPool.testOnBorrow() );
poolConfig.setTestOnReturn( createLdapConnectionPool.testOnReturn() );
poolConfig.setTestWhileIdle( createLdapConnectionPool.testWhileIdle() );
poolConfig.setTimeBetweenEvictionRunsMillis( createLdapConnectionPool
.timeBetweenEvictionRunsMillis() );
poolConfig.setBlockWhenExhausted( createLdapConnectionPool
.whenExhaustedAction() == 1 );
PooledObjectFactory<LdapConnection> poolableLdapConnectionFactory;
try
{
Constructor<? extends LdapConnectionFactory> constructor =
connectionFactoryClass.getConstructor( LdapConnectionConfig.class );
ldapConnectionFactory = constructor.newInstance( config );
}
catch ( Exception e )
{
throw new IllegalArgumentException( "invalid connectionFactoryClass "
+ connectionFactoryClass.getName() + ": " + e.getMessage(), e );
}
try
{
Method timeoutSetter = connectionFactoryClass.getMethod( "setTimeOut", Long.TYPE );
if ( timeoutSetter != null )
{
timeoutSetter.invoke( ldapConnectionFactory, createLdapConnectionPool.timeout() );
}
}
catch ( Exception e )
{
throw new IllegalArgumentException( "invalid connectionFactoryClass "
+ connectionFactoryClass.getName() + ", missing setTimeOut(long): "
+ e.getMessage(), e );
}
try
{
Constructor<? extends PooledObjectFactory<LdapConnection>> constructor =
factoryClass.getConstructor( LdapConnectionFactory.class );
poolableLdapConnectionFactory = constructor.newInstance( ldapConnectionFactory );
}
catch ( Exception e )
{
throw new IllegalArgumentException( "invalid factoryClass "
+ factoryClass.getName() + ": " + e.getMessage(), e );
}
try
{
Method setValidator = factoryClass.getMethod( "setValidator", LdapConnectionValidator.class );
if ( setValidator != null )
{
setValidator.invoke( poolableLdapConnectionFactory, validatorClass.newInstance() );
}
}
catch ( Exception e )
{
throw new IllegalArgumentException( "invalid connectionFactoryClass "
+ connectionFactoryClass.getName() + ", missing setTimeOut(long): "
+ e.getMessage(), e );
}
return new LdapConnectionPool( poolableLdapConnectionFactory, poolConfig );
}