Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OASIS: Integrating Standards for Web Services, Business Processes ...


Published on

  • Be the first to comment

  • Be the first to like this

OASIS: Integrating Standards for Web Services, Business Processes ...

  1. 1. SCA: Flexible and Agile Composition of Distributed SOA Applications Mike Edwards - IBM Hursley Lab, England S implicity, C onsumability, A gility
  2. 2. Agenda <ul><li>Customer scenario </li></ul><ul><li>SCA overview </li></ul><ul><li>SCA details </li></ul><ul><li>Web 2.0 & SCA </li></ul>
  3. 3. Customer scenario <ul><li>A bank implemented a pilot project using SCA and SDO </li></ul><ul><li>Growing presence in multiple countries </li></ul><ul><li>Wide variety of technologies in use: </li></ul><ul><ul><li>Unix Mid Range, AS400, Mainframe, WebSphere / WebLogic, Java / .NET, Kitchen Sink </li></ul></ul><ul><li>The group that sponsored the project is responsible for Retail Banking Channel – Presentation and Service Tier </li></ul><ul><li>Rollout of &quot;Official&quot; SOA strategy </li></ul><ul><li>Set the standards for future initiatives within the Bank </li></ul>
  4. 4. Problem: Lack of an enterprise-wide SOA framework <ul><li>Proliferation of standards and frameworks </li></ul><ul><ul><li>WS-* </li></ul></ul><ul><ul><li>Apache SOAP </li></ul></ul><ul><ul><li>Apache AXIS </li></ul></ul><ul><ul><li>XFire </li></ul></ul><ul><ul><li>IBM Web Services Runtime </li></ul></ul><ul><ul><li>Open source frameworks </li></ul></ul><ul><ul><li>Custom built frameworks </li></ul></ul><ul><li>Never ending cycle of migration and reinventing the wheel </li></ul><ul><ul><li>Hurting time to market </li></ul></ul><ul><ul><li>Extra costs to maintain </li></ul></ul><ul><li>Need to simplify service development </li></ul><ul><ul><li>Allow service developers to focus on business logic </li></ul></ul><ul><ul><li>Make it easy to reuse services </li></ul></ul>
  5. 5. Key features of the customer’s infrastructure <ul><li>Service Platform – WS-I Basic compliant, Java-based client invocation and service endpoint framework </li></ul><ul><li>Expose services using different interfaces, multiple invocation mechanisms (local, WSDL/schema, JMS...) </li></ul><ul><li>Service Lifecycle Events – Logging, Caching, Business Validation, Error Handling... </li></ul><ul><li>Enable POJO programming model for developing services </li></ul><ul><li>Requirements, design, development, operational and other processes to support SOA approach </li></ul>
  6. 6. Key features of the customer’s infrastructure <ul><li>Enterprise adoption: </li></ul><ul><ul><li>Development, Deployment, Operational, Governance Capabilities </li></ul></ul><ul><ul><li>Service development training material </li></ul></ul><ul><li>Collaborative, shared ownership </li></ul><ul><ul><li>All process, technical and other documentation placed in a Wiki, open to contributions </li></ul></ul><ul><ul><li>Improvements took place using an &quot;open source&quot; model, allowing any resource to contribute to code base, with select group controlling commits </li></ul></ul>
  7. 7. Service Platform Rich Client UI Mobile IVR Web User Interface Components Different Heterogeneous Backend Systems Thin Client Browser / AJAX Component properties Component properties Component properties Component properties
  8. 8. Layers in the infrastructure <ul><li>Access layer: </li></ul><ul><ul><li>Spring Framework (AOP, IOC) for applications, </li></ul></ul><ul><ul><li>IFX (Interactive Financial Exchange) for schemas and interfaces </li></ul></ul><ul><ul><li>SCA/SDO to access services & data sources </li></ul></ul><ul><li>Middle tier: </li></ul><ul><ul><li>WebSphere, Spring, JMS </li></ul></ul><ul><ul><li>Services built with SCA assembly model </li></ul></ul><ul><ul><li>IFX data packaged with SDO </li></ul></ul><ul><li>Back end: </li></ul><ul><ul><li>The usual suspects (transaction servers, mainframes, relational databases, packaged apps) </li></ul></ul>
  9. 9. Infrastructure based on three open standards <ul><li>SCA/SDO: </li></ul><ul><ul><li>Becoming widely recognized as a standard </li></ul></ul><ul><ul><li>Support for multiple bindings configurable at runtime </li></ul></ul><ul><ul><li>Configuration based assembly of components using dependency injection </li></ul></ul><ul><ul><li>Components can be implemented using many languages/technologies </li></ul></ul><ul><ul><li>Multiple implementations to choose from </li></ul></ul><ul><li>Interactive Financial Exchange (IFX) </li></ul><ul><ul><li>Standards-based data exchange format for business banking </li></ul></ul><ul><li>Spring </li></ul><ul><ul><li>AOP for lifecycle events (Logging, Caching, Error Handling, etc.) </li></ul></ul><ul><ul><li>Finer grained dependency injection </li></ul></ul>
  10. 10. Selling SCA <ul><li>SCA, SDO enabled business to build service platform with low barriers to adoption : </li></ul><ul><ul><li>POJO components </li></ul></ul><ul><ul><li>Evolutionary SOA adoption </li></ul></ul><ul><ul><li>Open communities </li></ul></ul><ul><li>Some original applications used POJOs. To moving to an SOA, applications changed to use SCA services </li></ul><ul><ul><li>For now, the SCA services are just POJOs. When they need to use other kinds of (SCA) services, they don’t have to make any changes </li></ul></ul>
  11. 11. The future <ul><li>Future enhancements to infrastructure will take advantage of wider features of SCA and SDO: </li></ul><ul><ul><li>WS-Policy/WS-Security </li></ul></ul><ul><ul><li>Other implementations (COBOL) </li></ul></ul><ul><ul><li>Asynchronous invocation (JMS) </li></ul></ul><ul><ul><li>Presentation layer (AJAX, JSONRPC) </li></ul></ul><ul><ul><li>BPEL orchestration </li></ul></ul><ul><li>Using these features will require very few changes (if any) to their applications </li></ul>
  12. 12. Agenda <ul><li>Customer scenario </li></ul><ul><li>SCA overview </li></ul><ul><li>SCA details </li></ul><ul><li>Web 2.0 & SCA </li></ul>
  13. 13. What SCA is <ul><li>executable model for assembling services </li></ul><ul><ul><li>composites provide language to compose and configure service components </li></ul></ul><ul><ul><li>handles service dependencies </li></ul></ul><ul><li>Simplified component programming model for implementing services </li></ul><ul><ul><li>BPEL processes, Java POJOs, EJBs, COBOL, PHP scripts, C++ apps, JavaScript & AJAX, XSLT… </li></ul></ul><ul><li>Late binding of policy and communication methods, with distributed deployment model </li></ul>
  14. 14. Why SCA makes life simpler <ul><li>One way to look at SCA is that it takes details of </li></ul><ul><ul><li>access methods and endpoints </li></ul></ul><ul><ul><li>implementations and configuration </li></ul></ul><ul><ul><li>policy such as encryption, authentication </li></ul></ul><ul><li>… and moves them into middleware layer </li></ul><ul><li>Application developers write business logic: code that actually builds value for your organization </li></ul><ul><ul><li>details of using services are handled by SCA </li></ul></ul><ul><ul><li>late binding: as details change, applications (and developers who wrote them) aren’t affected </li></ul></ul><ul><ul><li>&quot;no plumbing in the code&quot; </li></ul></ul>
  15. 15. Why SCA makes life simpler <ul><li>SCA gives developers a single programming model for using services for all aspects of service lifecycle: </li></ul><ul><ul><li>Construction </li></ul></ul><ul><ul><li>Assembly </li></ul></ul><ul><ul><li>Deployment </li></ul></ul><ul><li>As your SOA gets more complex, developers have to learn more and more interfaces </li></ul><ul><ul><li>In Java alone: EJBs, RMI, JCA, JAX-WS, JMS </li></ul></ul><ul><li>Similarly, SDO gives developers a single programming model for using data sources </li></ul>
  16. 16. SCA is not… <ul><li>… tied to a specific programming language, protocol, technology, runtime </li></ul><ul><li>… a workflow model </li></ul><ul><ul><li>Use BPEL for that </li></ul></ul><ul><li>… Web services </li></ul><ul><ul><li>SCA can access local objects, avoiding the overhead of Web services </li></ul></ul><ul><ul><li>of course, many SCA applications will use Web services </li></ul></ul><ul><li>… an ESB </li></ul><ul><ul><li>to program an ESB from scratch, SCA fits perfectly </li></ul></ul><ul><ul><li>but SCA is more than an ESB </li></ul></ul>
  17. 17. Warehouse Service WarehouseComposite Warehouse Broker Component Warehouse Component Order Processing Service OrderProcessing Component Shipping Reference External Warehouse Reference Payments Component Payment Service AccountsComposite External Banking Reference Accounts Ledger Component SCA assembly BPEL Java EE C++ SOAP/HTTP JMS RMI/IIOP Mixed: - technologies - app locations Multi-level composition
  18. 18. Agenda <ul><li>Customer scenario </li></ul><ul><li>SCA overview </li></ul><ul><li>SCA details </li></ul><ul><li>Web 2.0 & SCA </li></ul>
  19. 19. Simple Example Service AccountService Reference StockQuote Service AccountData Service Component bigbank.accountcomposite AccountService Component Service AccountService AccountData Service Component
  20. 20. < reference name =“StockQuoteService&quot; promote =&quot; AccountServiceComponent/StockQuoteService &quot;> < interface =&quot; services.stockquote.StockQuoteService &quot;/> < port =&quot; wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP) &quot;/> </ reference > < service name =&quot; AccountService &quot; promote =&quot; AccountServiceComponent &quot;> < interface =&quot; services.account.AccountService &quot;/> < port =&quot; wsdl.endpoint(AccountService/AccountServiceSOAP) &quot;/> </ service > < composite xmlns =&quot; &quot; name =&quot; bigbank.accountcomposite &quot; > < composite > < component name =&quot; AccountServiceComponent &quot;> < class =&quot; services.account.AccountServiceImpl &quot;/> < reference name =&quot; StockQuoteService &quot;/> < reference name =&quot; AccountDataService &quot; target =&quot; AccountDataServiceComponent/AccountDataService &quot;/> < property name =&quot; currency &quot;> EURO </ property > </ component > < component name =&quot; AccountDataServiceComponent &quot;> < implementation.bpel process =“ QName &quot;/> < service name =&quot; AccountDataService &quot;> < interface =&quot; services.accountdata.AccountDataService &quot;/> </ service > </ component > StockQuote bigbank.accountcomposite AccountService Component Service AccountService Reference StockQuote Service AccountData Service Component Reference StockQuote Service
  21. 21. Java Implementation Example: Service Interface package; @Remotable public interface AccountService { public AccountReport getAccountReport(String customerID); } Interface is callable remotely eg. as a Web service
  22. 22. Java Implementation Example (1) package; import*; @Service(interfaces = AccountService.class) public class AccountServiceImpl implements AccountService { private String currency = &quot;USD&quot;; private AccountDataService accountDataService; private StockQuoteService stockQuoteService; public AccountServiceImpl( @Property(&quot;currency&quot;) String currency, @Reference(&quot;accountDataService&quot;) AccountDataService dataService , @Reference(&quot;stockQuoteService&quot;) StockQuoteService stockService) { this.currency = currency; this.accountDataService = dataService; this.stockQuoteService = stockService; } Annotation for the service offered by this class Constructor with annotations for injected property and references
  23. 23. Java Implementation Example (2) public AccountReport getAccountReport(int customerID) throws AccountDataUnavailableException { AccountReport accountReport = accountDataService .getAccountReport(customerID); List<Stock> stocks = accountReport.getStocks(); List<StockValues> stockValues = stockQuoteService .getValues( stocks, currency ); accountReport.setStockValues( stockValues ); return accountReport; } } // end class Get the basic account report using the account data service Obtain up to date stock values using the stock quote service Update the account report with the latest stock values
  24. 24. Associating Policies with SCA Components <ul><li>Intents and/or policySets can be associated with any SCA component </li></ul><ul><li>At deployment time intents map to Policies contained in policySets </li></ul><ul><li>Examples attaching intents: </li></ul>Confidentiality applied to any use of the service < service name = &quot;AccountService“ promote=“ AccountServiceComponent ” requires=&quot;sca:confidentiality&quot; > < interface = &quot;services.account.AccountService&quot; /> < port = &quot; wsdl.endpoint(AccountService/AccountServiceSOAP)&quot; /> </ service > < reference name = &quot;StockQuoteService“ promote=“AccountServiceComponent/ stockQuoteService ” > < interface = &quot;services.stockquote.StockQuoteService&quot; /> < port = &quot; wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP)“# requires=“sca:confidentiality” /> </ reference > Confidentiality applied to Web service binding
  25. 25. Policy Sets <ul><li>Policy Sets contain concrete Policies </li></ul>< policySet n ame = &quot;sca:userNameTokenHashPassword&quot; provides = &quot;sca:authentication&quot; appliesTo = &quot;; > < wsp:Policy > < sp:SupportingToken > < wsp:Policy > < sp:UserNameToken > < wsp:Policy > < sp:HashPassword > </ wsp:Policy > </ sp:UserNameToken > </ wsp:Policy > </ sp:SupportingToken > </ wsp:Policy > </ policySet > defines intents provided what this policy applies to
  26. 27. Agenda <ul><li>Customer scenario </li></ul><ul><li>SCA overview </li></ul><ul><li>SCA details </li></ul><ul><li>Web 2.0 & SCA </li></ul>
  27. 28. Web 2.0 Composite Applications Web Server HTML + JS Services “ implementation.widget” - HTML + Javascript with SCA reference wiring - Access services from scripts – with async “ implementation.widget”
  28. 29. Web 2.0 Gadgets meet SCA Web Server Gadget + HTML + JS Services “ implementation.widget” “ implementation.widget” - HTML + Gadgets with SCA reference wiring - Access services from scripts – with async - Link to other on-screen gadgets other Widgets can be any gadget supporting mashup technology
  29. 30. HTML & JS SCA Implementation <ul><li>Store Implementation </li></ul><ul><li>< html > </li></ul><ul><li>< head > </li></ul><ul><li>< title > Store </ title > </li></ul><ul><li>< script type =&quot; text/javascript &quot; src =&quot; store.js &quot; ></ script > </li></ul><ul><li>< script language =&quot; JavaScript &quot; > </li></ul><ul><li>//@Reference </li></ul><ul><li>var catalog = new Reference ( &quot;catalog&quot; ); </li></ul><ul><li>//@Reference </li></ul><ul><li>var shoppingCart = new Reference ( &quot;shoppingCart&quot; ); </li></ul><ul><li>//@Reference </li></ul><ul><li>var shoppingTotal = new Reference ( &quot;shoppingTotal&quot; ); </li></ul><ul><li>function catalog_getResponse ( items ) {…} </li></ul><ul><li>function shoppingCart_getResponse ( feed ) {…} </li></ul><ul><li>function init () { </li></ul><ul><li>catalog . get ( catalog_getResponse ); </li></ul><ul><li>shoppingCart . get ( &quot;&quot; , shoppingCart_getResponse ); </li></ul><ul><li>} </li></ul><ul><li></ script > </li></ul><ul><li></ head > </li></ul><ul><li>< body onload =&quot;init () &quot; > </li></ul><ul><li>< h1 > Store </ h1 > </li></ul><ul><li>… </li></ul><ul><li></ body > </li></ul><ul><li></ html > </li></ul>Defines references to services Call reference operations
  30. 31. HTML & JS Component Configuration <ul><li>Store Configuration </li></ul><ul><li>< composite name = &quot;store&quot; … > </li></ul><ul><li>< component name = &quot; Store &quot; > </li></ul><ul><li>< t: implementation.widget location = &quot; uiservices/store.html &quot; /> </li></ul><ul><li>< service name = &quot;Widget&quot; > </li></ul><ul><li>< t:binding.http uri = &quot;/ui&quot; /> </li></ul><ul><li></ service > </li></ul><ul><li>< reference name = &quot;catalog&quot; target = &quot;Catalog&quot; > </li></ul><ul><li><t:binding.jsonrpc/> </li></ul><ul><li></ reference > </li></ul><ul><li>< reference name = &quot;shoppingCart&quot; target = &quot;ShoppingCart/Cart&quot; > </li></ul><ul><li><t:binding.atom/> </li></ul><ul><li></ reference > </li></ul><ul><li>< reference name = &quot;shoppingTotal&quot; target = &quot;ShoppingCart/Total&quot; > </li></ul><ul><li><t:binding.jsonrpc/> </li></ul><ul><li></ reference > </li></ul><ul><li></ component > </li></ul><ul><li>< component name = &quot;ShoppingCart&quot; > </li></ul><ul><li>< class = &quot;services.ShoppingCartImpl&quot; /> </li></ul><ul><li>< service name = &quot;Cart&quot; > </li></ul><ul><li>< t:binding.atom uri = &quot;/ShoppingCart/Cart&quot; /> </li></ul><ul><li></ service > </li></ul><ul><li>< service name = &quot;Total&quot; > </li></ul><ul><li>< t:binding.jsonrpc /> </li></ul><ul><li></ service > </li></ul><ul><li></ component > </li></ul><ul><li>… </li></ul><ul><li></ composite > </li></ul>HTML & JS implementation HTTP binding & address Catalog service via JSONRPC Wire
  31. 32. Summary <ul><li>OASIS SCA is a great way to build distributed services applications </li></ul><ul><ul><li>Compose services </li></ul></ul><ul><ul><li>Develop service components </li></ul></ul><ul><ul><li>Apply policies and bindings </li></ul></ul><ul><li>Agile and Flexible systems </li></ul>
  32. 33. Useful links <ul><li>Articles about SCA: </li></ul><ul><li> </li></ul><ul><li>http:// </li></ul><ul><li>Open Source implementation of SCA: </li></ul><ul><li> </li></ul><ul><li>SCA Specifications in OASIS: </li></ul><ul><li> / </li></ul><ul><li>Email address: </li></ul><ul><li>[email_address] </li></ul>