Главная » Java, JavaBeans » Источники данных (DataSource) EJB

0

Если вы используете базы данных, вы должны задать некоторые элементы в секции DataSource. Секция DataSource представляет собой набор элементов, которые позволяют вам обратиться к базам данных.

Эта секция предоставляет Контейнеру информацию, как создать экземпляр источника данных.

Она задает соответствие между источником данных, конкретным Компонентом EJB и элементами подсекции resource-ref, определенной в спецификации Sun EJB 1.1. Специфические для Inprise-реализации расширения в секции DataSource определяют соответствие между res- ref-name и реальным источником данных, что необходимо для установки соединения. Одним из элементов подсекции resource-ref

является res-ref-name. Это является JNDI-именем для конкретного источника данных. Связать JNDI-имя и конкретный источник данных Контейнеру помогают специфические для Inprise-реализации расширения.

В таблице 9.3 описаны элементы, присутствующие в секции <datasource>.

Таблица 9.3 Специфическая для Inprise-реализации информация об источнике данных в Дескрипторе Поставки

Элемент

Описание

jndi-name

Это JNDI-имя, под которым зарегистрирован источник данных. Это – обязательная информация.

url

URL – универсальный локатор ресурса – служит для организации доступа к источнику данных в сети. Его составные части: <JDBC driverxserverxportxhost>

Информация является обязательной, если вы используете базу данных.

username

Имя пользователя для доступа к базе данных. Может отсутствовать. Может также являться частью URL. Параметр должен присутствовать, если элемент <res-auth> имеет значение "Container".

password

Пароль для доступа к базе данных. Может отсутствовать. Может также являться частью URL. Параметр должен присутствовать, если элемент <res-auth> имеет значение "Container".

isolation-level

См. раздел, приведенный после таблицы. Параметр может отсутствовать. Если вы не указали его, в качестве значения по умолчанию используется значение по умолчанию конкретного JDBC-драйвера.

driver-class-name

Это имя класса драйвера, который необходимо загрузить. Это то же самое имя, которое может быть указано в системном свойстве "jdbc.drivers". Значение может отсутствовать.

jdbc-property

Это список произвольных строковых пар имя/значение, передаваемых методу DriverManager.getConnectionQ. С этим свойством не сопоставлен никакой тип. Может отсутствовать.

property

Это пара вида имя=значение. Представляет собой свойства, используемые Контейнером для взаимодействия с источником данных. Может отсутствовать.

Инфо Для Компонентов EJB, которые используют СМР, для установки

соединения с базой данных необходимо указать имя пользователя и пароль, следовательно, вы должны указать их либо с использованием вышеперечисленных элементов, либо как часть URL. Для Компонентов EJB со значением параметра <res-auth>, равном "Bean", имя пользователя и пароль могут отсутствовать.

Уровни изоляции транзакций

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

Допустимые проблемы – уровни изоляции транзакций определены в спецификации ANSI SQL. ODBC, JDBC и EJB следуют этому стандарту. Под уровнем изоляции транзакций понимается степень независимости одновременно выполняемых транзакций друг от друга при работе в многопользовательских системах. В идеале, нужно было бы иметь так называемые "сериализованные" транзакции. Это означает, что результат одновременного выполнения любого количества транзакций был бы тем же самым, что и результат последовательного выполнения этих транзакций. Существуют три основные проблемы, к которым сводится нарушение таких идеальных правил управления транзакциями.

•          Dirty Read. Транзакция tl изменяет запись базы данных. Затем транзакция t2 читает эту запись. Транзакция tl откатывается, в результате t2 видит вариант записи, который никогда не существовал.

•          Non-Repeatable Read. Транзакция tl читает запись. Затем транзакция t2 изменяет запись, и tl читает эту запись снова. Транзакция tl считала одну и ту же запись дважды и получила два различных значения.

•          Phantoms. Транзакция tl читает набор записей, который удовлетворяет определенным условиям поиска. Затем транзакция t2 добавляет одну или несколько записей, которые удовлетворяют тому же условию. Если транзакция tl повторно выполняет чтение, то она "увидит" записи, которые не существовали раньше. Эти записи называются фантомными записями.

Возможны следующие уровни изоляции транзакций:

•          TRANSACTION_READ_COMMITTED. Не допускает Dirty Read, но не препятствует возникновению двух остальных проблем.

. TRANSACTION_READ_UNCOMMITTED. Не препятствует появлению ни одной из проблем.

•          TRANSACTION_REPEATABLE_READ. Возможно появление фантомных записей, но не остальных проблем.

•                 TRANSACTION_SERIALAZABLE. Невозможна ни одна из проблем.

•                 TRANSACTION_NONE. Отсутствует поддержка транзакций.

Источник: Руководство программиста Enterprise JavaBeans

По теме:

  • Комментарии