Ручка голодания в Apache Commons-Pool

Я использую 1.6 версию библиотеки Apache Commons-Pool. В соответствии с Javadoc,

whenExhaustedAction указывает поведение метода loanObject() при исчерпании пула: это может быть WHEN_EXHAUSTED_FAIL, WHEN_EXHAUSTED_GROW или WHEN_EXHAUSTED_BLOCK.

Я хочу использовать loanObject и, если не получу объект в течение определенного периода времени, мне понадобится какой-то дескриптор для обработки сценария (как я буду переназначать задачи, если я не получу целевой объект)

Но единственная опция, которую я здесь получаю, - это NoSuchElementException, которое является RuntimeException, которое мне нужно перехватить и обработать сценарий ошибки. Я довольно скептически отношусь к ловле RuntimeException

Это предполагаемый способ обработки голодания объекта с помощью GenericObjectPool или у меня есть другие варианты?

1 ответ

Я посмотрел на borrowObject документация, и он заявляет, что он бросает эти исключения

IllegalStateException - after close has been called on this pool.
Exception - when makeObject throws an exception.
NoSuchElementException - when the pool is exhausted and cannot or will not return another instance.

Так как NoSuchElementException это документированное поведение этого метода, нет ничего плохого в том, чтобы поймать его borrowObject и обработка по своему вкусу.

Я предлагаю вам поймать его прямо вокруг вызова и обернуть одним из ваших собственных, так что если другой метод в вашей функции выбрасывает NoSuchElementException обработчик высокого уровня не следует путать с исчерпанием пула. Исключение оболочки может быть проверено или выполнено, в зависимости от ваших предпочтений и требований проекта.

например

final T obj;

try
{
  obj = pool.borrowObject( );
}
catch ( NoSuchElementException ex )
{
  throw new MyPoolExhausetdException( ex );
}

// Do something with obj
Другие вопросы по тегам