Добавил:
rushevamar@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РИС шпоры для печати.docx
Скачиваний:
29
Добавлен:
31.05.2022
Размер:
1.01 Mб
Скачать

27. Метаданные их роль и использование в jee. Применение аннотаций в jee и ejb в 3.0 и последующих версиях. Лиза

Спецификация EJB была рассчитана на решение таких сложных проблем как распределенные вычисления, управление транзакциями и персистентность данных. Цель EJB 3.0 - сделать начальную стадию разработки легче, а приложения - более удобными в сопровождении.

Особенности ejb 3.0

1. EJB 2.0 требует написания дескрипторов развертывания (XML) (deployment descriptors), в то время как в EJB 3.0 их попросту нет.

2. В EJB 2.0 необходимо создавать Home и Remote интерфейсы, в то время как в EJB 3.0 нет необходимости этого делать.

3. В EJB 3.0 мы идентифицируем все сущности с помощью символа "@" (Использование аннотаций).

4. В EJB 2.1 приходилось использовать поиск JNDI для доступа к другому EJB. С EJB 3.0 можно использовать аннотацию (@EJB) для доступа к EJB, что упрощает конфигурацию.

Класс компонента Stateless Session Bean в технологии ejb 3.0 должен удовлетворять следующим требованиям:

*Должен быть объявлен с аннотацией @Stateless (либо должен обозначаться в дескрипторе развертывания как stateless session bean)

*Класс компонента либо должен реализовать свой бизнес-интерфейс, либо использовать аннотацию для указания его бизнес-интерфейсов. Интерфейс может быть либо локальным, либо удаленным (при этом он объявляется с аннотацией @Remote). В бизнес-интерфейсе объявляются бизнес-методы, доступные для клиента.

Основные аннотации EJB 3.0:

  • @EJB — помечается используемый в классе компонент EJB;

  • @Stateless — определяется stateless session bean;

  • @Stateful — определяется stateful session bean;

  • @Singleton — определяется singleton session bean;

  • @Local — определяется local session bean;

  • @LocalBean — определяется bean, который будет использован локально, следовательно его не нужно сериализовать;

  • @Remote — компонент доступен через RMI (Remote Method Invocation);

  • @Remove — помеченный данной аннотацией метод говорит контейнеру, что после его исполнения нет больше смысла хранить компонент EJB, т.е. его состояние сбрасывается;

  • @Entity — аннотация говорит контейнеру, что класс будет сущностью БД.

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

Структурированные данные, представляющие собой характеристики описываемых сущностей для целей их идентификации, поиска, оценки, управления ими.

набор допустимых структурированных описаний, которые доступны в явном виде и предназначение которых может помочь найти объект. Термин используется в контексте поиска объектов, сущностей, ресурсов.

28. Перехватчики Java Interceptors в Java ee. Java Interceptors в ejb 3.Х. Ксюша

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

public class SimpleLogger{

@AroundInvoke

public Object addLog(InvocationContext context){

//какая-то логика логирования

return context.proceed();}

public class Summ {

@Interceptors (SimpleLogger.class)

public double getResult(){

//логика }}

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

public class SimpleLogger{

@PostConstruct

public void init(InvocationContext context){

//логирование создания объекта, например через context.getTarget()

context.proceed():

}

@PreDestroy

public void remove(InvocationContext context){

//какая-то логика

context.proceed():

}

}

Еще одним особенным применением интерсепторов является то, что вы можете объявить так называемый “default interceptor” действие которого будет расспространятся на все классы внутри одного приложения. Такой перехватчик можно объявить только через дескриптор развертывания

<interceptor-binding>

<ejb-name>*<ejb-name>

<interceptor-class> ru.interceptortest.Validate</interceptor-class>

</interceptor-binding>

При этом, если необходимо, что бы действие этого интерсептора не расспростанялось на какой-либо класс, его необходимо пометить его аннотаций @ExcludeDefaultInterceptors.

29. Инверсия контроля и внедрение зависимостей в Java. Применение DI в EJB 3. Примеры реализации клиента и сервера для сессионных бинов. ЯНА

Inversion of Control (инверсия управления) — это некий абстрактный принцип, набор рекомендаций для написания слабо связанного кода. Суть которого в том, что каждый компонент системы должен быть как можно более изолированным от других, не полагаясь в своей работе на детали конкретной реализации других компонентов.

Dependency Injection (внедрение зависимостей) — процесс предоставления внешней зависимости программному компоненту.

IoC-контейнер — это какая-то библиотека, фреймворк, программа если хотите, которая позволит вам упростить и автоматизировать написание кода с использованием данного подхода на столько, на сколько это возможно.

Практика

@Stateful

public class AccountBean implements Account //реализует бизнес интерфейс

{

private int balance = 0;

@EJB(beanName="ServiceBean")//Пример применения DI для EJB бина

private Service service;

@inject//Пример применения DI для POJO

private PersonalData;

public void deposit(int amount) {

balance += amount;

System.out.println("deposited: "+amount+" balance: "+balance);

}

public void withdraw(int amount) {

balance -= amount;

System.out.println("withdrew: "+amount+" balance: "+balance);

}}