![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
Disclaimer
Цель этой статьи - дать общее представление и систематизировать знания о процессах взаимодействия с внешними ресурсами и управления глобальными транзакциями из j2ee-приложений. Статья ориентирована на начинающих j2ee-разработчиков. Более подробно эта и другие темы раскрываются в курсах по направлениям java и j2ee, проводимых на площадке Люксофта. Презентации курсов я выкладываю по адресу http://courses.4shared.com в разделе courses. В данной статье используются материалы курса по JDBC API. Введение В статье речь пойдет об одном из наиболее востребованных сервисов платформы j2ee - сервисе JTA (Java Transaction API). Сервисы платформы j2ee - это уже реализованный функционал, являющийся частью j2ee-контейнера. Задача j2ee-сервисов - снять с разработчика приложений инфраструктурные задачи с тем, чтобы он концентрировался только на реализации бизнес-логики. Процесс взаимодействия с внешними ресурсами из j2ee-приложений Большинство приложений так или иначе взаимодействуют с внешними системами для получения, обработки и сохранения данных. Наиболее распространенные типы внешних систем: СУБД, JMS, внешние корпоративные системы (КИС/EIS). Соответственно, для каждого из типов предусмотрен свой API доступа:
Взаимодействие напрямую с внешней системой подразумевает работу с ней с использованием двухзвенной схемы клиент-сервер (приложение-клиент взаимодействует с внешней системой-сервером). при этом используется соответствующий API, в клиенте инкапсулируется информация о местоположении системы и учетная запись доступа. Но есть более удобный способ - воспользоваться j2ee-сервисом доступа. Этот сервис - промежуточное звено между клиентом и внешней системой. Что же такого полезного реализует этот пресловутый сервис?
![]() Небольшое терминологическое отступление: в общем случае промежуточные системы, через которые производится доступ к СУБД, называются DB middleware. Но т.к. мы говорим о платформе j2ee, то эту роль у нас будет играть jdbc-сервис. Таким образом, предыдущая картинка с учетом специфики платформы j2ee будет выглядеть так: ![]() В дальнейшем мы будем подразумевать работу с внешними системами именно через сервисы. В описаниях будет подразумеваться JDBC, если не указано иное. Реализация сервисов доступа к внешним системам. Как же устроены эти сервисы и как разработчику приложений работать с ними? Технически сервис представляет из себя совокупность Resource Managers (RM) - менеджеров ресурсов. Настраивает эти менеджеры, как правило, администратор j2ee-сервера (есть еще вариант автоматической настройки при развертывании приложения, но это детали). RM представляет из себя совокупность следующих компонентов: пула соединений (connection pool) и фабрики соединений (connection factory). Давайте рассмотрим роль и механизм настройки этих компонентов:
Вторая часть выложена на http://ekrs.blogspot.com/2007/10/j2ee-2.html. Это сообщение отредактировал(а) ekr - 15.10.2007, 15:29 |
|||
|
||||
| YuG |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 20.2.2006 Репутация: 3 Всего: 4 |
ekr, очень интересно, жду 2-ю часть... )
|
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Полезное начинание и оформлено красиво. Стал читать именно с целью получить "общее представление". Но сразу возникло много вопросов.
В начале вводится понятие сервиса на примере пула соединений к базе данных (а применяют ли пулы соединений кроме как для базы данных?). Эта стандартная вещь наверное входит в состав EJB сервера. Какая польза от выделения этого компонента в отдельный сервис? EJB сервер тоже кто-то настраивает. Может быть, этих серверов несколько, и тогда они будут использовать общий сервис? Или серверов приложений нет вообще и пользователи напрямую в базу лезли (своими jtable |
|||
|
||||
| ekr |
|
||||||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
да, конечно, для описанных типов ресурсов: jms-соединения и соединения с внешними КИС и других. если быть точным, то или в состав j2ee-сервера, или как отдельная библиотека. отступление: j2ee-сервер структурно состоит из 1. реализаций сервисов, 2. web- и 3. ejb-контейнера. тут, в j2ee, так принято ;-) (С)старый анекдот а если серьезно, то как по-другому?
нет, у каждого сервера свой сервис. другое дело, что приложения , развернутые на группе серверов, могут быть написаны так, что использовать сервис только одного сервера из группы. по умолчанию приложение использует сервис того сервера, на котором развернуто.
как вариант) но это не масштабируемо, плюс повышенные затраты на поддержку. если хочется воспользоваться трехзвенным доступом к данным, можно обойтись и без j2ee-сервера, но тогда надо ставить отдельный продукт, реализующий сервис с пулами. просто при использовании j2ee нет нужды в отдельном продукте, т.к. этот сервис является частью сервера. халявка )
невозможно удовлетворить сразу всех и учесть их текущий уровень)) поэтому удовлетворяю тех, кто спрашивает )) COVD, спасибо за вопросы. значит затеяно все не зря ))) буду рад ответить на вновь возникающие вопросы Это сообщение отредактировал(а) ekr - 22.8.2007, 17:58 |
||||||
|
|||||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Думаю, что тема достойна повисеть в вверхней части форума - спасибо большое за полезное начинание.
|
|||
|
||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
будем стараццо )))
|
|||
|
||||
| COVD |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Теперь понятно - вы рассматриваете один (или несколько) сервисов, входящих в типовой j2ee сервер. Спасибо.
Как я предполагаю, напрямую - это уже не j2ee технология (или все еще j2ee ?), а так , вообще (тут на форуме регулярно вопросы задают, как соединить апплет с базой данных).
т.е. напрямую - это когда клиент работает с сервером, но при этом клиенту зачем-то нужно знать о существовании внешних систем и иметь учетные записи. Не совсем понятно. |
||||||
|
|||||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
напрямую (как на картинках) - это с использованием нужного api (нпример, jdbc), но без использования сервиса (с пулами). то есть напрямую - это двухзвенная схема доступа к данным, а трехзвенная - через сервис (с пулами ;-). при двухвенной схеме все это надо знать клиенту. представим разработку тяжелого (fat) клиента для СУБД. ведь этой программе надо знать, где располгается СУБД и логин/пароль к ней? |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Понятно. В данном контексте сервер - это СУБД.
Cпасибо. Это сообщение отредактировал(а) COVD - 23.11.2009, 04:10 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |