Читаем Изучаем Java EE 7 полностью

<p>Справочная реализация</p>

Hibernate Validator — это свободная справочная реализация валидации компонентов. Проект изначально был запущен в 2005 году компанией JBoss в рамках Hibernate Annotations, стал независимым в 2007 году, а статус справочной реализации приобрел в 2009 году (с выходом Hibernate Validator 4). В настоящее время Hibernate Validator 5 реализует валидацию компонентов (версия 1.1) и добавляет кое-какие собственные возможности, в числе которых политика быстрого отказа. В соответствии с этим принципом программа прерывает текущую валидацию и возвращается после первого же нарушения ограничивающих условий. К другим характерным особенностям этой реализации относится API для программного конфигурирования ограничений, а также дополнительные встроенные ограничения.

На момент написания этой книги Hibernate Validator 5 был единственной реализацией, совместимой с Bean Validation 1.1. В Apache BVal применялась спецификация Bean Validation 1.0, в настоящее время идет процесс сертификации на соответствие версии 1.1. Oval не реализует полную спецификацию Bean Validation, но умеет обрабатывать связанные с ней ограничения.

<p>Написание ограничений</p>

До сих пор мы говорили об ограничениях, применяемых к нескольким уровням вашего приложения. Такие ограничения могут быть написаны одновременно на нескольких языках, с применением разных технологий. Но я также упоминал и о дублировании валидационного кода. Итак, насколько сложно будет применить ограничение в ваших классах Java, использующих валидацию компонентов? В листинге 3.1 показано, насколько просто добавлять ограничения в бизнес-модель.

Листинг 3.1. Объект Book. Ограничения записаны в виде аннотаций

public class Book {

··@NotNull

··private String title;

··@NotNull @Min(2)

··private Float price;

··@Size(max = 2000)

··private String description;

··private String isbn;

··private Integer nbOfPage;

··// Конструкторы, геттеры, сеттеры

}

В листинге 3.1 показан класс Book с атрибутами, конструкторами, геттерами, сеттерами и аннотациями. Некоторые из этих атрибутов аннотированы с применением встроенных ограничений, таких как @NotNull, @Min и @Size. Так мы указываем валидационной среде исполнения, что заголовок title книги не может быть равен нулю и описание description не может превышать 2000 символов. Как видите, к атрибуту могут быть применены несколько ограничений (например, price не может быть равно нулю и его значение не может быть меньше 2).

<p>Внутренняя организация ограничения</p>

Ограничение определяется как комбинация ограничивающей аннотации и списка реализаций валидации ограничения. Ограничивающая аннотация применяется с типами, методами, полями или другими ограничивающими аннотациями (в случае с составными элементами). В большинстве спецификаций Java EE разработчики используют заранее определенные аннотации (например, @Entity, @Stateless и @Path). Но в случае с CDI (об этом шла речь в предыдущей главе) и при валидации компонентов программистам приходится писать собственные аннотации. Известно, что ограничение при валидации компонентов состоит из:

• аннотации, определяющей ограничение;

• списка классов, реализующих ограничивающий алгоритм с заданным типом.

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

Ограничивающая аннотация

Ограничение, применяемое с JavaBean, выражается с помощью одной или нескольких аннотаций. Аннотация считается ограничивающей, если применяемая в ней политика хранения содержит RUNTIME и если сама она аннотирована javax.validation.Constraint (эта аннотация ссылается на список реализаций валидации). В листинге 3.2 показана ограничивающая аннотация NotNull. Как видите, @Constraint(validatedBy = {}) указывает на класс реализации NotNullValidator.

Листинг 3.2. Ограничивающая аннотация NotNull

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})

@Retention(RUNTIME)

@Documented

@Constraint(validatedBy = NotNullValidator.class)

public @interface NotNull {

··String message() default "{javax.validation.constraints.NotNull.message}";

··Class[] groups() default {};

··Class[] payload() default {};

}

Ограничивающие аннотации — это самые обычные аннотации, поэтому с ними приходится определять своеобразные метааннотации:

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных