You are on page 1of 16

Plan

1. SCA

Service Component Architecture (SCA)

1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5. 5 Conclusion

Lionel Seinturier Universit Lille 1 & INRIA


Lionel.Seinturier@univ-lille1.fr

14/02/10
Lionel Seinturier 1 Lionel Seinturier 2

1. SCA
Constat : applications rparties (CORBA, .NET, Java EE, ) SOA

1. SCA

actuelles
souvent complexes, rigides, peu volutives Tendance SOA (Service Oriented Architecture) besoins identifis beso s de t s

Lionel Seinturier

essentiellement d principes architecturaux (l i i l ) ti ll t des i i hit t (logiciels)


couplage faible Components integrate with other components without needing to know how other components are implemented flexibilit Components can easily be replaced by other components services Services can be easily invoked either synchronously or asynchronously composition Composition of solutions clearly described productivit g p p pp Easier to integrate components to form composite application

interfaces bien dfinies avec une smantique lie au mtier focalisation sur l'change des donnes mtier protocoles de communication standardiss recombinaison flexible de services pour amliorer la flxibilit du logiciel

vision
A service is an abstraction that encapsulates a software function Developers build services, use services and develop solutions that aggregate services Composition of services into integrated solutions is a key activity
3

souvent organiss autour des Web Services (mais pas

ncessairement)
SOAP (HTTP XML) WS-*, orchestration BPEL (HTTP, XML), WS-

Lionel Seinturier

1.1 Principes SCA (Service Component Architecture)


a component model for SOA 11/2005

1.1 Principes
A set of specifications (15) (09/2008) Assembly model
how to define structure of composite applications extension for event processing and publish/subscribe how to write business services in particular languages Java, C++, Spring, BPEL, EJB SLSB, COBOL, C how to access services Web services, JMS, JCA, EJB how to add infrastructure services security, transaction, reliable messaging SCA Java EE Integration J I t ti SCA OSGi/Spring (draft)

Component implementation specifications

Hosted by the Open SOA consortium


http://www.osoa.org

Binding specifications g p

Standardized by OASIS
http://www.oasis-opencsa.org

Policy framework

Platform providers
O Open Source: Apache Tuscany, Newton, Fabric3, FraSCAti S 3 SC Vendors: IBM WebSphere FP for SOA, TIBCO ActiveMatrix, Covansys SCA Framework, Paremus, Newton, Rogue Wave HydraSCA, Oracle Fusion Middleware
Lionel Seinturier 5

Integration

+ SDO for accessing data sources


Lionel Seinturier 6

1.1 Principes Vision SCA


