вторник, 14 ноября 2017 г.

Десять лет блогу Сурового челябинского программиста!


Хочу поделиться большой радостью: ровно десять лет назад в блоге Сурового челябинского программиста появилась первая, возможно с высоты приобретенного опыта ее можно оценить как несколько наивную, запись - Знакомимся: xstream - сериализуем Java-класс в XML. С тех пор, практически без перерыва (возможно за исключением последних нескольких месяцев, о чем ниже), я старался знакомить своих читателей с не сильно популярными в наших широтах технологиями такими как Eclipse Communication Framework, Java на мейнфреймах, а так же делиться опытом практического использования продуктов корпораций Oracle и IBM.

За десять лет счетчик просмотров показывает, что к страницам блога обращались 1 964 144 раз. В основном на блог заходят из поисковых систем, т.е. люди ищут и, смею надеяться, находят решения конкретных проблем. Самой популярной за все время статьей является Как подружить Hibernate со Spring и обеспечить управление транзакциями через @ннотации - 57000 просмотров, тема Open Source в принципе довольно популярна в рунете. С большим отставанием на втором месте располагается Установка и настройка MikTeX 2.7 + PsCyr с 33600 просмотрами: диплом то писать надо. Замыкает пьедестал по выражению, прозвучавшему в комментариях: "полезный пищевой концентрат", - Распределенные транзакции (XA) с помощью JTA в JavaSE (на примере Spring + Atomikos) (посчитать количество просмотров затруднительно, т.к. на статью одно время был большой паразитный траффик из Германии).

Я даже помню, как возникла идея начать вести блог. Осенью 2007-го года я, еще будучи студентом, устроился на работу Java-программистом в компанию Naumen, где разрабатывал систему управления документооборотом Naumen DMS. В университете нам Java не преподавали от слова совсем: бал правил Microsoft со своими продуктами, поэтому учиться и постигать интереснейший мир Java приходилось самостоятельно. А если некая идея, библиотека или фреймворк оказались полезными мне, то возможно они окажут помощь еще кому-нибудь. Значит нужно приобретенными знаниями и опытом поделиться. В конце-концов Интернет - он не только для котиков и "зая, я сбила крота".

Фишка выделять англоязычные слова в русском тексте курсивом родилась практически в это же время.

К сожалению, последний год писать в блог желания практически не было. Так получилось, что последние несколько лет блог был посвящен преимущественно одной теме - интеграции с использованием стека Oracle Fusion Middleware, однако корпорация Oracle с одной стороны по неизвестным мне причинам несколько раз отклонила мое резюме, а с другой - выбрала стратегию улететь в облака, что негативно сказывается на качестве продуктов сегмента on-premise. Возникает чувство, что разработка и, самое главное, поддержка данных продуктов ведется по остаточному принципу, о чем в очередной раз пришлось убедиться за последние три месяца, решая проблемы крупнейшего российского заказчика. Ну хотя бы разобрался в деталях с работой кластера серверов приложений WebLogic, выяснил, например, что безобидный код создания во время исполнения подписчика на очередь (Uniform Distributed Queue) может вызвать настоящий шторм Announcement'ов соответствующего участка JNDI-дерева остальным участникам кластера. И то хлеб. В общем, не готов сейчас сказать, буду ли продолжать вести блог, поживем - увидим.

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

пятница, 9 июня 2017 г.

Валидация DVM после обновления потребляет весь CPU, или как мы заставили Oracle выпустить patch

Постановка задачи


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

Особенностью системы является активное использование такого механизма Oracle SOA Suite как Domain Value Maps (DVM), предназначенного для перекодировки значений из ограниченного набора одной предметной области (при интеграции - одной информационной системы) в значения, характерные для другой предметной области (информационной системы). Например наши любимые российские рубли в одной системе могут кодироваться как RUR, а в другой - 810. Механизм DVM удобен для работы со справочниками конвертации, которые изменяются нечасто, однако, если все же справочник требуется изменить, то в состав Oracle SOA Suite входит инструмент с развитым веб-интерфейсом - SOA Composer, - позволяющий сделать это бизнес-пользователю без привлечения разработчиков.

Как оказалось, все работает идеально пока такие справочники небольшие, однако если их размер увеличивается до сотен килобайт, то пользователей и администраторов Oracle SOA Suite ждут сюрпризы.

Посмотрим на дамп потоков, собранный во время, когда наблюдалась проблема.

