вторник, 26 апреля 2011 г.

Формирование MapMessage с помощью JMS адаптера Oracle SOA Suite


MapMessage является наиболее простым для разбора типом JMS-сообщения. Действительно, сообщение данного типа содержит лишь пары ключ - значение и не требует, например, парсинга XML или битовых преобразований для доступа к содержимому. Поэтому неудивительно, что такой формат сообщений завоевал определенную популярность среди Java-разработчиков. JMS-адаптер Oracle SOA Suite позволяет работать с данным типом сообщений. В заметке мы рассмотрим процесс создания MapMessage с помощью этого адаптера.

понедельник, 25 апреля 2011 г.

Получение текущих даты/времени с миллисекундами в Oracle SOA Suite


Oracle BPEL - составная часть Oracle SOA Suite - содержит функцию xp20:current-dateTime(), возвращающую текущую дату и время в формате ISO (пространство имен xp20 соответствует http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20). Однако, данная функция возвращает время с точностью до секунды, т.е. без миллисекунд, которые зачастую бывают нужны. Таким образом возникает задача получения строки, представляющей собой текущие дату и время в формате ISO с точностью до миллисекунды.

пятница, 22 апреля 2011 г.

О бедном ThreadLocal замолвите слово


Цитата от Антона Архипова:

Q: что такое ThreadLocal?
A: это Thread, который Local. Ну то есть локальный Thread... лёгковесный... JVM может его круто запускать и использовать меньше памяти...


На собеседованиях есть тенденция спрашивать про ThreadLocal. Как оказалось, далеко не все Java программисты знакомы с данным понятием. В заметке я попробую максимально коротко рассказать про ThreadLocal и поделиться примером его использования.

понедельник, 4 апреля 2011 г.

О динамической настройке адаптеров Oracle SOA Suite


В общем случае среда, в которой тестируется приложение, отличается от среды, в котором оно будет работать. Банальный пример: при тестировании может использоваться другая база данных нежели при промышленной эксплуатации. Так же зачастую бывает необходимо развернуть на одном сервере несколько экземпляров приложения, но настроенных по-разному, например, для ускорения обработки сообщений в SOA-среде может потребоваться пустить поток сообщений через несколько JMS-очередей, обрабатываемых несколькими экземплярами композитного приложения, построенного на платформе Oracle SOA Suite. В данной статье мы рассмотрим как с помощью SOA Suite динамически изменять JNDI-имя используемой очереди сообщений при разворачивании и во время работы композитного приложения.

понедельник, 14 марта 2011 г.

ECF: Выпущен ECF 3.5


Через четыре месяца разработки выпущена новая версия Eclipse Communication Framework - ECF 3.5.

Из основных нововведений:

1. Поддержка спецификации OSGi Remote Services Admin - части 122 т.н. OSGi Enterprise Specification. Данная спецификация определяет сервис управляющих агентов для администрирования удаленных сервисов. Теперь архитектура ECF позволяет гибко и на лету заменять OSGi-совместимые модули, обеспечивающие взаимодействие и обнаружение сервисов. Под модулями взаимодействия подразумеваются различные протоколы, поддерживаемые ECF: R-OSGi, ECF Server, JMS, REST, SOAP, XMPP и т.д. Под модулями обнаружения сервисов подразумеваются: SLP, ZeroConf, ZooDiscovery и т.д.

Так же добавлена поддержка Endpoint Description Extender Format (EDEF) - части 122.8 Enterprise Specification. Данная реализация пришла на замену используемому ранее модулю основанного на файлах обнаружения сервисов.

2. XML-RPC провайдер. Данный провайдер реализует ECF Remote Services API, позволяя обращаться к XML-RPC серверам как удаленным OSGi-сервисам. Поддерживается вызов сервисов через прокси, а также асинхронное взаимодействие. Скромно замечу, что данный провайдер реализован вашим покорным слугой.

3. ECF4Felix - позволяет использовать все возможности ECF на OSGi R4-совместимой платформе Apache Felix.

4. Maven-репозиторий, доступный по-адресу.

С полным списком нововведений можно ознакомиться в разделе New and Noteworthy. Для установки через механизм p2 существует update site: http://download.eclipse.org/rt/ecf/3.5/site.p2.

Напомню, что исходники фреймворка теперь располагаются в Git-репозитории.

Помимо официальной ветки существует и ECF Extras, расположенные на GitHub. В состав ECF Extras входят провайдеры для NNTP, JMS, Yahoo, Call API (VoIP), Google Wave, JGroups, Net4J, JXTA, Skype, Twitter и т.д., в частности - OSCAR/ICQ-провайдер и большой набор примеров использования ECF от Сурового.

Стоит отметить, что в отличие от множества других OpenSource-проектов, в том числе и разрабатываемых под эгидой Eclipse Foundation, ECF является проектом, развиваемым исключительно сообществом. Нас не спонсируют крупные компании, такие как IBM, Oracle, Microsoft и т.д.

Понравилось сообщение - подпишитесь на блог

среда, 2 марта 2011 г.

Создаем кластер серверов приложений WebLogic: балансировка нагрузки, обнаружение ошибок, репликация сессий


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

В данной статье мы рассмотрим следующие вопросы:
  1. Структура домена WebLogic.
  2. Создание домена и объединение серверов в кластер.
  3. Балансировка нагрузки с помощью HttpClusterServlet.
  4. Репликация сессий между серверами кластера.
  5. Балансировка нагрузки с помощью Apache 2.
  6. Выводы.
  7. Ресурсы.

понедельник, 21 февраля 2011 г.

Распределенные транзакции (XA) с помощью JTA в JavaSE (на примере Spring + Atomikos)


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

Для решения данной проблемы используются т.н. распределенные транзакции - транзакции, охватывающие несколько источников данных. В мире Java такие транзакции поддерживаются с помощью Java Transaction API (JSR 907), являющегося частью спецификации JavaEE. Однако, данный факт не обозначает, что работать с JTA можно только с помощью Java EE-сервера приложений. Существуют различные, в том числе и OpenSource, реализации JTA, в частности - Atomikos TransactionsEssentials, которая содержит JDBC/XA и JMS/XA пулы соединений, а также координатор распределенных транзакций. В данной статье мы рассмотрим использование Atomikos TransactionsEssentials для управления распределенными транзакциями, в которых будут участновать JDBC- и JMS-соединения, а также Hibernate. Для объединения компонентов системы будем использовать Spring Framework.

Содержание


  1. Понятие XA-транзакции.
  2. Использование JDBC/XA-пулов и координатора транзакций из Atomikos с помощью Spring Framework.
  3. Подключение JMS/XA (ActiveMQ).
  4. Использование Atomikos в качестве менеджера транзакций для Hibernate.
  5. Заключение.
  6. Ресурсы.