Apache Tuscany

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:00, 21 января 2019.
Apache Tuscany
TuscanyLogo.jpg
Разработчики: Apache Software Foundation
Выпущена: SCA Java 1.6.2 (April 2011), SCA Java 2.0-Beta2 (February 2011), SDO Java 1.1.1 (July 2008), DAS Java 1.0-incubating-beta2 (Oct 2007), SCA Native Incubator-M3 (May 2007)
Написана на: C++, Java
Операционная система: Кросс-платформенное
Локализация: Английский
Тип ПО: SOA
Лицензия: Apache License 2.0
Веб-сайт tuscany.apache.org

Apache Tuscany упрощает задачу разработки SOA решений, предоставляя комплексную инфраструктуру для разработки и управления SOA, основанную на стандарте Service Component Architecture (SCA). Основываясь на SCA, Tuscany предлагает разработчикам решений следующие преимущества:

  • Предоставляет модель для создания составных приложений, определяя службы в структуре и их взаимосвязи. Услуги могут быть реализованы в любой технологии. [Источник 1]
  • Позволяет разработчикам служб создавать повторно используемые службы, содержащие только бизнес-логику. Это снижает стоимость разработки.
  • Приложения могут легко адаптироваться к изменениям инфраструктуры без перекодирования, поскольку протоколы обрабатываются с помощью подключаемых привязок, а качество услуг (транзакции, безопасность) обрабатывается декларативно.
  • Существующие приложения могут работать с новыми композициями SCA. Это обеспечивает постепенный рост в сторону более гибкой архитектуры.

Apache Software Foundation в августе 2016 объявило, что проект больше не поддерживается.

Обзор SCA

SCA - это модель программирования для абстрагирования бизнес-функций от компонентов и их использования в качестве строительных блоков для сборки бизнес-решений. Компонент SCA предлагает услуги и зависит от функций, которые называются ссылками. С ним также связана реализация, представляющая собой бизнес-логику, которая может быть реализована в любой технологии. [Источник 2]

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

SCA также обеспечивает гибкость развертывания. Решение, объединенное с SCA, развертывается как единое целое и может быть распределено по одному или нескольким узлам в сети и может быть перенастроено без изменений в программировании.

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

Apache Tuscany SCA реализован на Java и C ++ (именуемый Native) .

SCA JAVA

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

На высоком уровне инфраструктуру Tuscany Java SCA можно разделить на две категории модулей: ядро ​​и расширения, см. рисунок 1. Основные модули состоят из выбираемых компонентов, которые обеспечивают поддержку SCA и обработки данных, а также времени выполнения ядра. Базовая среда выполнения включает в себя такие функции, как загрузка системы и служб приложений, создание и управление композитами. Категория расширений состоит из набора выбираемых модулей, которые поддерживают интеграцию различных технологий, которые требуются в среде SOA. Это включает в себя поддержку различных протоколов с помощью привязок, языков программирования с помощью реализаций, типов данных, безопасности и транзакций. Все это составляет узел SCA. Составное приложение SCA можно распределить по нескольким узлам в облаке или запустить на одном узле.

Рисунок 1 – SCA node

















Обзор SDO

SOA создает среду, в которой разные типы данных должны работать вместе. Это делает разработку приложений сложной. Сервисный объект данных (SDO) предоставляет очень простую модель программирования, которая решает эту проблему. Ключевые преимущества SDO высокого уровня:

  • Единый доступ к данным из разнородных источников, которые могут быть XML, RDB, POJO, SOAP и т. д.
  • SDO предоставляет как статическую (или строго типизированную) модель программирования, так и динамическую (или свободно типизированную) модель программирования. Это обеспечивает простую модель программирования без ущерба для динамической модели, необходимой инструментам и средам.
  • Предоставляет метаданные для простого анализа типов данных
  • Поддерживает отключенную модель, благодаря которой данные могут быть получены из источника данных через службу доступа к данным . Данные могут быть изменены клиентом с отслеживанием изменений и применены обратно к источнику данных.
  • Модель программирования SDO не зависит от языка

Tuscany реализует SDO на Java и в C ++ . PHP версия SDO также доступна. [Источник 3]

SDO Java

Tuscany SDO Java реализует спецификацию SDO 2.1 и дополняется служебными API, которые дополнительно расширяют функциональность.

