| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Доступ к внешним системам и механизм глобальных |
| Автор: ekr 20.8.2007, 17:41 |
| 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. |
| Автор: YuG 21.8.2007, 11:15 |
| ekr, очень интересно, жду 2-ю часть... ) |
| Автор: COVD 22.8.2007, 17:26 |
| Полезное начинание и оформлено красиво. Стал читать именно с целью получить "общее представление". Но сразу возникло много вопросов. В начале вводится понятие сервиса на примере пула соединений к базе данных (а применяют ли пулы соединений кроме как для базы данных?). Эта стандартная вещь наверное входит в состав EJB сервера. Какая польза от выделения этого компонента в отдельный сервис? EJB сервер тоже кто-то настраивает. Может быть, этих серверов несколько, и тогда они будут использовать общий сервис? Или серверов приложений нет вообще и пользователи напрямую в базу лезли (своими jtable |
| Автор: AntonSaburov 22.8.2007, 18:39 |
| Думаю, что тема достойна повисеть в вверхней части форума - спасибо большое за полезное начинание. |
| Автор: ekr 22.8.2007, 21:12 |
| будем стараццо ))) |
| Автор: COVD 23.8.2007, 15:38 | ||||||
Теперь понятно - вы рассматриваете один (или несколько) сервисов, входящих в типовой j2ee сервер. Спасибо.
Как я предполагаю, напрямую - это уже не j2ee технология (или все еще j2ee ?), а так , вообще (тут на форуме регулярно вопросы задают, как соединить апплет с базой данных).
т.е. напрямую - это когда клиент работает с сервером, но при этом клиенту зачем-то нужно знать о существовании внешних систем и иметь учетные записи. Не совсем понятно. |
| Автор: ekr 23.8.2007, 22:43 | ||||
напрямую (как на картинках) - это с использованием нужного api (нпример, jdbc), но без использования сервиса (с пулами). то есть напрямую - это двухзвенная схема доступа к данным, а трехзвенная - через сервис (с пулами ;-).
при двухвенной схеме все это надо знать клиенту. представим разработку тяжелого (fat) клиента для СУБД. ведь этой программе надо знать, где располгается СУБД и логин/пароль к ней? |
| Автор: COVD 23.8.2007, 23:50 |
| Понятно. В данном контексте сервер - это СУБД. Cпасибо. |