Существуют ли решения для пула, которые позволяют передавать ключ в метод получения / получения - PullRequest
1 голос
/ 14 января 2011

Мне нужно объединить подключения к какому-либо ресурсу.Фактический ресурс не важен для этого обсуждения.Однако следует отметить, что эти соединения не являются поточно-ориентированными, поэтому необходимость объединения в пул, как соединение и т. Д., Является дорогостоящей операцией.

Моя первоначальная идея была для одного большого пула, который управляет тайм-аутом соединений и убивает их и т. Д. Однако проблема в том, что каждое соединение может включать в себя разные параметры, поэтому при взятии соединения необходимо передать параметри позвольте пулеру использовать это, чтобы попытаться найти соединение с тем же значением.Если ему (пулу) не удалось найти объект, ему необходимо создать экземпляр, передающий параметр, конечно и т. Д.

Однако в Apache Commons Pools и других подобных библиотеках не предусмотрено никаких положений для такого рода концепции.Существуют ли какие-либо библиотеки, которые включают такого рода концепцию.Я полагаю, что под пулом содержится список экземпляров, и когда поступает запрос на получение, он использует некоторое средство сравнения для циклического перебора доступных объектов и возвращает первое совпадающее.

Обратите внимание, что невозможно изменить параметробъекта соединения, таким образом, проблема и причина задаваемого вопроса.

  • Есть ли лучший способ решить эту проблему?
  • Существует ли библиотека пула, которая выполняет вышеупомянутые?
  • Должен ли я написать свой собственный?

Ответы [ 4 ]

1 голос
/ 14 января 2011

Почему бы не использовать ключ, чтобы сначала найти пул?Тогда воспользуйтесь одним из доступных решений.Я не думаю, что вы могли бы что-то упростить, пытаясь объединить все вместе, поскольку элементы с разными ключами не являются кросс-совместимыми.

0 голосов
/ 13 февраля 2013

KeyedObjectPool является ответом, и если вы хотите увидеть пример, взгляните на this

0 голосов
/ 01 февраля 2011

Не могли бы вы проверить KeyedObjectPool в пуле apache?

0 голосов
/ 14 января 2011

Если объект не является потокобезопасным, зачем создавать пулы?Ваш менеджер пула все равно не сможет проверить статус / закрыть их из другого потока.

Просто сохраните одну копию в каждом потоке, используя ThreadLocal.

...