четверг, 29 декабря 2011 г.

Завершению 2011-го года посвящается...


Почитав блоги товарищей, делящихся своими впечатлениями/достижениями, Суровый решил, что он ничем не хуже и ему тоже есть чем поделиться.

Во-первых, это конечно же успешное завершение проектирования интеграционной шины в "Вимм-Билль-Данн". Наша шина объединила порядка десяти информационных систем компании, установленных в головном офисе и филиалах. И хотя роль Сурового была относительна скромна: разработал несколько адаптеров, включая адаптер к Oracle E-Business Suite на базе Oracle SOA Suite, все равно хорошо, что удалось поработать со многими интересными людьми и кое-чему научиться, т.к. несмотря на большой опыт практической работы с BPEL внедрять SOA до этого не приходилось.

Во-вторых, данный год стал в какой-то степени переломным: Суровый зарекомендовал себя в качестве системного архитектора при проектировании интеграционной шины в ЗАО "Русская телефонная компания" - МТС Розничная сеть. В рамках данного проекта мы обеспечили передачу данных с более чем 2500 точек продаж МТС и интеграцию порядка двадцати информационных систем в головном офисе. В качестве интегрируемых систем выступали как ключевые игроки рынка ERP: Oracle E-Business Suite и SAP, так и старая добрая . Самой сложной задачей было обеспечить гарантированную доставку сообщений с точек продаж в условиях не всегда надежного канала. Страна наша велика, поэтому интернет особенно в удаленных от Центра районах оставляет желать лучшего.

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

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

Всех моих читателей поздравляю с наступающим Новым годом! Счастья вам и простите, что в уходящем году писал так мало.

UPD: Проект в ЗАО "РТК" успешно завершен. Система внедрена в промышленную эксплуатацию. Впечатления руководителя проекта от заказчика представлены в данной презентации.

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

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

Установка и использование WebLogic Server 12c в версии для разработчиков


На прошлой неделе Oracle сделала доступным для скачивания набор дистрибутивов сервера приложений нового поколения, основы линейки продуктов Oracle Fusion Middleware, - WebLogic Server 12c. Данный продукт доступен как в виде инсталляторов под Windows, Linux и Mac OS X, так и в виде двух ZIP-архивов, предназначенных исключительно для разработчиков. В данной заметке мы рассмотрим как установить WebLogic Server из данных архивов и создать демонстрационный домен, а так же написать и развернуть в данном домене небольшое Java EE 6 приложение, используя Oracle Enterprise Pack for Eclipse 12.1.1.

четверг, 1 декабря 2011 г.

Анонсирован WebLogic Server 12c


C - обозначает Cloud.

Посмотрел две презентации, приуроченные к выходу Oracle Fusion Middleware WebLogic Server 12c. Обещают, что данный продукт будет доступен для скачивания с OTN на следующей неделе. Технический номер версии будет - 12.1.1. Вероятно, Oracle отказывается от принятой сейчас запутанной системы нумерации версий, при которой WebLogic Server 10.3.X называется WebLogic Server 11g, что не может не радовать. В 2012-м году обещали так же выход остальных компонентов Fusion Middleware, например - Oracle SOA Suite.

UPD 10.12.2011: WebLogic Server 12c доступен для скачивания на OTN.

воскресенье, 27 ноября 2011 г.

Использование Oracle MDS для хранения общих объектов композитных приложений


Oracle Metadata Services – компонент Oracle Fusion Middleware, предназначенный для управления метаданными, т.е. данными о данных. К метаданным в терминах Oracle относятся в частности WSDL-описания веб-сервисов, XSD-схемы, а так же другие XML-документы. Данная инструкция содержит описание процесса настройки подключения к серверу метаданных из Oracle JDeveloper, развертывания метаданных на сервере и использования метаданных в композитном приложении.

воскресенье, 25 сентября 2011 г.

Типичные ошибки, допускаемые при внедрении информационных систем


Однажды Суровый занимался внедрением некой информационной системы в одной столичной компании. Несмотря на довольно богатую функциональность системы и наличие продуманной архитектуры, внедрение в тот раз не удалось. Можно сказать, что у меня есть не только позитивный, но и негативный опыт и это хорошо, т.к. позволяет немного порефлексировать и сделать выводы.

