Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенные сервис-ориентированные системы..pdf
Скачиваний:
10
Добавлен:
05.02.2023
Размер:
9.2 Mб
Скачать

нимает значения:

1)SOURCE — сохраняются только в исходном файле и отбрасывается при компиляции;

2)CLASS — сохраняются в файле с расширением *.class, но недоступны для JVM;

3)RUNTIME — сохраняются и доступны для JVM.

Вкачестве примера определим собственную аннотацию используемую при выполнении, с имененм MyAnno и двумя параметрами:

а) name — типа String;

б) val — типа int.

@Retention(RetentionPolicy.RUNTIME) @interface MyAnno {

String str() default "Пример параметра"; int val() default 100;

}

В дальнейшем, эта аннотация может использоваться как с новыми значениями параметров, так и без них (по умолчанию), например:

@MyAnno(str = "Новое значение", val = 999)

1.4.5 Управляемые компоненты платформы Java EE

Классическая парадигма платформы Java EE — создание контейнеров с набором служебных (технических) сервисов и предоставление разработчикам бизнес-сервисов возможность создавать компоненты, реализующие прикладную бизнес-логику.

Идейная цель классической парадигмы платформы Java EE — стимулировать разработчиков на написание слабосвязанных и максимально переносимых компонент, управляемых контейнерами. Как это делается описано в предыдущих пунктах:

а) имеется четыре вида контейнеров, в которых могут размещаться компоненты определенных типов и которые поддерживают доступ к ним по соответствующим протоколам (см. пункт 1.4.1);

б) каждый вид контейнера поддерживает соответствующий набор служебных (технических) сервисов, которыми в разной степени могут пользоваться разработчики компонент; часть этих сервисов имеют прямое при-

41

кладное назначение (JSF, JPA, JAX-WS, JAX-RS и другие), которое разработчики могут использовать как основу для реализации бизнес-сервисов (см. пункт 1.4.2);

в) каждый вид контейнера имеет свои правила формирования артефактов и соответствующие дескрипторы развертывания, обеспечивающие переносимость результатов разработки бизнес-сервисов (см. пункт 1.4.3);

г) имеется организационная структура JCP документально, с помощью публикации JSR, управляющая развитием платформы Java EE.

С позиции классической парадигмы, все компоненты платформы Java EE являются управляемыми.

Современная парадигма платформы Java EE — создание CDI-контейнеров, предоставляющих разработчикам бизнес-сервисов возможность создавать аннотируемые CDI-компо- ненты, реализующие прикладную бизнес-логику.

Идейная цель современной платформы Java EE — создание служебного сервиса CDI, обечечивающего контейнеры и компоненты дополнительными функциями, максимально ориентированными на использование аннотаций.

CDI (Context and Dependency Injection) — это «Контекст и Внедрение Зависимостей», представляющая реализацию концепции инверсии управления, в рамках которой контейнер обеспечивает управление вашим бизнес-кодом и предоставляет технические сервисы, такие как управление транзакциями, безопасностью и другие. Для реализации сервиса CDI платформа Java EE предоставляет базовый набор JAVA-пакетов, перечисленных в таблице 1.3.

Таблица 1.3 — Базовый набор пакетов Java EE, реализующих сервис CDI [17]

Пакет

Описание пакета

 

 

 

javax.inject

Содержит базовую спецификацию по внедрению зависимостей

 

для Java API. Описывает аннотации: @Inject, @Named,

 

@Qualifier, @Scope, @Singleton.

 

 

javax.enterprise.inject

Основные API для внедрения зависимостей.

 

javax.enterprise.context

Области видимости CDI и контекстуальные API. Описывает

 

аннотации:

@ApplicationScoped,

@Con-versationScoped,

 

@Dependent, @NormalScope, @Req-uastScope, @SessionScope.

javax.enterprise.event

События CDI и API алгоритмов наблюдения. Содержит

 

аннотацию: @Observes.

 

 

javax.enterprise.util

Пакет утилит CDI. Содержит аннотацию: @Nonbin-ding.

javax.interceptor

Содержит

API

перехватчика.

Содержит

аннотации:

 

@AroundInvoke, @AroundTimeout, @Interceptor и другие.

javax.decorator

API декоратора CDI. Содержит аннотации: @Deco-rator и

 

@Delegate.

 

 

 

 

42