Presentation is loading. Please wait.

Presentation is loading. Please wait.

Service-Oriented Component Model April 18,2007.

Similar presentations


Presentation on theme: "Service-Oriented Component Model April 18,2007."— Presentation transcript:

1 Service-Oriented Component Model zhangyf05@sei.pku.edu.cn youchao06@sei.pku.edu.cn April 18,2007

2 Fly your dream with your hands 2015-10-42 2 Service-Oriented Component Model 1 1 Content A Glance at OSGi 2 iPOJO & Service Binder 3 DS & Spring OSGi 4 Comparison 5 Summary 6

3 Fly your dream with your hands 2015-10-43 Service-Oriented Model Publication Lookup Bind & Invoke Service Registry Service Consumer Service Provider Service Specification  Service: Contract of defined behavior

4 Fly your dream with your hands 2015-10-44 Service-Oriented Model  Good challenger to tackle dynamic environments  Loose-coupling –Design by Contract  Late-binding –At runtime, on demand  Hide heterogeneity  Issues  Dynamic in nature –Service arrive/disappear dynamically –Clients cope with it i.e. Notification  Service dependencies are unreliable and ambiguous –No service found or multiple found  Service requesters do not directly instantiate service instances –Common service or different instances

5 Fly your dream with your hands 2015-10-45 Service-Oriented Model  A service way to implement the functionality  Focus on service dynamics and substitutabilty  Jini, Web Service  Dynamics is very difficult to manage

6 Fly your dream with your hands 2015-10-46 Component-Oriented Model  Focus on application building block definition  Creating reusable software building blocks  Separation of concerns  Avoid the mix between business code and non functional concerns.  Avoid monolithic application  An assembler uses (existing) components and put them together

7 Fly your dream with your hands 2015-10-47 Component-Oriented Model  A component type  consistent piece of code  non-functional concerns configuration  defined interfaces (required and provided)  A component instance  Content: business code  Container: manage non functional concerns –Binding, Lifecycle, Persistence, Security, Transaction …  components interfaces service interfaces  Ideal candidate for implementing services

8 Fly your dream with your hands 2015-10-48 SOC Model  Focus on both  Component -implementation  Service  Objectives  Ease the development of application using services.  Separation of concerns separate business code and dynamism management code Business code Dynamic management code

9 Fly your dream with your hands 2015-10-49 SOC Model Resolved at runtime Syntax, Description, Behavior, Semantic Provides a functionalit y Applications are build by using available services OSGi framework manage the component lifecycle

10 Fly your dream with your hands 2015-10-410 OSGi Platform  OSGi framework: excution environment  Service platform –Service-oriented interaction  Deployment infrastructure –Continuous deployment  A set of standard service definitions  Bundle –Physical unit –Logical concept for the service implements  Installation, activation, deactivation…

11 Fly your dream with your hands 2015-10-411 OSGi Platform  Activator  Component  Register and use service  Managed by framework  Implement activation and deactivation methods  Receive a context object  BundleContext  Interact with the OSGi framework –Service publication –Service discovery and invocation –Classes and resources loading

12 Fly your dream with your hands 2015-10-412 OSGi Platform  Dynamic feature  Departure & arrival of services  Monitoring –Dependency management –Only notifications  Reconfiguration  Example  Service publication  Service discovery  Service invocation  Service dynamics

