Plan
1. SCA
Service Component Architecture (SCA)
1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5 Conclusion 5.
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)  beso besoins s identifis de t s
     
Lionel Seinturier
 essentiellement ti ll td des principes i i architecturaux hit t (l (logiciels) i i l )
 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 components p to form composite p application pp  Easier to integrate
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 (HTTP, XML) XML), WS-* WS- , orchestration BPEL
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 J EE Integration I t ti SCA OSGi/Spring (draft)
Component implementation specifications
Hosted by the Open SOA consortium
 http://www.osoa.org
Binding g specifications p
Standardized by OASIS
 http://www.oasis-opencsa.org
Policy framework
Platform providers
 O Open Source: S Apache Tuscany, Newton, Fabric3, 3 FraSCAti 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 p de service  g gros g grain ( (interfaces avec
1.1 Principes Composant SCA
 service/rfrence  proprit  implmentation  proprit it non
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 A AccountsComposite 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 f vers service i : wire 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 Conclusion 5.
 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 2. SCA/J i aN in Nutshell t h ll avec Web W bS 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 p par le composants p sapplique  la classe dimplmentation du composant paramtres  interfaces : les services fournis p par le composant 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)
 Client Cli t requiert i t le l service i fournit f it par linterface li t f sd de S 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 bli class l ServeurImpl l i implements l 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 bli void id run() () { 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 ?xml version="1.0" version 1.0 encoding encoding="UTF-8"?> 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 <interface.java interface= java.lang.Runnable 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) public class ClientImpl p p implements p Runnable { @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 d'excution 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 t name="aProp">aVal</property> " 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 d d'i d'information f ti entre t ADL et tJ 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 instance i t 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  invocation l la 1re i 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 p profondeur > 2  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 id removeItem( It ( ... ) ); @EndsConversation void orderNow(); }  mode conversationnel  composant @Scope("CONVERSATION") @ConversationAttributes( maxAge="2 minutes", maxIdleTime="30 seconds") // optionels p  format dfini p par les spcifications p SCA class CartImpl implements Cart { @ConversationID void Object conversationID; ... }
1.2.3 Modle de programmation Java
 mcanisme de rappel
<component name="client"> < <service i name="r" " " /> <reference name="s" target="serveur/s"> <interface.java j interface="hw.MyService" 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 F SCAti FraSCAti  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 d un besoin non fonctionnel de trace  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 du besoin non fonctionnel  implantation  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 d un .composite composite "normal" normal pour le besoin non fonctionnel Fichier: trace.composite <composite name="trace" > <service name="t" promote="traceur/t" /> <component name="traceur"> <implementation.java class="hw.TraceurImpl"/> <service i name="t"> " " <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 j ret = ijp.proceed(); 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 d'o o extensions, extensions e e.g. g FraSCAti
 souvent plusieurs faons d'exprimer les concepts
 exemple : <wire> et <reference target="">
 redondance d'information entre ADL et Java
p , consistence  assurer  compltion,
Lionel Seinturier
Plan
1.3 Outils Eclipse STP/SCA Composite Designer
1. SCA
1. Principes 2. Modle de programmation 3. Outils 4. FraSCAti 5 Conclusion 5.
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 Conclusion 5.
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 i adaptation d i & reconfiguration 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 , maintenance, , tests  mme outils conception, Assembly Factory  p parser EMF, XML Schemas dfinis dans les spcifications 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, ff online  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 d un systmes SOA
 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 i d de t 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 Conclusion 5.
 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 universel" pour faire communiquer 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 programmation g vs kernel et architecture ouverte p pour composer p des modle de 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 T Tuscany Newton Fabric3 FraSCAti STP/SCA www.osoa.org g www.oasis-opencsa.org frascati.ow2.org/SCA-API t tuscany.apache.org 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 wwwwww 128.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