<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
  <title>Web service patterns</title>
  <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/" />
  <modified>2004-11-08T19:18:20Z</modified>
  <tagline></tagline>
  <id>tag:www.soaprpc.com,2005:/patterns//3</id>
  <generator url="http://www.movabletype.org/" version="2.661">Movable Type</generator>
  <copyright>Copyright (c) 2004, vivek</copyright>
  <entry>
    <title>DW Article series on SOA patterns</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000046.html" />
    <modified>2004-11-08T19:18:20Z</modified>
    <issued>2004-11-08T11:18:20-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.46</id>
    <created>2004-11-08T19:18:20Z</created>
    <summary type="text/plain">IBM&apos;s James Snell has a series of articles on SOA patterns. Part 1 talks about the &apos;asynchronous query pattern&apos; and Part 2 covers the &apos;command facade pattern&apos;....</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Pattern</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>IBM's James Snell has a series of articles on SOA patterns. <a href="http://www-106.ibm.com/developerworks/webservices/library/ws-tip-altdesign1/">Part 1</a>  talks about the 'asynchronous query pattern' and <a href="http://www-106.ibm.com/developerworks/library/ws-tip-altdesign2/index.html?ca=drs-ws4504">Part 2</a> covers the 'command facade pattern'.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Web Services Integration Patterns</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000039.html" />
    <modified>2004-07-04T00:58:02Z</modified>
    <issued>2004-07-03T17:58:02-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.39</id>
    <created>2004-07-04T00:58:02Z</created>
    <summary type="text/plain"> Massimiliano Bigatti, in his article on xml.com, introduces some design patterns applicable to Web service that his team came across while developing an application for the banking industry....</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Pattern</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>
Massimiliano Bigatti, in his article on xml.com, introduces some design patterns  applicable to Web service that his team came across while developing an application for the banking industry. </p>
]]>
      <![CDATA[<p>
The patterns include the following:
<ul>
<li>Service Proxy</li>
<li>Proxy with Channel</li> 
<li>Service Coordinator</li> 
<li>Service Simulator</li>
<li>Configuration Driven Service</li> 
<li>Data Logger</li> 
<li>Flow Logger</li> 
<li>State Logger</li>
<li>Input/Output Validator </li>
</ul>
<br>
In a series of two articles (<a href="http://webservices.xml.com/pub/a/ws/2004/06/16/patterns.html">here</a> and <a href="http://webservices.xml.com/pub/a/ws/2004/06/30/patterns.html">here</a>) Massimiliano explores these patterns. I've added links to these patterns in a <a href="http://www.soaprpc.com/patterns/soa_pattern_catalog.html">SOA pattern catalog</a> that I'm maintaining.
</p>]]>
    </content>
  </entry>
  <entry>
    <title>Facade pattern and Web services</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000037.html" />
    <modified>2004-07-02T23:16:20Z</modified>
    <issued>2004-07-02T16:16:20-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.37</id>
    <created>2004-07-02T23:16:20Z</created>
    <summary type="text/plain"> The Facade pattern, defined by the GoF, provides a simplified/unified interface to a larger system. The use case below explores how a Facade pattern can be implemented via a Web service interface....</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Pattern</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>