Кодовая база проекта включает в себя следующее:

  • Поддержка динамических объектов данных
  • Генерация статического кода (недавно обновлена ​​для удаления внешних аспектов зависимости EMF )
  • Определение типов с использованием реализаций XMLHelper, XSDHelper, DataFactory, CopyHelper, EqualityHelper.
  • Поддержка ChangeSummary для DataGraphs и DataObjects
  • Примеры программ

Tuscany предоставляет службу доступа к реляционным данным ( RDB DAS ), которая работает с SDO Java.

Обзор DAS

Сервисный объект данных (SDO) предоставляет единый API для обработки различных типов данных. Служба доступа к данным (DAS) упрощает обработку данных при взаимодействии с внутренним источником данных и освобождает разработчиков приложений от утомительного и подверженного ошибкам преобразования между типами конечных источников и типами / свойствами объектов данных SDO.

Tuscany предоставляет реализацию для различных версий DAS на двух языках: Java и C ++.

Рисунок 2 иллюстрирует взаимодействие с клиентом. Клиент начинает с чтения графика данных и вносит изменения в график, возможно, путем добавления элементов, а затем запрашивает DAS отправить изменения обратно в источник данных.

Рисунок 2 – client interaction



















DAS Java

RDB DAS обеспечивает возможность преобразования между графами данных SDO и реляционными базами данных, и наоборот. Tuscany реализует SDO на Java и в C ++ . PHP версия SDO также доступна. [Источник 4]

Используя RDB DAS, разработчики приложений избегают деталей и сложностей работы непосредственно с реляционной базой данных, а также сложного преобразования между реляционными строками / столбцами и типами / свойствами объекта данных SDO.

RDB DAS обрабатывает сводку изменений SDO и создает эффективные операторы обновления, которые записывают только те столбцы, которые были фактически изменены.

Рисунок 3, также как и рисунок 2, иллюстрирует клиента DAS. Клиент начинает с чтения графика данных, указанных в каком-либо запросе. Затем клиент вносит изменения в график, возможно, путем добавления элементов, а затем просит DAS отправить изменения обратно в базу данных.

Рисунок 3 – client DAS










Построение калькулятора с помощью командной строки

На сайте проекта вы можете загрузить различные версии SCA, SDO и DAS для разных систем.

Рассмотрим подход, основанный на командной строке, для начала работы с Apache Tuscany Java SCA. Для пользователей Eclipse есть другие руководства, в которых показано, как установить дистрибутив в Eclipse или как использовать Tuscany SCA Java с помощью плагина Eclipse, который был создан как часть проекта. Однако в этой статье используется только загруженный дистрибутив Tuscany SCA Java, Java, Maven или Ant и командная строка. Так что, если вы хотите почувствовать себя ближе к действию, это то, с чего нужно начать!

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

Настройка среды

  • Загрузите Java-релиз Tuscany SCA .
  • Скачать Java
  • Загрузить инструмент сборки Maven 2.0.7+ или Ant 1.7.0

Запустите приложение существующего калькулятора

Tuscany SCA предоставляет образец калькулятора с его двоичным распределением. Вы можете найти его в каталоге samples/calculator. Как показано на рисунке 4, этот образец и каждый образец в Tuscany имеет «readme», объясняющее, как запустить образец, файл * .png, который показывает, как выглядит приложение SCA.

Рисунок 4 – каталог calculator



















Давайте сначала запустим образец, прежде чем приступить к его построению. Это легко! Перейти в каталог ..\ samples\calculator

ant run

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

  • если вы используете Windows, введите команду:
java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-calculator.jar calculator.CalculatorClient
  • если вы используете * nix, введите команду:
java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-calculator.jar calculator.CalculatorClient

Вы должны увидеть следующий результат(рисунок 5):

3 + 2 = 5,0 
3 - 2 = 1,0 
3 * 2 = 6,0 3/2 
= 1,5

Рисунок 5 – командная строка


















Если вы используете исходный дистрибутив, мы предлагаем вам использовать Maven для построения и запуска примера калькулятора, поскольку tuscany-sca-manifest.jar не поставляется с исходным дистрибутивом. Этот jar является частью бинарного дистрибутива и собирает все jar-файлы Tuscany в одном месте.

Построить образец калькулятора на Java

