<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.travisspencer.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.travisspencer.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom">
    <title>Travis Spencer - Software Engineer</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/" />
    
    <id>tag:travisspencer.com,2008-05-04://1</id>
    <updated>2008-08-16T19:31:55Z</updated>
    <subtitle>My blog with news and thoughts of interest to software engineers and their friends</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Open Source 4.1</generator>

<link rel="self" href="http://feeds.travisspencer.com/travisspencer" type="application/atom+xml" /><entry>
    <title>RDF Gateway and RESTful Web Services</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/08/rdf-gateway-and-restful-web-se.html" />
    <id>tag:travisspencer.com,2008://1.37</id>

    <published>2008-08-16T19:30:32Z</published>
    <updated>2008-08-16T19:31:55Z</updated>

    <summary>I was looking into RDF Gateway the other week, and found it to be a very interesting product. It provides an RDF store which can be accessed using SPARQL or T-SQL and persists its data in a SQL Server database....</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Databases" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="databases" label="Databases" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rdfgateway" label="RDF Gateway" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rest" label="REST" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webservices" label="Web Services" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>I was looking into RDF Gateway the other week, and found it to be a very interesting product.  It provides an RDF store which can be accessed using SPARQL or T-SQL and persists its data in a SQL Server database.  It also allows you to expose your SPARQL queries by creating RDF Server Pages (RSPs).  This technology is similar in nature to ASP or JSP in that it mixes markup with SPARQL quires and a JavaScript-like language called RDF Query Language (RQL) similarly to the way ASP embeds JScript/VBScript in markup and JSP intermixes it with Java.  RSP documents are interpreted by RDF Gateway, which runs as a Windows NT service.  These scripts are requested over HTTP, making them accessible to a wide array of applications and programming environments.  After just a cursory investigation, it isn't hard to see how one could use this product to expose an RDF store as a collection of RESTful Web services.  In case you're having trouble visualizing this, have a look at the following figure that shows the overall architecture of how this might be done:
</p><p><img src="http://travisspencer.com/081608_1930_RDFGatewaya1.png" alt=""/>
	</p><p>In my view, each RESTful service would have one RSP script.  The client would indicate which action or operation they wanted to invoke by setting a parameter on the query string.  The RSP page would grab this argument, and invoke the corresponding function to fulfill that specific type of request.  I realize that this design would make the service an REST-RPC hybrid (using Richardson and Ruby's term which they coined in their book <a href="http://safari.oreilly.com/9780596529260"><em>RESTful Web services</em></a>), but it would avoid the need to use something like <a href="http://www.squid-cache.org/">Squid</a> simply to do URL rewriting (since RDF Gateway doesn't have such abilities natively).
