Ручка голодания в 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