Этот пример иллюстрирует, как определить ваше приложение, оставаясь сфокусированным на бизнес-логике. Он проведет вас через шаги построения образца калькулятора. Все соединения между компонентами в составе являются локальными и описываются с использованием интерфейсов Java.

Шаг 1. Определите, какие строительные блоки необходимы: подумайте, как ваше приложение можно разбить на более мелкие функции / сервисы. Каждый блок представляет собой логическую единицу операции, которую можно использовать в общем приложении. В этом случае приложение калькулятора можно разделить на пять блоков: блок AddService, блок SubstractService, блок MultiplyService и блок DivideService, а также основной блок, который принимает запрос и направляет его в нужную операцию. Мы назвали этот основной блок CalculatorService, см. рисунок 6.

Рисунок 6 – calculator application











Шаг 2. Реализация каждого блока. Теперь, когда вы определили блоки функциональности в своем приложении, вы готовы создать каждый блок. В SCA блоки функциональности называются компонентами, поэтому давайте посмотрим, как мы реализуем компонент. Мы возьмем компонент AddService в качестве нашего первого примера.

Компонент AddService будет предоставлять услугу, которая добавляет два числа вместе. Компонент CalculatorService использует компонент AddService всякий раз, когда его просят выполнить добавления. Если бы мы писали компонент AddService на простой старой Java, мы бы начали с описания интерфейса (Java).

public interface AddService {

    double add(double n1, double n2);
}

Теперь мы предоставляем реализацию этого интерфейса.

public class AddServiceImpl implements AddService {

    public double add(double n1, double n2) {
        return n1 + n2;
    }
}

Но ждать! Разве мы не пишем компонент SCA? Это должно быть сложнее, чем простой старый интерфейс и реализация Java, верно? Ну, на самом деле, компонент SCA может быть просто старой Java, поэтому мы только что выполнили все кодирование, необходимое для реализации компонента SCA AddService. Мы можем использовать SCA для предоставления сервиса, который компонент AddService предоставляет поверх любой из поддерживаемых привязок, например, WebServices, JMS или RMI, без изменения реализации AddService.

Давайте посмотрим на компонент CalculatorService. Это интересно, потому что он будет вызывать компонент AddService. В полном приложении оно также вызовет компоненты SubtractService, MultiplyService и DivideService, но пока мы будем игнорировать их, так как они следуют тому же шаблону, который мы реализуем для компонента AddService.

Опять же, мы начнем с определения интерфейса, потому что CalcultorService сам предоставляет интерфейс, который будут вызывать другие.

public interface CalculatorService {

    double add(double n1, double n2);
    double subtract(double n1, double n2);
    double multiply(double n1, double n2);
    double divide(double n1, double n2);
}

Сейчас мы реализуем этот интерфейс.

public class CalculatorServiceImpl implements CalculatorService {

    private AddService addService;
    private SubtractService subtractService;
    private MultiplyService multiplyService;
    private DivideService divideService;
   
    @Reference
    public void setAddService(AddService addService) {
        this.addService = addService;
    }

    ...set methods for the other attributes would go here

    public double add(double n1, double n2) {
        return addService.add(n1, n2);
    }

    ...implementations of the other methods would go here
}

Итак, теперь у нас есть некоторые компоненты, реализованные с использованием Java. Каждый компонент имеет четко определенный интерфейс, в этом случае используются интерфейсы Java. Обратите внимание, что это просто обычные Java-сервисы с бизнес-логикой и ничем иным в них.

Соберите приложение калькулятора

Пока что мы создали компоненты. Как мы на самом деле запускаем приложение калькулятора? Ну, конечно, программист java в нас хочет заняться этим, написать основную линию, чтобы соединить наши два компонента вместе и затем запустить. Мы все еще могли бы сделать это легко в этом случае.

public class CalculatorClient {
    public static void main(String[] args) throws Exception {

        CalculatorServiceImpl calculatorService = new CalculatorServiceImpl();
        AddService            addService        = new AddServiceImpl();
        calculatorService.setAddService(addService);
      
        System.out.println("3 + 2=" + calculatorService.add(3, 2));
        // calls to other methods go here if we have implemented SubtractService, MultiplyService, DivideService
    }
}

Но это не выполняется с использованием среды выполнения Tuscany SCA, и, например, расширение этого кода для предоставления интерфейсов веб-служб будет немного более сложным. Что мы должны сделать, чтобы запустить его в Tuscany, где мы получаем все, например, поддержку веб-сервисов бесплатно? Ну, не так много на самом деле. Сначала давайте изменим клиент так, чтобы он запускал среду выполнения Tuscany SCA перед вызовом наших компонентов.

