Предисловие
Благодарности
Часть I. Исключения и принципы их обработки
Глава 1. Введение в обработку исключений
Введение
Концепция исключений
Иерархия классов исключений
Обработка или объявление исключений
Обработка исключений: try, catch и finally
Правила применения конструкции try-catch-finally
Объявление исключений
Правила применения объявленных исключений
Контролируемые и неконтролируемые исключения
Программный интерфейс исключений
Заключение
Глава 2. Методы и практика обработки исключений
Введение
Когда обрабатывать, а когда объявлять
Варианты стандартной обработки исключений
1. Зарегистрировать исключение и сохранить всю необходимую информацию
2. Попросить пользователя или приложение ввести дополнительные данные
3. Использовать значения по умолчанию или альтернативные значения
4. Передать управление другой части приложения
5. Преобразовать исключение в другую форму
6. Проигнорировать проблему
7. Повторить действие
8. Предпринять альтернативное или восстанавливающее действие
9. Подготовить систему к останову
Что можно и чего нельзя делать при обработке исключений
Что можно делать при обработке исключений
1. Обрабатывайте исключения, если вы можете это делать
2. Специфические исключения обрабатывайте особым образом
3. Регистрируйте исключения, которые могут влиять на работу приложения
4. Придайте исключениям смысл конкретной прикладной области, если такое их представление возможно
Чего нельзя делать при обработке исключений
1. Нельзя игнорировать исключение, если вы не убеждены, что оно безвредно для системы
2. Не следует пользоваться универсальным блоком обработки исключений
3. Преобразовывайте исключение в обобщенный вид только в том случае, если сохраняется первоначальный контекст ис­ключения
4. Не следует обрабатывать исключение, которое можно не допустить изначально
Глава 3. Дополнительные методы обработки исключений
Введение
Пользовательские исключения
1. Определение класса исключения
2. Объявление возможности генерации вашим методом данного пользовательского исключения
3. Поиск одной или нескольких точек отказа в вашем допускающем ошибку методе, создание
объекта исключения и выбрасывание его с помощью ключевого слова "throw"
Построение цепочек исключений
Локализация и интернационализация исключений
1. Создайте подкласс ResourceBundle для хранения вашего сообщения
2. Создайте подкласс ResourceBundle для ваших различных регионов
3. Создайте класс пользовательского исключения, который переопределяет метод getLocalizedMessage и использует ResourceBundle для поиска своих сообщений
Создание подкласса
Объявление исключений для интерфейсов и абстрактных классов
Трассы стека исключений
Обработка исключений на низком уровне
Глава 4. Исключения и поточная организация вычислений
Введение
Когда при написании программы вы действительно используете поточную организацию вычислений?
Исключения в многопоточных системах
Исключения в синхронизированных блоках программного кода
Риск применения исключений в потоках
Связь между потоками с помощью исключений
Взаимная блокировка потоков
"Смерть потока"
Глава 5. Регистрация исключений и утверждения по контролю кода
Введение в программный интерфейс регистрации
Когда вам следует использовать программный интерфейс регистрации?
Обзор программного интерфейса регистрации
Подробное описание применения программного интерфейса регистрации
Стандартные конфигурации регистрации
Пример 1: применение простого, используемого по умолчанию регистратора
Пример 2: конфигурирование и применение нескольких регистраторов
Пример 3: простая распределенная регистрация
Утверждения
Что необходимо для применения утверждений
Применение утверждений в приложении
Часть II. Обработка исключений и проектирование программ
Глава 6. Концепция учета исключений на этапе проектирования
Введение
Принципы эффективного объектно-ориентированного проектирования
Интеграция исключений в ООП - проектирование надежных в эксплуатации систем
1. Идентификация бизнес-операции или прецедента применения
2. Уточнение бизнес-операции, более детальное определение режимов работы
3. Идентификация сценариев отказов и операционные риски
4. Выявление точек отказа в действиях и методах
5. Выбор стратегии обработки отказов
Проектирование надежных в эксплуатации систем - достоинства и недостатки
Анализ характера отказов
Заключение
Глава 7. Исключения в ядре языка Java
Введение
Базовые типы данных
Обзор
Замечания об использовании
Потенциальные проблемы - общий обзор
Общие рекомендации
Класс Object и его объекты в языке Java
Обзор
Потенциальные проблемы - общий обзор
Массивы
1. Индексация
2. Управление памятью массива
3. Определение типа объекта
String и StringBuffer
Класс String
Класс StringBuffer
BigDecimal и BigInteger
Классы-оболочки
Глава 8. Коллекции и ввод-вывод
Введение
Фреймворк коллекций
Обзор
Общие вопросы организации фреймворка коллекций
Исключения и ошибки в фреймворке коллекций
Программный интерфейс ввода-вывода
Исключения и ошибки в программном интерфейсе
ввода-вывода
Исключения и ошибки подклассов ввода-вывода
Общие проблемы
Проблемы потоков конкретных типов
Программный интерфейс нового ввода-вывода - NIO
Исключения в программном интерфейсе нового ввода-вывода
Буферы
Селекторы
Глава 9. Программный интерфейс языка Java для распределенных приложений
Введение
Принципы передачи информации в распределенных системах
Java-модели передачи информации в распределенных системах
Проблемы применения программных интерфейсов распределенных систем в языке Java
Модель исключений языка Java
Модель передачи информации в распределенных системах и стандартные проблемы
Вызов удаленных методов - RMI
Базовая модель передачи информации на основе применения RMI
Общие проблемы, характерные для RMI
Модель исключений для RMI
Интерфейс служб именования и каталогов Java-системы, JNDI
Общие вопросы применения JNDI
Модель исключений для обычных операций JNDI
Программный интерфейс JDBC
Исключения интерфейса JDBC
Общие проблемы технологий связи с базами данных
Стандартные этапы применения JDBC
Заключение
Глава 10. J2EE
Введение
Базовая модель приложений J2EE
Модель приложений J2EE
Исключения в J2EE
Уровень клиента
Веб-уровень
Декларативная обработка ошибок
Компоненты веб-уровня
Модель исключений для сервлетов и фильтров: программная обработка ошибок
Модель исключений сервлетов и фильтров
Общие проблемы и ошибки компонентов сервлета
Модель исключений для страниц JSP
Прямая ретрансляция ошибок JSP
Модель исключений страниц JSP
Ошибки преобразования и времени выполнения страниц JSP
Библиотеки пользовательских тегов
Уровень EJB
Стандартные методы EJB
Общие вопросы применения EJB
Проблемы, характерные для компонентов
Модель исключений EJB
Методы управления жизненным циклом, вызываемые клиентом
Методы контейнера обратного вызова
Обработка исключений контейнером
Транзакции в J2EE и компоненты EJB
J2EE и обработка исключений - общие вопросы
Факторы, влияющие на обработку исключений J2EE
Регистрация исключений
Дополнительные затраты, связанные с обработкой исключений
Задержки сетевых уровней
Дополнительные практические вопросы построения
систем J2EE
Часть III. Эффективная обработка исключений и ошибок
Глава 11. Архитектурно-проектные решения и модель исключений
Введение
Почему архитекторов должны интересовать исключения и ошибки?
Стоимость отказа
Цена успеха
Архитектура, проектирование и разработка
Архитектор и проектировщик: тонкая линия на песке
Разработчики: передняя линия
Архитектурные решения, имеющие решающее значение для модели исключений
Главные приоритеты и архитектурные свойства
Архитектурные решения для модели исключений
Стратегии обработки и передачи исключений
Модель классов исключений и ошибок
Широко распространенные службы
Заключение - устойчивая Java
Что дальше
Глава 12. Шаблоны
Введение
Архитектурные шаблоны
(объектно-ориентированная архитектура программного обеспечения, POSA-ASOP)
1. Уровни
2. Модель-представление-контроллер (MVC)
Шаблоны проектирования (книга "Design Patterns", GoF)
Креативные шаблоны
1. Построитель
2. Singleton
Структурные шаблоны
1. Адаптер
2. Композиция
3. Фасад
4. Прокси
Шаблоны поведения
1. Цепочка ответственности
2. Команда
3. Наблюдатель
4. Состояние
5. Стратегия
Шаблоны J2EE (книга "Core J2EE Patterns", ACM)
Интеграционный уровень
1. Объект доступа к данным (DAO)
Уровень представления
1. Фронтальный контроллер
2. Перехватывающий фильтр
Бизнес-уровень
1. Локатор служб
2. Фасад сеанса
Заключение
Глава 13. Тестирование
Какова цель тестирования? Почему оно так важно?
Распространенные заблуждения относительно тестирования
Заблуждение #1: разработчики вообще не должны тестировать свой программный код
Заблуждение #2: разработчики должны тестировать "весь" свой программный код
Заблуждение #3: для тестирования приложения вам достаточно сделать "нечто такое" один раз
Заблуждение #4: вы можете полностью протестировать приложение
Виды тестирования: размышление о том, что находится за пределами (и внутри) ящика
Что в ящике? Виды тестирования
Распределение ролей среди участников тестирования
Если бы это было просто, мы все сделали бы сами. Почему трудно выполнять тестирование приложений, напи­санных на языке Java?
Практика тестирования
Как "узаконить" тестирование
Как организовать и структурировать тестирование
Тактика и технологии: как вам следует управлять и выполнять тесты
Когда тестирование "завершено"?
Общие показатели тестирования
Показатели тестирования, используемые разработчиками
Глава 14. Отладка
Введение
Демистификация термина debugging: "нет, bug - не насекомое, это..."
Принципы и практика отладки
Стратегии отладки
Методы отладки и наблюдаемые данные
Методы тестирования низкого уровня
Методы тестирования среднего уровня
Методы тестирования высокого уровня
Специальные вопросы отладки
Отладка не Java-технологий в Java-приложениях
Исключения, выбрасываемые фреймворком
Приложение А. Результаты теста сравнения режимов обработки и объявления исключений
Приложение Б. Краткое доброжелательное учебное пособие по JUnit
Основная информация
Установка JUnit
Выполнение JUnit
1. Командная строка
2. IDE
3. Выполнение в виде задачи утилиты Ant
Архитектура тестового фреймворка JUnit
Создание тестов JUnit
1. Простые тесты
2. Множественные тесты в классе TestCase
3. Инициализация и завершающие действия в классе TestCases
4. Тестовые структуры: выполнение тестов многих объектов
5. Тестирование поведения исключений
6. Класс TestSuite: выполнение множественных тестов
Рекомендации по проектированию тестов
Приложение В. MyBuggyServlet - проблемы подтверждения правильности программного кода компонента
Библиография
Книги
Отладка
Технологии, программные интерфейсы и фреймворки платформы Java
Шаблоны проектирования
Тестирование программного обеспечения
Спецификации Java-технологий