"[ACTIVE] ExecuteThread: '57' for queue: 'weblogic.kernel.Default (self-tuning)'" #159 daemon prio=9 os_prio=2 tid=0x0000000066bbd800 nid=0x28ac runnable [0x0000000079188000]
java.lang.Thread.State: RUNNABLE
at oracle.xml.xpath.XPathChildAxis.getNodeList(XPathAxis.java:600)
at oracle.xml.xpath.XPathStep.evaluate(XPathStep.java:1102)
at oracle.xml.xpath.PathExpr.evaluate(PathExpr.java:808)
at oracle.xml.xpath.ComparisonExpr.evaluate(XSLExpr.java:1743)
at oracle.xml.xpath.XSLExprBase.testBooleanExpr(XSLExprBase.java:514)
at oracle.xml.xpath.AndExpr.evaluate(XSLExpr.java:524)
at oracle.xml.xpath.XSLExprBase.testBooleanExpr(XSLExprBase.java:514)
at oracle.xml.xpath.AndExpr.evaluate(XSLExpr.java:524)
at oracle.xml.xpath.XSLExprBase.testBooleanExpr(XSLExprBase.java:514)
at oracle.xml.xpath.AndExpr.evaluate(XSLExpr.java:524)
at oracle.xml.xpath.XPathPredicate.filter(XPathPredicate.java:349)
at oracle.xml.xpath.XPathChildAxis.getNodeList(XPathAxis.java:627)
at oracle.xml.xpath.XPathStep.evaluate(XPathStep.java:1102)
at oracle.xml.xpath.PathExpr.evaluate(PathExpr.java:808)
at oracle.xml.parser.v2.XMLNode.selectNodes(XMLNode.java:2762)
at oracle.xml.parser.v2.XMLNode.selectNodes(XMLNode.java:2722)
at oracle.tip.dvm.sdk.util.XMLUtil.isDVMDocumentValid(XMLUtil.java:211)
at oracle.tip.dvm.entity.DVMRTObject.validateDVM(DVMRTObject.java:202)
at oracle.tip.dvm.entity.DVMRTObject.(DVMRTObject.java:130)
at oracle.tip.dvm.DVMManagerImpl.getDVMRTObject(DVMManagerImpl.java:217)
at oracle.tip.dvm.DVMManagerImpl.lookupValue(DVMManagerImpl.java:133)
at oracle.tip.dvm.LookupValue.lookupValue(LookupValue.java:95)
at oracle.tip.dvm.LookupValue.lookupValue(LookupValue.java:252)
at sun.reflect.GeneratedMethodAccessor1815.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at oracle.xml.xpath.XSLExtFunctions.callStaticMethod(XSLExtFunctions.java:115)
at oracle.xml.xpath.XPathExtFunction.evaluateMethod(XPathExtFunction.java:422)
at oracle.xml.xpath.XPathExtFunction.evaluate(XPathExtFunction.java:347)
at oracle.xml.xslt.XSLValueOf.processAction(XSLValueOf.java:152)
at oracle.xml.xslt.XSLNode.processChildren(XSLNode.java:559)
at oracle.xml.xslt.XSLTemplate.processAction(XSLTemplate.java:278)
at oracle.xml.xslt.XSLStylesheet.execute(XSLStylesheet.java:706)
at oracle.xml.xslt.XSLStylesheet.execute(XSLStylesheet.java:665)
at oracle.xml.xslt.XSLProcessor.processXSL(XSLProcessor.java:401)
at oracle.xml.jaxp.JXTransformer.transform(JXTransformer.java:578)
at ...

среда, 31 мая 2017 г.

Безопасность транзакций между доменами Oracle WebLogic Server

Управляя распределенной (XA) транзакцией, менеджер транзакций должен иметь возможность связываться со всеми участниками транзакции. Т.е. со всеми серверами и ресурсами в ней участвующими. Коммуникационные каналы настраиваются в зависимости от того, куда направляется транзакция:

  • Inter-domain - коммуникация между серверами, участвующими в транзакции и расположенными не в одном и том же домене

  • Intra-domain - коммуникация между серверами, участвующими в транзакции и расположенными в одном и том же домене.

Каналы коммуникации для транзакций должны быть защищенными, чтобы предотвращать от атак вида человек посредине. Сервер приложений Oracle WebLogic предоставляет следующие опции для защиты коммуникационных каналов:

  • Cross Domain Security - используется отображение учетных данных пользователей для настройки совместимого коммуникационного канала между серверами в транзакциях между доменами. Хотя это требует более сложной конфигурации, Cross Domain Security позволяет настроить доверие между отдельными доменами.

  • Security Interoperability Mode - устанавливает доверие между всеми доменами, которые участвуют в транзакции, путем
    установки для учетных данных всех доменов (domain credentials) совпадающих значений, т.е. principal из одного домена разрешен и в других. Этот режим проще для настройки чем Cross Domain Security, однако некоторые настройки Security Interoperability Mode полагаются на доверие домена и менее безопасны.

