<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ramble &#187; SOA</title>
	<atom:link href="http://www.alterzone.net/blog/category/soa/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alterzone.net/blog</link>
	<description>Where the Future Never Looks the Same Way Twice</description>
	<lastBuildDate>Mon, 17 Jan 2011 02:43:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CodeMash: Integrating Ruby into the Enterprise</title>
		<link>http://www.alterzone.net/blog/2007/01/19/codemash-integrating-ruby-into-the-enterprise/</link>
		<comments>http://www.alterzone.net/blog/2007/01/19/codemash-integrating-ruby-into-the-enterprise/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 19:36:07 +0000</pubDate>
		<dc:creator>Stephen Tolton</dc:creator>
				<category><![CDATA[CodeMash]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://www.alterzone.net/blog/2007/01/19/codemash-integrating-ruby-into-the-enterprise/</guid>
		<description><![CDATA[Presented by: Joe O&#8217;Brien These are &#8220;live&#8221; notes and necessarily rough. Three Step Process to Get Ruby into the Enterprise Developer&#8217;s Helper Enterprise Glue Application Development Developer&#8217;s Helper Ruby the language Rake Capistrano Ruby the language every developer needs a scripting language repeated tasks are automated mouse clicks become scripts IRB rocks! Interactive shell environment [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by: Joe O&#8217;Brien</p>

<p>These are &#8220;live&#8221; notes and necessarily rough.</p>

<p><em>Three Step Process to Get Ruby into the Enterprise</em></p>

<ol>
    <li>Developer&#8217;s Helper</li>
    <li>Enterprise Glue</li>
    <li>Application Development</li>
</ol>

<p><strong>Developer&#8217;s Helper</strong></p>

<ul>
    <li>Ruby the language</li>
    <li>Rake</li>
    <li>Capistrano</li>
</ul>

<p>Ruby the language</p>

<ul>
    <li>every developer needs a scripting language</li>
    <li>repeated tasks are automated</li>
    <li>mouse clicks become scripts</li>
    <li>IRB rocks!  Interactive shell environment for running Ruby</li>
</ul><ul>
    <li>Ruby is cross-platform, so you can call up IRB in various systems</li>
    <li>Can run scripts from within IRB</li>
</ul>


<p>Rake</p>

<ul>
    <li>&#8220;Make done right&#8230;finally&#8221;</li>
    <li>DSL for automating tasks</li>
    <li>Dependency based programming</li>
</ul>

<p>What about ANT?</p>

<ul>
    <li>Works well to a certain size of project</li>
    <li>Not a scripting language, but you start needing scripting language features on larger projects</li>
</ul>

<p>Capistrano</p>

<ul>
    <li>a sysadmin&#8217;s dream come true</li>
    <li>deployments become:</li>
</ul><ul>
    <li>standardized</li>
    <li>remote</li>
    <li>easy</li>
</ul>
    <li>must be POSIX server (No IIS)</li>


<ul>
    <li>cap setup</li>
    <li>cap deploy</li>
    <li><strong>cap rollback</strong></li>
    <li>cap update_code</li>
</ul>

<p><strong>Enterprise Glue</strong></p>

<ul>
    <li>XML with REXML and Builder</li>
    <li>Faster CSV</li>
    <li>Watir (for testing)</li>
    <li>ActiveRecord</li>
</ul>

<p>REXML</p>

<ul>
    <li>Processing XML</li>
    <li>Tree parsing</li>
    <li>Stream parsing</li>
    <li>Can generate XML, but very API focused, so Builder is better for generation</li>
</ul>

<p>Builder</p>

<ul>
    <li>DSL for creating XML files</li>
    <li>Uses the power of Ruby to generate XML from code</li>
    <li>No sharp pointy brackets</li>
</ul>

<p>Faster CSV</p>

<ul>
    <li>Library for CSV file parsing</li>
    <li>Nice clean interface</li>
    <li>The CSV in Ruby trunk is very slow, use &#8220;Faster CSV&#8221;</li>
</ul>

<p style="font-weight: bold">Watir <span style="font-style: italic; font-weight: normal">(Very Cool)</span></p>

<ul>
    <li>Testing community has harnessed Ruby for testing</li>
    <li>Web App Testing In Ruby</li>
    <li>DSL for &#8216;driving&#8217; your web app</li>
    <li>Now works on more than IE</li>
</ul>

<p>ActiveRecord</p>

<ul>
    <li>ORM for Ruby on Rails</li>
    <li>Can be used stand alone</li>
    <li>Flexibility and stability in data migration</li>
    <li>Nice DSL for accessing your data</li>
    <li>Classes represent tables</li>
    <li>Objects represent rows</li>
    <li>Attributes of objects represent cells</li>
</ul>

<p>ActiveRecord opinionated software</p>

<ul>
    <li>Convention over configuration</li>
    <li>no XML needed</li>
    <li>give up a little control</li>
    <li>gain speed of development</li>
    <li>gain consistency</li>
    <li>Can use it without conventions, can configure if you want to</li>
    <li>Uses metadata in database to infer datatypes of columns and creates methods for itself, on the fly, named after the columns</li>
</ul>

<p>In  glue scenario, it could be taking logs and putting them into a database.</p>

<p>ActiveRecord also has good validation and clean way to define relationships between tables.</p>

<ul>
    <li>i.e. migrating data from old database to new schema</li>
</ul><ul>
    <li>setup ActiveRecord for both databases, read them in as one, interact with them as objects and the validation is there to help you avoid problems.</li>
</ul>


<p><strong>Application Development</strong></p>

<p>Digression: Get<em> Enterprise Integration Patterns</em> book.</p>

<p>Digression: SOA requires well-defined boundaries down to the DB level, app databases, not integrated databases</p>

<p>Digression: &#8220;Starbucks does not do a two-phase commit.&#8221;  &#8212; Find the article with this quote</p>

<p>The digression about SOA (some notes are marked above) is very interesting.  Check out the slides.</p>

<p>And, we&#8217;re back from the digression&#8230;</p>

<ul>
    <li>ActiveMessaging</li>
    <li>RESTful Rails</li>
</ul>

<p>ActiveMessaging</p>

<ul>
    <li>Rails, Java, and JMS</li>
    <li>JMS as middleware (see slide)</li>
</ul><ul>
    <li>messaging queue that uses STOMP</li>
    <li>Don&#8217;t have to convert all the legacy code</li>
    <li>Model goes to database or JMS in MVC pattern</li>
</ul>


<p>REST</p>

<ul>
    <li>Standardizing CRUD in Rails</li>
    <li>Extensible presentation formats</li>
    <li>Allows you to harness logic</li>
    <li>App treated as a service</li>
</ul>

<p>Standard actions</p>

<ul>
    <li>index</li>
    <li>create</li>
    <li>update</li>
    <li>delete</li>
    <li>destroy</li>
    <li>show</li>
    <li>new</li>
</ul>

<p>Can create your own types!</p>

<p>Summary &#8211; Ways to Get Ruby into the Enterprise</p>

<ul>
    <li>As a Developer&#8217;s Helper</li>
    <li>As Enterprise Glue</li>
    <li>For Application Development</li>
</ul>

<p><em>This session was great.  I&#8217;m excited to start using Ruby and especially ActiveRecord and ActiveMessaging at work.</em></p>

<p>Fin.</p>

<p><em /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alterzone.net/blog/2007/01/19/codemash-integrating-ruby-into-the-enterprise/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CodeMash: SOA, The Next Wave of Distributed Development or the Return of the Son of CORBA?</title>
		<link>http://www.alterzone.net/blog/2007/01/19/codemash-soa-the-next-wave-of-distributed-development-or-the-return-of-the-son-of-corba/</link>
		<comments>http://www.alterzone.net/blog/2007/01/19/codemash-soa-the-next-wave-of-distributed-development-or-the-return-of-the-son-of-corba/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 16:07:55 +0000</pubDate>
		<dc:creator>Stephen Tolton</dc:creator>
				<category><![CDATA[CodeMash]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://www.alterzone.net/blog/2007/01/19/codemash-soa-the-next-wave-of-distributed-development-or-the-return-of-the-son-of-corba/</guid>
		<description><![CDATA[Presented by: Neal Ford These are &#8220;live&#8221; notes and necessarily a bit rough. Haven&#8217;t we done distributed computing before? Why hasn&#8217;t this worked? Because of: Vendor proprietariness OMG tried to create multi-vendor CORBA, but couldn&#8217;t get major vendor to cooperative (Microsoft) Opaque transport binary transport is hard to debug Reliance on point-to-point communications Can&#8217;t rely [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by: <a title="Neal Ford" href="http://www.alterzone.net/blog/nealford.com">Neal Ford</a></p>

<p>These are &#8220;live&#8221; notes and necessarily a bit rough.</p>

<p>Haven&#8217;t we done distributed computing before?  Why hasn&#8217;t this worked?</p>

<p>Because of:</p>

<ul>
    <li>Vendor proprietariness</li>
</ul><ul>
    <li>OMG tried to create multi-vendor CORBA, but couldn&#8217;t get major vendor to cooperative (Microsoft)</li>
</ul>
    <li>Opaque transport</li>
<ul>
    <li>binary transport is hard to debug</li>
</ul>
    <li>Reliance on point-to-point communications</li>
<ul>
    <li>Can&#8217;t rely on this assumption</li>
</ul>
    <li>Expensive</li>
<ul>
    <li>Vendors saw this as a way to separate your company from their money</li>
</ul>
    <li>Too much work on plumbing</li>


<p>Deutsch&#8217;s 8 Fallacies of Distributed Computing.  People make assumptions that don&#8217;t take into account real world operations and situations.</p>

<p><em>Enter SOA</em></p>

<p>&#8220;The current darling of the peripherally technical management crowd&#8221;</p>

<p>Over-hyped and isn&#8217;t a technology at all!  It&#8217;s an architectural style.  Each vendor co-opts the definition to match their tools.</p>

<p><em>Definitions</em></p>

<p>In a SOA world, a service is a &#8220;coarse-grained, self-contained business function.&#8221;  &#8220;Business function&#8221; is the only thing the manager hears.  A lot of the SOA literature is about the business case, this business focus helps make it so popular with peripherally technical management.</p>

<p>Service must be <strong>coarse grained</strong>, remember the wrong assumption about network latency being 0!  Can&#8217;t make it too fine grained.   Stateless and always available.</p>

<p>Component vs Service.  A component is a glob of software that&#8217;s used by app that is out of the control of the writers of the component and used without change.  A service is used more like a black box at a remote end-point and is synch or asynch.</p>

<p>SOA needs to be finer grained than entire application, but coarser grained than individual parts that make up an application.  Important balance to create.  It is an enterprise-wide architecture.  New apps are (in the Nirvana view) to be assembled from existing services rather than built from scratch.  Services are registered in central registry and can be discovered and their interfaces &#8220;negotiated&#8221;.  Common services (like security) can be shared by all applications or application services.</p>

<p><em>Service Oriented Ambiguity</em></p>

<p>For some SOA is about exposing software through web services.  Others thing SOA implies an architecture where applications disappear and functionality and UI through something like a portal aggregator.</p>

<p>For some, it is about allowing systems to communicate over some form of standard structure (usually XML).  This can become &#8220;CORBA with angle brackets&#8221;.</p>

<p><em>Problem we are Trying to Solve</em></p>

<p>Autonomous apps around Enterprise that can&#8217;t communicate with each other.  Islands of information or &#8220;stove pipes.&#8221;  You always end up in this place, regardless of how well you plan things.</p>

<p>The solution has a bunch of services, representing business processes with the messy &#8220;real world&#8221; on the back end (legacy systems, databases, packaged apps).  The other side has Web interfaces.  Also hangin on the front is portal and display functions, simple web services, document processing.</p>

<p><em>How do you evolve to an SOA Architecture</em></p>

<p>Stage 0: Integration as Afterthought</p>

<ul>
    <li>No integration or point-to-point integration</li>
    <li>Silos</li>
    <li>Apps have services layers for common services (logging, persistence, security, etc.)</li>
    <li>Package apps expose low-level APIs for C or Java</li>
</ul>

<p>Stage 1: Enabling Services</p>

<p>Easiest step</p>

<ul>
    <li>Expose app functions as Web Services</li>
    <li>Wrap apps using Web Service Facades</li>
    <li>Relatively easy to accomplish <strong>right now</strong></li>
    <li>No integration of common services, no service management</li>
</ul>

<p>Stage 2: Managed Web Services</p>

<ul>
    <li>Centrally managed common services shared by multiple apps</li>
    <li>May not be feasible for package apps</li>
    <li>Start to realize return on tech investment</li>
    <li>Process resides inside apps</li>
</ul>

<p>Stuff like logging (coarse grained) moved up to the bus level.  More work.  Services have to be on reliable machines.  Probably can&#8217;t collapse out stuff from packaged apps, but you can for your own stuff. The apps still have business processes within them.  Start seeing return on investment.  For example, if you change security characteristics, just change service and everyone is upgraded.
Stage 3:  Paradigm Shift</p>

<ul>
    <li>Dissolve apps into coarse grain business services</li>
    <li>Package vendors offer apps as collection of services</li>
    <li>Business processes managed across services</li>
</ul>

<p>View characteristics moved up to something like Web portal.  Only things that pertain to service live within the service.  Controller stuff is at the bus level since there are things that encompass multiple services.  You need a mechanism to drive these things.  So, Controller/Presenter split in two pieces.  The stuff specific to a service stays in service, but controller moves to bus.  At this point, you can start composing services together to get new applications.</p>

<p>Early adoption is quick, but build out time between stage 1 and 2 is long flat curve.  Lots of resources go into the transition, but no big return of investment.  This is where you are most likely to have project canceled out from underneath you as a &#8220;dead-end plumbing project.&#8221;  Need to understand that Stage 1 -> 2 is a bit painful and takes time and resources.  But, once you get to stage 2, you get lots of benefits and the curve tilts up.</p>

<p>To get to Stage 3, package vendors will need to start selling services a la carte, but they don&#8217;t want to do that.  Many vendors plan is to sell you packages.  They want you to get to the point where you are only running their software in your org.  They don&#8217;t want to start competing on merit instead of integration.  Fortunately, smaller players are starting to offer services a la carte and this will force big vendors to come around as the smaller players gain traction.</p>

<p><em>Technical and Organizational Hurdles</em></p>

<p>Technical</p>

<ul>
    <li>Evolving or incomplete standards</li>
    <li>immature tools</li>
    <li>semantic mapping between apps and businesses</li>
    <li>reliability of internal and external network connections</li>
    <li>performance considerations</li>
    <li>transaction management, security</li>
    <li>versioning</li>
    <li>canonical representations</li>
</ul>

<p>Technical problems have solutions.  Organizational issues are much harder.</p>

<p>Organizational</p>

<ul>
    <li>technology learning curve (no new features for 6-8 months as transitioning)</li>
    <li>transition from app centric to service centric is a <strong>political shift</strong>.  This is the death of SOA architecture in many organizations.  You need a senior-level executive to push this through.</li>
</ul><ul>
    <li>funny example given of how a consultant played groups against each other to get SOA architecture put in place &#8211; consulting judo!</li>
</ul>
    <li>Apps have less control over data and environments</li>
    <li>increased dependencies are more complex to manage</li>
    <li>establish software development processes and best practices</li>
    <li>trap of &#8216;Enterprise Object Model&#8217; that never happened</li>


<p>Technical Issues</p>

<p>Transport Mechanism</p>

<ul>
    <li>SOA does not imply WS-*</li>
    <li>POX &#8211; Plain Old XML</li>
    <li>REST &#8211; Representational State Transfer</li>
</ul><ul>
    <li>simple semantics</li>
    <li>return plain XML</li>
    <li>light weight, intuitive protocol</li>
</ul>


<p>REST or WS-*</p>

<p>Depends on your end goal.  Amazon, for example has moved to REST.</p>

<p>REST is simplier, lightweight.</p>

<p>WS-* is more complex, but useful for application integration outside firewall.</p>

<p>You will probably end up with a combination of both of these.</p>

<p><em>Versioning Services</em></p>

<p>How do you version endpoints?</p>

<ul>
    <li>service, service_1, service_1_1?</li>
</ul>

<p>SOA solves this with document centric approach.</p>

<ul>
    <li>All information passed around in docs</li>
    <li>Service endpoint definitions never change</li>
    <li>Underlying document can change</li>
    <li>Creates loosely typed document-centric messages</li>
</ul>

<p>the doc has the data expected by the strongly-typed service, but has bunch of XML in it.  Use Strategy Design Pattern to &#8220;re-hydrate&#8221; into object at the endpoint.  Provides loose, dynamic typing at the bus level.  The endpoints can be strongly typed.</p>

<p>Logic to differentiate versions resides inside services.  Transformation strategies inside endpoint change over time while API remains stable.</p>

<p><em>Canonical Representations</em></p>

<p>Rather than provide unique interfaces between each endpoint, create canonical data representation at bus level.  Establishing these representations is the first step in SOA.  Canonical &#8211; adj, reduced to simplest and most significant form possible without loss of generality.</p>

<p>In a simple world, canonical rep. can simply be union of representations from multiple departments.  But, the real world is not this clean. Realistic view has overlapping aspects between competing views of, for example, customer.  The union has some special rules to handle differences between views.</p>

<p><em>Lessons Learned w/ Complex Apps</em></p>

<ul>
    <li>technology was never hardest part&#8230;</li>
    <li>defining business was always harder</li>
    <li>don&#8217;t adopt Enterprise Service Bus (ESB) b/c you think that it will magically &#8220;fix&#8221; a scattered business</li>
</ul><ul>
    <li>no standard on what an ESB is.  Vendors are offering whatever they have laying around and want to sell you in a big bundle and call it an ESB.</li>
    <li>Really a big Rube Goldberg machine</li>
</ul>
    <li>Integration is hard, no matter what technology</li>
    <li>Agility is key</li>
<ul>
    <li><strong>build using small, well defined pieces</strong></li>
    <li><strong>test your tech</strong> throughout development process.  Test each piece in isolation.</li>
    <li><strong>iterate over and over</strong></li>
</ul>


<p>Small iterative development and testing everywhere are critical to get these things to work.</p>

<p>We&#8217;ve chipped away at the assumptions made with CORBA and evolved considerably about our technical thinking about distributed computing.  Business thinking has also changed and evolved in a similar way.  So, SOA is not the return of CORBA.
Fin.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alterzone.net/blog/2007/01/19/codemash-soa-the-next-wave-of-distributed-development-or-the-return-of-the-son-of-corba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