В своем посте Software product management Максим Смирнов - архитектор из Билайн - правильно указал на пять классических ошибок, которые совершают внедренцы. Я хочу привести свое видение проблемы. Некоторые мои ошибки пересекаются со списком Максима, некоторые - дополняют его.

среда, 7 сентября 2011 г.

Использование PhantomReferences в Java


Платформа Java предоставляет несколько типов ссылок для связи между объектами:

  1. Жесткие ссылки (Strong References) - стандартные, известные нам ссылки. Если на объект есть хоть одна жесткая ссылка, то данный объект не будет утилизирован при сборке мусора.

  2. Мягкие ссылки (Soft References) - создаются с помощью вызова new SoftReference<T>(T obj, ReferenceQueue<T> queue) или new SoftReference(T obj). Если на объект есть только мягкая ссылка, то будет выполнена попытка утилизации данного объекта при сборке мусора в случае, если приложению не хватает памяти.

  3. Слабые ссылки (WeakReferences) - создаются с помощью вызова new WeakReference<T>(T obj, ReferenceQueue<T> queue) или new WeakReference<T>(T obj). Если на объект есть только слабая ссылка, то будет выполнена попытка утилизации данного объекта при сборке мусора.

  4. Фантомные ссылки (PhantomReferences) - создаются с помощью вызова new PhantomReference<T>(T obj, ReferenceQueue<T> queue). Если на объект есть только фантомная ссылка, то будет выполнена попытка утилизации данного объекта при сборке мусора. Сам объект при этом не будет удален из памяти до тех пор, пока на него существует фантомная ссылка или данная фантомная ссылка не очищена с помощью вызова метода clear(). Так же стоит заметить, что метод get() фантомной ссылки всегда возвращает null.


Возникает вполне закономерный вопрос: зачем нужны ссылки, которые фактически держат объект в памяти, но по которым к нему нельзя получить доступ?

четверг, 7 июля 2011 г.

Построение композитного сервиса с помощью Oracle Service Bus


В состав Oracle Service Bus входит очень мощное средство управления последовательностью вызовов сервисов, которое называется Split-Join. Данный компонент позволяет разделить входное сообщение на части (паттерн Splitter, здесь и далее будут упоминаться паттерны из каталога EAI), пропустить данные части через разные маршруты обработки, а затем агрегировать результаты (паттерн Agregator). Сервис, агрегирующий результаты вызовов других сервисов называется композитным.

Предположим, что у нас есть два сервиса, возвращающих информацию о пользователе по его идентификатору. Один сервис - UserInfo возвращает общую информацию, такую как имя, фамилия, логин, а другой сервис - UserEmails - возвращает список почтовых адресов пользователя. Оба сервиса принимают на вход идентификатор пользователя в виде строки длиной в пять символов. Нам необходимо построить композитный сервис, который будет параллельно вызывать данные сервисы и агрегировать результаты этих вызовов в единое сообщение, включающее имя, фамилию, логин и список почтовых адресов пользователя.

среда, 6 июля 2011 г.

Трансформация сообщений в Oracle Service Bus с использованием XSLT и XQuery


Продолжаем знакомство с потоком обработки сообщений (Message Flow) Oracle Service Bus (OSB). Сегодня мы рассмотрим как настроить трансформацию сообщений из одного XML-формата в другой перед вызовом Business Service, используя XQuery- и XSLТ-преобразования. Разовьем пример, начатый в предыдущей заметке.

Динамическая маршрутизация в Oracle Service Bus


В Oracle Service Bus (OSB) используются следующие концепции:

  • Business Service осуществляет связь между тем сервисом, который необходимо вызвать, и шиной;

  • Proxy Service осуществляет связь между клиентом и шиной;

  • Message Flow поток обработки сообщений, осуществляет связь между Proxy Service и одним или несколькими Business Service. Поток обработки сообщений может быть довольно сложным и включать в себя маршрутизацию, трансформацию, параллельное исполнение и другие действия. Физически Message Flow описывается в Proxy Service.





Сегодня мы рассмотрим как настроить такое действие потока обработки сообщений, как динамическая маршрутизация. Под динамической маршрутизацией в OSB понимается маршрутизация, основанная на содержимом сообщения - т.н. Content-based Routing. Данный тип маршрутизации является альтернативой т.н. статической маршрутизации - типу маршрутизации, при котором маршрут сообщения задается на этапе разработки.

среда, 29 июня 2011 г.