</p><p>To show how this would work, I'll describe the idiom used by the different RSP pages above.  Because each service would have one RSP page, it would perform the role of "dispatcher."  It would grab the action off the query string, switch on it, and call the appropriate function.  To demonstrate how this might look, consider the following snippet of RQL code:
</p><p style="margin-left: 36pt"><span style="font-family:Courier New; font-size:10pt">&lt;%<br/>    import "operations/a1.rql";<br/>    import "operations/a2.rql";<br/>    import "/common.rql";<br/>%&gt;<br/>&lt;Response&gt;<br/>&lt;%<br/>    Response.contentType = "text/xml";
</span></p><p style="margin-left: 36pt"><span style="font-family:Courier New; font-size:10pt">    var action = Request["action"]; // Dispatcher
</span></p><p style="margin-left: 36pt"><span style="font-family:Courier New; font-size:10pt">    switch (action)<br/>    {<br/>        case "a1":<br/>            a1();<br/>            break; <br/>        case "a2":<br/>            a2();<br/>            break;<br/>        default:<br/>            _Error(); // Imported from common.rql<br/>            break;<br/>    }<br/>%&gt;<br/>&lt;/Response&gt;
</span></p><p>This code fragment is the service's entry point, its "main" if you will.  To keep the code organized, each of the service's operations is fulfilled by different functions which are factored out into separate RQL script and imported in the main RSP page.  Each of the RSP pages for the different services would be almost identical.  (I can imagine a little code generator to produce this code and a plug-in for Visual Studio or other editors to call it.) 
</p><p>When the action is fired, it would process the body of the HTTP request, use SPARQL to update or query the RDF store, and return the results in XML or JSON format.  (The snippet above precludes the use of JSON, but that could be easily be changed and which format should be returned could be based on the value of a query string argument, e.g., json=1.)
</p><p>Like the format of the results, the contents of the request would be XML or JSON.  In the latter case, I think that RQL's eval statement could be used to turn it into an object that could be processed directly.  In the case of XML, a little munging would have to be done, and, I'm not sure what support RDF Gateway has for this.  Once converted to objects that could be used in the RQL script, they would be passed to SPARQL to perform the operation-specific processing as shown in the following snippet:
</p><p style="margin-left: 36pt"><span style="font-family:Courier New">function a1()<br/>{<br/>    var input;    
</span></p><p style="margin-left: 72pt"><span style="font-family:Courier New">// RQL doesn't have a contentType property on their<br/>// Request object, so we have to see if the input <br/>// is JSON by trying to eval it.  I realize that <br/>// this makes the system susceptible to script injection,<br/>// but this is just a POC.<br/>//<br/>// The object returned from eval and MungeXml contains<br/>// two properties, lbound (lower bound) and ubound (upper <br/>// bound).
</span></p><p style="margin-left: 72pt"><span style="font-family:Courier New">try {<br/>      input = eval(Request.binaryRead());<br/>      input.lbound; input.ubound;<br/>}
</span></p><p style="margin-left: 72pt"><span style="font-family:Courier New">catch(ex)<br/>{<br/>      input = MungeXml();<br/>}
</span></p><p style="margin-left: 72pt"><span style="font-family:Courier New">// Use input parameters in a SPARQL expression to update <br/>// or query the datastore.
</span></p><p style="margin-left: 72pt"><span style="font-family:Courier New">var rs = (SELECT TOP 5 ?p ?s ?o USING mydata <br/>    WHERE {?p ?s ?o} and between(?o, #(input.lbound), <br/>    #(input.ubound)));
</span></p><p style="margin-left: 36pt"><span style="font-family:Courier New">    Response.Write("&lt;data&gt;");    
</span></p><p style="margin-left: 36pt"><span style="font-family:Courier New">    for (; rs.EOF; rs.MoveNext())<br/>    {<br/>        Response.Write("&lt;datum&gt;&lt;p&gt;");<br/>        Response.Write(rs["p"]);<br/>        Response.Write("&lt;/p&gt;&lt;s&gt;");<br/>        Response.Write(rs["s"]);<br/>        Response.Write("&lt;/s&gt;&lt;o&gt;");<br/>        Response.Write(rs["o"]);        <br/>        Response.Write("&lt;/o&gt;&lt;/datum&gt;");<br/>    }    
</span></p><p style="margin-left: 36pt"><span style="font-family:Courier New">    Response.Write("&lt;/data&gt;");<br/>}
</span></p><p>As I mentioned at the beginning of this post, I've only had time to perform a short investigation into RDF Gateway.  So, if there are glaring problems or emissions with the ideas presented here, please let know as a learn more about this exciting product.
</p><p>If you would like to get started with RDF Gateway, surf over to <a href="http://www.intellidimension.com/downloads/">Intellidimension's Web site</a> and request a 60 day trial license by emailing <a href="mailto:sales@intellidimension.com">sales@intellidimension.com</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>VS 2008 SP 1 RTM</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/08/vs-2008-sp-1-rtm.html" />
    <id>tag:travisspencer.com,2008://1.36</id>

    <published>2008-08-15T01:55:04Z</published>
    <updated>2008-08-15T05:18:16Z</updated>

    <summary>VS 2008 SP 1 just went to manufacturing! This "service pack" comes with a lot of new things which you can read about here, here, and here. Included with this SP, is the first official version of the Entity Framework,...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term=".NET" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="entityframework" label="Entity Framework" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linq" label="LINQ" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="visualstudio" label="Visual Studio" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>VS 2008 SP 1 just went to manufacturing!  This "service pack" comes with a lot of new things which you can read about <a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx">here</a>, <a href="http://blogs.msdn.com/webdevtools/archive/2008/08/11/web-development-updates-in-visual-studio-2008-sp1.aspx">here</a>, and <a href="http://www.google.com/search?hl=en&q=visual+studio+2008+sp1+|+%22sp+1%22&btnG=Search">here</a>.  Included with this SP, is the first official version of the <a href="http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx">Entity Framework</a>, <a href="http://msdn.microsoft.com/en-us/library/bb386964.aspx">LINQ to Entities</a>, and <a href="http://astoria.mslivelabs.com/">Astoria</a>, AKA ADO.NET Data Services.</p>

<p>Check out this blog entry for <a href="http://geekswithblogs.net/ranganh/archive/2008/08/14/installing-visual-studio-2008-sp1-rtm-and-removing-the-sp1.aspx">installation instructions</a> which include running a <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A494B0E0-EB07-4FF1-A21C-A4663E456D9D&displaylang=en">preparation tool</a> that removed any previously installed CTP versions among other things.  You can get the bits from this <a href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx">download page</a> on Microsoft's site.</p>

<p>If you want the MSDN documentation installed on your local machine, you can get it from <a href="http://www.microsoft.com/downloads/details.aspx?familyid=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&displaylang=en">here</a>.</p>

<p>It sure is a fun time to be a developer!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Number of Files for tempdb and User Databases</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/07/number-of-files-for-tempdb-and.html" />
    <id>tag:travisspencer.com,2008://1.35</id>

    <published>2008-07-26T04:57:48Z</published>
    <updated>2008-07-26T07:20:33Z</updated>

    <summary>Part of optimizing the IO subsystem of a machine running Microsoft SQL Server is deciding how many files a user database and tempdb should be broken up into. Denny Cherry provides some guidelines to determine this in an article that...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Databases" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="databases" label="Databases" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sqlserver" label="SQL Server" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>Part of optimizing the IO subsystem of a machine running Microsoft SQL Server is deciding how many files a user database and tempdb should be broken up into.  Denny Cherry provides some <a href="http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1307255,00.html">guidelines</a> to determine this in an article that he published earlier this year.  In it, he provides a couple of formulas that can be used to mathematically determine the appropriate number of files depending on the hardware being used.  In the following discussion of these equations, let C, O, and P be defined as follows:</p>

<p>C = Number of CPUs<br />
O = Number of cores per CPU<br />
P = Physical files</p>

<p>According to Cherry, the number of files that should make up a user database can be computed using this formula:</p>

<p>P = C * O / 4</p>

<p>For example, if you have dual dual cores, you would have one physical file for the user databases:</p>

<p>P = C * O / 4<br />
P = 2 * 2 / 4<br />
P = 1</p>

<p>Or, with a dual quad core machine, the number of physical files is two as determined thus:</p>

<p>P = C * O / 4<br />
P = 2 * 4 / 4<br />
P = 2</p>

<p>To compute the number of files that makeup tempdb, use this formula:</p>

<p>P = C * O</p>

<p>For example, if you have dual dual cores, you would have 4 files for tempdb:</p>

<p>P = C * O<br />
P = 2 * 2<br />
P = 4</p>

<p>Or, if you have dual quads, the number of physical files is 8:</p>

<p>P = C * O<br />
P = 2 * 4<br />
P = 8</p>

<p>Keep in mind that I'm talking about files here not filegroups.  Filegroups can purportedly be used to <a href="http://www.microsoft.com/sql/prodinfo/previousversions/scalabilityfaq.mspx">increase parallelism</a> as noted on Microsoft's Web site; however, I would take that suggestion with a grain of salt.  In his book, <i>Inside SQL Server 2005: The Storage Engine</i> Kalen Delaney has this to say about using file groups to increase parallelism:</p>

<blockquote>
Most SQL Server databases have a single data file in the default filegroup....As a user acquires greater database sophistication, she might want to use multiple devices to spread out the IO...The easiest way to do this is to create the database file on a RAID device. Still no need for filegroups...the user might decide that she really wants multiple files...In this case, she still does not need the filegroups &mdash; she can accomplish her goals by using create database with a list of files in separate drives.

<p><br />
More sophisticated database administrators might decide to have different tables assigned to different drives or to use the table and index partition feature of SQL Server 2005. Only then they will need to use filegroups...</p>

<p>There's usually no performance benefit in doing so.<br />
</blockquote></p>

<p>To make this distinction clear, what I'm talking about here is a create statement such as this one:<br />
<code><br />
CREATE DATABASE Archive <br />
ON<br />
PRIMARY  <br />
    (NAME = Arch1,<br />
    <span style="background-color: yellow">FILENAME = 'W:\archdat1.mdf', -- Drive one: W</span><br />
    SIZE = 100MB,<br />
    MAXSIZE = 200,<br />
    FILEGROWTH = 20),<br />
    (NAME = Arch2,<br />
<span style="background-color:yellow">    FILENAME = 'X:\archdat2.ndf', -- Drive two: X</span><br />
    SIZE = 100MB,<br />
    MAXSIZE = 200,<br />
    FILEGROWTH = 20),<br />
    (NAME = Arch3,<br />
<span style="background-color: yellow">    FILENAME = 'Y:\archdat3.ndf', -- Drive three: Y</span><br />
    SIZE = 100MB,<br />
    MAXSIZE = 200,<br />
    FILEGROWTH = 20)<br />
LOG ON <br />
   (NAME = Archlog1,<br />
<span style="background-color:yellow">    FILENAME = 'Z:\archlog1.ldf', -- Drive four: Z</span><br />
    SIZE = 100MB,<br />
    MAXSIZE = 200,<br />
    FILEGROWTH = 20),<br />
   (NAME = Archlog2,<br />
<span style="background-color: yellow">    FILENAME = 'Z:\archlog2.ldf', -- Drive four: Z</span><br />
    SIZE = 100MB,<br />
    MAXSIZE = 200,<br />
    FILEGROWTH = 20)<br />
</code></p>

<p>In doing this, you are instructing SQL Server to create different files to store your data.  You are <i>not</i> telling it what objects to put in which files, however.  This can only be done with filegorups.  Rather, SQL Server decides which files to put which things in.  If each of these files is on a different drive, or array of drives, you can achieve greater performance as Delaney points out.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Why Native XML Databases?</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/06/why-native-xml-databases.html" />
    <id>tag:travisspencer.com,2008://1.34</id>

    <published>2008-06-03T14:50:23Z</published>
    <updated>2008-06-07T05:29:42Z</updated>

    <summary>Lately, I've been doing a lot of investigation of native XML databases in general and MarkLogic in particular. The motivation for this analysis was sparked by something I read in a research paper that was published last year by Michael...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Databases" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="databases" label="Databases" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="marklogic" label="MarkLogic" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xml" label="XML" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>Lately, I've been doing a lot of investigation of native XML databases in general and <a href="http://marklogic.com">MarkLogic</a> in particular.  The motivation for this analysis was sparked by something I read in a <a href="http://www.vldb.org/conf/2007/papers/industrial/p1150-stonebraker.pdf">research paper</a> that was published last year by Michael Stonebraker et al wherein they state that:
</p><p style="margin-left: 27pt">...major RDBMS vendors can be outperformed by 1-2 orders of magnitude by specialized engines....We conclude that the current RDBMS code lines, while attempting to be a "one size fits all" solution, in fact, excel at nothing. Hence, they are 25 year old legacy code lines that should be retired in favor of a collection of "from scratch" specialized engines. The DBMS vendors (and the research community) should start with a clean sheet of paper and design systems for tomorrow's requirements, not continue to push code lines and architectures designed for yesterday's needs.
</p><p> 
 </p><p>I found this paper on the Web site of the <a href="http://www.vldb.org/">Very Large Data Base Endowment</a>, an organization promoting and exchanging scholarly work related to databases, while looking for information about designing large-scale, terabyte-size databases.<strong>
		</strong></p><p>Because the problems that I'm typically confronted with involve XML and Web services, I wondered:
</p><ul><li>What specialized XML database engines are available?
</li><li>Are these specialized databases able to outperform RDBMS in my scenarios as Stonebraker and his colleagues concluded?
</li></ul><p>I surfed around a learned that there are two types of XML databases: Hybrid and native XML databases.  The difference between these two is an XML database that uses a hybrid architecture shreds the XML into a relational model for storage while a native one stores the information in its native document form.  The former is what Stonebraker is advising against.  To further explain the difference, a native XML database often exhibits the following characterizes (as described on <a href="http://www.xmlmind.com/qizx/xml_vs_relational.html">XMLmind's Web site</a>):
</p><ul><li>Their basic unit of storage is the XML document, the structure of which is preserved according to a data model such as the XML Infoset or the <a href="http://www.w3.org/TR/xpath-datamodel/">XQuery/XPath Data Model</a>;
</li><li>They accept any well-formed XML document irrespective of shape (a property sometimes called Schema independence); and
</li><li>They support an XML-aware query language, typically XQuery, XPath and/or XSLT.
</li></ul><p>For more information about native XML databases, check out <a href="http://www.xml.com/pub/au/68">Ronald Bourret</a>'s article <a href="http://www.xml.com/pub/a/2005/03/30/native.html"><em>Going Native: Making the Case for XML Databases</em></a><em>
		</em>on <a href="http://xml.com">xml.com</a>.<em>
		</em></p><p>With this understanding, I compiled the following list of specialized native XML database servers.  I intend to investigate these different products as time permits.  (This list doesn't include embeddable engines, only standalone servers.)  I'm sure there are others.  If you know of any, please let me know.
</p><p>
<table>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><b>Product</b></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><b>Vendor</b></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><b>Comment</b></p>
  </td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.ibm.com/developerworks/wikis/display/db2xml/Home">DB2</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://ibm.com/">IBM</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.emc.com/products/detail/software/xml-store-oem-edition.htm"><span>Documentum</span> XML Store </a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.emc.com/">EMC</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p>Formerly <a
  href="http://www.x-hive.com/products/db/index.html">X-Hive/DB</a> by <a
  href="http://www.x-hive.com/">X-Hive</a></p>
  </td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://exist.sourceforge.net/"><span
 >eXist</span></a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p>N/A</p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p>Open source</p>
  </td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.marklogic.com/product/marklogic-server.html">MarkLogic
  Server</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://marklogic.com/">MarkLogic</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.monetdb.nl/projects/monetdb/XQuery/index.html"><span
 >MonetDB</span>/XQuery</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.monetdb.nl/projects/monetdb/Home/"><span
 >MonetDB</span></a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p>Open source</p>
  </td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.sonicsoftware.com/products/sonic_xml_server/">Progress Sonic
  XML Server</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.sonicsoftware.com/">Progress Sonic</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.oracle.com/database/">Oracle Database</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.oracle.com/">Oracle</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx">SQL Server</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://microsoft.com/">Microsoft</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p>Support in the 2005 edition is very poor IMO and should
  not be used carelessly</p>
  </td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a
  href="http://www.ixiasoft.com/default.asp?xml=/xmldocs/webpages/textml-server.xml&amp;section=2">TEXTML
  Server</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.ixiasoft.com/">IXIA Software</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.rainingdata.com/products/tl/"><span
 >TigerLogic</span> XDMS</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.tigerlogic.com/"><span>TigerLogic</span></a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p>Company was recently renamed from <span>RainingData</span></p>
  </td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.xpriori.com/p_xms.html">XMS</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.xpriori.com/index.html"><span
 >Xpriori</span></a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.cogneticsystems.com/server.html"><span
 >XQuantum</span> XML Database Server</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.cogneticsystems.com/index.html"><span
 >Cognetic</span> Systems, Inc.</a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
 <tr>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.bluestream.com/products/xstreamdb32"><span
 >XStreamDB</span></a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;">
  <p><a href="http://www.bluestream.com/"><span>Bluestream</span></a><u></u></p>
  </td>
  <td style="border-style: solid; border-color: black; border-width: 0.5pt; padding-left: 7px; padding-right: 7px;"></td>
 </tr>
</table>
</p><p>Of these, I've delved into MarkLogic the deepest so far.  I've been in contact with these guys a number of times via phone and email, I've <a href="http://markmail.org/search/?q=marklogic+travis+spencer">posted messages</a> on their <a href="http://developer.marklogic.com/discuss/subscribe.xqy?list=general">developer list</a>, installed their <a href="http://developer.marklogic.com/download/default.xqy">community edition</a> (which is limited to a measly 100 MB), read a bunch of their <a href="http://developer.marklogic.com/pubs/3.2/default.xqy">documentation</a>, and watched some of their <a href="http://www.marklogic.com/news-and-events/webinars-seminars.html">Web casts</a>.  We may have one of their consultants onsite in the near term as well to explain how we can utilize their product.  In the coming weeks, I'll blog about more details about MarkLogic, so stay tunes.</p>]]>
        
    </content>
</entry>

<entry>
    <title>DAM is Ascending to the Cloud</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/05/dam-is-ascending-to-the-cloud.html" />
    <id>tag:travisspencer.com,2008://1.32</id>

    <published>2008-05-24T16:48:56Z</published>
    <updated>2008-05-24T17:00:18Z</updated>

    <summary><![CDATA[ North Plains' announcement earlier this month that they their DAM solution, TeleScope, is now being offered as a service in the cloud. &nbsp;Some market analysts are saying that running DAM in the cloud isn't for everyone (yet?), but I've...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Cloud Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="DAM" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cloudcomputing" label="Cloud Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dam" label="DAM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="saas" label="SaaS" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[

<p class="MsoNormal"><a href="http://www.northplains.com/news/newsItem.cfm?cms_news_id=187">North
Plains' announcement</a> earlier this month that they their
DAM solution, <a href="http://www.northplains.com/en/products/telescopeondemand.cfm">TeleScope</a>,
is now being offered as a service in the cloud. &nbsp;<a href="http://www.cmswatch.com/Trends/1244-DAM%27s-growing-pains?source=RSS#left">Some
market analysts are saying</a> that running DAM in the cloud isn't for everyone
(yet?), but I've heard that 10% of the market is ready now (10% * 1/2B= 50M).<span style="">&nbsp; </span>North Plains isn't alone is providing DAM
SaaS.<span style="">&nbsp; </span>Widen is doing it too (<span style="font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">as their VP of marketing <a href="http://www.widen.com/referencecenter/dam_saas.html">describes in this video</a></span>).<span style="">&nbsp; </span>To relieve concerns about uploading assets to
the cloud, they have <a href="http://www.widen.com/appliance/">created an appliance</a>
that runs within a customer's facility, allowing their assets to remain local,
but is maintained by Widen remotely.<span style="">&nbsp;
</span>Besides these two DAM vendors, <a href="http://gilbane.com/news/2008/05/clearstory_systems_expands_on.html">ClearStory
just announced</a> that they are getting into the SaaS market too with <a href="http://www.clearstorysystems.com/products-services/activemedia.html">ActiveMedia</a>.&nbsp; <br /></p><p class="MsoNormal">Cloud computing is quickly coming to the forefront even in a market that is full of paranoid companies, requires specialized hardware, and is characterized by extremely large media files. It's only a matter of time!  <o:p></o:p></p>

]]>
        
    </content>
</entry>

<entry>
    <title>Trends in the Digital Asset Management Market</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/05/trends-in-the-digital-asset-ma.html" />
    <id>tag:travisspencer.com,2008://1.31</id>

    <published>2008-05-24T02:21:06Z</published>
    <updated>2008-05-24T04:39:35Z</updated>

    <summary>I found a company called CMS Watch the other day that offers a number of intriguing comparative analyst reports on DAM systems, Enterprise Content Management (ECM) suites, Web Content Management (WCM) products, and Enterprise Search. They also have an interesting...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="DAM" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="dam" label="DAM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sharepoint" label="SharePoint" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webservices" label="Web Services" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="workflows" label="Workflows" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>I found a company called <a href="http://www.cmswatch.com/Feature/177-DAM-Trends">CMS Watch</a> the other day that offers a number of intriguing comparative analyst reports on <a href="http://www.cmswatch.com/DAM/Report/">DAM systems</a>, <a href="http://www.cmswatch.com/ECM/Report/">Enterprise Content Management (ECM) suites</a>, <a href="http://www.cmswatch.com/CMS/Report/">Web Content Management (WCM) products</a>, and <a href="http://www.cmswatch.com/Search/Report/">Enterprise Search</a>.  They also have an interesting blog that I would recommend <a href="http://www.cmswatch.com/RSS/cmswatch.xml">subscribing</a> to called <a href="http://www.cmswatch.com/Feature/177-DAM-Trends">CMS Watch</a>.  In <a href="http://www.cmswatch.com/Feature/177-DAM-Trends">one entry in this blog</a>, the author, <a href="mailto:info@databasepublish.com;editor@cmswatch.com">Joseph Bachana</a>, discusses innovations in the digital asset management marketplace that he expects to see this year and next.   I've summarized his predictions here:
</p><ul><li>Many DAM vendors will devote their development efforts to OEMing third-party products into their applications.
</li><li>More and more vendors will expose Web services APIs in response to a market that is hungry to integrate DAM systems into other systems (e.g., Web Content Management systems, Customer Relationship Management systems, Workflow Management Systems, Resource Management Systems, etc.).
</li><li>DAM offerings will increasingly adopt Adobe's XMP format which will allow customers to transfer an asset's metadata with its content as it's passed around different (possibly external) systems.
</li><li>More DAM providers will be integrating with Adobe's <a href="http://www.adobe.com/products/creativesuite/versioncue/">Version Cue</a> which will allow their creative customers to take part in workflows, collaborate with their peers, version their work, and check in/out content.
</li><li>Many companies will be working to integrate their DAM system with SharePoint for its content management capabilities, workflow engine functionality, and to further integrate into the customer's back office IT infrastructure.
</li><li>DAM vendors will invest in building Rich Internet Applications (RIAs) using Adobe Air, Adobe Flex, and Microsoft Silverlight, so that they can provide UIs for their systems that are accessible from various operating systems and connected via the Web.
</li><li>DAM repositories will be viewed more and more as the single, authoritative source for all intellectual property.  For this reason, DAM providers will be expected to be increasingly open and interoperable, so that the content they stored is accessible to other systems that don't hold the authoritative copy of the media.
</li><li>Digital Asset Management providers will partner with or purchase suppliers of XML databases and text mining engines to facilitate the creation of these authoritative repositories that can store creative and textual content.
</li></ul>]]>
        
    </content>
</entry>

<entry>
    <title>Open source and Digital Asset Management</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/05/open-source-and-digital-asset.html" />
    <id>tag:travisspencer.com,2008://1.30</id>

    <published>2008-05-24T01:47:50Z</published>
    <updated>2008-06-07T05:30:57Z</updated>

    <summary>Will we ever see an open source DAM system that can go head to head with EMC, IBM, Oracle and the rest? Tony Byrne says in his blog that he thinks it will not happen soon if ever. Joseph Bachana...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="DAM" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="alfresco" label="Alfresco" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dam" label="DAM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="documentum" label="Documentum" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="marklogic" label="MarkLogic" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>Will we ever see an open source DAM system that can go head to head with EMC, IBM, Oracle and the rest? Tony Byrne <a href="http://www.cmswatch.com/Trends/1250-Open-source-and-Digital-Asset-Management">says in his blog</a> that he thinks it will not happen soon if ever.  Joseph Bachana disagrees and says that it "may take the harnessed fervor of the open source community to bring <a href="http://www.cmswatch.com/Feature/177-DAM-Trends">all these threads</a> and more together in the marketplace."  I think the CEO of MarkLogic would agree with Bachana.  In his blog, Dave Kellogg <a href="http://marklogic.blogspot.com/2008/04/emcdocumentum-marklogic-is-enemy.html">conjectures</a> that, in the future, the "high-end of the [Enterprise Content Management (ECM)] market will split between Documentum and Alfresco," an open source ECM system.  Though it is an ECM and not a DAM solution, if Kellogg is correct that about half of the <i>big</i> ECM customers will use Alfresco, many will also require it to support some DAM-related features as their needs won't stop at information processing.&nbsp; Many will also need a secure repository that facilitates the management and distribution of media files, thus crossing over into the realm of the digital asset management systems.&nbsp; As a result, this OSS project may be augmented to include DAM-like capabilities proving Bachana right and giving us a free (as in beer) DAM alternative.</p>]]>
        
    </content>
</entry>

<entry>
    <title>SOA and its Relevance to ISVs</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/05/soa-and-its-relevance-to-isvs.html" />
    <id>tag:travisspencer.com,2008://1.29</id>

    <published>2008-05-14T06:26:43Z</published>
    <updated>2008-05-14T06:29:05Z</updated>

    <summary>Ronald Schmelzer posted a fantastic article on ZapThink about the relevance of SOA to Independent Software Vendors (ISVs). In it he says that the reasons that ISVs should build their application in a service-oriented fashion are the same as for...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>Ronald Schmelzer posted a fantastic <a href="http://www.zapthink.com/report.html?id=ZAPFLASH-2006419">article on ZapThink</a> about the relevance of SOA to Independent Software Vendors (ISVs).  In it he says that the reasons that ISVs should build their application in a service-oriented fashion are the same as for large enterprises instigating company-wide service-oriented initiatives.  Specifically, he states that ISVs should design their applications using service-oriented practices, so that their customers can:
</p><ul><li>Reduce their integration expenses,
</li><li>Achieve a faster time-to-market,
</li><li>Lower their total cost of ownership (by reducing the need to hire system integrators and/or consultants), and
</li><li>Increase business agility.
</li></ul><p>Some of these benefits are also experienced by the ISV themselves when they use this architectural paradigm.  For instance, by reducing coupling within an application, an ISV can more easily alter its product to meet changing customer demands.  Schmelzer warns that it isn't enough to slap some Web services around a monolithic application and plaster "SOA" all over the press release, however.  I appreciated this admonishment because of the common misconception in our industry that Web services and SOA are the same thing.
</p><p>Having read this article, however, I'm left wondering what aspects of an SOA should an ISV's offerings include?  There are many facets to an SOA.  Which ones should be included with a service-oriented product?  Of course the answer is that it depends and that there isn't any hard and fast answer; however, it is helpful to enumerate the common characteristics on an SOA and think about:
</p><ul><li>Which traits are pertinent to service-oriented products built by ISVs, 
</li><li>Which qualities could be included, and
</li><li>Which ones should be left solely to the end customer?
</li></ul><p>To aid in this discussion, I'll use <a href="http://www.thomaserl.com/">Thomson Erl's</a> fantastic book <a href="http://www.soabooks.com/chapters2.asp"><em>Service-Oriented Architecture, Concepts Technology, and Design</em></a><em>
		</em>as a reference for what characteristics SOAs commonly have.  The following table shows the characteristics sited in Erl's book and which ones must, may, and must not be exhibited by service-oriented products sold by ISVs.
</p><div><table border="0"><colgroup><col style="width:227px"/><col style="width:46px"/><col style="width:49px"/><col style="width:82px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p><strong>Common Characteristics of an SOA</strong></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center"><strong>Must</strong></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center"><strong>May</strong></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center"><strong>Must Not</strong></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Based on Web services</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>QoS-capable</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Autonomous</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Open</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Vendor-neutral</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Discoverable</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Interoperable</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Federated</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Composible</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Reusable</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Extensible</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Encapsulate business logic</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Abstract</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Cohesive</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Promotes organizational agility</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Elemental</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p>Evolvable</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><p style="text-align: center">X</p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"> </td></tr></tbody></table></div><p><br/>Some of these terms may be unclear and others deserve special note, so I'll elaborate.  For a more thorough explanation, please refer to Erl's book.
</p><p><strong>Based on Web Services
</strong></p><p>Any product that an ISV creates cannot be integrated into an end customer's larger SOA directly unless it is built using Web services.  This implementation technology will allow an ISV's product to be incorporated and controlled by outside forces within the end customer's service-oriented enterprise (SOE).  This will lower their TCO as mentioned above, thus winning ISVs deals that their competitors will lose due to higher integration costs.
</p><p><strong>QoS-capable
</strong></p><p>In order for the offerings of ISVs to be incorporated successfully into a larger service-oriented solution, they must insure that:
</p><ul><li>Tasks are carried out in a secure manner, information is exchanged and stored in a protected form, and service access is limited to authenticated and authorized callers;
</li><li>Operations are executed in a consistent fashion, messages are delivered reliably, and reports of failures are guaranteed; and
</li><li>Operations are transactional and can be rolled back in case of errors.<span style="text-decoration:line-through">
			</span></li></ul><p><strong>Open, Vendor-neutral, and Interoperable
</strong></p><p>Services within an SOA should be compatible with open specifications that are governed by international standards bodies; however, this requirement isn't always necessary, pragmatic, or performant.  In my opinion, the level of openness required of a service is directly related to its proximity to others that are built on a different platform. A service that is used in a homogenous environment, need not concern itself (as much) with interoperability.  In such scenarios, services can use proprietary extensions and other optimization.  If the services sold by an ISV will not be exposed by their customers but will be used as building blocks in their larger SOA, they may use non-standard protocols where it makes a difference in terms of performance, reliability, and security.  Similarly, an ISV's system need not be vendor-neutral if the target market accepts the bias.  When purchasing a vendor-specific, service-oriented product from an ISV, the end customer should encapsulate the proprietary aspects of the underlying services.  By doing so, the final SOA will be vendor-agnostic.  If a customer doesn't do this, their service-oriented initiative will likely degrade into a "wild west SOA frontier".  To avoid this, companies that purchase service-oriented systems from ISVs should police them with SOA governance products like those from <a href="http://www.soa.com/">SOA Software</a> and <a href="http://www.amberpoint.com">AmberPoint</a>. 
</p><p><strong>Discoverable
</strong></p><p>This characteristic is an important one that most ISV-produced offerings probably don't exhibit.  To be discoverable, a service must publish its endpoint in a way that allows service consumers to find them dynamically at runtime without human intervention.  This publication process is typically done in an SOA by pushing information into a central registry using UDDI.  When discovering services that have been published into a UDDI registry, consumers must specify search terms that describe the capabilities or characteristics of the services that can fulfill their task.  These descriptive terms are associated with services when they are published into the UDDI registry.  Obviously, the terms/metadata must be shared by services published to the UDDI registry and customers needing their functionality.  What this means is that:
</p><ol><li>ISVs will have to create their own metadata taxonomies to describe their services or
</li><li>Use existing taxonomies (e.g., <a href="http://en.wikipedia.org/wiki/Dublin_core">Dublin core</a>).
</li></ol><p>If an ISV doesn't use a standard nomenclature or go through the trouble of creating one, their customers won't be able find and dynamically bind to their services at runtime.  The creation of these taxonomies is a costly and time consuming task that is difficult to do in a way that will fit the ISV's eventual customer's needs.  If this difficulty, however, prevents such a classification from being created, integration will be inhibited, decreasing the value of the ISV's product.
</p><p><strong>Federated
</strong></p><p>Erl says that an SOA should promote federation by unifying environments that were previously disconnected due to the architectural limitations of those systems.  This characteristic is not one that ISVs should try to provide (on a sweeping, enterprise-wide scale at least).  You can't buy SOA in a box as Schmelzer points out in the blog entry sited above.  That said, by being service-oriented, an ISV's offering will be more easily federated into the consumer's SOA, which is the entire point.
</p><p><strong>Composible</strong>
	</p><p>The services that make up an ISV's product should be composible.  If an ISV wants to provide their customers with increased business agility, they will need to compose the ISV's services together in ways unoriginally expected.  This can be inhibited by a lack of interoperability, nonconformance to standards, and vendor-bias.  If composition is precluded by these qualities, then the service implementation should be reevaluated or else an ISV's offering will be overlooked for others that are composible.
</p><p><strong>Encapsulates Business Logic
</strong></p><p>Service-oriented systems built by ISVs should be autonomous.  This means that the services that comprise them should all be independently versioned, deployed, operated, and secured.  This tenet of SOA insures that the end result is agile and able to move with changing business demands.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Webinar on MarkLogic Coming Up</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/05/webinar-on-marklogic-coming-up.html" />
    <id>tag:travisspencer.com,2008://1.28</id>

    <published>2008-05-12T06:48:34Z</published>
    <updated>2008-05-15T07:12:44Z</updated>

    <summary>MarkLogic will be conducting a Webinar this week on May 13th about using their native XML database to manage information in an increasingly markup-laden world. To attend the lecture, surf over to their Web site....</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Databases" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="databases" label="Databases" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="marklogic" label="MarkLogic" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>MarkLogic will be conducting a Webinar this week on May 13th about using their native XML database to manage information in an increasingly markup-laden world.  To attend the lecture, <a href="https://marklogic.webex.com/marklogic/onstage/g.php?d=716157074&t=a">surf over to their Web site</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Blogging to MT 4.1 from Word 2007</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/04/blogging-to-mt-41-with-word-20.html" />
    <id>tag:travisspencer.com,2008://1.21</id>

    <published>2008-04-26T07:12:36Z</published>
    <updated>2008-05-05T04:44:33Z</updated>

    <summary>I'm hosting my blog with Yahoo! small business services, and using MovableType 4.1 (which I manually upgraded because Yahoo! refused to update their install despite huge outcries). After moving to the 2007 version of Word and OneNote, I noticed that...</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="Blogging" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="blogging" label="Blogging" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>I'm hosting my blog with Yahoo! small business services, and using MovableType 4.1 (which I manually upgraded because Yahoo! refused to update their install despite <a href="http://forums.sixapart.com/index.php?showtopic=59376">huge outcries</a>).   After moving to the 2007 version of Word and OneNote, I noticed that they now have integrated blogging support.  This sounded really cool because it would allow me to blog using the tools and workflow that I'm accustomed to.  To set up Word with MovableType, you have to configure it to use the MetaWebLog API.  This protocol requires the calls to be authenticated; however, you can't use your normal password to do this.  You have to create and use a separate password specifically for making Web service calls.  To do this, follow these steps:
</p><ol><li>In the Web-based UI of MovableType, navigate to the Edit Profile page for your user account by selecting "Hi username" in the top right corner of the screen.  
</li><li>In this section, set the preferred Web services password.<br /><br /><a href="http://www.travisspencer.com/stash/blog_images/image002.gif"><img src="http://travisspencer.com/042608_0712_BloggingtoM1.png" alt="" border="0" /></a>
		</li><li><div>In Word, open the New Blog Account dialog box and choose Other.
</div><p><img src="http://travisspencer.com/042608_0712_BloggingtoM2.png" alt="" />
			</p></li><li> In the New Account dialog box, select the MetaWebLog API from the associated dropdown box, enter the URL to the mt-xmlrpc.cgi script, enter your user name, and the Web-service-specific password that was created earlier.<br /><br /><img src="http://travisspencer.com/042608_0712_BloggingtoM3.png" alt="" />
		</li><li>Click Picture Options and select My blog provider in the Picture provider dropdown list.<br /><br /><img src="http://travisspencer.com/042608_0712_BloggingtoM4.png" alt="" />
		</li></ol><p>One thing I found is that if the blog entry is saved in compatibility mode (i.e., as a DOC file rather than a DOCX file), the Home Page, Insert Category, and Open Existing buttons on the ribbon will be disabled.  You have to save the entry as a DOCX file to be able to later user these features.
</p><p><img src="http://travisspencer.com/042608_0712_BloggingtoM5.png" alt="" />
	</p><p><img src="http://travisspencer.com/042608_0712_BloggingtoM6.png" alt="" /></p>]]>
        
    </content>
