T.M. SoftStudio

feci quod potui, faciant meliora potentes

Купить полную версию книги "Среда разработки Eclipse 4: Руководство разработчика"

Разработка SCA-приложений

Проект SCA Tools предоставляет набор инструментов для среды Eclipse, позволяющих создавать SOA-приложения на основе спецификаций OSOA Service Component Architecture (SCA) 1.0 (http://www.oasis-opencsa.org/sca) и OASIS SCA 1.1 (https://www.oasis-open.org/committees/).

Отличие OSOA SCA от OASIS SCA можно посмотреть на странице http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Fae%2Fcsca_overview.html.

Спецификации SCA описывают модель для создания приложений и систем на основе архитектуры Service-Oriented Architecture (SOA).

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

Для создания SOA-приложения SCA предоставляет четыре модели – Assembly, Implementation, Policy и Bindings.

Модель SCA Assembly Model определяет, как сервисные компоненты комбинируются, связываются и собираются независимо от языка программирования.

Модель SCA Assembly Model представляет собой набор XML-файлов, описывающих конфигурацию SCA-приложения на языке Service Component Definition Language (SCDL) в терминах сервисных компонентов – SCA Component, представляющих и/или использующих сервисы, и соединений, представляющих взаимодействия между компонентами.

SCA-компоненты собираются в логические единицы – SCA Composite, представленные SCDL-конфигурациями – XML-файлами с расширением .composite.

SCA-приложение может состоять из одной или нескольких Composite-единиц.

Структура SCA-компонента состоит из сервисов (Services), которые он представляет, ссылок на сервисы других SCA-компонентов (References), которые он использует, и свойств (Properties), которые SCA-компонент имеет и которые описываются в SCDL-файле.

Внутри Composite-единицы сервисы и ссылки связываются Wire-соединениями, однако сами Composite-единицы также могут предоставлять сервисы и содержать ссылки на сервисы других Composite-единиц, и такие сервисы и ссылки связываются Promote-соединениями.

Модель SCA Component Implementation определяет, как SCA-компоненты реализуются на определенном языке программирования.

Модель SCA Bindings определяет, как сервисы SCA-компонентов становятся доступными независимо от языка программирования. Сервисы и ссылки SCA-компонентов могут соединяться с помощью технологии Web-сервисов, программного интерфейса JMS API и EJB-модели программирования.

Модель SCA Policy определяет, как добавить политики сервисов SCA-компонентов независимо от языка программирования. Модель SCA Policy описывает два типа политик – политики взаимодействия (Interaction) и политики реализации (Implementation). Interaction-политика накладывает ограничения на взаимодействие SCA-компонентов, а Implementation-политика накладывает ограничение на поведение SCA-компонента внутри контейнера.

Используя набор инструментов проекта SCA Tools, SCA-приложение создается следующим образом.

С помощью графического редактора SCA Composite Designer создается модель SCA Assembly приложения, основной единицей которой является SCA Composite артефакт, определяющий набор взаимодействующих сервисных компонентов, использующих и/или реализующих сервисы, доступные удаленно, и являющийся единицей развертывания SCA-приложения.

SCA Composite артефакт представлен Composite-диаграммой и XML Composite-файлом, на базе которого с помощью инструмента SCA Composite to Java Generator генерируется Java-код основы сервисов.

Для развертывания SCA-приложения можно воспользоваться SCA-средой выполнения Apache Tuscany (http://tuscany.apache.org/).

Для установки набора инструментов SCA Tools откроем среду Eclipse и в меню Help выберем опцию Install New Software, в поле Work with: выберем адрес Eclipse-релиза, в разделе SOA Development отметим флажки SCA-плагинов и нажмем кнопку Next (рис. 12.1).

Рис. 12.1. Установка набора инструментов SCA Tools

Для создания SCA-приложения в меню File среды Eclipse выберем опцию New | Other | SCA | SCA Java Project и нажмем кнопку Next, введем имя проекта и нажмем кнопку Finish.

В окне Package Explorer перспективы Java нажмем правой кнопкой мышки на узле папки src проекта и в контекстном меню выберем опцию New | Other | SCA | SCA Composite и нажмем кнопку Next. В поле File name: введем имя Composite-артефакта и нажмем кнопку Finish (рис. 12.2).

Рис. 12.2. Мастер создания SCDL-конфигурации

В результате в папке src каталога проекта будут созданы два взаимосвязанных файла с расширениями .composite и .composite_diagram.

Composite-файл и Composite-диаграмма по умолчанию открываются в редакторах SCA Form Editor и SCA Diagram Editing, при этом окно редактора Composite-диаграммы имеет палитру компонентов (рис. 12.3 и рис. 12.4).

Рис. 12.3. Окно редактора Composite-файла

Рис. 12.4. Окно редактора Composite-диаграммы

В редакторе Composite-диаграммы, используя палитру компонентов, создадим простую Composite-диаграмму, состоящую из двух SCA-компонентов, один из которых содержит сервис, используемый другим SCA-компонентом, а другой SCA-компонент предоставляет сервис, доступный извне (рис. 12.5).

Рис. 12.5. Composite-диаграмма SCA-приложения

При этом Composite-файл будет иметь следующий код:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><sca:composite xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" name="sample" targetNamespace="http://eclipse.org/SCA/src/sample">

<sca:component name="Component1">

<sca:implementation.java class="sample.com.Component1Impl"/>

<sca:service name="Component1Service">

<sca:interface.java interface="sample.com.Component1Service"/>

</sca:service>

<sca:reference name="Component2Reference"/>

</sca:component>

<sca:service name="Component1Service" promote="Component1/Component1Service"/>

<sca:component name="Component2">

<sca:implementation.java class="sample.com.Component2Impl"/>

<sca:service name="Component2Service">

<sca:interface.java interface="sample.com.Component2Service"/>

</sca:service>

</sca:component>

<sca:wire source="Component1/Component2Reference" target="Component2/Component2Service"/>

</sca:composite>

В окне Package Explorer нажмем правой кнопкой мышки на узле sample.composite и в контекстном меню выберем опцию SCA | Generate Java Skeleton. В результате откроется окно мастера генерации Java-кода из Composite-файла, в котором нажмем кнопку OK (рис. 12.6).

Рис. 12.6. Окно мастера генерации Java-кода из Composite-файла

Дополним сгенерированный Java-код согласно листингов 12.1, 12.2, 12.3 и 12.4.

Листинг 12.1. Код интерфейса сервиса компонента Component1

package sample.com;

import org.osoa.sca.annotations.Remotable;

@Remotable

public interface Component1Service {

String getDataComponent1Service();

}

Листинг 12.2. Код реализации компонента Component1

package sample.com;

import org.osoa.sca.annotations.Service;

import org.osoa.sca.annotations.Reference;

@Service(Component1Service.class)

public class Component1Impl implements Component1Service {

@Reference(name = "Component2Reference", required = true)

protected Component2Service Component2Reference;

// TODO: define the service implementation.

public String getDataComponent1Service(){

String str=Component2Reference.getDataComponent2Service();

return "Hello "+str;

}}

Листинг 12.3. Код интерфейса сервиса компонента Component2

package sample.com;

import org.osoa.sca.annotations.Remotable;

@Remotable

public interface Component2Service {

String getDataComponent2Service();

}

Листинг 12.4. Код реализации компонента Component2

package sample.com;

import org.osoa.sca.annotations.Service;

@Service(Component2Service.class)

public class Component2Impl implements Component2Service {

public String getDataComponent2Service(){

return "World";

}}

Для развертывания SCA-приложения и создания его Java-клиента скачаем и распакуем дистрибутив SCA-реализации Apache Tuscany (http://tuscany.apache.org/sca-java-1x-releases.html).

В окне Package Explorer нажмем правой кнопкой мышки на узле Referenced Libraries проекта и в контекстном меню выберем опцию Build Path | Configure Build Path. В открывшемся окне мастера кнопкой Add External JARs добавим в путь проекта JAR-файлы папки lib дистрибутива Apache Tuscany и нажмем кнопку OK.

В папке src проекта создадим пакет main с классом Main, содержащим следующий код:

package main;

import org.apache.tuscany.sca.host.embedded.SCADomain;

import sample.com.*;

public class Main {

public static void main(String[] args) {

Main main=new Main();

main.runComposite();

}

public void runComposite(){

SCADomain scaDomain = SCADomain.newInstance("sample.composite");

Component1Service component1Service=scaDomain.getService(Component1Service.class, "Component1");

String str=component1Service.getDataComponent1Service();

System.out.println(str);

}}

Для развертывания SCA-приложения и запуска его клиента в окне Package Explorer нажмем правой кнопкой мышки на узле класса Main и в контекстном меню выберем опцию Run As | Java Application. В результате в окне Console среды Eclipse будет выведено традиционное:

AM org.apache.tuscany.sca.node.impl.NodeImpl <init>

INFO: Creating node: sample.composite

AM org.apache.tuscany.sca.node.impl.NodeImpl configureNode

INFO: Loading contribution: file:/D:/workspace/SCASample/bin/

AM org.apache.tuscany.sca.node.impl.NodeImpl start

INFO: Starting node: sample.composite

Hello World