You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
This pattern is similar to the managed component pattern. But instead of creating and closing a resource it borrows from and returns to a pool. Pooling is provided by commons-pool.
@Name("saxParser")
@Scope(ScopeType.EVENT)
@AutoCreate
public class PooledSaxParser {
private SAXParser parser;
@In
private ObjectPool saxParserPool;
@Create
public void create() throws Exception {
parser = (SAXParser) saxParserPool.borrowObject();
}
@Destroy
public void destroy() throws Exception {
saxParserPool.returnObject(parser);
}
@Unwrap
public SAXParser getParser() {
return parser;
}
}
@Name("saxParserPool")
@Scope(ScopeType.APPLICATION)
@AutoCreate
public class SaxParserPool {
private GenericObjectPool pool;
@Create
public void create() {
pool = new GenericObjectPool(new SaxParserPoolFactory());
}
@Unwrap
public ObjectPool getPool() {
return pool;
}
public class SaxParserPoolFactory extends BasePoolableObjectFactory {
private SAXParserFactory saxParserFactory;
public SaxParserPoolFactory() {
saxParserFactory = SAXParserFactory.newInstance();
}
public Object makeObject() throws Exception {
return saxParserFactory.newSAXParser();
}
}
}