13 Fly your dream with your hands 2015-10-413... import tutorial.example2.service.DictionaryService; public class Activator implements BundleActivator, ServiceListener { private BundleContext m_context = null; private ServiceReference m_ref = null; private DictionaryService m_dictionary = null; public void start(BundleContext context) throws Exception { m_context = context; m_context.addServiceListener(this, "(&(objectClass=" + DictionaryService.class.getName() + ")" + "(Language=*))"); ServiceReference[] refs = m_context.getServiceReferences( DictionaryService.class.getName(), "(Language=*)");..... } public void stop(BundleContext context) { } public void serviceChanged(ServiceEvent event) { String[] objectClass = (String[]) event.getServiceReference().getProperty("objectClass");....... } Example import tutorial.example2.service.DictionaryService; public class Activator implements BundleActivator { public void start(BundleContext context) { Properties props = new Properties(); props.put("Language", "English"); context.registerService( DictionaryService.class.getName(), new DictionaryImpl(), props); } public void stop(BundleContext context) { } private static class DictionaryImpl implements DictionaryService { String[] m_dictionary = { "welcome", "to", "the", "osgi", "tutorial" }; public boolean checkWord(String word) {.... } package tutorial.example2. service; public interface DictionaryService { public boolean checkWord(String word); } import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceListener;import org.osgi.framework.ServiceEvent;

14 Fly your dream with your hands 2015-10-414 Motivation  OSGi does not provide a very simple development model.  But it provides all the basics to manage dynamic  Events management, service registry, dynamic rebinding …  Listener pattern  Originally design to enable asynchronous communication in object oriented language  Dependencies management  Complex and error-prone  Concurrency and synchronization 2015-10-4 14 Automate service registration & service dependency management

15 Fly your dream with your hands 2015-10-415 Existing Models  iPOJO 0.7(Clement Escoffier)  Service Binder 1.1 et 1.2 (Cervantes)  Declarative Service (OSGi R4)  Spring – OSGi (Adrian Colyer and all)  Dependency Manager (Offermans)  Service Component Architecture (IBM)

16 Fly your dream with your hands 2015-10-416 History Service Binder (Humberto Cervantes) GenSD Monolithic Approach close to ServiceBinder iPOJO 0.6 : Extensible component model, Hosted on APACHE iPOJO 0.7 : Refactoring, Composite … Declarative Service (OSGi™ R4) Dependency Manager (Marcel Offermans) Spring-OSGi™ (Interfaces 21) 2004 2005 2006 october june november february june september

17 Fly your dream with your hands 2015-10-417 a service component framework

18 Fly your dream with your hands 2015-10-418 iPOJO Overview  injected POJO  Base on byte code manipulate  iPOJO is a service component model  Based on POJO  For dynamic environment  Extensible and Flexible  Aims to ease the application development on the OSGi™ framework  Hide non functional concerns inside the implementation  Hide service interactions  Manage dynamics  Component Factory management  iPOJO 0.7 is hosted as a subproject of the APACHE Felix project

19 Fly your dream with your hands 2015-10-419 iPOJO Overview  POJO  Plain Old Java Object  Simple Java class containing the business logic  No dependencies on its execution environment  Container around component instance  Non-func requirement be injected OSGi™ iPOJO

20 Fly your dream with your hands 2015-10-420 Concepts: Component  Component Type (Component)  Description of a component type –Name, Factory –Define the container configuration  Component Instance (Instance)  Component Factories create instances  Instance characterization –Name, Component Type, Configuration 20

21 Fly your dream with your hands 2015-10-421 Concepts: Lifecycle  A component instance is either VALID or INVALID  A component instance is VALID  All handlers are valid 21 Configured Created INVALID Stopped VALID Destroyed

22 Fly your dream with your hands 2015-10-422 Concepts: Container  Plugins  The container is composed by a IM and Handlers  An handler manage one non functional concern  Possibility to implement others handlers without modifying iPOJO core (External Handlers)  The runtime plugs the needed handlers 22 Provided Service Lifecycle Configuration Architecture Dependency

23 Fly your dream with your hands 2015-10-423 Concepts: Handlers  Manage non-func requirement  Plugged on the instance manager  Each instance has its own handler set (defined in its type)  Extends the component model  Two kinds of handlers  Core handlers –Contained inside iPOJO Runtime –Lifecycle, Dependency, Provided Service, Configuration, Architecture  External handlers –Developed and Deployed singly from iPOJO Core –Developed by using the OSGi™ programming model –Deployed inside bundle exporting the package of the handler

24 Fly your dream with your hands 2015-10-424 Concepts: Handlers  Handlers, plugged on an instance manager  Participate to instance lifecycle vote –Ask for a vote, Invalid the instance  Interact with POJO fields –Inject values, be notified when the value change  Invoke methods on the POJO  Create POJO objects  Get the instance Bundle Context  …  Manage the relations between “external world” and the POJO

25 Fly your dream with your hands 2015-10-425 Dependency Handler  Manage dependency elements  Service lookup and the service invocation  Affects directly the component state  Manage correctly the dynamics of OSGi  Dependency Manager  Manager all the dependency  Register an OSGi service event listener –When service arrive, store the reference –When used, obtain the service object and return component –When goes away, remove the reference and call unset –Simple vs Multiple  Callback

26 Fly your dream with your hands 2015-10-426 Dependency Handler

27 Fly your dream with your hands 2015-10-427 Architecture Handler  An architectural / component view of your systems  Reflection on the iPOJO containers Component : fr.imag.adele.escoffier.hello.impl.HelloServiceImpl - VALID Dependency : org.osgi.service.log.LogService - RESOLVED - Optional : true - Multiple : false Provides : fr.imag.adele.escoffier.hello.HelloService - REGISTERED Service Property : floor_ = 2 Service Property : coucou = coucou Service Property : empty = true Service Property : language = fr Component : fr.imag.adele.escoffier.hello.impl.HelloServiceImpl2 - VALID Dependency : org.osgi.service.log.LogService - RESOLVED - Optional : true - Multiple : false Provides : fr.imag.adele.escoffier.hello.HelloService - REGISTERED

28 Fly your dream with your hands 2015-10-428 iPOJO Core Model

29 Fly your dream with your hands 2015-10-429 As Service Component  Using special (service-aware) handlers  Provided service handler –Publish and manage an OSGi™ service  Dependency Handler –Discover and Track an OSGi™ service  These handlers manage OSGi™ service dynamics  These handlers allow dynamic service composition  Composition described in term of service specifications not in term of component type

30 Fly your dream with your hands 2015-10-430 Example  A component requiring a service  The needed service is mandatory  The component require only one service provider  A component providing a service

31 Fly your dream with your hands 2015-10-431 Step 1 : the POJO classes  POJO are Java classes  Each provided service interfaces need to be implemented by the POJO  To be sure that all method are implemented  A POJO needs to declare a field for each required service  Dependencies injection

32 Fly your dream with your hands 2015-10-432 Step 1 : the POJO classes public class MyFirstPOJO { FooService myService; public void doSomething() { //Do something.... myService.foo(); //Do another thing… } } public class MySecondPOJO implements FooService { public void foo() { …} }

33 Fly your dream with your hands 2015-10-433 Step 2 : the Component Types  A component type is describe by a name, an implementation class and the handlers configuration.  iPOJO manages component factories to create component instance.  One by component type  Can be public (service) or private.

34 Fly your dream with your hands 2015-10-434 Step 2 : the Component Types <component classname=“…MyFirstPOJO” factory = “myFirstType” > <component classname=“…MySecondPOJO” factory = “mySecondType” >

35 Fly your dream with your hands 2015-10-435 Step 3 : Component Instances  An instance has a name and can receive a configuration.  We can declare instances in the descriptor. These instances will be created when the bundle will be started.  Can create instances from an external factory.  Inside another metadata file.  By using Factory and ManagedServiceFactory services.

36 Fly your dream with your hands 2015-10-436 Step 3 : Component Instances <instance component=“myFirstType” name = “myFirstInstance” /> <instance component=“mySecondType” name = “mySecondInstance” />

37 Fly your dream with your hands 2015-10-437 Step 4 : Packaging and Deployment  iPOJO Bundles are not simple bundles  Bytecode Manipulation  Metadata exports  How-to create an iPOJO Bundle  With Maven  With the Eclipse plugin (experimental) POJO {meta + manipulation} {meta + manipulation} POJO iPOJO

38 Fly your dream with your hands 2015-10-438 Step 5 : Runtime myFirst Type mySecond Type 2.1 instance 2.1 instance 1.1 instance 1.1 instance FooService Factory

39 Fly your dream with your hands 2015-10-439 iPOJO Composition Level  Component Composition  Horizontal Composition : Instances can be bound by linking consistent provided interfaces and required interfaces  Vertical Composition : Instances can contain other instances  Service Flexibility  Runtime / Late Binding  Service dynamics  Implementation evolution  As Composition are mapped on iPOJO instance, the composition is extensible  Possibility to implement “Composite Handlers” extending the composition model  Follow the same rules than “normal” handlers –Sub-set of Handler methods

40 Fly your dream with your hands 2015-10-440 Structural Service Composition  A Composition can import and export services  A Composition can contain internal services (sub- services) are instantiated for the composition –Published only inside the composition –Hierarchical Composition  Sub-services dependencies are resolved in the composition scope  Service Application are compositions

41 Fly your dream with your hands 2015-10-441 Conclusion of iPOJO  Simple development model  Service management  Component lifecycle management  Component factory  Component type / Instance  Composition, ADL, Hierarchic Model  Extensibility of container  Architecture service  Performance   Distribution 

42 Fly your dream with your hands 2015-10-442 Service Binder Simplifying application development on the OSGi services platform

43 Fly your dream with your hands 2015-10-443 Service Binder  Automate the management of components and their service dependency  Extract service dependency management logic  Configured by information contained in an XML component descriptor file  Inserted seamlessly into a bundle by creating an empty subclass from a generic activator class  Applications are assembled dynamically and are capable of adapting themselves autonomously  Say goodbye to OSGi API and isolate from OSGi  A standard OSGi bundle

44 Fly your dream with your hands 2015-10-444 Execution Environment  Compatibility with standard' OSGi  Generic activator  Parse component descriptor  creates the instance managers  Architectural service

45 Fly your dream with your hands 2015-10-445 Concepts an external view for the component and are part of the application logic IOC pattern and execution environment can manage instance's lifecycle deployment dependencie s or resources

46 Fly your dream with your hands 2015-10-446 Instance Manager  Every component instance is managed independently by an instance manager  Bind/unbind required services to/from the component instance when it is created/destroyed  Register/unregister any services provided by the component instance after its required services are bound/unbound  Dynamically monitor the component instance's service dependencies,  Create/destroy the component instance when its service dependencies are satisfied/unsatisfied,  Manages the instance's life-cycle  Control methods and interfaces  Inversion of Control  Constantly maintain the validity of the instance it manages

47 Fly your dream with your hands 2015-10-447 Instance Manager

48 Fly your dream with your hands 2015-10-448 Instance Property  Cardinality  0-1,0-n,1-1,1-n  Policy  How runtime service changes are handled  How component instance lifecycle is managed –Static –Dynamic  Filter  Bind/unbind  Factory  Register a special FactoryService to create instance

49 Fly your dream with your hands 2015-10-449 Instance Property =>Instance Manager  1..1, static  Configuration: The required service interface corresponds to a single binding that must be created for the instance to be validated.  Execution: The destruction of the binding invalidates the instance  0..n, dynamic  Configuration: The required service interface corresponds to a set of bindings that do not need to be created for the instance to be validated. The instance manager creates bindings with all the available service providers at the moment of configuration.  Execution: New bindings can be created and bindings can be destroyed. Instance invalidation only occurs when the instance is destroyed.

50 Fly your dream with your hands 2015-10-450 Example: Step1 1.- Component descriptor (metadata.xml) <requires service="org.simpleservice.interfaces.SimpleService" filter="(version=*)" cardinality="1..n" policy="dynamic" bind-method="setSimpleServiceReference" unbind-method="unsetSimpleServiceReference" /> `

51 Fly your dream with your hands 2015-10-451 Step2~4 2.- Manifest Bundle-Activator: org.simpleclient.impl.Activator Import-Package: org.ungoverned.gravity.servicebinder; specification-version="1.1.0", org.simpleservice.interfaces; specification-version="1.0.0" Bundle-Name: simpleclient.jar Bundle-Description: A simple client. Bundle-Vendor: Humberto Cervantes Bundle-Version: 1.0.0 Metadata-Location: org/simpleclient/res/metadata.xml 3.- Activator package org.beanome.simpleclient.impl; import org.ungoverned.gravity.servicebinder.Gene ricActivator; public class Activator extends GenericActivator { } 4.- Service interfaces package org.simpleclient.interfaces; public interface SimpleClientService {... }

52 Fly your dream with your hands 2015-10-452 Step5: Implement Class package org.simpleclient.impl; import org.simpleclient.interfaces.SimpleClientService; import org.simpleservice.interfaces.SimpleService; import java.util.ArrayList; public class ClientImpl implements SimpleClientService{ ArrayList m_simpleServiceRefs = new ArrayList(); public ServiceImpl() { } public void setSimpleServiceReference(SimpleService ref) { System.out.println("-> SimpleClient: Hello SimpleService !"); m_simpleServiceRefs.add(ref); ref.Test(); } public void unsetSimpleServiceReference(SimpleService ref) { System.out.println("-> SimpleClient: Goodbye SimpleService..."); m_simpleServiceRefs.remove(ref); }

53 Fly your dream with your hands 2015-10-453 Further Concepts  ServiceBinderContext  Lifecycle  Interceptors  GenericActivator  protected Object proxyProvidedServiceObject(Object obj, InstanceMetadata metadata)  protected Object proxyRequiredServiceObject(Object obj, DependencyMetadata metadata)

54 Fly your dream with your hands 2015-10-454 Conclusion of Service Binder  Simple development model  Binding methods  Service management  Component lifecycle management  Component factory  Component type / Instance  Composition  Extensibility of container   Architecture service  Performance  Distribution 

55 Fly your dream with your hands 2015-10-455 Declarative Service

56 Fly your dream with your hands 2015-10-456 Declarative Service Overview  Service Compedium(RC4)  Chapter 112  Version 1.0  Declarative Service is a Service Component Model.It uses a declarative model for publishing, finding and binding to OSGi services.  Goals  Simplicity  High-Performance

57 Fly your dream with your hands 2015-10-457 Declarative Service Overview

58 Fly your dream with your hands 2015-10-458 Declarative Service Overview  Immediate Component  An immediate component is activated as soon as its dependencies are satisfied.  Delayed Component  A delayed component specifies a service, the activation of the component configuration is delayed until the registered service is requested.  Factory Component  A Factory Component supports multiple instances.

59 Fly your dream with your hands 2015-10-459 Declarative Service Overview  LifeCycle  Enabled Immediate Component Delayed Component Factory Component

60 Fly your dream with your hands 2015-10-460 Declarative Service Overview  Service Binding and Unbinding  2 strategy:Event & Lookup  Action in Component LifeCycle –Binding: –while activating –the references are processed in the order in which they are specified in the component description. –Unbinding: –while deactivating –the references are processed in the reverse order in which they are specified in the component description.  Reference policy –Static & Dynamic

61 Fly your dream with your hands 2015-10-461 Declarative Service Examples  Manifest.mf  No Activator Header.  Using Service-Component Header to indicate where the Componont Description are. Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: ConfigFileValidatorBundle Bundle-SymbolicName: ConfigFileValidatorBundle Bundle-Version: 1.0.0 Bundle-ClassPath: bin/,lib/junit.jar Service-Component: OSGI-INF/component.xml Import-Package: org.osgi.framework;version="1.3.0 ……

62 Fly your dream with your hands 2015-10-462 Declarative Service Examples package com.acme; public class USBConnectionImpl implements USBConnection { protected void activate(ComponentContext ctxt) {...}... } /* Factory Component */ factory=“usbfactory” /* Delay Component */ immediate=“false”

63 Fly your dream with your hands 2015-10-463 Declarative Service Examples <reference name="HTTP" interface="org.osgi.service.http.HttpService" cardinality="0..n" bind="setPage" unbind="unsetPage"/> package com.acme; public class HttpResourceImpl { protected void setPage(HttpService http) { http.registerResources("/src", "src", null ); } protected void unsetPage(HttpService http) { http.unregister("/src"); } /* reference policy */ policy=“dynamic” /* filter */ taget=“(version=1.0)”

64 Fly your dream with your hands 2015-10-464 Spring-OSGi

65 Fly your dream with your hands 2015-10-465 Spring-OSGi Overview  SourceForge  SubProject of Spring  Licence:APL  Current-Version:1.0 M1  2006,September  Goals  Make it as easy as possible to write Spring applications that can be deployed in an OSGi execution environment.  Also make development of OSGi applications simpler and more productive by building on the ease-of-use and power of the Spring framework.

66 Fly your dream with your hands 2015-10-466 Spring-OSGi Overview  Manifest.mf  No Activator Header.  Using Spring-Context Header to indicate where the Componont Description are. Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: ConfigFileValidatorBundle Bundle-SymbolicName: ConfigFileValidatorBundle Bundle-Version: 1.0.0 Bundle-ClassPath: bin/,lib/junit.jar Spring-Context: *;wait-for-dependencies=false Import-Package: org.osgi.framework;version="1.3.0 …… META-INF/spring

67 Fly your dream with your hands 2015-10-467 Spring-OSGi Overview  Export Services  ApplicationContext----Contains some number of beans(Components/Services) lazy-init=“true”

68 Fly your dream with your hands 2015-10-468 Spring-OSGi Overview  Using Services  Using BundleContextAware interface  Inject Services <property name=“messageService” ref=“MessageService”/> public class SomeClass { public void setMessageService(MessageS ervice s) { … } cardinality="0..n“ filter=“(version=1.0)”

69 Fly your dream with your hands 2015-10-469 Spring-OSGi Overview  Using Services  Binding and Unbinding Services <osgi:listener ref=“listenerBean” bind-method=“bind” unbind-method=“bind”/> public class SomeClass { public void bind(MessageService s) { … } public void unbind(MessageService s){ … }

70 Fly your dream with your hands 2015-10-470 Spring-OSGi Overview  Context ClassLoader Management  OSGi doesn’t define what the context ClassLoader will be at any point in time.This means some useful 3rd-party libraries may not be able to find the types and resources they need. <osgi:reference id=“MessageService“ interface=“com.xyz.MessageService” context-classloader=“client”> <osgi:listener ref=“listenerBean” bind-method=“bind” unbind-method=“bind”/> Service-provider Unmanaged(default)

71 Fly your dream with your hands 2015-10-471 Spring-OSGi Overview  Web application Support  Set the contextClass parameter of the listener declaration in web.xml file to “org.springframework.osgi.context.support. WebApplicationContext”  JMX Manament of OSGi applications  Spring provide an OSGi bundle that enables JMX- based management of OSGi.

72 Fly your dream with your hands 2015-10-472 Comparison  A development model simple and non intrusive  Dynamics management and component lifecycle management  Differentiation between component type / Instance  Composition, ADL, Hierarchic Model  Other non functional concerns management, extensibility, flexibility  Runtime representation  Performance  Distribution

73 Fly your dream with your hands 2015-10-473 Comparison ContextClass Loader Service Mngt Life Cycle Component Factory CompositeExt. & Open Container Arch. Service Binder 1.2 NYYYYNY Declarative Service NYYYNNN Spring-OSGiYYyNNNN iPOJO 0.7N

74 Fly your dream with your hands 2015-10-474 References  H. Cervantes and R.S. Hall. "Automating Service Dependency Management in a Service-Oriented Component Model," Proceedings of the Sixth Component-Based Software Engineering Workshop, May 2003, pp. 91-96.  Clement Escoffier.“iPOJO Yet Another Service-Oriented Component Model”.ppt  Clement escoffier. http://cwiki.apache.org/confluence/display/FELIX/IPojo  Humberto Cervantes, Richard S. Hall. http://gravity.sourceforge.net/servicebinder/  Martin Fowler.Inversion of Control Containers and the Dependency Injection pattern  Neil.A Comparison of Eclipse Extensions and OSGi Services  BlueDavy.Service-Oriented Component Model(SOCM)  http://osgi.org http://osgi.org  http://www.springframework.org/osgi

75 Click to edit company slogan. We can always do better than good.


Download ppt "Service-Oriented Component Model April 18,2007."

Similar presentations


Ads by Google