вторник, 31 июля 2012 г.

Многоуровневая SOA

В заметке рассмотрена многоуровневая сервисно-ориентированная архитектура и ее отображение на технологическую платформу Oracle SOA Suite.

В типичной сервисно-ориентированной архитектуре на предприятии можно выделить пять основных слоев:

  1. Пользовательский интерфейс (User Interface).

  2. Бизнес-процессы (Business Processes).

  3. Бизнес-сервисы (Business Services).

  4. Виртуальные сервисы (Virtual Services).

  5. Сервисы приложений (Application Services).


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

  1. Пользовательский интерфейс (User Interface).

  2. [Виртуальные сервисы].

  3. Бизнес-процессы (Business Processes).

  4. Бизнес-сервисы (Business Services).

  5. Виртуальные сервисы (Virtual Services).

  6. Сервисы приложений (Application Services).

Рассмотрим данные слои подробнее, снизу-вверх.

четверг, 26 июля 2012 г.

Интеграция: Oracle Service Bus vs Oracle SOA Suite

Несмотря на то, что лицензионно Oracle Service Bus входит в состав Oracle SOA Suite, фактически это - два пакета, соответственно инсталлировать и использовать можно как каждый из них в отдельности, так и оба вместе. В данной заметке мы разберемся для каких задач, решаемых при интеграции приложений, следует использовать Oracle Service Bus, а для каких - композитные приложения, реализуемые с помощью Service-Component Architecture(SCA)-контейнера Oracle SOA Suite.

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

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

1Z0-451 Oracle SOA Foundation Practitioner успешно сдан

Сегодня Суровый сдал экзамен Oracle SOA Foundation Practitioner. Сдал на 95 баллов. Меня данный результат очень обрадовал. Лучше в своей жизни я сдавал только ЕГЭ по физике в далеком 2003-м году: 97 баллов.

Не имею права рассказывать об экзамене и вопросах, расскажу лишь о том, как готовился.

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

Для подготовки нужны две вещи: материалы и технология. В качестве материалов рекомендую использовать две следующие книги:

  • Oracle SOA Suite 11g Handbook by Lucas Jellema - книга довольно затянута и местами нудная, но некоторые главы, особенно касающиеся Oracle Service Bus, написаны очень хорошо.

  • Oracle SOA Suite 11g R1 Developer's Guide by Antony Reynolds and Matt Wright - на мой взгляд данная книга читается легче предыдущей, но некоторые моменты в ней описаны недостаточно полно. Не совсем понравилось, что информация об Oracle Service Bus размазана по всей книге, хотя это является следствием просто другого подхода к компоновке материала.

Помимо книг обязательна если не к прочтению, то хотя бы к беглому ознакомлению официальная документация. Прежде всего, это - Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite 11g Release 1.

Стоит отметить, что по дополнительным компонентам, например Oracle B2B информации в книгах или нет или крайне мало, поэтому рекомендуются к ознакомлению User Guide'ы по следующим технологиям: Technology Adapters, Applications Adapters, Business Rules, B2B, CEP и BAM.

По Oracle Service Bus рекомендуется к прочтению документ под названием Concepts and Architecture. Он не слишком объемный, но полезный. Если же его читать лень, то обратите внимание на 13-ю главу книги Lucas Jellema.

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

Как всегда рад ответить на ваши вопросы в комментариях.

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

воскресенье, 8 июля 2012 г.

Ищу разработчика ESB

UPD 27.07.2012: Вакансия закрыта, спасибо всем откликнувшимся.

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

Мне нужен человек, который знает и понимает, что такое SOA, умеет программировать на Java, желательно, знакомый с языком BPEL. Умение разрабатывать веб-сервисы и рассказать на собеседовании о структуре WSDL-описания будет большим плюсом. Знакомство с СУБД Oracle тоже приветствуется.