The <a href="http://en.wikipedia.org/wiki/Facade_pattern">Facade pattern</a>, defined by the GoF, provides a simplified/unified interface to a larger system.
</p>
<p>
The use case below explores how a Facade pattern can be implemented via a Web service interface.
</p>]]>
      <![CDATA[<b>Use case:</b>
<p>
An Enterprise system with a number of enterprise services. The services can be accessed via any mechanism- session EJBs, MDB, Web services, RMI, CORBA etc.
</p>
<p><b>Solution 1</b>
<nl>
 <li>Develop a JavaBean Facade that invokes the services in the desired order.</li>
 <li>Develop a Web service wrapper around the JavaBean Facade.</li>
</nl>
<br>
This approach is demonstrated in <a href="http://www-106.ibm.com/developerworks/webservices/library/ws-facade/index.html">this</a> developerWorks article.
</p>
<p><b>Solution 2</b>
<nl>
<li>Develop Web service wrappers around each of the services</li>
<li>Use a Web service composition language like BPEL to specify the invocation  sequence. BPEL creates a 'composite service' out of discrete ones. This  composite service has its own WSDL definition and endpoint. Client applications however see it as one Web service interface, and not a collection of services. 
</nl>
</p>
<p>Some of the benefits of a Facade, as enumerated by the GoF, are:
<ul>
<li>Shields the client(s) from the system's subcomponents, and thus makes it easier to use</li>
<li>Promotes loose coupling between the client(s) and the system's subcomponents. This way you could swap out one subsystem without affecting the client(s). You might argue that Web services already do that- decouple the implementation from the interface. So if you are using <i>Solution 2</i>, you might not need to have a facade for loose coupling. True. However, using a facade allows you to go one step further; change the interface of a subsystem, combine two subsystems, change the sequence in which they are invoked, change the error handling logic in case calls to one subsystem fail, etc.
</ul>]]>
    </content>
  </entry>
  <entry>
    <title>SOA Blueprints: Best practices for service-oriented architectures</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000033.html" />
    <modified>2004-05-27T05:32:15Z</modified>
    <issued>2004-05-26T22:32:15-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.33</id>
    <created>2004-05-27T05:32:15Z</created>
    <summary type="text/plain">The Middleware Company, in conjunction with other companies like BEA, recently published an example architecture utilizing SOA best practices. This architecture is available at the SOA blueprints website (registration required). The architecture demonstrates how an example HR system/Employee portal and...</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Information</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>The Middleware Company, in conjunction with other companies like BEA, recently published an example architecture utilizing SOA best practices. This architecture is available at the <a href="http://www.middlewareresearch.com/soa-blueprints/">SOA 
  blueprints website</a> (registration required). The architecture demonstrates 
  how an example HR system/Employee portal and Product services system can be 
  designed using SOA. It also describes (briefly) the provisioning of an enterprise 
  wide security service to provide authentication, authorization and auditing 
  capabilities for all enterprise applications.</p>]]>
      <![CDATA[<p>The SOA Blueprints specifications identify the following to be common SOA patterns:</p>
<ul>
  <li><b>Synchronicity</b>- Invoking services in two modes: synchronously or asynchronously.</li>
  <li><b>Component Services</b>- A simple atomic action on a simple entity that does 
    not depend on<br>
    another service to function.</li>
  <li><b>Composite (Business) Services</b> - A composite service, also called business 
    service, is also atomic in nature, but orchestrates the invocation of component 
    services into a business level process. A composite service is stateless (unlike 
    the workflow service), does not manage a long lived transaction (again, unlike 
    workflow services), and may be invoked synchronously or asynchronously.</li>
  <li><b>Conversational (Workflow) Services</b> - A conversational service (also called 
    workflow service) typically has state attached to it and looks like a classical 
    finite state machine. BPEL4WS type Web service composition would be an example 
    of a compositional web service.</li>
  <li><b>Data Services</b> - A data service provides a mechanism for querying a datasource 
    or multiple datasources<br>
    through a message based request response mechanism.</li>
  <li><b>Publish-Subscribe Services</b> - Publish-subscribe services are ones in which 
    interested parties (called subscribers) may request notification of certain 
    events.</li>
  <li><b>Service Brokers</b> - An intermediary service that manages the invocation of 
    a set of registered services based on a set of rules.</li>
  <li><b>Exception Handling and Compensating Services</b> - A compensating service (also 
    called compensating transaction) is a mechanism for undoing some actions that 
    were already completed that are now inconsistent because the service failed.</li>
  <li><b>Interception and Extensibility</b> - Interception is a mechanism for inserting 
    additional functionality into a system without modifying or affecting existing 
    components.</li>
  <li><b>Interoperability</b> - This means that the invocation mechanism, message format, 
    data format and security<br>
    requirements of a service can be interacted with successfully by any SOA implementation.</li>
  <li><b>Service Security</b> - Set of techniques for ensuring protection of confidential 
    resources. This includes wire level security (HTTP authentication, HTTPS) 
    as well as message layer security (XML Signature, XML Encryption).</li>
</ul>
<p>Personally, I'm not sure why Interoperability and Service Security are listed as patterns. Anyways, the Blueprints specifications also list common <em>Anti-Patterns</em>:</p>
<ul>
  <li>Overly granular business services</li>
  <li>Remote access to local services</li>
  <li>Overuse of XML</li>
  <li>Use of loosely coupled services where tight coupling is required</li>
</ul>
<p>This, I totally agree with. These anti-patterns would have a performance impact on your services. Other things to look at that relate to performance are listed in my <a href="http://www.soaprpc.com/archives/000020.html">weblog post</a> from two weeks ago</p>]]>
    </content>
  </entry>
  <entry>
    <title>IBM&apos;s Pattern website</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000029.html" />
    <modified>2004-05-17T06:57:55Z</modified>
    <issued>2004-05-16T23:57:55-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.29</id>
    <created>2004-05-17T06:57:55Z</created>
    <summary type="text/plain">IBM has a e-business Patterns website that really good. It classifies it&apos;s patterns as Business patterns Integration patterns Composite patterns Custom designs Application patterns Runtime patterns Though these patterns are for Web applications, some of the runtime patterns I&apos;ve looked...</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Information</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>IBM has a <a href="http://www-106.ibm.com/developerworks/patterns/">e-business Patterns website</a> that really good. It classifies it's patterns as
