Изучаем Java EE 7 - [170]
Вам следует быть осторожными при выборе области действия для ваших компонентов-подложек. Указывайте ровно такую область, которая им необходима. Компоненты-подложки с большой областью действия (например, @ApplicationScoped) увеличивают потребление памяти, и потенциальная необходимость сохранять их может привести к увеличению частоты использования диска и сети. Не имеет смысла задавать большую область действия для объекта, который используется только в одном компоненте. И наоборот, объект со слишком большим ограничением будет недоступен различным частям вашего приложения. Вы также должны иметь в виду одновременный доступ. Несколько сеансов, получающих доступ к одному и тому же компоненту с областью действия на уровне приложения, могут создать проблемы, связанные с потокобезопасностью.
Код в листинге 11.7 определяет компонент-подложку с областью действия на уровне приложения. Кроме того, здесь по созданию объекта (@PostConstruct) инициализируется атрибут defaultBook.
>@Named
>@ApplicationScoped
>public class InitController {
>··private Book defaultBook;
>··@PostConstruct
>··private void init() {
>····defaultBook = new Book("default title", 0F, "default description");
>··}
>··// Конструкторы, методы работы со свойствами
>}
Жизненный цикл и аннотации функций обратного вызова
В главе 10 объяснялся жизненный цикл страницы (он имеет шесть фаз, от момента получения запроса до отрисовки ответа). Компоненты-подложки также имеют жизненный цикл (рис. 11.3), который полностью отличается от жизненного цикла страницы. На самом деле жизненный цикл компонентов-подложек сходен с жизненным циклом управляемых компонентов, за исключением того, что если они и существуют, то только на протяжении срока, определенного областью действия.
Рис. 11.3. Жизненный цикл компонента-подложки
Компоненты-подложки, работающие в контейнере-сервлете, могут использовать аннотации @PostConstruct и @PreDestroy. Когда контейнер создаст экземпляр компонента-подложки, он вызовет метод обратного вызова @PostConstruct, если таковой имеется. После этого этапа компонент-подложка будет привязан к области действия и станет отвечать на запрос любого пользователя. Перед удалением компонента-подложки контейнер вызывает метод @PreDestroy. Эти методы могут быть использованы для инициализации атрибутов или для создания и высвобождения любого внешнего ресурса (см. листинг 11.7).
Обработка исключений и сообщений
Компоненты-подложки обрабатывают бизнес-логику, вызывают EJB, сохраняют и извлекают данные из баз данных и т. д., и иногда все может пойти не так, как планировалось. В этом случае пользователь должен быть проинформирован, чтобы он мог принять меры. Сообщения, предназначенные для этого, могут быть разделены на две категории: ошибки приложений (с участием бизнес-логики, базы данных или подключения к сети) и ошибки ввода данных пользователем (неправильный ISBN или пустые поля). Ошибки приложения могут создать совершенно другую страницу, попросив пользователя повторить попытку через несколько секунд или, например, позвонить по телефону горячей линии. Ошибки ввода данных могут отображаться на той же странице, при этом появится текст с описанием ошибки. Сообщения могут быть информационными, допустим указывать, что книга была успешно добавлена в базу данных.
В главе 10 вы видели теги, которые применяются для отображения сообщений на страницах (
>void addMessage(String clientId, FacesMessage message)
Этот метод добавляет объект типа FacesMessage в набор сообщений, которые будут отображаться. Первый параметр метода указывает идентификатор клиента. Он относится к расположению компонента пользовательского интерфейса, зарегистрировавшего сообщение, в объектной модели документа (DOM) (например, bookForm: isbn относится к компоненту пользовательского интерфейса, который имеет идентификатор isbn внутри формы bookForm). Если ClientId содержит значение null, то сообщение не относится ни к одному компоненту и считается глобальным на всей странице. Сообщение состоит из обобщенного текста, подробного текста и степени тяжести (фатальная ошибка, ошибка, предупреждение и информация). Сообщения могут быть интернационализированы с использованием наборов сообщений.
>FacesMessage(Severity severity, String summary, String detail)
Код в листинге 11.8 — это фрагмент компонента-подложки, создающего книгу. Если создание книги проходит успешно, в очередь помещается глобальное информационное сообщение (FacesMessage со степенью тяжести SEVERITY_INFO). Если перехватывается исключение, то в очередь сообщений на отображение добавляется сообщение об ошибке. Обратите внимание, что оба сообщения являются глобальными, потому что ClientId имеет значение null. С другой стороны, когда мы будем проверять значение isbn и название книги, введенные пользователем, мы захотим отобразить предупреждающее сообщение (SEVERITY_WARN), связанное с компонентом пользовательского интерфейса (например, bookForm: title является идентификатором DOM текстового поля title, расположенного в форме bookForm).
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.