Транзакционное чтение из JMS-очереди в Oracle SOA Suite


Одним из наиболее применяемых паттернов интеграции информационных систем является паттерн "Фильтры и трубы". При построении интеграционного решения на Oracle SOA Suite в качестве "фильтров" выступают композиты, а в качестве "труб" удобно использовать JMS-очереди.

Зачастую необходимо реализовать не просто считывание сообщения из "трубы", а считывание и обработку сообщения в рамках одной транзакции, при этом при откате данной транзакции сообщение должно возвращаться в очередь, из которой было считано. В данной заметке мы рассмотрим как добиться такого поведения, а так же какие существуют ограничения, накладываемые Oracle SOA Suite'ом на реализацию транзакционного чтения из JMS.

суббота, 25 июня 2011 г.

К вопросам обработки XML-сообщений в Oracle SOA Suite


Одним из вариантов интеграции информационных систем является построение среды обмена сообщениями между данными системами. Так сложилось, что стандартом де-факто для представления сообщений является XML и его многочисленные подмножества. При передаче сообщений между системами зачастую приходится их определенным образом трансформировать - преобразовывать из одних XML-форматов в другие. Такая трансформация может осуществляться различными способами, самыми популярными из которых является применение XSLT, а так же активности Assign в BPEL.

Зачастую перед непосредственно трансформацией сообщения необходимо произвести его разбор: преобразовать из строки в объект, описывающий XML-документ. В Oracle SOA Suite для такого преобразования служит функция oraext:parseXML. Данная функция возвращает объект, который можно присвоить BPEL-переменной.

Здесь и начинаются сложности. Дело в том, что любая BPEL-переменная должна иметь тип. Тип переменной за исключением т.н. простых типов (строка, число, логическое значение) определяется XML-схемой. В дальнейшем все манипуляции с переменной описываются с помощью XPath-выражений, которые в среде разработки (JDeveloper) строятся так же на основании типа переменной, т.е. в конечном итоге - на основании схемы. В связи с этим хочется рассмотреть два вопроса:

1. Что произойдет, если на вход функции oraext:parseXML подать строку, представляющую собой XML, не соответствующий схеме.

2. Как влияют определения пространств имен на соответствие XML-документа схеме.

пятница, 24 июня 2011 г.

Eclipse Indigo: Пять причин обратить внимание на ECF


Поздравляю всех читателей с официальным выходом Eclipse 3.7 Indigo. Здесь камрад James Sugrue написал статью на JavaLobby - Eclipse Indigo Highlights: Five Reasons to Check Out ECF. Позволю себе перевести ее на русский язык.

Eclipse Communication Framework [1] - традиционный участник Eclipse release trains (перевод "поездов релизов Eclipse" мне как-то не очень нравится, однако термин "поезд" применительно к релизу ПО меня забавляет уже третий год) - непрерывно добавляет новое в свой впечатляющий список возможностей. Данный год не стал исключением - в релиз Eclipse Indigo включен ECF 3.5. В данной статье я сосредоточусь на пяти ключевых возможностях новой версии.

четверг, 9 июня 2011 г.

Используем технологические адаптеры в Oracle Service Bus


В поставку Oracle Service Bus (OSB) и Oracle SOA Suite входит довольно широкий набор так называемых технологических адаптеров: к СУБД, к файлам, к http-серверам, к веб-серисам, к JMS-, AQ- и MQ-очередям и т.д. С помощью данных адаптеров можно использовать, например, СУБД, как веб-сервис, при этом будет обеспечена поддержка транзакций и прочих аспектов взаимодействия.

В данной заметке я хочу показать, что использовать технологические адаптеры в OSB не сложнее чем в Oracle SOA Suite. В качестве примера рассмотрим файловый адаптер.

пятница, 3 июня 2011 г.

Создаем Hello World на Oracle Service Bus с использованием Oracle Enteprise Pack for Eclipse


В данной заметке Суровый челябинский программист расскажет о том, как создать простой сервис на Oracle SOA Suite и обеспечить взаимодействие с данным сервисом с помощью сервисной шины предприятия Oracle Service Bus (OSB). При этом, для создания проекта OSB будет использоваться интегрированная среда разработки Eclipse с комплектом расширений под названием Oracle Enterprise Pack for Eclipse (OEPE). Для создания же сервиса будет использоваться основная интегрированная среда разработки от Oracle - JDeveloper.