<ul>
<li>Business patterns</li>
<li>Integration patterns</li>
<li>Composite patterns</li>
<li>Custom designs</li>
<li>Application patterns</li>
<li>Runtime patterns</li>
</ul>
</p>
<p>Though these patterns are for Web applications, some of the runtime patterns I've looked at (and used), such as the <a href="http://www-106.ibm.com/developerworks/patterns/edge/at1-runtime.html">High Availability Pattern</a> and the <a href="http://www-106.ibm.com/developerworks/patterns/edge/at2-runtime.html">High  Performance Pattern</a> are clearly applicable for Web services too.
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Microsoft&apos;s Patterns and Practices</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000027.html" />
    <modified>2004-05-17T06:04:11Z</modified>
    <issued>2004-05-16T23:04:11-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.27</id>
    <created>2004-05-17T06:04:11Z</created>
    <summary type="text/plain">Microsoft has &apos;patterns &amp; practices&apos; websites that have catalogs of patterns. Some of them are Microsoft-centric, but many have applicability to any enterprise scenario. The websites are : .NET Architecture Center: Patterns Patterns Community Microsoft Patterns and Practices There is...</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Information</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>Microsoft has 'patterns & practices' websites that have catalogs of patterns. Some of them are Microsoft-centric, but many have applicability to any enterprise scenario. The websites are :
<ul>
  <li><a href="http://msdn.microsoft.com/architecture/patterns/">.NET Architecture Center: Patterns</a></li>
  <li><a href="http://gotdotnet.com/team/architecture/patterns/patterns.aspx">Patterns Community</a></li>
  <li><a href="http://www.microsoft.com/resources/practices/">Microsoft Patterns and Practices</a></li>
</ul></p>
<p>There is also a useful document on <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/Esp.asp">Enterprise Solution Patterns Using Microsoft .NET</a>  in the MSDN library.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>A great website for Enterprise Java Patterns</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000026.html" />
    <modified>2004-05-17T05:46:20Z</modified>
    <issued>2004-05-16T22:46:20-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.26</id>
    <created>2004-05-17T05:46:20Z</created>
    <summary type="text/plain">I&apos;m sure every Enterprise Java developer/architect knows of this resource, but I&apos;m listing it here nonetheless: the patterns webpage at TheServerSide. You should subscribe to their RSS feed, if you haven&apos;t already done so. The website also has a free...</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Information</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>I'm sure every Enterprise Java developer/architect knows of this resource, but I'm listing it here nonetheless: the <a href="http://www.theserverside.com/patterns/index.tss">patterns webpage</a> at TheServerSide.</p>
<p>You should subscribe to their <a href="http://www.theserverside.com/rss/index.tss">RSS feed</a>, if you haven't already done so. The website also has a <a href="http://www.theserverside.com/books/wiley/EJBDesignPatterns/index.tss">free book and source code download</a> for the <a href="http://www.amazon.com/exec/obidos/ASIN/0471208310/soapsimpleobject/">EJB Design Patterns book</a> that covers many of the patterns discussed there.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Web service patterns</title>
    <link rel="alternate" type="text/html" href="http://www.soaprpc.com/patterns/archives/000025.html" />
    <modified>2004-05-17T05:24:45Z</modified>
    <issued>2004-05-16T22:24:45-08:00</issued>
    <id>tag:www.soaprpc.com,2004:/patterns//3.25</id>
    <created>2004-05-17T05:24:45Z</created>
    <summary type="text/plain">I&apos;ve started a new weblog for exploring design patterns and their applicability to Web services. I&apos;m armed with three good books for my journey- the classic Design Patterns book by the gang-of-four (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides),...</summary>
    <author>
      <name>vivek</name>
      <url>http://www.soaprpc.com</url>
      <email>vivekchopra@gmail.com</email>
    </author>
    <dc:subject>Announce</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.soaprpc.com/patterns/">
      <![CDATA[<p>I've started a new weblog for exploring design patterns and their applicability to Web services. I'm armed with three good books for my journey- the classic <a href="http://www.amazon.com/exec/obidos/ASIN/0201633612/soapsimpleobject/">Design Patterns</a> book by the gang-of-four (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides), <a href="http://www.amazon.com/exec/obidos/ASIN/0131422464/soapsimpleobject/">Core J2EE Patterns: Best Practices and Design Strategies, Second Edition</a> by Deepak Alur, Dan Malks and John Crupi and <a href="http://www.amazon.com/exec/obidos/ASIN/0321127420/soapsimpleobject/">Patterns of Enterprise Application Architecture</a> by Martin Fowler. Hopefully these  Web service patterns should translate into the .NET world too.</p>
<p>My intention is to see which of these pattens are applicable to Web services  (and how) and also to explore new patterns of usage.</p>
<p>At first glance, there are three patterns that may apply (below), and I'll be exploring these in the months to come:
<ul>
  <li>Adapter</li>
  <li>Facade</li>
  <li>Proxy</li>
</ul>
</p>
]]>
      
    </content>
  </entry>

</feed>