composants de service g p gros g grain ( (interfaces avec

1.1 Principes Composant SCA


service/rfrence proprit implmentation proprit non it

mthodes orientes mtier) assembls partir de composants grain plus fin


s'abstraire des dtails du middleware conformance avec les standards existants spcifications ouvertes, multi-vendeurs couplage faible pour permettre l'agilit l agilit capitaliser sur les pratiques du SOA

fonctionnelle (intent)

Lionel Seinturier

Lionel Seinturier

1.1 Principes Assemblage SCA

SCA assembly
Order Processing Service
OrderProcessing Component

RMI/IIOP AccountsComposite A t C it
Payment Service
Payments Component

External Banking Reference

Accounts Ledger Component

Java EE

BPEL SOAP/HTTP

Multi-level composition
WarehouseComposite
External Warehouse Reference

Warehouse Service

Warehouse Broker Component

Warehouse Component

Mixed: - technologies - app locations


Shipping Reference

JMS C++

Lionel Seinturier

OpenCSA Member Section Service Component Architecture

10

1.1 Principes Assemblage SCA


service/rfrence
type langage de dfinition d'interface (IDL) : Java ou WSDL binding : association avec une technologie de communication

1.1 Principes SCA


indpendances
langage de programmation langage de dfinition d'interfaces protocoles de communication proprits non fonctionnelles

liens
rfrence vers service : wire f i i service/service ou rfrence/rfrence : lien de promotion (promote)

Lionel Seinturier

11

Lionel Seinturier

12

Plan

1.2 Modle de programmation


Assembly model (language)
ADL bas XML

1. SCA
1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5. 5 Conclusion

Component implementations
1 ensemble de rgles de programmation par langage
mapping Java : utilise annotations Java 5

1. SCA/Java in a Nutshell 2. SCA/Java i a N t h ll avec W b S 2 SCA/J in Nutshell Web Services i 3. Modle de programmation Java 4. Quelques outils
STP/SCA Composite Designer FraSCAti Explorer
Lionel Seinturier 13 Lionel Seinturier 14

1.2.1 SCA/Java in a Nutshell


Principales annotations
@Service
les services fournis par le composants p p sapplique la classe dimplmentation du composant paramtres interfaces : les services fournis par le composant p p value : raccourci si un seul service fourni

1.2.1 SCA/Java in a Nutshell


Exemple Hello World
un composite un sous-composant Serveur fournissant une interface
de nom s de signature
interface MyService { void print(String msg); }

un sous-composant Client fournissant une interface


de nom r de signature java.lang.Runnable exporte au niveau du composite

@Reference
les services requis par un composant sapplique un attribut (field), un setter ou un paramtre de constructeur paramtres t name : le nom du service requis required : true si le rfrence est obligatoire (par dfaut true)

Cli t requiert le service fournit par linterface s d S Client i tl i f it li t f de Serveur

Lionel Seinturier

15

Lionel Seinturier

16

1.2.1 SCA/Java in a Nutshell


Exemple Hello World Composant Serveur @Service(value=MyService.class) public class ServeurImpl i l bli l l implements MyService { i public void print( String msg ) { System.out.println(msg); System out println(msg); } }

1.2.1 SCA/Java in a Nutshell


Exemple Hello World Composant Client @Service(value=Runnable.class) public class ClientImpl implements Runnable { @Reference(name="s") private MyService service; public void run() { bli id () service.print("Hello world!"); } }

Lionel Seinturier

17

Lionel Seinturier

18

1.2.1 SCA/Java in a Nutshell


Exemple Hello World Assemblage

1.2.1 SCA/Java in a Nutshell


Exemple Hello World Assemblage (suite et fin)
<component name="serveur">

<?xml version="1.0" encoding="UTF-8"?> ?xml version 1.0 encoding UTF 8 ? <composite name="hw" xmlns="http://www.osoa.org/xmlns/sca/1.0"> <component name="client"> <implementation.java class="hw.ClientImpl"/> <service name="r"> <interface.java interface="java.lang.Runnable"/> </service> <reference name="s"> <interface.java interface="hw.MyService"/> </reference> </component> p

<implementation.java class="hw.ServeurImpl"/> <service name="s"> <interface.java interface="hw.MyService"/> <service> <component>

<wire source="client/s" target="serveur/s"/> <service name="r" promote="client/r"> <interface.java interface="java.lang.Runnable"/> </service> </composite>

Lionel Seinturier

19

Lionel Seinturier

20

1.2.2 SCA/Java in a Nutshell avec Web Services Hello World en distant avec Web Services

1.2.2 SCA/Java in a Nutshell avec Web Services


Hello World en distant avec Web Services Composant Serveur
<composite name="serveur">

<service name="s" promote="serveur/s"> <interface.java interface="hw.MyService"/> <binding.ws uri="http://localhost:9000/HelloService"/> </service>


<component name="serveur"> <implementation.java class="hw.ServeurImpl"/> <service name="s"> <interface.java interface="hw.MyService"/> </service> </component> </composite>

Lionel Seinturier

21

Lionel Seinturier

22

1.2.2 SCA/Java in a Nutshell avec Web Services


Hello World en distant avec Web Services Composant Serveur

1.2.2 SCA/Java in a Nutshell avec Web Services


Hello World en distant avec Web Services Composant Client
<composite name="client"> <service name="r" promote="client/r"> <interface.java interface= java.lang.Runnable /> <interface java interface="java lang Runnable"/> </service>

<reference name="s" promote="client/s"> <binding.ws wsdli:wsdlLocation="http://localhost:9000/HelloService?wsdl" wsdlElement="#wsdl.port(MyService/MyServicePort)" /> </reference>


<component name="client"> <implementation.java class="hw.ClientImpl"/> <service name="r"> <interface.java interface="java.lang.Runnable"/> </service> <reference name="s"> <interface.java interface="hw.MyServicePortType"/> </reference> </component> </composite>

Lionel Seinturier

23

Lionel Seinturier

24

1.2.2 SCA/Java in a Nutshell avec Web Services


Hello World en distant avec Web Services
spcificit pile Web Services Apache CXF (utilise par FraSCAti)

1.2.3 Modle de programmation Java


Fonctionnalits SCA

25

@Service(value=Runnable.class) p public class ClientImpl implements Runnable { p p @Reference(name="s") private MyServicePortType service; public void run() { service.print("Hello world!"); } }

services requis cardinalit multiple proprits politique d'instanciation des composants initialisation/destruction des instances types d'implmentation d implmentation nom du composant (tel que dfini dans .composite) mthode asynchrone mode conversationnel mcanisme de rappel contexte d excution d'excution API de reconfiguration (spcifique FraSCAti) bindings intents
26

Lionel Seinturier

Lionel Seinturier

1.2.3 Modle de programmation Java


Fonctionnalits SCA

1.2.3 Modle de programmation Java


services requis cardinalit multiple @Reference
List<Service> services; <wire source="client/s" target="comp1/serv1 comp2/serv2" />

SCA Assembly Language (ADL) Service Component Architecture Assembly Model Specification Version 1.1 Java Component Implementation Component Architecture SCA-J Common Annotations and APIs Specification Version 1.1 Source OASIS Open Composite Services Architecture (CSA) http://www.oasis-opencsa.org

proprits
@Property : field, setter ou paramtre d'un constructeur <property name="aProp">aVal</property> < t " P "> V l</ t >

peuvent tre promues sur un composite (mme principe que pour les services, rfrences)
POJO

Remarques souvent plusieurs faons d'exprimer les concepts exemple : <wire> et <reference target=""> redondance d'i f d d d'information entre ADL et J ti t t Java compltion, consistence assurer

annotations @Reference et @Property peuvent tre omises conventions de nommage " la JavaBean" avec setter/getter
27 Lionel Seinturier 28

Lionel Seinturier

1.2.3 Modle de programmation Java


politique d'instanciation des composants
@Scope("COMPOSITE") class ServeurImpl implements MyService {

1.2.3 Modle de programmation Java


initialisation/destruction des instances
@EagerInit @Scope("COMPOSITE") class MyCompImpl() { @ @Init t void myMethInit() { ... } @Destroy void myMethDestroy() { ... } }

COMPOSITE singleton (dure de vie lie au composite parent) instance cre la demande lors de la 1re invocation de service REQUEST : une i t instance par requte t CONVERSATION : une instance par client STATELESS (par dfaut) pas de garantie sur l'tat similaire EJB stateless session bean
Lionel Seinturier 29

@Init @ : la cration de l'instance @Destroy : la destruction de l'instance @EagerInit pour composant @Scope("COMPOSITE") @Scope( COMPOSITE ) excution @Init au dmarrage du composite
sans @EagerInit, excution @Init la cration de l'instance donc l 1 i la re invocation ti
30

Lionel Seinturier

1.2.3 Modle de programmation Java


types d'implmentation
<implementation.java class="org.myp.MyClassImpl" /> <implementation.composite name="myFile.composite" />

1.2.3 Modle de programmation Java


nom du composant (tel que dfini dans .composite) @ComponentName String myCompName; mthode asynchrone @OneWay void myMethOneWay( ... ) { ... }

ncessaire ds hirarchie profondeur > 2 p utilisation de namespaces XML en cas de rpertoires diffrents
<composite name="top" xmlns:dir1="myDir/subDir" > <component name="sub1"> <implementation.composite name="dir1:myFile.composite"/> </component> </composite> </ it >
Lionel Seinturier 31

Lionel Seinturier

32

1.2.3 Modle de programmation Java


mode conversationnel interface @Conversational interface Cart { void addItem( ... ); void removeItem( ... ) id It ( ); @EndsConversation void orderNow(); } mode conversationnel composant @Scope("CONVERSATION") @ConversationAttributes( maxAge="2 minutes", maxIdleTime="30 seconds") // optionels format dfini par les spcifications SCA p p p class CartImpl implements Cart { @ConversationID void Object conversationID; ... }

1.2.3 Modle de programmation Java


mcanisme de rappel
<component name="client"> <service name="r" /> < i " " <reference name="s" target="serveur/s"> <interface.java interface="hw.MyService" j y callbackInterface="hw.MyCallBackItf" /> </reference> <implementation.java class="hw.ClientImpl"/> </component>

Lionel Seinturier

33

Lionel Seinturier

34

1.2.3 Modle de programmation Java


mcanisme de rappel interfaces interface MyCallBackItf { void notify( Object info ); }
@ @Callback(MyCallBackItf.class) ( y ) interface MyService { void print( String msg ); }

1.2.3 Modle de programmation Java


contexte d'excution @Context ComponentContext myCompCtx;

mcanisme de rappel composants class ClientImpl implements Runnable, MyCallBackItf { void notify( Object info ) { ... }
@Scope("COMPOSITE") class ServeurImpl implements MyService { @Callback MyCallBackItf cb; void print( String msg ) { cb.notify("rappel"); ... } }
Lionel Seinturier 35

API de reconfiguration (spcifique FraSCAti) @Context ReconfigurableComponentContext myCompCtx;

Lionel Seinturier

36

1.2.3 Modle de programmation Java

1.2.3 Modle de programmation Java


bindings RMI (spcifique FraSCAti)

bindings Web Service <binding.ws> binding.ws wsdli:wsdlLocation="URI wdsl" URI pour accder au WSDL du service ventuellement : liste de plusieurs URI alternatives xmlns:wsdli="http://www.w3.org/2004/08/wsdl-instance" wsdlElement (optionel)
<WSDL-namespace-URI>#wsdl.port(<service-name>/<port-name>) <WSDL-namespace-URI>#wsdl.port(<service-name>/<endpoint-name>) <WSDL-namespace-URI>#wsdl.service(<service-name>)
recherche du portType ou du endPoint compatible

<frascati:binding.rmi> xmlns:frascati="http://frascati.ow2.org/xmlns/sca/1.1" host serviceName


WSDL 1.1 WSDL 1.2

: adresse machine : identifiant : numro de port

port

<WSDL-namespace-URI>#wsdl.binding(<binding-name>) p g( g )

SCA

<reference name="weather"> <binding.ws wsdli:wsdlLocation="http://www.webservicex.net/globalweather.asmx?wsdl" wsdlElement="http://www.webservicex.net#wsdl.port(GlobalWeather/GlobalWea therSoap)" /> </reference>

<service name="s"> <frascati:binding.rmi host="localhost" serviceName="rmiservice" port="1099" /> </service>

Lionel Seinturier

37

Lionel Seinturier

38

1.2.3 Modle de programmation Java


bindings REST (spcifique FraSCAti)

1.2.3 Modle de programmation Java


intent mcanisme dclaratif permettant de spcifier un besoin non fonctionnel specification : SCA Policy Framework
intents spcifiques p q scurit : @Authentication, @Confidentiality, @Integrity intents gnraux annotation : @Requires @ q Assembly Language : requires="" sur <service>, <reference> (sur <composite>, <component> => <service>, <reference>) policy set : groupement d'intents dclaration uniquement mise en uvre platform-specific FraSCAti F SCAti chaque service non fonctionnel est un composant (ou composite) SCA liaison d'interception " la AOP" entre composants applicatifs et composant non fonctionnel
40

<frascati:binding.rest> f xmlns:frascati="http://frascati.ow2.org/xmlns/sca/1.1" uri : URI du service utilisation conjointes des annotations JAX-RS

<service name="s"> <frascati:binding.rest uri="http://localhost:8080/CounterService" /> </service>


public interface CounterService { @GET @Path("/") @Produces("text/plain") int getValue(); @POST @Path("/incr") void increment(int v);
Lionel Seinturier 39 Lionel Seinturier

@POST @Path("/decr") void decrement(int v); @POST @Path("/reset") void resetIt(); }

1.2.3 Modle de programmation Java


intent
intent

1.2.3 Modle de programmation Java

dfinition d'un besoin non fonctionnel de trace d un requires="fichier.composite" <composite name="serveur" > <service name="s" promote="serveur/s" /> <component name="serveur"> <implementation.java class="hw.ServeurImpl"/> <service name="s" requires="trace"> <interface.java interface="hw.MyService"/> </service> </component> </composite> / i

Lionel Seinturier

41

Lionel Seinturier

42

1.2.3 Modle de programmation Java


intent

1.2.3 Modle de programmation Java


intent p implantation du besoin non fonctionnel org.ow2.frascati.tinfi.control.intent IntentHandler : service fournis par un composant non fonctionnel IntentJoinPoint : API d'introspection du point d'interception

dfinition d'un .composite "normal" pour le besoin non fonctionnel d un composite normal Fichier: trace.composite <composite name="trace" > <service name="t" promote="traceur/t" /> <component name="traceur"> <implementation.java class="hw.TraceurImpl"/> <service name="t"> i " " <interface.java interface="hw.MyTraceurItf"/> </service> </component> </composite> / p

@Scope("COMPOSITE") @Service(IntentHandler.class) public class TraceurImpl implements IntentHandler { public Object invoke( IntentJoinPoint ijp ) throws Throwable { // ... code avant ... Object ret = ijp.proceed(); j jp p (); // ... code aprs ... return ret; } }

Lionel Seinturier

43

Lionel Seinturier

44

1.2.3 Modle de programmation Java


Conclusion
un modle de composants pour la SOA base : annotations Java 5 + ADL XML nombreuses similitudes avec autres modles de composants

1.2.3 Modle de programmation Java Conclusion Autres fonctionnalits proprits complexes dont le type est dfini par un schma XML <include> i l d autowire constraining type packaging SCA .zip autres bindings existants : JMS, EJB SLSB, JCA autres component implementations : C++,
45 Lionel Seinturier 46

( (Fractal/Fraclet, OSGi, iPOJO, ) , , , ) SCA s'arrte au dploiement pas de mcanisme de reconfiguration d'o extensions, e g FraSCAti d o extensions e.g.

souvent plusieurs faons d'exprimer les concepts

exemple : <wire> et <reference target="">


redondance d'information entre ADL et Java

p , compltion, consistence assurer


Lionel Seinturier

Plan

1.3 Outils Eclipse STP/SCA Composite Designer

1. SCA
1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5. 5 Conclusion

Lionel Seinturier

47

Lionel Seinturier

48

1.3 Outils OW2 FraSCAti Explorer

Plan

1. SCA
1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5. 5 Conclusion

Lionel Seinturier

49

Lionel Seinturier

50

1.4 FraSCAti
Middleware platform for SCA
OW2 Project since Oct 2008 http://frascati.ow2.org LGPL SCA++

1.4 FraSCAti Platform Architecture

dynamic deployment & configuration distributed deployment with FDF/DeployWare runtime adaptation & reconfiguration i d i fi i introspection & reconfiguration support via Fractal reconfiguration of SCA components & FraSCAti itself reflective SCA platform lightweight, efficient, predictable, scalable

Lionel Seinturier

51

Lionel Seinturier

52

1.4 FraSCAti

1.4 FraSCAti

Plate-forme pour SCA en SCA SCA tous les niveaux plate-forme, services non fonctionnels, services applicatifs vision homogne d'un systme SOA p , , mme outils conception, maintenance, tests Assembly Factory parser EMF, XML Schemas dfinis dans les spcifications p p invoque la Binding Factory et l'Assembly Factory cre les wires (connecte les composants entre eux) fixe la valeur initiale des proprits associe les services fonctionnels aux composants applicatifs Binding Factory gre les interactions avec le monde extrieur framework Fractal gnre des composants stub/skeleton de communication distante (e.g. RMI, REST, WS) de liaison "quelconque" (e.g. OSGi)
53

Component Factory instancie les composants utilise Tinfi personnalit Fractal pour SCA dfinit membranes (conteneurs) implantant la smantique d'excution d excution SCA chaque composant FraSCAti SCA a une double personnalit API SCA API Fractal
permet de rutiliser les outils Fractal existants

Chane de production gnration/compilation de code utilise Spoon, Eclipse JDT, Juliac, etc. utilisable off-line, online ff code de la plate-forme gnr/compil off-line code des applications/services techniques gnr/compil off-line ou online

Lionel Seinturier

Lionel Seinturier

54

1.4 FraSCAti Capacits de reconfiguration


wire proprits hirarchie de composants bindings
Conclusion

1.4 FraSCAti

plate-forme SCA reconfigurable vision homogne d'un systmes SOA d un

changement de composant stub/skeleton changement de proprit (e.g. URL WS)


instantiation/retrait dynamique de composants dploiement distance

Autres fonctionnalits packaging .war pour dploiement dans un serveur d'applications utilisation de FScript pour la reconfiguration service d t i de transaction ti implementation types Fractal, OSGi, Scala, Spring, script languages (Groovy, etc.)
binding types

via le framework FDF/DeployWare


Lionel Seinturier 55

OSGi

Lionel Seinturier

56

Plan

1.5 Conclusion
SCA yet another component model
une faon de revisiter les problmatiques de la rpartition des services pour les plates-formes middleware des concepts des frameworks de composants renforce l'ide de l'indpendance services/implmentations

1. SCA
1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5. 5 Conclusion

point original : indpendance IDL/protocole/langage/intent

Lionel Seinturier

57

Lionel Seinturier

58

1.5 Conclusion
SCA vs CORBA, .NET
nouvelle tentative autour du "middleware universel" pour faire communiquer middleware universel l'existant met plus l'accent sur le modle de programmation (software engineering) des applications que sur l'architecture de la plate-forme middleware (product dependant) SCA met plus l'accent sur l'ADL et le support de l'htrognit g OSGi met l'accent sur le cycle de vie des composants et la dcouverte de services dveloppeurs d'application vs fournisseur de solutions middleware application vs plate-forme API de dveloppement d'applications vs SPI d'hbergement de modules SPI de JBI ne sont pas destines tre exposes aux dveloppeurs component type/binding vs service engine/binding component p g pour composer des p modle de programmation vs kernel et architecture ouverte p services en vue de fournir une plate-forme
59 Lionel Seinturier 60

SCA vs OSGi

SCA vs JBI

Lionel Seinturier

Rfrences
Spcifications
OpenSOA p OASIS OpenSCA Javadoc Tuscany T Newton Fabric3 FraSCAti STP/SCA www.osoa.org g www.oasis-opencsa.org frascati.ow2.org/SCA-API tuscany.apache.org t h newton.codecauldron.org xircles.codehaus.org/projects/fabric3 g frascati.ow2.org www.eclipse.org/stp/sca

Plates-formes

Outils Ressources
www.osoa.org/display/Main/SCA+Resources www-128.ibm.com/developerworks/library/specification/ws-sca/ www.davidchappell.com/articles/Introducing_SCA.pdf www www128.ibm.com/developerworks/websphere/techjournal/0510_brent/0509_brent.ht ml www.osoa.org/download/attachments/250/Power_Combination_SCA_Spring_O SGi.pdf?version=3

Lionel Seinturier

61

You might also like