New to Guice.
I'm trying to inject the apache commons pool using Guice as a singleton for
use in other parts of the application/modules. When i use a simple Foo
pool Object, it works fine. But using the actual KeyObjectPool causes:
1) No implementation for org.apache.commons.pool.KeyedObjectPool was bound.
while locating org.apache.commons.pool.KeyedObjectPool
Below is the code, so it can be run. Obviously I'm missing something
fundamental/obvious here. Any help would be appreciated. Thanks - Sonny
class Foo {
public Foo() {
}
}
===================================================
import java.io.Serializable;
import org.apache.commons.pool.KeyedObjectPool;
import org.apache.commons.pool.impl.GenericKeyedObjectPool;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.name.Named;
import com.google.inject.name.Names;
public class PoolInjectMain {
public static void main(String[] args) {
Config config = new Config();
config.setInstanceName("inst");
config.setZookeepers("192.168.1.1:2181");
config.setUsername("user");
config.setPassword("pass");
config.setPoolBatchThreadCount(1);
Guice.createInjector(new Mod(config))
.getInstance(KeyedObjectPool.class);
}
}
class KeyedObjectPoolProvider implements Provider<KeyedObjectPool> {
private Config config;
public KeyedObjectPoolProvider(Config config) {
System.out.println("KeyedObjectPoolProvider created with: " +
config);
this.config = config;
}
@Override
public KeyedObjectPool get() {
// USE config here, create pool.
GenericKeyedObjectPool pool = new GenericKeyedObjectPool(null);
// LOG.info("GenericKeyedObjectPool created in factory");
return pool;
}
}
class Mod extends AbstractModule {
private Config config;
public Mod(Config config) {
System.out.println("Mod created with: " + config);
this.config = config;
}
@Override
protected void configure() {
bind(KeyedObjectPool.class).annotatedWith(Names.named("pool"))
.toProvider(new KeyedObjectPoolProvider(config));
}
}
class InjectPool {
@Inject
public void setPool(@Named("pool") KeyedObjectPool pool) {
System.out.println("injected pool: " + pool);
}
}
class Config implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private String instanceName;
private String zookeepers;
private int poolBatchThreadCount;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getInstanceName() {
return instanceName;
}
public void setInstanceName(String instanceName) {
this.instanceName = instanceName;
}
public String getZookeepers() {
return zookeepers;
}
public void setZookeepers(String zookeepers) {
this.zookeepers = zookeepers;
}
public int getPoolBatchThreadCount() {
return poolBatchThreadCount;
}
public void setPoolBatchThreadCount(int poolBatchThreadCount) {
this.poolBatchThreadCount = poolBatchThreadCount;
}
}
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/google-guice/-/gVu_ZLTlb0UJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en.