Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сит.docx
Скачиваний:
10
Добавлен:
26.09.2019
Размер:
353.03 Кб
Скачать
  1. Архитектура совместного использования web и ejb компонентов, Ejb-транзакции.

Транзакция

Как уже говорилось, в EJB используется спецификация управления транзакциями CORBA, реализованная на языке Java (JTS). Обычно разработчик не обращается к методам интерфейсов JTS, поскольку компонентная модель обеспечивает вспомогательный программный слой - Java Transaction API (JTA). Это и есть рабочий инструмент программиста при управлении транзакциями.

Поскольку спецификация CORBA OTS четко определяет участников распределенной транзакции и их роли, JTA также поступает подобным образом. Участниками транзакции с точки зрения JTA являются:

ресурс, под которым понимается соединение с базой данных;

менеджер ресурсов – драйвер JDBC;

сервер приложений – Сервер EJB;

менеджер транзакций и

транзакционное приложение, т.е. компонент или клиент.

Для каждой из этих ролей в JTA определены соответствующие интерфейсы.

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

Транзакция, управляемая компонетом (Bean Managed Transaction, BMT)

Управление транзакцией берет на себя компонент. Только Session-компоненты могут использовать такой режим. Только в этом режиме вызов одного из удаленных методов может привести к началу транзакции, но не обязательно к ее завершению – несколько последующих вызовов могут происходить в контекст этой же транзакции.

Транзакция, управляемая Контейнером (Container Managed Transaction, CMT)

Режим разрешен как для Session-, так и для Entity-компонентов. Компонент не имеет возможности ни начать, ни завершить транзакцию (хотя любой из участников транзакции может потребовать ее отката (rollback) при завершении) – управление транзакцией полностью берет на себя Контейнер. Транзакция начинается при вызове каждого удаленного метода и завершается при возврате из него. Программист может установить один из нескольких разрешенных режимов, определяющих поведение транзакции.

  1. Доступ к компонентам ejb из различных приложений клиента (web, Console, gui).

Когда у клиента EJB возникает потребность воспользоваться услугами EJB, он с помощью home-интерфейса создаёт EJB. Клиент использует один из методов create(), которые определяет home-интерфейс. Реализация home-интерфейса осуществляется с помощью объекта, называющегося home-объектом. Экземпляр такого home-объекта создаётся на сервере и в качестве factory (построителя) предоставляется клиенту для создания бина.

Поиск Home-объекта

Клиент EJB определяет местонахождение home-объекта с помощью JNDI, так как ссылка на этот home-объект помещается в службе имён (naming service при развертывании соответствующих контейнеров с компонентами). Соответствующее местоположение и имя factory-класса для контекста JNDI предоставляется клиенту изначально. Кроме знания места и имени класса, клиент должен иметь представление о том, как найти этот home-объект в структуре дерева имён (naming tree).

Пример разработки клиентского приложения

Первое, что должно выполнить клиентское приложение - это получить доступ к home-интерфейсу для Компонента SortBean. Делается это с помощью вызова методов JNDI API. Как показано в Примере SortClient создает контекст имен JNDI, а затем использует его метод lookup для поиска home-интерфейса для "sort":

Пример: Фрагмент кода SortClient

// SortClient Java

public class SortClient {

public static void main(String[] args) throws Exception

// Получение контекста JNDI с помощью JNDI службы Указания Имен:

{ javax.naming.Context context; //переменная контекста

{ // get a JNDI context using the Naming service

context = new javax.naming.InitialContext(); } //получить контекст JNDI

// Поиск Домашнего интерфейса в службе JNDI Naming:

Object objref = (SortHome) context.lookup("sort");

// Приведение удаленного объекта к домашнему итерфейсу:

SortHome home = (SortHome) javax.rmi.PortableRemoteObject.narrow(objref, SortHome.class);

// Создание удаленного объекта из домашнего интерфейса:

Sort sort = home.create(); ... //do the sort and merge work sort.remove();

// Далее вызов методов sort () и/или merge ()

После получения ссылки на интерфейс SortHome, клиент может вызвать его метод create () для получения ссылки на remote-интерфейс Sort. Получив эту ссылку, клиент может вызывать его методы sort () и merge () так же, как он мог бы обращаться к любым другим методам. На самом деле remote-интерфейс перенаправляет вызовы клиента собственно Компоненту EJB.

Вызов из web принципиально ничем не отличается

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]