public class CalculatorClient {
    public static void main(String[] args) throws Exception {

        SCADomain scaDomain = SCADomain.newInstance("Calculator.composite");
        CalculatorService calculatorService = scaDomain.getService(CalculatorService.class, "CalculatorServiceComponent");

        System.out.println("3 + 2=" + calculatorService.add(3, 2));
        // calls to other methods go here if we have implemented SubtractService, MultiplyService, DivideService

        scaDomain.close();
    }
}

Вы можете видеть, что мы начинаем с использования статического метода в SCADomain для создания нового экземпляра самого себя. SCADomain - это концепция в SCA, которая представляет собой границу системы SCA. Это может быть распределено по многим процессорам. А пока давайте сосредоточимся на том, чтобы заставить это работать внутри одной виртуальной машины Java.

Параметр «Calculator.composite» относится к XML-файлу, который сообщает SCA, как компоненты нашего калькуляторного приложения собираются в работающее приложение. Вот XML, который находится внутри Calculator.composite.


<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
           name="Calculator">

    <component name="CalculatorServiceComponent">
	<implementation.java class="calculator.CalculatorServiceImpl"/>
        <reference name="addService" target="AddServiceComponent" />
        <!-- You can add references to SubtractComponent, MultiplyComponent and DivideComponent  -->
    </component>

    <component name="AddServiceComponent">
        <implementation.java class="calculator.AddServiceImpl"/>
    </component>

    <!-- definitions of SubtractComponent, MultiplyComponent and DivideComponent -->

</composite>

В нашем случае до сих пор мы определили два компонента и указываем классы реализации Java, которые нужно загрузить SCA Tuscany, чтобы они работали, в файле .composite. Это классы, которые мы только что реализовали.

Также обратите внимание, что у CalculatorServiceComponent есть ссылка с именем «addService». В XML эта ссылка нацелена на AddServiceComponent. Неслучайно, что ссылочное имя «addService» совпадает с именем поля addService, которое мы создали при реализации CalculatorServiceImpl. Среда выполнения Tuscany SCA анализирует информацию из составного файла XML и использует ее для построения объектов и связей, которые представляют наше приложение калькулятора. Сначала создаются экземпляры AddServiceImpl и CalcualtorSreviceImpl. Затем он вставляет ссылку на объект AddServiceImpl в поле addService в объекте CalculatorServiceImpl. Если вы посмотрите на то, как мы реализовали CalculatorService, вы увидите аннотацию @Reference, которая сообщает SCA, какие поля будут автоматически устанавливаться SCA.

CalculatorServiceImpl calculatorService = new CalculatorServiceImpl();
AddService            addService        = new AddServiceImpl();
calculatorService.setAddService(addService);

Как только составной файл загружается в домен SCAD, наш клиентский код просит домен SCAD дать нам ссылку на компонент с именем «CalculatorServiceComponent».

CalculatorService calculatorService = scaDomain.getService(CalculatorService.class, "CalculatorServiceComponent");

Теперь мы можем использовать эту ссылку, как если бы мы создали ее сами, например, из реализации метода CalculatorServiceImpl.add ().

return addService.add(n1, n2);

Спецификации SCA часто описывают приложения SCA в схематической форме. Это часто помогает дать краткий обзор того, какие компоненты являются частью приложения и как они связаны друг с другом. Если мы нарисуем диаграмму того, что мы построили в образце калькулятора, мы получим нечто подобное (рисунок 7).

Рисунок 7 – calculator composite













Источники

  1. Welcome to Apache Tuscany // Apache Tuscany website. [2017-2018]. URL: http://tuscany.apache.org/ (дата обращения: 19.12.2018).
  2. What is SCA? // SCA website. [2017-2018]. URL: http://tuscany.apache.org/sca-overview.html (дата обращения: 19.12.2018).
  3. What is Service Data Object? // SDO website. [2017-2018]. URL: http://tuscany.apache.org/sdo-overview.html (дата обращения: 19.12.2018).
  4. What is Data Access Service? // DAS website. [2017-2018]. URL: http://tuscany.apache.org/das-overview.html (дата обращения: 19.12.2018).