понедельник, 1 сентября 2014 г.

Как я провел лето

Вот и заканчивается жаркое лето 2014-го года. Сейчас, правда, в Москве зачастили дожди, а это значит, что за окном осень, первое сентября и по традиции пора писать сочинение о том, как ты провел лето. Суровому есть что написать, т.к. лето 2014-го воистину прошло под девизом "перемен, мы ждем перемен".

Во-первых, женился. Кое-что об этом уже рассказывал. У семейной жизни, как оказалось, есть свои преимущества :).

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

В-третьих же, поменял место работы. Я больше не работаю в компании AT Consulting. Я очень хочу поблагодарить всех моих коллег из AT за замечательные два с половиной года, которые вы мне подарили. К величайшей скорби, не все коллеги смогут услышать эти слова благодарности...

Но жизнь идет, и теперь я тружусь на должности Client Technical Professional в корпорации IBM, где буду применять все свои знания для помощи нашим клиентам.


На новом месте буду работать вот с такими "маленькими" системами.


На фотографии представлен мейнфрейм IBM zEnterprise EC12 ('z' means 'zero downtime'). Эта "крошка" имеет на борту 101 5.5 ГГц ядро (на самом деле ядер 120, просто часть используется для резервирования и организации канальной системы ввода-вывода), так же есть дополнительные процессоры для работы zLinux, информационных систем и Java. Машина снабжена 3 ТБ оперативной памяти. Все системы, включая даже сервисные ноутбуки, зарезервированы. При необходимости можно организовать кластер таких мейнфреймов, разнесенных географически по разным центрам обработки данных.


А на данной фотографии можно видеть Сурового челябинского программиста на фоне мэйнфрейма IBM zEnterprise BC12. Наверное предназначение данной фотографии - стать первым шагом моего творческого пути в корпорации. Думаю, мне здесь понравится.

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

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

суббота, 16 августа 2014 г.

Опыт реального использования практически всех возможностей Java EE 6

Суровый конечно же понимает, что данная статья несколько запоздала, ей бы самое время появиться году так в 2010-м. Однако, я не привык писать о том, с чем не поработал сколь-либо плотно, а разработать приложение, опирающееся практически на весь стек Java EE 6 мне удалось только сейчас. В данной заметке собраны впечатления об использовании данных технологий, полученные за время ведения проекта разработки интеграционного приложения, обеспечивающего асинхронное взаимодействие нескольких информационных систем. Я не имею права подробно описывать архитектуру и принятые дизайнерские решения, поэтому изложение будет несколько лоскутным: задача, как решали, впечатления.

вторник, 12 августа 2014 г.

Under the Hood of J2EE Clustering


Давно хотел процитировать замечательную статью еще 2005-го года написания: Under the Hood of J2EE Clustering. Некоторые факты, особенно касающиеся деталей работы тех или иных серверов приложений, а так же кластеризации EJB и JMS, уже порядком устарели, но общие принципы, изложенные в статье, остались неизменными.

Введение

Важно понимать, что кластер должен обеспечивать две вещи:

  • Балансировку нагрузки (Load Balancing). Между вызываемым объектом и вызывающим субъектом должен находиться компонент, балансировщик нагрузки, задача которого - перераспределять запросы между разными экземплярами вызываемого объекта. Высокая доступность и высокая производительность реализуются именно данным способом.

  • Преодоление отказа (Failover). Если целевой объект (т.е. тот, к которому перенаправляются вызовы) становится недоступен, то система преодоления отказов должна зафиксировать данный факт и перенаправить последующие запросы на доступные объекты. Именно данным способом реализуется отказоустойчивость.

Чтобы понять кластеризацию нужно ответить на следующие вопросы:

  • какие типы объектов могут быть кластеризованы?

  • где осуществляется балансировка нагрузки и преодоление отказов в моем коде?

В реальности не каждый объект может быть кластеризован и не всегда в коде осуществляется балансировка нагрузки и
преодоление отказа.

Например, рассмотрим следующий код:


public class A {
    ...

    public void business() {
        B instance1 = new B();
        instance1.method1();
        instance2.method2();
        ...
    }
}

public class B {
    ...

    public void method1() {
    }

    public void method2() {
    }
}

В данном коде вызовы методов класса B из класса A не обеспечивают ни балансировки нагрузки, ни преодоления отказа. Для обеспечения данных параметров необходим интерцептор между вызывающим и вызываемым объектами, который будет осуществлять диспетчеризацию и перенаправление запросов на различные копии объектов. Объекты классов A и B работают в одной и той же JVM и сильно связаны друг с другом. Очень сложно разместить логику диспетчеризации между ними.