Самое главное: мы используем продуктовый стек Oracle Fusion Middleware: WebLogic Server, SOA Suite и Service Bus. Если вы знакомы с данным стеком, то это очень хорошо, если нет - не беда, готов обучить. В свою очередь ожидаю от кандидата способность и желание учиться.

Что мы предлагаем:
- Белую заработную плату, оформление по ТК;
- Оплату мобильной связи;
- Соцпкет (ДМС, обучение, фитнес);
- Сурового руководителя группы.

Наш офис находится на ст. м. Савеловская, м. Марьина Роща.

Если заинтересовались, то присылайте резюме на hr@at-consulting.ru, ну или мне - psamolysov@at-consulting.ru.

Важно: к сожалению, у нас не принято публиковать вилки зарплат. Готовы выслушать ваши пожелания.

Вопросы по работе, проекту, компании можете задавать в комментариях или лично.

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

четверг, 5 июля 2012 г.

Потоки в управляемой среде. WorkManager

Вся мощь серверов приложений проявляется в том, что они обеспечивают управляемую среду исполнения программ. С одной стороны это обозначает, что сервер приложений предоставляет некий набор API, например JSR-316 - Java EE 6, а с другой - сервер приложений предоставляет средства, обеспечивающие управление жизненным циклом программы, транзакциями, доступом к ресурсам и другим системам, а так же потоками.

Пул потоков


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

Администратор сервера приложений может настроить следующие параметры пула:

  • Приоритет потоков - параметр позволяет ранжировать потоки, создаваемые разными пулами, по приоритету. Таким образом можно настроить поведение при котором запрос пользователя к критичному для бизнеса приложению приостанавливает другие потоки в системе.

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


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

среда, 4 июля 2012 г.

Почему я не участвую в спорах Spring vs JavaEE

На мой взгляд спор не имеет смысла - один и тот же POJO может замечательно жить и под управлением EJB-контейнера и под управлением Spring Framework. Аргументы в стиле "EJB плохо тестируются" так же не состоятельны: при тестировании можно использовать Spring.

По сути, разница заключается лишь в том, что в Spring этот инъектируемый POJO по-умолчанию будет синглтоном и все его методы не являются потокобезопасными. В EJB контейнере же как правило создается пул объектов и спецификация гарантирует потокобезопасность бизнес-методов. При этом инъектируемый EntityManager является потокобезопасным в обоих случаях.

Позволю себе продемонстрировать данное мнение кодом, думаю так будет максимально наглядно. Данную заметку так же можно использовать в качестве пособия по интеграции JPA и Spring Framework.

IService:

package name.samolisov.demo;



public interface IService {



    public void transaction();

}

 

Service:

package name.samolisov.demo;



import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;



import name.samolisov.transactions.entity.Entity;



public class Service implements IService {

   

    @PersistenceContext(unitName = "TransactionSA")

    private EntityManager em;

       

    public void transaction() {        

        em.persist(new Entity(Thread.currentThread().getName()));      

    }  

}

 

Entity:

package name.samolisov.transactions.entity;



import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.SequenceGenerator;



@javax.persistence.Entity

public class Entity {

   

    @Id

    @SequenceGenerator(name = "EntitySeqGen", sequenceName = "id_seq", allocationSize = 10)

    @GeneratedValue(generator = "EntitySeqGen")        

    private Long id;

   

    private String message;



    public Entity() {

       

    }

   

    public Entity(String message) {

        this.message = message;

    }

   

    public Entity(Long id, String message) {

        this.id = id;

        this.message = message;

    }

   

    public Long getId() {

        return id;

    }



    public void setId(Long id) {

        this.id = id;

    }



    public String getMessage() {

        return message;

    }



    public void setMessage(String message) {

        this.message = message;

    }  

}

 

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="TransactionSA" transaction-type="JTA">

        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

        <jta-data-source>jdbc/xa/sa</jta-data-source>

        <class>name.samolisov.transactions.entity.Entity</class>

        <properties>

            <property name="eclipselink.target-server" value="WebLogic_10"/>

        </properties>

    </persistence-unit>

</persistence>