2009-06-06 3 views
0

ok, im работает в проекте j2ee, который имеет 2 ветки в репо, и мне приказано их смешивать.как и где уловить исключения в приложении j2ee

Я был кодированием, а затем netbeans спрашивал меня: «неподтвержденное исключение blah bla bla должно быть объявлено или объявлено брошенным», и дает мне выбор просто обрабатывать каждое исключение или просто бросать его в надежде, что кто-то поймает кого-то.

Классы я работаю, таковы:

DataBase - DataObject - PersonDB (я работаю здесь)

DataBase абстракцией СУБД (поддерживает несколько из них)

DataObject - это просто CRUD, преобразование типов между СУБД и Java, а также некоторые вещи отражения для общности, он использует базу данных как переменную-член

PersonDB - это карта полей в таблице, называемых персонами для java-типов, это CLA сс расширяет DataObject

Сейчас в версии 1 (только название на самом деле работали параллельно) перехватывать все исключения, где они производятся, например, в классе DataBase:

try { 
     Class.forName(this.driver); 
    } catch (ClassNotFoundException ex) { 
     Logger.getLogger(BD.class.getName()).log(Level.SEVERE, null, ex); 
    } 

или в классе DataObject ловли: SQLException, NoSuchFieldException, IllegalArgumentException

теперь версия 2 все, что осталось от до вызывающего абонента, как это:

public BD (String Adriver, String Ahost, String Abase, String Alogin, String Apassword) 
throws java.lang.ClassNotFoundException { ... } 

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

Прошу прощения за мой английский

ответ

2

Ну первый вопрос, который я должен спросить : если это приложение J2EE, что вы делаете вручную, загружаете JDBC-драйверы? Это то, для чего нужны data sources.

Во-вторых, если вам нужно рассказать о нем, спросите себя: что является результатом этого исключения? Это возмещаемый? Или это так катастрофично, что ваше приложение не может работать?

Если это так катастрофическое ваше приложение не может запустить это сделать:

try { 
    ... 
} catch (SomeCheckedException e) { 
    throw new RuntimeException(e); 
} 

Там нет смысла загрязнять свои интерфейсы с «подбрасывает ...» оговорок.

В качестве альтернативы, если он может быть восстановлен или потенциально может быть восстановлен, вам необходимо обработать его более красиво. Трудно дать ответ о том, как все же. На самом деле это зависит от обстоятельств.

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

1

Обработка исключений - это всегда вопрос «Могу ли я это обработать?» - где ручка означает больше, чем лог и ретрон.

Иногда стоит поймать только исключение другого уровня абстракции («Могу ли я произвести более ясную ошибку для вызывающего?»).

В обоих случаях вам необходимо подумать о передаче причины или нет («Имеет ли это полезную информацию для вызывающего абонента?») - не просто делать это в любое время, вы получите массу бесполезных файлов журналов. Если вы поймаете исключение, вы, как правило, регистрируете исключение, возможно, только с уровнем отладки, но в случае отладки системы клиентов хорошая информация журнала часто является единственным шансом «отладить» систему.

Обработка и регистрация исключений часто не очень хорошо. Но для продукта или долгосрочного проекта это было бы неплохой инвестицией.

Смежные вопросы