You should read up on the KeyedObjectPool<K,V>
interface which can also be found in commons-pool.
From its javadoc:
A keyed pool pools instances of multiple types. Each type may be accessed using an arbitrary key.
You could then implement a KeyedPoolableObjectFactory<K,V>
to make instances based on the key
parameter, it has the makeObject(K key)
function you are looking for.
PS: It appears you haven't marked any answers to your questions as "accepted", you might want to work on that.