Предполагается, что у читателя уже установлены WebLogic, Oracle Service Bus, Oracle SOA Suite, JDeveloper и OEPE. Я использовал OSB и SOA Suite версии 11.1.1.5, но, думаю, что работа с ранними версиями в целом аналогична.

вторник, 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. Ресурсы.

среда, 26 января 2011 г.

Введение в OSGi: Среда исполнения (Execution Environment)


Среда исполнения (Execution Environment) в мире OSGi - это символьное представление версии JRE, т.е. указание платформе с какой версией JRE совместимы классы, составляющие бандл.

Понятие "среда исполнения" становится необходимо, когда бандл разрабатывается на одной JRE, но предполагается, что использоваться он будет на другой JRE или, что более характерно, нескольких JRE. Возникновение данного понятия имеет глубокие исторические причины, т.к. OSGi изначально создавалась для использования во встроенных решениях, для которых имеется довольно широкое многообразие различных версий Java-платформы.

В общих чертах идея использования среды исполнения заключается в следующем: при разработке бандла указывается в каких версиях JRE предполагается его использовать, в зависимости от этого становятся доступными те или иные API. Во время исполнения же, если среда исполнения бандла не совместима со средой, в которой запущена платформа OSGi, он не будет загружаться.

В данной статье мы подробно рассмотрим следующие вопросы:
- Стандартные среды исполнения.
- Конфигурирование среды исполнения в Eclipse SDK.
- Настройка Eclipse PDE для верификации API, доступных в той или иной среде исполнения.
- Создание бадла и использование информации о среде исполнения при его разработке.
- Запуск бандлов в различных средах исполнения.

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

Eclipse RCP: Понятие "возможности" (feature) в Eclipse RCP


Одним из важных понятий платформы Eclipse является понятие "возможности" (feature). Под возможностью понимается логическая группа бандлов, которые рассматриваются как единое целое. Важность понятия "возможность" проистекает из того факта, что механизм обновления и инсталяции программного обеспечения, применяемый в платформе Eclipse, - Eclipse Equinox p2 - позволяет выбирать для установки/обновления только возможности.


Строго говоря, общепринятого перевода данного термина на русский язык не существует, поэтому здесь и далее будет употребляться слово "возможность". Если у вас есть другое мнение по данному вопросу - добро пожаловать в комментарии.


Если бандл является элементом технической декомпозиции, т.к. любое приложение, построенное на платформе Eclipse, с технической точки зрения может рассматриваться как множество бандлов, то возможность - это элемент маркетинговой декомпозиции, позволяющий указать, что некоторая группа бандлов является отдельной функциональностью, созданной разработчиком X, имеющей название Y и решающей тот или иной набор задач. Оперирование при установке/обновлении приложений возможностями, а не бандлами облегчает работу пользователей, т.к. позволяет им оперировать меньшим количеством более крупных компонентов, нежели отдельные бандлы.

При этом необходимо четко понимать, что возможность - это лишь логическое объединение бандлов, она не содержит jar-архивов, а значит один бандл может быть включен в несколько возможностей.

вторник, 11 января 2011 г.

Знакомимся: Tycho - набор плагинов к Maven для сборки OSGi-бандлов и RCP-приложений


Сообщество разработчиков Eclipse не перестает радовать новыми проектами. Об одном из молодых проектов мне бы и хотелось сегодня рассказать. Встречайте - проект Eclipse Tycho - набор плагинов к системе сборки Maven 3, позволяющий собирать OSGi-бандлы и RCP-приложения.

Допустим вполне резонный вопрос: зачем нужна еще одна система сборки для бандлов, если уже есть Eclipse PDE и BND-Tools? Основной особенностью Tycho является то, что он помогает разрешать зависимости, основываясь на файлах манифестов и Eclipse-специфичной метаинформации (файлы plugin.xml и feature.xml), что отличает его от BND-Tools и в тоже время делать это из командной строки с помощью Maven, не требуя установленного и запущенного Eclipse'а, в отличие от PDE. Первая возможность - manifest-based разрешение зависимостей - избавляет от необходимости делать двойную работу: прописывать зависимости в манифесте, а затем еще и в POM-файле. Вторая особенность - интеграция c Maven - позволяет управлять сборкой бандлов/плагинов с помощью систем непрерывной интеграции, например Hudson, а также использовать для разработки другие IDE - не содержащие Eclipse PDE, например IntelliJ IDEA.