Рассмотрим преимущества и недостатки данных режимов.

понедельник, 15 мая 2017 г.

Микросервисы, SOA и API: друзья или враги?


Оригинал: Microservices, SOA, and APIs: Friends or enemies? by Kim Clark, опубликован 21 января 2016.

Сравнение ключевых концепций архитектуры приложений и интеграции для развивающегося предприятия.


Введение


При сравнении микросервисной и сервисно-ориентированной (SOA) архитектуры практически невозможно прийти к согласию о том, как же все-таки они соотносятся друг с другом. Добавление в список еще и application programming interfaces (APIs) картину очевидно не проясняет. Некоторые могут сказать, что это вообще абсолютно изолированные друг от друга понятия, не имеющие ничего общего и предназначенные для решения разных задач. Другие заметят, что данные концепции разделяют общие принципы и созданы для достижения неких общих целей. Микросервисная архитектура может казаться этакой "тонкоструктурной (fine-grained) SOA" или "правильно внедренной SOA".

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

четверг, 16 марта 2017 г.

Oracle BPM Suite 12.2.1.2 Quick Start: установка, настройка, развертывание и тестирование бизнес-процесса на языке BPMN 2.0

Oracle BPM Suite - решение от корпорации Oracle для моделирования и исполнения бизнес-процессов предприятия с использованием нотации BPMN 2.0. Для моделирования бизнес-процессов используется интегрированная среда разработки JDeveloper. Корпорация Oracle распространяет специальный дистрибутив продукта, предназначенный для разработчиков, который включает в себя сервер приложений Oracle WebLogic, на котором работает BPM Suite, сам BPM Suite и интегрированную среду разработки JDeveloper - Quick Start.


В данной статье мне хочется поделиться с читателями информацией о том, как получить пакет Oracle BPM Suite 12.2.1.2 Quick Start с сайта edelivery.oracle.com, установить его на машину разработчика, создать первый бизнес-процесс в JDeveloper, настроить встроенный в среду разработки домен сервера приложений, включающий в себя BPM Suite, SOA Suite, Oracle Service Bus и использующий Apache Derby в качестве СУБД, развернуть созданный процесс в данном домене и запустить его тестовый экземпляр.


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

Визуализация и тестирование REST API с помощью Swagger на WebSphere Liberty

В последние годы все большую популярность набирает стандарт описания интерфейсов RESTful веб-сервисов Swagger. Фактически Swagger становится для RESTful-сервисов тем же, чем является WSDL для SOAP-сервисов. При этом разработчики серверов приложений активно добавляют поддержку данного стандарта в свои продукты. Вот и флагманский сервер приложений WebSphere Liberty корпорации IBM обзавелся новой возможностью apiDiscovery, позволяющей найти все доступные на сервере REST API и динамически создать Swagger-подобный интерфейс пользователя для тестирования найденных конечных точек.


В данной статье мы рассмотрим процесс реализации некоего REST API с помощью сервлетов, его документирования на Swagger и тестирования с помощью пользовательского интерфейса apiDiscovery. Дополнительно я расскажу о достаточно богатом механизме обнаружения сервером приложений доступных Swagger-документов и генерации таковых по аннотациям JAX-RS и Swagger.

понедельник, 16 января 2017 г.

Первое знакомство с Red Hat JBoss Fuse

Здравствуйте, коллеги.

Сегодня проводил семинар в Accenture Riga Delivery Center по поводу интересной для меня темы Red Hat JBoss Fuse и решил поделиться своими впечатлениями от этой сервисной шины с вами.

Что такое Red Hat JBoss Fuse? По сути это - среда исполнения для реализации набора паттернов интеграции корпоративных приложений (Enterprise Application Integration Patterns (EIP)) Apache Camel.


Данная среда исполнения поставляется в двух вариантах:

  • Apache Karaf - готовая к промышленному использованию реализация стандарта OSGi.

  • Red Hat JBoss Enterprise Application Platform - широко известный Java EE-совместимый сервер приложений с коммерческой поддержкой. К сожалению, Red Hat JBoss Fuse устанавливается только на версию 6.4.0 данного сервера приложений, реализующую лишь стандарт Java EE 6, что приводит к проблемам, некоторые из которых описаны ниже.