</entry>

<entry>
    <title>Some Benefits of Enterprise UDDI Services</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/03/some-benefits-of-enterprise-ud.html" />
    <id>tag:travisspencer.com,2008://1.19</id>

    <published>2008-03-10T13:38:14Z</published>
    <updated>2008-05-05T03:27:48Z</updated>

    <summary><![CDATA[Enterprise UDDI Services in Windows 2003 has many attractive benefits.&nbsp; Here is a shortlist of some of those advantages:It&rsquo;s free and is available with every edition of Windows Server including standard!Compatible with the UDDI v. 2 specification that&rsquo;s governed by...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="uddi" label="UDDI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p>Enterprise UDDI Services in Windows 2003 has many attractive benefits.&nbsp; Here is a shortlist of some of those advantages:<br /></p><ol style="margin-top: 0in"><li class="MsoNormal">It&rsquo;s      free and is available with every edition of Windows Server including      standard!</li><li class="MsoNormal">Compatible      with the UDDI v. 2 specification that&rsquo;s governed by OASIS.</li><li class="MsoNormal">Built      in support for storing data in SQL Server.</li><li class="MsoNormal">Convenient      .NET-based SDK that simplifies working with the UDDI by alleviating the      client programmer from having to use SOAP or Web services. </li><li class="MsoNormal">Ability      to publish the location of the UDDI registry in Active Directory, so that      clients can find it automatically without having to rely upon      configuration.</li><li class="MsoNormal">Management      is done through a Microsoft Management Console (MMC) snap-in that provides      a common appearance and user experience that IT administrators are used      to.</li><li class="MsoNormal">Web-based      UI for managing, viewing, and searching the UDDI registry.</li><li class="MsoNormal">Integrated      Windows authentication that can use Active Directory accounts or local      server accounts.</li><li class="MsoNormal">Authentication      is support via tokens as defined in the UDDI v. 2 specification.<span>&nbsp; </span>Tokens are mapped to Windows accounts      that can be managed centrally by IT (in the case of Active Directory) or      local server accounts can be used.</li><li class="MsoNormal">Authorization      and permissions are based on roles/groups (local or central).</li><li class="MsoNormal">Built-in      logging that is written to the Windows event log.</li><li class="MsoNormal">Pre-made      GUI tool that can be used to define and export custom taxonomies which can      be imported into a registry to aid in the discovery process (available in      Windows 2003 Server Resource Kit).</li><li class="MsoNormal">Included      wizard for registering WSDL documents in UDDI registry (helpful in pushing      a services description to a development registry prior to deployment).</li><li class="MsoNormal">Resource      Kit includes command-line tools for importing and exporting server      configuration settings.</li><li class="MsoNormal">Provides      extensions to the UDDI standard that allow for the creation of hierarchical      taxonomies.</li></ol>  <p>Given all this, what are the drawbacks?&nbsp; What are the benefits of other products from alternate vendors?&nbsp; What's changing in Windows Server 2008?&nbsp; Are there any plans to upgrade the service to v. 3 of the UDDI specification?&nbsp;</p>  <p>All of these are important questions when deciding whether or not to standardize on Microsoft's offering.&nbsp; Though I don't have the answers to these questions, hopefully, the above list will help you in your decision making process.&nbsp; If you have the answers to the questions, or any thoughts, please leave a comment.</p>  ]]>
        
    </content>
</entry>

<entry>
    <title>Types of Services that Make up an SOA</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/02/types-of-services.html" />
    <id>tag:travisspencer.com,2008://1.18</id>

    <published>2008-02-25T00:58:41Z</published>
    <updated>2008-05-05T03:28:41Z</updated>

    <summary><![CDATA[In order to communicate effectively about a service-oriented system, stakeholders must use a shared nomenclature when discussing the different types of services within it.&nbsp; Their seems to be a real need for such a taxonomy in our industry, so I...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p class="MsoNormal">In order to communicate effectively about a service-oriented system, stakeholders must use a shared nomenclature when discussing the different types of services within it.<span>&nbsp; </span>Their seems to be a real need for such a taxonomy in our industry, so I would like to share the following terms in hopes that readers will offer suggestions and additions.<span>&nbsp; </span>To help understand all of these classifications, the following Venn diagram shows the relationship between the different service types.</p><p class="MsoNormal">&nbsp;</p><p class="MsoNormal"><img border="0" src="http://travisspencer.com/stash/blog_images/ServiceClassifications.gif" /></p><p class="MsoNormal">&nbsp;</p><p class="MsoNormal"><strong>Utility Service</strong></p>      <p class="MsoNormal">The utility service is a class of services that is comprised of those that are small, compact, indivisible and are used as the building blocks in a service-oriented system.<span>&nbsp; </span>They are used to construct the larger, higher-level services.<span>&nbsp; </span>They are not cluttered up with product- or system-specific logic or functionality (which instead is found in controller services).<span>&nbsp; </span>Utility services are atomic.<span>&nbsp; </span>Their standalone nature insures that the system is agile and flexible from the ground up.<span>&nbsp; </span>Their unfettered construction allows these core services to be easily reused across may service-oriented applications; it also facilitates swapping them out without causing system-wide disruptions.<span>&nbsp; </span>Entity, proxy, and framework services are examples of utility services.&nbsp;</p>  <p class="MsoNormal"><strong>Proxy Service</strong></p>      <p class="MsoNormal">The proxy service classification is comprised of those services that function as a bridge between other members of the service-oriented system and incompatible subsystems.<span>&nbsp; </span>Device and process services fall into this grouping.<span>&nbsp; </span>Services in this class are sometimes referred to as wrapper, broker, or gateway services.<span>&nbsp; </span>Proxy services are analogous to the design pattern by the same name popularized by the GoF.&nbsp;</p>  <p class="MsoNormal"><strong>Device Service</strong></p>      <p class="MsoNormal">Device services are a specialized type of proxy service that stands in front of a hardware device.<span>&nbsp; </span>They are used to control and communicate with devices that do not natively provide an API that is compatible with the protocols used throughout the service-oriented system.<span>&nbsp; </span>A device service translates between the machine&rsquo;s communication channel(s) and those required to converse over the service bus.&nbsp;</p>  <p class="MsoNormal"><strong>Process Service</strong></p>      <p class="MsoNormal">Process services are another type of proxy service that are similar to device services.<span>&nbsp; </span>Unlike the latter, however, the former is used as a translator between a software application and the other members of the service-oriented system.<span>&nbsp; </span>Process services are almost always required to bring legacy software onto the bus.<span>&nbsp;</span>&nbsp;</p>  <p class="MsoNormal"><strong>Controller Service (aka Business Service)</strong></p>      <p class="MsoNormal">Services that fall into this category are those that orchestrate the smaller building block services together to solve certain business requirements.<span>&nbsp; </span>These services must be as flexible as possible to meet constantly changing business needs.<span>&nbsp; </span>Often, these services are built using workflow technologies, allowing them to be implemented using a graphical, drag and drop programming model.<span>&nbsp; </span>This implantation strategy insures that they are produced quickly, keeping their development cost low.<span>&nbsp; </span>The TCO and rapid development of these services is important because they are highly susceptible to change and are the most product-specific services within a service-oriented system.<span>&nbsp; </span>Controller services manage utility services.&nbsp;</p>  <p class="MsoNormal"><strong>Entity Service (aka Data Service)</strong></p>      <p class="MsoNormal">Entity services expose a single concept that is physically stored within a database.<span>&nbsp; </span>They are uncluttered by other utility services such as notifications and auditing.<span>&nbsp; </span>They provide access to information stored in backend databases via communication protocols used on the service bus rather than any technology-specific data access mechanisms such as OLEDB, JDBC, etc.<span>&nbsp; </span>They also shield consumers from any particular database server or specific database server version, isolating the system from changes in the IT infrastructure.&nbsp;</p>  <p class="MsoNormal"><strong>Framework Service</strong></p>      <p class="MsoNormal">Framework services are those necessary for every SOA.<span>&nbsp; </span>Regardless of the industry or product, all service-oriented system have them.<span>&nbsp; </span>They may not all have device or entity services, for example, but every SOA will have framework services.<span>&nbsp; </span>Examples of services that fall into this category include logging, auditing, notification, and security services.&nbsp;</p>  <p class="MsoNormal"><strong>Integration Services</strong></p>    <p class="MsoNormal">Integration services are those that lie at the perimeter of a system.<span>&nbsp; </span>They play a similar role as process services; however, they are distinct because of their outlying position.<span>&nbsp; </span>Together with controller services, integration services stand at the outer-most edges of a service-oriented solution whereas process services incorporate incompatible software applications <em>into</em> the system. <span>&nbsp;</span>Process services hide incompatibilities; integration services provide the input paths to the SOA.<span>&nbsp; </span>They do this by supporting many different communication protocols through which they receive messages that are normalized before being relayed to other service connected to the bus. <span>&nbsp;&nbsp;</span>Integration services are often implemented using EDI products such as BizTalk. Though controller services also stand at the borders of an SOA, they do not support a wide array of input channels through which messages can flow as integration services do.</p>  ]]>
        
    </content>
</entry>

<entry>
    <title>Is the WCF Channel Stack Patented?</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2008/02/is-the-wcf-channel-stack-paten.html" />
    <id>tag:travisspencer.com,2008://1.17</id>

    <published>2008-02-19T04:14:34Z</published>
    <updated>2008-05-05T03:29:08Z</updated>

    <summary><![CDATA[ I'm no lawyer, but this patent application makes you wonder if the WCF channel stack is patented.&nbsp; If it is, what are the ramifications?&nbsp; Is it a big deal?&nbsp; Should businesses building on WCF be concerned that such a...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="WCF" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="wcf" label="WCF" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[  <p class="MsoNormal">I'm no lawyer, but this <a href="http://www.google.com/patents?id=wHyiAAAAEBAJ">patent application</a> makes you wonder if the WCF channel stack is patented.&nbsp; If it is, what are the ramifications?&nbsp; Is it a big deal?&nbsp; Should businesses building on WCF be concerned that such a patent might (further) lock them into a Microsoft-only world?&nbsp; I don't have answers to the questions, but I think they deserve asking.</p>]]>
        
    </content>
</entry>

<entry>
    <title>WCF Channels Mini Book</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2007/12/wcf-channels-mini-book.html" />
    <id>tag:travisspencer.com,2007://1.14</id>

    <published>2007-12-31T05:50:52Z</published>
    <updated>2008-05-05T03:32:18Z</updated>

    <summary>This little e-book on WCF channels is a must read for any advanced WCF programmer....</summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="WCF" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="wcf" label="WCF" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[This <a href="http://wcf.netfx3.com/files/folders/product_team/entry3550.aspx">little e-book on WCF channels</a> is a <strong>must</strong> read for any advanced WCF programmer.<br />]]>
        
    </content>
</entry>

<entry>
    <title>WF vs. BizTalk</title>
    <link rel="alternate" type="text/html" href="http://travisspencer.com/blog/2007/12/wf-vs-biztalk.html" />
    <id>tag:travisspencer.com,2007://1.13</id>

    <published>2007-12-30T06:16:23Z</published>
    <updated>2008-06-07T05:34:58Z</updated>

    <summary><![CDATA[Windows Workflow Foundation (WF) and BizTalk both provide workflow capabilities.&nbsp; This brings up many questions.&nbsp; Which should be used?&nbsp; How does one make this determination?&nbsp; Is WF a replacement of BizTalk?&nbsp; I&rsquo;m not the best person to answer these questions,...]]></summary>
    <author>
        <name>Travis Spencer</name>
        <uri>http://travisspencer.com</uri>
    </author>
    
        <category term="BizTalk" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="WF" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="biztalk" label="BizTalk" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wf" label="WF" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://travisspencer.com/">
        <![CDATA[<p class="MsoNormal">Windows Workflow Foundation (WF) and BizTalk both provide workflow capabilities.<span>&nbsp; </span>This brings up many questions.<span>&nbsp; </span>Which should be used?<span>&nbsp; </span>How does one make this determination?<span>&nbsp; </span>Is WF a replacement of BizTalk?<span>&nbsp; </span>I&rsquo;m not the best person to answer these questions, but many, more qualified individuals, have already done so.<span>&nbsp; </span>In <em>Professional BizTalk Server 2006 </em>Jefford, Smith, and Fairweather suggest using &ldquo;WF for <em>within</em> your application and BizTalk Server for use <em>between </em>your applications&rdquo; (616). <span>&nbsp;</span>Former Group Product Manager for BizTalk, Scott Woodgate, also advises the use of WF for scenarios where the workflow will be used only within an application and recommends BizTalk for situations where a workflow will span multiple applications (<a href="http://blogs.msdn.com/scottwoo/archive/2005/10/10/479331.aspx">http://blogs.msdn.com/scottwoo/archive/2005/10/10/479331.aspx</a>).&nbsp;</p>  <p class="MsoNormal">When evaluating the two, it is also important to keep in mind that, though both are centered around workflows, their intensions are fundamentally different.<span>&nbsp; </span>WF is a foundational building block used to create systems in a way that separate processes from application code. <span>&nbsp;&nbsp;</span>On the other hand, BizTalk is an enterprise-caliber platform for building service-oriented applications.<span>&nbsp; </span>WF provides an API that developers can use and build upon while BizTalk offers a number of prebuilt components that almost all enterprise-caliber service-oriented systems need.<span>&nbsp; </span>For instance, BizTalk provides adapters to integrate disparate systems, a durable, transactional message store, orchestration abilities, message transformation, a business rules engine (BRE), a scalable architecture, monitoring and management functionality, administrative tools, and a proven history with thousands of successful installs.<span>&nbsp; </span>Each of BizTalk&rsquo;s features that are absent in WF must be implemented by end users; even the ones that it does include (e.g., the BRE), must be tested, built upon, supported and scaled up by its users.</p>  <p class="MsoNormal">As posted <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=205054&amp;SiteID=1#_ctl0_MainContent_PostFlatView__ctl0_PostRepeater__ctl3_HelpfulLabel">elsewhere on the Internet</a>, the following table further compares these two technologies:<span><br /> </span></p>  <table cellspacing="0" cellpadding="0" border="1" class="MsoTableGrid" style="border: medium none ; border-collapse: collapse">  <tbody><tr>   <td valign="top" style="border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; width: 213px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">   <p align="center" class="MsoNormal" style="text-align: center">Feature</p>   </td>   <td valign="top" style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; width: 213px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">   <p align="center" class="MsoNormal" style="text-align: center">BizTalk</p>   </td>   <td valign="top" style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; width: 213px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">   <p align="center" class="MsoNormal" style="text-align: center">WF</p>   </td>  </tr>  <tr>   <td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Hosting</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Prebuilt host process that is proven, scalable,   load-balanced, and redundant</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Hosted in a custom application that must be built by end   users </p>   </td>  </tr>  <tr>   <td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Designer</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Included in Visual Studio</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Included in Visual Studio or in a custom designer built by   end users</p>   </td>  </tr>  <tr>   <td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Scalability</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Highly scalable as proven by thousands of installs</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Must be achieved by end users</p>   </td>  </tr>  <tr>   <td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Transactional integrity</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Long running and atomic (ACID) transactions</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Must be implemented by end users</p>   </td>  </tr>  <tr>   <td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 213px">   <p class="MsoNormal">Tracking infrastructure</p>   </td>   <td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext%2]]>
        
    </content>
</entry>

</feed>