Другой приятной возможностью Tycho является управление модульным и интеграционным тестированием в OSGi-среде. Можно создавать бандлы, которые будут содержать JUnit-тесты для плагинов, а Tycho возьмет на себя работу по запуску данных тестов, причем все это будет производиться в стандартном цикле сборки Maven'а. Данная функция аналогична возможности Run as JUnit Plug-in Test, предоставляемой PDE.

И, наконец, Tycho позволяет гибко управлять целевыми платформами, используемыми при сборке и тестировании бандлов/приложений, что облегчает пользователям подключение новых разработчиков к команде, т.к. позволяет не тратить время на решение вопросов вида "где взять тот или иной бандл, требуемый для приложения".

суббота, 8 января 2011 г.

Нет, я не забросил свой дневник


Во-первых, хочется поздравить всех читателей с прошедшим Новым годом.

Во-вторых, тех, кто празднует - с Рождеством.

В-третьих, хочется отметить, что в жизни моей произошли серьезные изменения: Я переехал в город-герой Москву - стал "понаехом".



Меня больше ничего не связывает с компанией Наумен, теперь я работаю в Москве. По личным причинам не буду разглашать текущее место работы, могу лишь написать про ряд особенностей: компания занимается как оутсорсингом, так и оутстаффингом. В клиентах компании ходит практически вся деловая Москва: от банков до промышленных предприятий. Проекты самые разные: от разработки учетных систем на базе JavaEE, до проектирования интеграционных решений (в основном на базе продуктов Oracle и IBM, но есть специалисты так же и по технологиям Microsoft). Думаю, что в компании, имеющей такой широкий портфель заказов, мне будет чему научиться.

Т.к. зачастую заказчики требуют присутствия программистов в их офисе, а заказчиков много, то приходится активно перемещаться по самому красивому городу России. Впрочем, есть и минусы: иногда дорога от дома до работы занимает около двух часов.

Немного жалею, что мало уделял внимания изучению систем промышленного уровня (например, WebLogic, SOA Suite, Oracle BPM и т.д.), нужно было меньше внимания уделять легковесным open source фреймворкам. Понятно, что у каждого фреймворка и технологии своя область использования, но умение управлять большими системами ценится выше. С другой стороны спрос на системы действительно промышленного уровня есть далеко не везде, например, в Челябинске я такой работы не видел.

В целом, несмотря на небольшие недостатки (в частности - время, которое приходится тратить на дорогу), я доволен.

Возможно кому-то будет интересно: пригласил меня непосредственно работодатель, сам я работу в Москве не искал. Все общение происходило на МоемКруге и в Скайпе. Там же - в Скайпе - было проведено собеседование. Что мне понравилось: не было мудацких вопросов типа "напишите запрос", разговор был больше "за жизнь". Так как Челябинск для меня так же неродной город, то особо ничего не удерживало. Работодатель же предоставил жилье в Москве, т.е. избавил от необходимости его искать и снимать. Мне кажется, это - идеальные условия для переезда. Если у вас есть вопросы, касающиеся работы в Москве и переезда в Москву, - задавайте их в комментариях.



UPD: Наконец-то решил вопрос с армией - получил честный военник. Взяток никому не давал, все делал по закону. Что могу сказать: не так страшен военкоматовский черт, как его малюют.

UPD2: Часто задают вопрос по поводу блога: почему я пишу мало статей для начинающих. Я понимаю, что это очень характерно для западной блогосферы - кто более Капитан Очевидность - тот и более заслуженный звездун, но это не характерно для русского менталитета. Я писал "статьи" в стиле Капитана, теперь мне за них стыдно, хотя такие статьи и приносят определенный трафик. Решил писать или о результатах каких-то миниисследований (что-то вроде "перелопатил литературу/источники и нашел, что..."), конкретно o своей практике или, в крайнем случае, теорию, но о том, о чем на русском языке писать не принято. Прошу не удивляться, если писать буду существенно меньше. Призываю приводить в комментариях темы, мнение Сурового о которых вам будет интересно.

Еще один момент: я выпилил свои аккаунты в Twitter'e, ВКонтакте (таки да!) и на Хабрахабре (ресурс для людей, озабоченных кармой, и прочих русофобов) ибо нефиг - работать надо.

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