Из данного примера мы видим, что кластеризации поддаются только те типы объектов, которые могут быть развернуты на распределенной системе. Балансировка нагрузки и преодоление отказов в коде реализуются только при вызове методов удаленных объектов, т.е. объектов, работающих на другой JVM.

понедельник, 21 июля 2014 г.

О спорном паттерне DAO

В последние годы, после выхода спецификации Java EE 6, среди разработчиков и архитекторов информационных систем развернулась нешуточная дискуссия на тему паттерна DAO. Некоторые архитекторы и евангелисты уверены, что данный паттерн устарел и является избыточным решением в эпоху инъектируемого сразу в EJB- или CDI-компоненты JPA EntityManager'а. Другие же упорно настраивают на необходимости его применения.


@Stateless
public class MyDocumentService implements DocumentService {

    @PersistenceContext
    private EntityManager em;

    // ...
}

Давайте попробуем разобраться в данном вопросе.

пятница, 27 июня 2014 г.

Долгожданный релиз Oracle Fusion Middleware 12c!

Прямо неделя релизов какая-то. Сначала Eclipse Luna, теперь долгожданный релиз Oracle Fusion Middleware 12c. Скажем дружно: "Наконец-то!".

Итак, чем же нас порадовала корпорация Oracle в этот раз.

Во-первых, это конечно же новый Oracle WebLogic 12.1.3 с частичной поддержкой Java EE 7.

Во-вторых, вышло обновление основных компонентов:
- Oracle SOA Suite;
- Oracle BPM Suite;
- Oracle Service Bus;
- Oracle Event Processing.

Oracle SOA Suite, BPM Suite и OSB можно установить из одного архива. Oracle Data Integrator можно скачать по ссылке. Oracle Event Processing в свою очередь доступен по данному адресу.

Так же обновилась наша любимая среда разработки Oracle JDeveloper. Важно! Разработка для Oracle Service Bus и Oracle Event Processing теперь тоже ведется в данной среде.

Итак, что же стало лучше?

Общие изменения

1. Упростилась установка среды разработки. WebLogic, JDeveloper и компоненты Fusion Middleware устанавливаются из одного архива. Разработанные композиты могут запускаться на встроенном в JDeveloper экземпляре WebLogic'а аналогично старым-добрым сервлетам и EJB. В качестве СУБД для хранения схемы SOAINFRA используется JavaDB.

2. Добавлен отладчик композитов (и, вероятно, OSB-сервисов).

3. Добавлен встроенный тестер для SOA, теперь для запуска тестов не нужно обращаться к EM. Так же поддерживается CI (Maven/Hudson).

4. Добавлена поддержка REST.

5. Добавлены шаблоны компонентов при редактировании SOA-композитов. Можно разрабатывать свои компоненты.

6. Доработана оптимизация исполнения на Exalogic.

7. Переделана система авторизации в сторону большей гибкости.

8. Добавлен новый компонент - Enterprise Scheduler (ESS).

9. Улучшена консоль управления EM.

10. Улучшена обработка ошибок, т.н. Error Hospital.

11. Увеличена производительность платформы. Добавлена ленивая загрузка композитов и оптимизирована схема БД.

12. Улучшен SOA Composer.

13. Добавлен новый компонент - Managed File Transfer (MFT).

14. Добавлена поддержка мобильных каналов (Mobile Channel Enablement).

15. Добавлена поддержка облачных приложений.

16. Добавлены новые JCA-адаптеры (в частности LDAP-, Coherence-, MSMQ-адаптеры).

17. Улучшен компонент B2B.

BPEL

1. Добавлена поддержка встраиваемых и исполняемых отдельно (standalone) подпроцессов.

2. Добавлена поддержка шаблонов и разрабатываемых пользователем активностей.

Oracle Service Bus

1. Разработка для OSB теперь осуществляется в JDeveloper.

2. Добавлена поддержка переупорядочивания сообщений аналогично имеющейся в компоненте Mediator.

3. В EM добавлена консоль управления OSB.

4. Динамическая валидация содержимого сообщений во время исполнения, основанная на выражениях.

EDN

1. Переписан на использование JMS в качестве базовой реализации (раньше использовалась Oracle AQ). По-идее, теперь должна появиться возможность включать гарантированную доставку событий.

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

