повторный запрос в спящем режиме - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть веб-приложение (в качестве ORM я использую Hibernate ), которое заполняет данные из базы данных Oracle 11 . В течение короткого периода времени некоторые пакеты Oracle становятся недействительными, а затем снова становятся действительными (это устаревшая загрузка данных, и в течение этого процесса пользователь может использовать другой пользовательский интерфейс).

Когда загрузка данных заканчивается, и пользователь выполняет любой запрос к этим пакетам, у меня появляется ошибка:

ORA-04068: существующее состояние пакетов было отклонено. ORA-04061: существующее состояние пакета "sche.pck" признано недействительным ORA-04065: не выполнен, изменен или удален пакет "sche.pck" ORA-06508: PL / SQL: не удалось найти вызываемый программный модуль: "sche.pck"

Если пользователь нажмет F5 (на экране сообщения об ошибке), запрос будет выполнен успешно. Есть ли способ повторить пользовательский запрос при возникновении таких ошибок?

1 Ответ

3 голосов
/ 09 ноября 2011

Да - попробуйте / поймайте исключение, просмотрите сообщение об исключении, ищите ORA-04068, и, если оно найдено, повторите запрос.

В идеале вам нужно сделать несколько повторных попыток.Что-то вроде:

for (int i = 0; i < 3; i++) {
    try {
          executeQuery();
          break; //if successful;
    } catch (..) {
        if (!ex.getMessage().contains("ORA-06508")){
             throw ex;
        }
    }
}

Выглядит немного странно, и я бы посоветовал вместо этого исправить исходную проблему.

Обновление:

Кажется, вам нужноделать это во многих местах, так что выше будет утомительно.Если вы действительно не можете исправить основную проблему оракула, вы можете попробовать обернуть объекты DataSource, Connection и Statement в свои собственные реализации, которые просто делегируют базовому объекту, но в случае executeQuery() выполняет повторную попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...