Является ли объект Джакарты Commons-Pool безопасным? - PullRequest
3 голосов
/ 25 мая 2011

Я использую Jakarta commons-pool-1.5.6.jar. У меня есть 2 разных пула одного и того же типа объекта (например, автомобиль). Есть ли способ предотвратить возвращение объекта в пул?

Вот пример:

//CarPool extends BaseObjectPool
CarPool carPoolA =  new CarPool(); 
CarPool carPoolB =  new CarPool();
carPoolB.returnObject(carPoolA.borrowObject());

Я бы подумал, что пул будет управлять своим содержимым и не будет возвращать ему внешний объект?

Есть мысли по этому поводу? Должен ли я сам управлять этим?

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Я не думаю, что в реализации по умолчанию есть что-то, что делает то, что вы описали (просматривая их API). Но вы можете либо настроить GenericObjectPool для достижения своей цели, либо записать логику в свой CarPool. Поэтому я думаю, что в конечном итоге мой ответ на ваш вопрос - да, вам придется справиться с этим самостоятельно.

0 голосов
/ 05 января 2015

Ответ выше верен для пулов 1.x. Эти пулы не поддерживают внутренние ссылки на извлеченные объекты, поэтому они не могут проверять членство по возвращении или защищать от множественных возвратов одного и того же объекта.

Проверка пулов версии 2.x, чтобы убедиться, что возвращаемый объект был заимствован из пула, в который он возвращается. Возврат объекта, который не был заимствован из пула, или возврат объекта, который уже был возвращен, приведет к исключению IllegalStateException в пулах 2.x.

...