Много материала, описывающего нововведения, есть в блоге Niall Commiskey.

Long Live Oracle!

P.S. Конечно новая верстка сайта документации реальный вырвиглаз! Приходится скачивать в PDF и только потом читать, мартышка к старости слаба глазами стала...

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

среда, 25 июня 2014 г.

Eclipse Luna

Очередной июньский релиз Eclpse SDK.

Сегодня вышла новая версия замечательной и фактически самой распространенной и известной среды разработки - Eclipse SDK. Скачать релиз можно с обновленной страницы загрузки.

Так же можно посетить отдельную страницу релиза.

Для разработчиков на Java самым важным компонентом среды является конечно же Java Development Tools (JDT). Из основных нововведений стоит отметить полную поддержку Java 8 из коробки (в Kepler нужно ставить патч на JDT). Люди из мира Linux, привыкшие пользоваться Vim и Emacs, оценят новую темную схему. Так же стоит отметить, что наконец-то коллеги доделали разделение экранов редактирования кода, теперь открыть одновременно два окна на одном экране можно всего-лишь нажатием комбинации клавиш, причем разделение можно сделать как по вертикали, так и по горизонтали. Ну и конечно нас всех ждет множество других улучшений косметического характера (в частности теперь можно скрывать строку кнопок навигации и поиска, если вы ею все равно не пользуетесь, это позволяет выиграть место по вертикали).

Традиционно вместе со средой разработки для Java обновляется большинство основных проектов: Spring Tool Suite, C/C++ Development Tools (CDT), Eclipse Communication Framework (ECF), JavaScript Development Tools (JSDT), Web Tools Platform (WTP), EGit, ну и конечно же "внутренности": реализация OSGi - Equinox, SWT и е4. Всего нам обещают обновление 76-ти проектов. Все проекты доступны в Eclipse Marketplace.

Позволю себе отметить два интереснейших проекта.

Eclipse Recommenders. Это воистину киллер-фича. База исходного кода анализируется с помощью байесовских сетей и строится модель использования. Соответствующий плагин к Eclipse при использовании автоподстановки (Ctrl + Space) предлагает элементы кода в зависимости от частоты их использования в проанализированной базе, например при автоподстановке после System.out. он предложит сначала print(), потом println() и т.д., а не будет перечислять методы по алфавиту как в других IDE. Аналогичные возможности реализованы при переопределении методов и в цепочках вызовов. Можно подключать свои модели + есть модели для популярных фреймворков, но их надо искать. В поставке идет модель для JDK и многих проектов Eclipse, в частности упрощается процесс разработки на SWT.

Новый расширяемый движок сниппетов (шаблонов кода) - SnipMatch. Иногда при использовании API мало вызвать метод, его в добавок нужно обернуть в try-with-resource или выполнить какую-то подготовительную работу. Теперь можно написать снипеты для своего фреймворка и выложить их куда-нибудь в Git-репозиторий. Eclipse может подключаться к таким репозиториям и предлагать шаблоны кода из них. В итоге разработка становится существенно быстрее. Естественно есть встроенный редактор шаблонов. Вместе со SnipMatch уже поставляется большое количество шаблонов + в сети есть репозитории для популярных фреймворков, например Vaadin.

О самых последних новостях из мира Eclipse можно узнавать, подписавшись на планету Eclipse, - агрегатор англоязычных блогов, посвященных данной платформе. Большинство блогов ведут лидеры тех или иных проектов, поэтому информация представлена из первых рук. Напомню, что Eclipse - это не только удобная IDE, но фактически целый отдельный мир программирования на Java по объему сопоставимый с Java EE и на мой взгляд превосходящий Spring Framework со всеми его ответвлениями.

Приятной вам разработки!

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

вторник, 24 июня 2014 г.

Новый пример - Message-Driven POJO на основе Spring Framework

Разбирался с хламом на диске и нашел старый пример чтения сообщений из JMS посредством кода на основе Spring Framework. В некоторых кругах данный подход называют Message-Driven POJO. Пример осуществляет чтение из очереди в несколько потоков, причем за управление потоками отвечает WorkManager. Оформил как Maven-проект и добавил к своей коллекции примеров на GitHub.

Проект основан на Spring 4, поэтому пришлось повозиться с зависимостями. Больше всего удивило, что в Maven-репозиториях теперь не так-то просто найти архив с интерфейсами JMS 1.1. Все так активно переходят на 2.0?

Возможно вам это будет интересно.

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