как и где ловить исключения в приложении j2ee - PullRequest
0 голосов
/ 06 июня 2009

хорошо, я работаю в проекте j2ee, у которого есть 2 ветки в репо, и мне приказано смешивать их.

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

Вот классы, с которыми я работаю:

База данных - DataObject - PersonDB (я здесь работаю)

База данных - абстракция СУБД (поддерживает пару из них)

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

PersonDB - это отображение полей в таблице с именем person на java-типы, этот класс расширяет 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 ]

2 голосов
/ 06 июня 2009

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

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

Если это настолько катастрофично, ваше приложение не может работать, сделайте следующее:

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

Нет смысла загрязнять ваши интерфейсы предложениями throws ...

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

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

1 голос
/ 06 июня 2009

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

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

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

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

...