<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3825159152896936294</id><updated>2011-11-27T15:54:41.704-08:00</updated><category term='Red Hat'/><category term='AOP'/><category term='Appliance'/><category term='Serivice Oriented Architecture'/><category term='contract'/><category term='SQL'/><category term='Technology'/><category term='enterprise architecture'/><category term='business process modeling'/><category term='ESB'/><category term='Hibernate'/><category term='Repository'/><category term='methodology'/><category term='event'/><category term='Charging Models'/><category term='Schema'/><category term='Change'/><category term='Oracle'/><category term='SOA'/><category term='interface'/><category term='Decoupled'/><category term='EJB'/><category term='loosely coupled'/><category term='Application Server'/><category term='WSDL'/><category term='Websphere'/><category term='SaaS'/><category term='Producer'/><category term='RAC'/><category term='competitive'/><category term='agile'/><category term='message'/><category term='reusability'/><category term='Axis'/><category term='enterprise'/><category term='Canonical Data Model'/><category term='OLA'/><category term='iBatis'/><category term='services'/><category term='EAI'/><category term='Service Oriented Architecture'/><category term='Spring'/><category term='ACEGI'/><category term='JEE'/><category term='Review JEE'/><category term='Orchestration'/><category term='Cloud'/><category term='database'/><category term='Service'/><category term='distributed'/><category term='ROI'/><category term='JBoss'/><category term='ant'/><category term='WS-Policy'/><category term='XSLT'/><category term='Governance'/><category term='security'/><category term='Consumer'/><category term='Migration'/><category term='URL'/><category term='Server'/><category term='policy'/><category term='ASP'/><category term='XML'/><category term='BPM'/><category term='monitoring'/><category term='Capacity Planning'/><category term='Java'/><category term='Registry'/><category term='BPEL'/><category term='state'/><category term='SLA'/><category term='Web service'/><category term='versioning'/><category term='ITIL'/><category term='Virtualisation'/><category term='Tomcat'/><category term='Choreography'/><category term='XDoclet'/><category term='abstraction'/><category term='Weblogic'/><category term='BPMN'/><category term='article'/><category term='testing'/><category term='automation'/><category term='SOA World'/><category term='J2EE'/><category term='DBMS'/><category term='reuse'/><category term='management'/><category term='.NET'/><category term='deployment descriptor'/><title type='text'>SOA PROBE</title><subtitle type='html'>Probing the depth and breadth of Service Oriented Architecture</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://soaprobe.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-8413286333640733016</id><published>2010-09-06T00:59:00.000-07:00</published><updated>2010-09-03T01:14:46.017-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Appliance'/><title type='text'>XML appliances</title><content type='html'>&lt;p&gt;An XML appliance is a specialised piece of almost ESB-like hardware offering facilities like: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Hardware encryption/decryption &lt;li&gt;Digital signature creation/verification &lt;li&gt;Fine grained Authentication, Authorization, and Auditing &lt;li&gt;XML threat protection &lt;li&gt;Dynamic routing &lt;li&gt;Message filtering &lt;li&gt;MIME, DIME, and MTOM attachment processing &lt;li&gt;XML acceleration &lt;li&gt;Web services management &lt;li&gt;Service level monitoring &lt;li&gt;EIS integration (Protocol conversion, MQ, JMS, Database, Webservices) &lt;/li&gt;&lt;li&gt;WS-* support with registry/repository integration &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So why would you want to use one of these? &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Enhance performance by removing the burden of CPU intensive XML processing from servers offering services &lt;li&gt;Appliances are "hardened" in security terms (as compared to an out of the box server) so ideal for DMZ deployment &lt;li&gt;Lower total cost of ownership &lt;li&gt;Wrap legacy systems with limited service offerings with WS-* capable services &lt;li&gt;Platform integration &lt;/li&gt;&lt;/ul&gt;IBM for example offers a suite of such appliances in its DataPower range: see the "IBM® WebSphere® DataPower® SOA Appliance Handbook" for a good introduction to the topic and IBM's offering. &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-8413286333640733016?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8413286333640733016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8413286333640733016'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2010/09/xml-appliances.html' title='XML appliances'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-6400692610373470372</id><published>2010-09-03T00:16:00.000-07:00</published><updated>2010-09-03T00:16:00.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='Canonical Data Model'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Registry'/><title type='text'>Canonical Data Model</title><content type='html'>You won't be doing SOA for long before you encounter the concept of a Canonical Data Model (CDM).  The idea is that you analyse your business processes, and derive a set of standard data types that you model using XML schema and use in your services - the Canonical Data Model.  Perhaps you go one step further and bring in an industry model like IBM's IFW and use that as a starting point.&lt;br /&gt;&lt;br /&gt;In the real world however, there is an estate of legacy systems that will tend to have a narrower view of data types than that proposed by the CDM.  Some will only be interested in a particular aspect of the CDM types, some subset of the attributes, whereas others will have  a different view completely.  The issue is that there are different ways to model things. &lt;br /&gt;&lt;br /&gt;THe CDM approach assumes that all systems' data is mappable to the CDM types, so through CDM all systems will be able to communicate with each other through your SOA.  Of course some optionality will need to be built in since not all systems will have the CDM data attributes.&lt;br /&gt;&lt;br /&gt;Anything that is not in the CDM is not deemed of enterprise interest.  Those quirkly little data attributes that exist in system X are not in the CDM because they are not of interest to anyone else.  If they become of interest, then of course the CDM will need to be changed and this is where your optionality/extensibility model is key.  You want to be able to add the quirkly little attribute without breaking the rest of your enterprise.&lt;br /&gt;&lt;br /&gt;CDMs need to have room for minor change and growth, but it is assumed that anything more fundamental would not be required because the CDM models the company's business processes which are stable in theory. &lt;br /&gt;&lt;br /&gt;And of course agile too, which feels a bit oxymoronic, but what do I know?  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-6400692610373470372?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6400692610373470372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6400692610373470372'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2010/09/canonical-data-model.html' title='Canonical Data Model'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-3839161101700655239</id><published>2010-09-01T00:11:00.000-07:00</published><updated>2010-09-01T00:15:46.247-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Governance'/><category scheme='http://www.blogger.com/atom/ns#' term='Charging Models'/><category scheme='http://www.blogger.com/atom/ns#' term='Change'/><title type='text'>Accepting Change</title><content type='html'>"The only constant is change" and the world of SOA is no different.  No matter how much upfront business process modeling is done, or how perfect your service granularity is, or how wonderfully compliant you are with WS-*, the reality is that your services will have to change to keep pace with change - business agility implies change. And if your SOA has been working, there should be a whole host of consumers of those services who will not be happy at all with having to change.  Change involves project cost, cost requires budgetary approval, and approval requires a Business appetite for the change.  But since the change won't always appear to benefit the Business, it will very often not be approved, and your SOA will go the way of most system landscapes: to legacy, riddled with complexity, redundancy and consequent fragility.&lt;br /&gt;&lt;br /&gt;So how do we get the Business to accept Change as a necessary evil to allow them the agility they dream of?&lt;br /&gt;&lt;br /&gt;There are several approaches, including:&lt;br /&gt;&lt;br /&gt;1. Governance - the "stick" approach - regulate/force change through rigourous software and portfolio managment processes - this requires an organisational culture of sufficient maturiry and Business buy-in to the concept of Enterprise Architecture to work&lt;br /&gt;&lt;br /&gt;2. Charging - the "carrot" approach - charge for the use of services and make it cheaper to reuse than to build, and to be on the latest version than a "legacy" version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-3839161101700655239?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/3839161101700655239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/3839161101700655239'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2010/09/accepting-change.html' title='Accepting Change'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-3880986204550247674</id><published>2009-10-22T01:46:00.000-07:00</published><updated>2009-10-22T01:50:07.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Choreography'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Oriented Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='BPM'/><category scheme='http://www.blogger.com/atom/ns#' term='business process modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='BPEL'/><category scheme='http://www.blogger.com/atom/ns#' term='Orchestration'/><category scheme='http://www.blogger.com/atom/ns#' term='message'/><category scheme='http://www.blogger.com/atom/ns#' term='BPMN'/><title type='text'>Orchestration vs Choreography?</title><content type='html'>I was going to write a post on this subject but found an excellent &lt;a href="http://www.bptrends.com/publicationfiles/04-08-COL-BPMandSOA-OrchestrationorChoreography-%200804-Rosen%20v01%20_MR_final.doc.pdf"&gt;article&lt;/a&gt; by Mike Rosen instead.&lt;br /&gt;&lt;br /&gt;Job done.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-3880986204550247674?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/3880986204550247674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/3880986204550247674'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2009/10/orchestration-vs-choreography.html' title='Orchestration vs Choreography?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-9829869534705710</id><published>2009-10-22T01:08:00.000-07:00</published><updated>2009-10-22T01:11:05.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Repository'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Oriented Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Governance'/><category scheme='http://www.blogger.com/atom/ns#' term='Registry'/><title type='text'>What do I put in my registry?</title><content type='html'>I'll talk later about asset management, but for now, what exactly belongs in a service registry?&lt;br /&gt;&lt;br /&gt;Well, services obviously, stupid.&lt;br /&gt;&lt;br /&gt;But what about stored procedures? Or legacy, remotely invokeable services?  Or batch feeds?  Or ETL (Extract Transform and Load)?&lt;br /&gt;&lt;br /&gt;I would suggest that the answer to this is "yes".  I know there is no fancy XML contract that can be enforced at runtime etc but so what?&lt;br /&gt;&lt;br /&gt;SOA is about organising your enterprise as much as anything else, which is why I believe Enterprise Architecture is a pre- or co-requisite to SOA (but that's another rant), and if you are documenting and governing your services (of all types) then you're well on your way to the path of SOA enlightenment.&lt;br /&gt;&lt;br /&gt;Standardisation of protocol and interface will follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-9829869534705710?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/9829869534705710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/9829869534705710'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2009/10/what-do-i-put-in-my-registry.html' title='What do I put in my registry?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-4908958325608436327</id><published>2009-10-21T05:53:00.000-07:00</published><updated>2009-10-22T01:08:49.616-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Repository'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Oriented Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Governance'/><category scheme='http://www.blogger.com/atom/ns#' term='Registry'/><title type='text'>We have a registry!</title><content type='html'>How exciting.  At long last I am a working somewhere with thousands of services, a registry/repository, a service registrar and established governance processes around the use of services.&lt;br /&gt;&lt;br /&gt;Could life get any better for an SOA believer?&lt;br /&gt;&lt;br /&gt;Yes, because unfortunately some groups have decided that all this stuff is too much bother and have come to a peer-peer arrangement regarding the use of services.&lt;br /&gt;&lt;br /&gt;So the registry is inaccurate.&lt;br /&gt;&lt;br /&gt;So the whole house of cards collapses in a horrible, useless heap.&lt;br /&gt;&lt;br /&gt;You see, reuse like recycling only works if the there are practical as well as ideological reasons for doing it.  In this case either the governance was not strong enough, or the populace were not sufficiently bought into the enterprise benefit of SOA.  Take your pick.&lt;br /&gt;&lt;br /&gt;Lesson?  A registry does not an SOA make, whereas an organisation (emphasis on organise) just might have a chance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-4908958325608436327?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/4908958325608436327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/4908958325608436327'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2009/10/we-have-registry.html' title='We have a registry!'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-6712509983530166160</id><published>2009-10-04T10:08:00.000-07:00</published><updated>2009-10-04T10:24:11.893-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ITIL'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='services'/><category scheme='http://www.blogger.com/atom/ns#' term='competitive'/><title type='text'>Competitive Services</title><content type='html'>I have been reviewing ITIL 3 with a view to updating my article on Service Management, and came across the notion of competitive services.  &lt;br /&gt;&lt;br /&gt;This is a very common notion when one looks at services in the usual, non-SOA sense where services are being offered in a market place and have to compete, but does it apply to SOA?&lt;br /&gt;&lt;br /&gt;Well, clearly if you are looking at services offered in the internet by companies engaged in Cloud computing and such like, e.g. Google or Amazon, the answer is yes, but what about your typical corporate enterprise landscape?&lt;br /&gt;&lt;br /&gt;I think the answer is still yes, but for different reasons.&lt;br /&gt;&lt;br /&gt;Outside a corporation you expect multiple service providers to offer similar services, and to compete in terms of functionality, but within a corporation, the whole point of SOA is to eliminate redundancy, so we're not expecting there to me more than one service of any particular kind.&lt;br /&gt;&lt;br /&gt;No, within a corporation, services are competing not against each other, but against the old way of building software.  There is still a fair bit of resistance out there to the services way of doing software.  Its a bit like recycling: wonderful concept in theory, after all who does not want to save the world?  But the minute it gets inconvenient for the individual you see it going in the bin, so to speak.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-6712509983530166160?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6712509983530166160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6712509983530166160'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2009/10/competitive-services.html' title='Competitive Services'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-1298093580623033440</id><published>2009-08-17T05:43:00.000-07:00</published><updated>2009-12-23T00:52:12.989-08:00</updated><title type='text'>Neptune Software Plc</title><content type='html'>Please note that as of August 2009 I am no longer associated in any capacity with &lt;a href="http://www.neptunesoftwareplc.com/"&gt;Neptune Software Plc&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-1298093580623033440?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/1298093580623033440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/1298093580623033440'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2009/12/neptune-software-plc.html' title='Neptune Software Plc'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-6084666801800761906</id><published>2008-11-12T00:29:00.001-08:00</published><updated>2008-11-12T00:53:02.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment descriptor'/><category scheme='http://www.blogger.com/atom/ns#' term='Weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Migrating Weblogic to JBoss (4)</title><content type='html'>Ok, so now you have some fairly respectable, though not yet perfect, style sheets, but how do you apply them to hundreds of deployment descriptors, potentially repeatedly as you refine the stylesheets?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/ant.apache.org"&gt;Ant&lt;/a&gt;, is the simplest answer. Ant is widely used to build and deploy J(2)EE applications and includes a very hand XSLT task which fits the bill perfectly.  For .Net-ers, there is &lt;a href="nant.sourceforge.net"&gt;NAnt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For example...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_nUyieo9SMck/SRqYmHbgbMI/AAAAAAAAAEA/OyMLVGNBRQE/s1600-h/ant.bmp"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 214px;" src="http://1.bp.blogspot.com/_nUyieo9SMck/SRqYmHbgbMI/AAAAAAAAAEA/OyMLVGNBRQE/s400/ant.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5267690494760086722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-6084666801800761906?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6084666801800761906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6084666801800761906'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/11/migrating-weblogic-to-jboss-4.html' title='Migrating Weblogic to JBoss (4)'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nUyieo9SMck/SRqYmHbgbMI/AAAAAAAAAEA/OyMLVGNBRQE/s72-c/ant.bmp' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-3680326459227332659</id><published>2008-11-06T06:05:00.000-08:00</published><updated>2008-11-07T04:10:15.245-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='Weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><category scheme='http://www.blogger.com/atom/ns#' term='XDoclet'/><title type='text'>Migrating Weblogic to JBoss (3)</title><content type='html'>My XSLT skills are coming on pretty nicely, but the real battle in all of this is finding equivalent features for those Weblogic application server specifics that we've used.  So far I've been able to map most features 1-1 between the respective deployment descriptor files, but today I encountered one that doesn't fit this pattern. In Weblogic, entity-cache is in the weblogic-ejb-jar.xml, whereas in JBoss its equivalent is in the jbosscmp-jdbc.xml not jboss.xml, so XSTL becomes tricky.&lt;br /&gt;&lt;br /&gt;I'm also pondering moving to XDoclet since it would allow us to maintain one source going forward and still target multiple application servers, but that would mean redoing all our Weblogic descriptors and involves some element of risk, particularly as I'm not certain all the features we use are covered by XDoclet.&lt;br /&gt;&lt;br /&gt;If you've not used XDoclet before, it allows one to embed deployment configuration within Java and then generate XML deployment descriptors using an Ant task.  For example see below (notice the use of @ejb, @jboss, @weblogic and @websphere tags.)  An additional benefit of this approach is it enables one to see clearly which open and which app server specific JEE features are being used.  &lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * This is a teller bean. It is an example of how to use the XDoclet tags.&lt;br /&gt; *&lt;br /&gt; * @ejb.bean         name="Teller"&lt;br /&gt; *                   description="Teller example bean"&lt;br /&gt; *                   jndi-name="ejb/bank/Teller"&lt;br /&gt; *                   type="Stateless"&lt;br /&gt; *&lt;br /&gt; * @ejb.ejb-ref      ejb-name="Account"&lt;br /&gt; *                   ref-name="ejb/bank/Account"&lt;br /&gt; * &lt;br /&gt; * @jboss.ejb-local-ref ref-name="File"&lt;br /&gt; *      jndi-name="blah/File"&lt;br /&gt; *&lt;br /&gt; * @ejb.ejb-ref      ejb-name="Customer"&lt;br /&gt; *&lt;br /&gt; * @ejb.security-role-ref role-link="Administrator"&lt;br /&gt; *                        role-name="admin"&lt;br /&gt; *&lt;br /&gt; * @ejb.permission   role-name="Teller"&lt;br /&gt; * @ejb.permission   role-name="Administrator"&lt;br /&gt; *&lt;br /&gt; * @ejb.transaction  type="Required"&lt;br /&gt; * @ejb.transaction-type type="Container"&lt;br /&gt; *&lt;br /&gt; * @ejb.resource-ref res-auth="Container"&lt;br /&gt; *                   res-name="jdbc/DBPool"&lt;br /&gt; *                   res-type="javax.sql.DataSource"&lt;br /&gt; *&lt;br /&gt; * @jboss.resource-ref res-ref-name="jdbc/DBPool"&lt;br /&gt; *                     resource-name="MyDataSourceManager"&lt;br /&gt; *&lt;br /&gt; * @jboss.container-configuration name="Standard Stateless SessionBean"&lt;br /&gt; *&lt;br /&gt; * @jboss.ejb-ref-jndi jndi-name="ejb/bank/Account"&lt;br /&gt; *                     ref-name="bank/Account"&lt;br /&gt; *&lt;br /&gt; * @weblogic.pool      initial-beans-in-free-pool="1"&lt;br /&gt; *                     max-beans-in-free-pool="3"&lt;br /&gt; *&lt;br /&gt; * @weblogic.stateless-clustering stateless-bean-call-router-class-name="Whatever"&lt;br /&gt; *                                stateless-bean-is-clusterable="True"&lt;br /&gt; *                                stateless-bean-load-algorithm="Whazzup"&lt;br /&gt; *                                stateless-bean-methods-are-idempotent="Sure"&lt;br /&gt; *&lt;br /&gt; * @websphere.bean timeout="239"&lt;br /&gt; *&lt;br /&gt; */&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-3680326459227332659?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/3680326459227332659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/3680326459227332659'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/11/migrating-weblogic-to-jboss-3.html' title='Migrating Weblogic to JBoss (3)'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-5039688803420713777</id><published>2008-11-05T05:48:00.000-08:00</published><updated>2008-11-05T05:55:23.494-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='methodology'/><title type='text'>Agile SOA?</title><content type='html'>SOA promises business agility, so the question naturally arises whether Agile methodologies (as in XP, Scrum etc) are better suited to SOA development than more traditionaly (albeit iterative) methodologies such as RUP.&lt;br /&gt;&lt;br /&gt;If you're not familiar with Agile principles you've probably been marooned on an island somewhere.  Agile is the slated answer to the software development crisis.  To quote the Agile Manifesto (http://www.agilemanifesto.org/principles.html):&lt;br /&gt;&lt;br /&gt;We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:&lt;br /&gt;&lt;br /&gt;- Individuals and interactions over processes and tools &lt;br /&gt;- Working software over comprehensive documentation &lt;br /&gt;- Customer collaboration over contract negotiation &lt;br /&gt;- Responding to change over following a plan &lt;br /&gt;&lt;br /&gt;That is, while there is value in the items on the right, we value the items on the left more.&lt;br /&gt;&lt;br /&gt;The key principles of Agile methodologies include things like:&lt;br /&gt;- Customer satisfaction through rapid, continuous delivery of functional software &lt;br /&gt;- Working software, not documentation, is the principal measure of progress &lt;br /&gt;- Change is welcomed &lt;br /&gt;- Close, face-to-face daily cooperation between business people and developers &lt;br /&gt;- Projects are built around motivated individuals, who should be trusted &lt;br /&gt;- Continuous attention to technical excellence and good design &lt;br /&gt;- Continuous integration of source code changes&lt;br /&gt;- Simplicity &lt;br /&gt;- Self-organizing teams&lt;br /&gt;- Regular adaptation to changing circumstances &lt;br /&gt;- Test driven development&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Agile methodologies are in general suited to small teams of senior developers with rapidly changing requirements and an end user.  Some work has been done to apply Agile on the larger scale but in general the larger the scale and number of interworking groups, the less agile is applicable "to the whole".&lt;br /&gt;&lt;br /&gt;The last phrase is key, because certainly there is no issue with organising service development teams in an Agile manner, however Agile as a methodology for delivering enterprise SOA is surely inappropriate?&lt;br /&gt;&lt;br /&gt;SOA is highly planned, requires a defined architectural and organisational framework in which to operate, needs lots of up front business modeling to help drive service requierments, needs formally defined and well-documented contracts, needs formal rigorous change management, and finally some measure of stability because of the cost of change to clients.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-5039688803420713777?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5039688803420713777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5039688803420713777'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/11/agile-soa.html' title='Agile SOA?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-7317560940637872984</id><published>2008-10-29T08:53:00.000-07:00</published><updated>2008-10-29T08:55:53.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Oriented Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='article'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA World'/><title type='text'>Is SOA Non-Trivial?</title><content type='html'>I have just published an article on this topic over at &lt;a href="http://soa.sys-con.com/node/728412"&gt;SOA World&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-7317560940637872984?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/7317560940637872984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/7317560940637872984'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/is-soa-non-trivial.html' title='Is SOA Non-Trivial?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-5717926578116060361</id><published>2008-10-28T09:14:00.000-07:00</published><updated>2008-10-28T09:20:45.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment descriptor'/><category scheme='http://www.blogger.com/atom/ns#' term='Weblogic'/><title type='text'>Migrating Weblogic to JBoss (2)</title><content type='html'>Hmmm, I may have spoken a tad early.&lt;br /&gt;&lt;br /&gt;The XSLT scripts I found only translate the very basic deployment descriptor elements. The remaining elements are usually of the vendor-specific performance optimisation type which often don't have a 1-1 equivalent, if they have one at all.&lt;br /&gt;&lt;br /&gt;The JBoss community forums are very quiet on these fronts.  Perhaps there is a conspiracy to drive me to JBoss.com's migration programme...&lt;br /&gt;&lt;br /&gt;Grumble.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-5717926578116060361?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5717926578116060361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5717926578116060361'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/migrating-weblogic-to-jboss-2.html' title='Migrating Weblogic to JBoss (2)'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-9095918612459385105</id><published>2008-10-23T08:10:00.000-07:00</published><updated>2008-10-24T03:58:43.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Review JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Weblogic'/><title type='text'>Migrating Weblogic to JBoss (1)</title><content type='html'>This is the first in a series of posts on the joys of migrating our JEE application from Weblogic to JBoss. Being JEE it should be trivial right? ;-)&lt;br /&gt;&lt;br /&gt;The steps so far...&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Stripped out a couple of EJBs from our application to port as a POC&lt;br /&gt;&lt;li&gt;Jboss download from jboss.org and installation was very quick and painless.&lt;br /&gt;&lt;li&gt;Read some of the documentation which is fairly good, and fine when supplemented with Google, but not as good as Weblogic's&lt;br /&gt;&lt;li&gt;JBoss runs pretty much out of the box and is very quick. Needs Sun JRE - it didn't like JRockit (which is bundled with Weblogic)&lt;br /&gt;&lt;li&gt;Setup Oracle datasources (non XA for now) and message queues and topics. Found the documentation clear as mud and had to get help from examples&lt;br /&gt;&lt;li&gt;Rebuilt our JEE application against the Sun JRE and JBoss EE library and found that we were using some Weblogic classes. No more.&lt;br /&gt;&lt;li&gt;Found a free set of XSLTs to transform our Weblogic EJB deployment descriptors to JBoss. Worked mostly but needed some manual tweaking. I'll fix the XSLTs sometime.&lt;br /&gt;&lt;li&gt;Dropped our application EAR in to the deploy folder&lt;br /&gt;&lt;li&gt;Started JBoss&lt;br /&gt;&lt;li&gt;Removed the CreateException from our MDB ejbCreates. JBoss complained rightly that these violated the EJB spec and even gave the section number! How cool is that?&lt;br /&gt;&lt;li&gt;Changed the JNDI properties in our application configuration files&lt;br /&gt;&lt;li&gt;Application deployed pretty much first time which surprised me no end&lt;br /&gt;&lt;li&gt;Ran a little test and got some cryptic SQL error (Invalid scale size. Cannot be less than zero) which after much hunting turned out to be an Oracle-Sun JDBC incompatibility issue resolved by using -Doracle.jdbc.J2EE13Compliant=true on the server&lt;br /&gt;&lt;li&gt;And that was pretty much it folks!&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;J(2)EE rocks and vendor extensions don't! Fortunately our app was built with portability in mind so it should have been this easy. Porting was an interesting exercise and much nicer than Powerpoint architecture for a change.&lt;br /&gt;&lt;br /&gt;Initial JBoss impressions?  Very favourable (apart from the imperfect documentation).&lt;br /&gt;&lt;br /&gt;Now I have to get a cluster running and test messaging, but a cup of coffee beckons. first.&lt;br /&gt;&lt;br /&gt;P.S. Happy to share some of the details with you if you email me&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-9095918612459385105?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/9095918612459385105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/9095918612459385105'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/migrating-weblogic-to-jboss-1.html' title='Migrating Weblogic to JBoss (1)'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-7406047484606092681</id><published>2008-10-23T06:23:00.000-07:00</published><updated>2008-10-24T05:56:59.647-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SLA'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='OLA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='interface'/><category scheme='http://www.blogger.com/atom/ns#' term='contract'/><category scheme='http://www.blogger.com/atom/ns#' term='WSDL'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Policy'/><title type='text'>Service Characteristics - Contract based</title><content type='html'>Software in general is required to conform to a defined functional interface, and services are no different in this respect.  For example, web service interfaces defined in WSDL (Web Service Definition Language) allow the definition of data types, input and output messages, operations, invocation protocols, and even the location of services. WS-Policy may be additionally used to define additional elements of the interface such as security policies.&lt;br /&gt;&lt;br /&gt;Interfaces are however very weak on the behavioural aspects (semantics) of services.  A service could return structurally correct data to a consumer but still not meet its functional obligations. Ensuring that services satisfy the behavioural contract is best done through automated test suites in my experience.  Perhaps one day we will be able to define pre- and post-conditions and have these verified by the service management software but I wouldn't hold your breath.&lt;br /&gt;&lt;br /&gt;In addition to functional obligations, services also have operational obligations both the consumers but to their operators.  In other words service contracts are much more like SLAs and OLAs than traditional functional interfaces.&lt;br /&gt;&lt;br /&gt;Contracts should ideally be kept in the service registry/repository, and where possible in a machine readable format to be used by service management software to help enforce the contracts at runtime.&lt;br /&gt;&lt;br /&gt;Of course such runtime enforcement of contracts comes with a performance penalty, but lets not spoil a lovely ideal with picky details... ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-7406047484606092681?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/7406047484606092681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/7406047484606092681'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-contract-based.html' title='Service Characteristics - Contract based'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-2371733156703116468</id><published>2008-10-22T01:02:00.000-07:00</published><updated>2008-10-22T01:04:42.846-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Consumer'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='interface'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='Serivice Oriented Architecture'/><title type='text'>Service Characteristics - Composable</title><content type='html'>Composability is the ability of services to be used in orchestration scenarios by higher level services or processes.  It is a special case of the reusability characteristic in that the services need to be uniform as well as reusable.  The reason for this primary reason for this requirement is that the orchestrating service will in all probability but built using something like BPEL not a conventional programming language, so any variations in service style become more difficult to deal with.&lt;br /&gt;&lt;br /&gt;This uniformity includes things like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Interface granularity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hate the phrase “coarse grained” because its almost meaningless in any practical sense, however services do need offer a uniform level of granularity in order to be composable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Error Handling&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Service consumers need to be able to differentiate between unexpected “system” exceptions, and recoverable “business exceptions” which may be retried under different conditions or by supplying different data.  In the case of system exceptions the consumer won't know for sure if the service operation completed or not, since for example the network connection might have died after the service completed its transaction.  For this reason its desirable that services be idempotent, I.e. retriable.  Where services are not idempotent, compensating (undo) operations should be offered.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Security&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Composable services should ideally offer a uniform security model to consumers, including single sign on abilities, channel or payload encryption.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Whilst it is possible to design such uniformity into your services, the reality is that in a typical enterprise landscape the underlying service platforms and functional interfaces will be quite varied.  This is where Enterprise Service Buses come in, providing features such as multi channel adapters, single sign-on, security adapters, routing and message transformation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-2371733156703116468?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/2371733156703116468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/2371733156703116468'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-composable.html' title='Service Characteristics - Composable'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-885687243443842614</id><published>2008-10-17T13:39:00.000-07:00</published><updated>2008-10-20T01:06:51.698-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='interface'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='WSDL'/><category scheme='http://www.blogger.com/atom/ns#' term='business process modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='Serivice Oriented Architecture'/><title type='text'>Service Characteristics - Abstract</title><content type='html'>Services must be abstract in the sense that they offer a functional interface that is not tied to any particular underlying implementation of that interface.  In other words they should hide implementation details such as programming language, operating system platform, database structure, internal object model, etc.  Abstraction supports other service characteristics such as reusability, extensibility and reduces coupling between producer and consumer.&lt;br /&gt;&lt;br /&gt;The degree of service abstraction that is achieved is often linked to whether the service was designed top down or bottom up.  &lt;br /&gt;&lt;br /&gt;Top down services begin with business domain model and processes which translate ultimately to service operations and types, e.g. in the form of WSDL and XML schema in the case of web services.  Such services will offer the highest level of abstraction since are designed without an implementation in mind.  However, top down services require a translation between the interface and implementation which can sometimes introduce a performance penalty, e.g. translating business keys to database identifiers.&lt;br /&gt;&lt;br /&gt;Bottom up services begin with an implementation and typically involve the use of toolkits to generate the service interfaces.  Such services are closely coupled to their implementations and consumers.  However, bottom up services are enticing because firstly they offer the ability to quickly expose existing code as services, and secondly because they allow the use of implementation specifics such as database identifiers to improve performance.&lt;br /&gt;&lt;br /&gt;These gains offer a false economy and should be resisted. The long term gains of well designed, adaptable services that reflect a business domain far outweigh any short term performance or time to market gains.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-885687243443842614?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/885687243443842614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/885687243443842614'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-abstract.html' title='Service Characteristics - Abstract'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-4689618817548210123</id><published>2008-10-17T05:18:00.000-07:00</published><updated>2008-10-17T05:20:05.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='policy'/><category scheme='http://www.blogger.com/atom/ns#' term='Consumer'/><category scheme='http://www.blogger.com/atom/ns#' term='Producer'/><category scheme='http://www.blogger.com/atom/ns#' term='Decoupled'/><category scheme='http://www.blogger.com/atom/ns#' term='message'/><category scheme='http://www.blogger.com/atom/ns#' term='Serivice Oriented Architecture'/><title type='text'>Service Characteristics - Autonomous</title><content type='html'>A service is autonomous if it has full control over its internal logic.  This requires that it has clearly defined and isolated (decoupled) functional and operational boundaries, that it is independent of other services and only communicates via contract-driven messages and policies.&lt;br /&gt;&lt;br /&gt;A consumer should exercise no influence over the service other than to execute it and to provide input values.  The service should have minimal dependency on its execution environment.&lt;br /&gt;&lt;br /&gt;Autonomy benefits both the service consumer and provider:-&lt;br /&gt;- Consumers are protected in that the service adheres strictly to agreed contracts.&lt;br /&gt;- Providers have greater reassurance because service level agreements are adhered to and services offer deployment flexibility because of their environment independence&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-4689618817548210123?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/4689618817548210123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/4689618817548210123'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-autonomous.html' title='Service Characteristics - Autonomous'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-2750196507792350110</id><published>2008-10-16T05:38:00.000-07:00</published><updated>2008-10-16T06:17:55.443-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='DBMS'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Server'/><title type='text'>SaaS and J(2)EE</title><content type='html'>&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Multitenancy refers to the architectural principle whereby a single instance of software runs on a software-as-a-service (SaaS) vendor’s servers, whilst serving multiple client organizations (tenants). This is in contrast to multi-instance architecture where separate software instance or hardware systems are set up for different client organizations. in other words, under a multitenant architecture, applications are required to virtually partition data and configuration so that each client organization works with a customized virtual application instance. Customization typically includes aspects like user interface branding, access control, data and configuration, workflow, etc&lt;br /&gt;&lt;br /&gt;The primary goal of multitenancy is cost savings, both for the SaaS provider and client. For the client the saving results from not having to operationally manage the application. For the provider the saving results from lower operational costs because of a single application instance on shared infrastructure providing a sevice to multiple tenants.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Deployment Options&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;From a deployment perspective there are several options whereby the requirement to host multiple tenants may be supported. For each option there are the following criteria to considered by the SaaS provider:&lt;br /&gt;• the capability of the underlying platform to host the desired configuration&lt;br /&gt;• the trade off between operational cost and application performance&lt;br /&gt;• regulatory requirements&lt;br /&gt;• perceived data isolation&lt;br /&gt;• operational costs&lt;br /&gt;• solution extensibility&lt;br /&gt;• business continuity&lt;br /&gt;• liability regarding breaches&lt;br /&gt;&lt;br /&gt;&lt;em&gt;JEE Application Server Deployment Scenarios&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;1. Fully Isolated Application server&lt;br /&gt;&lt;br /&gt;Each tenant accesses an application server running on a dedicated server&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_nUyieo9SMck/SPc2GZnYzoI/AAAAAAAAADo/opqFbOHvlt8/s1600-h/mt3.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730573561548418" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_nUyieo9SMck/SPc2GZnYzoI/AAAAAAAAADo/opqFbOHvlt8/s200/mt3.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Virtualized Application Server&lt;br /&gt;&lt;br /&gt;Each tenant accesses a dedicated application running on a separate virtual machine&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_nUyieo9SMck/SPc2GdR9I_I/AAAAAAAAADw/ARH0seH52dY/s1600-h/mt2.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730574545396722" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_nUyieo9SMck/SPc2GdR9I_I/AAAAAAAAADw/ARH0seH52dY/s200/mt2.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Shared Application Server&lt;br /&gt;&lt;br /&gt;The tenants shared the application server and access application resources through separate session or threads.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_nUyieo9SMck/SPc2GcNKD4I/AAAAAAAAAD4/IqnG04tjzew/s1600-h/mt1.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730574256836482" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_nUyieo9SMck/SPc2GcNKD4I/AAAAAAAAAD4/IqnG04tjzew/s200/mt1.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Database deployment scenarios&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;1. Fully isolated data center&lt;br /&gt;&lt;br /&gt;The tenants do not share any data center resources&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_nUyieo9SMck/SPc14_k3nOI/AAAAAAAAADA/XpWedMFdLo0/s1600-h/db1.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730343233363170" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_nUyieo9SMck/SPc14_k3nOI/AAAAAAAAADA/XpWedMFdLo0/s200/db1.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Virtualized servers&lt;br /&gt;&lt;br /&gt;The tenants share the same host but access different database running on&lt;br /&gt;separate virtual machines&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_nUyieo9SMck/SPc15BthMuI/AAAAAAAAADI/4SvToVfNDd0/s1600-h/db2.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730343806513890" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_nUyieo9SMck/SPc15BthMuI/AAAAAAAAADI/4SvToVfNDd0/s200/db2.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Shared Server&lt;br /&gt;&lt;br /&gt;The tenants share the same server (Hostname or IP) but access different databases&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_nUyieo9SMck/SPc15KGi-OI/AAAAAAAAADQ/pAgVduRppm4/s1600-h/db3.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730346058971362" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_nUyieo9SMck/SPc15KGi-OI/AAAAAAAAADQ/pAgVduRppm4/s200/db3.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. Shared Database&lt;br /&gt;&lt;br /&gt;The tenants share the same server and database (shared or different ports) but access different&lt;br /&gt;schema (tables)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_nUyieo9SMck/SPc15IocIyI/AAAAAAAAADY/TGfvFSAa6jQ/s1600-h/db4.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730345664258850" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_nUyieo9SMck/SPc15IocIyI/AAAAAAAAADY/TGfvFSAa6jQ/s200/db4.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. Shared Schema&lt;br /&gt;&lt;br /&gt;The tenants share the same server, database and schema (tables). Their respective data is segregated by key and rows.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_nUyieo9SMck/SPc15ixCZUI/AAAAAAAAADg/oTuZZ4VmoHk/s1600-h/db5.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257730352679642434" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_nUyieo9SMck/SPc15ixCZUI/AAAAAAAAADg/oTuZZ4VmoHk/s200/db5.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Challenges to JEE Applications&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Typical JEE applications using EJBs with a DBMS back-end that have not been built with multitenancy in mind can usually support most of the deployment options above quite easily.  The challenge is supporting that shared application server and schema model.  An approach for these is proposed below.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Application Server Challenges&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;For a single server instance (JVM), hosting the same application more than once will require a some changes, e.g. a unique web context root for each instance and a mechanism for ensuring the JNDI names do not clash.  This would typically require a build brocess that generates EARs targeted at tenants, tweaking the context root and JNDI names in the deployment descriptors.  The use of resource references to remove hardcoded JNDI names from source code would also be required. &lt;br /&gt;&lt;br /&gt;In addition, the tenant id would need to be propagated all the way through the application to enable correct JNDI lookups to be performed.&lt;br /&gt;&lt;br /&gt;Of course the ideal would be that only stateless session beans are used and are packaged in a way that they are common to multiple tenant web applications.  This is one more instance where entity beans suck.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Database Challenges&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;For a single database schema to be shared amongst multiple tenants, 2 options exist.  Either (i) use a DBMS native feature such as Oracle Virtual Private Database to create multiple, tenant-specific virtual schemas, or (ii) add an ENTITY_ID column to every table and SQL statement in the application.&lt;br /&gt;&lt;br /&gt;The former is of course much easier, but if portability is important then the latter option is preferred.  The impact to the application server is in the first instance that a different datasource would be required for each tenant, and in the second instance, that the tenant id be added to each SQL statement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So if your sales team has dropped you in it and sold your J(2)EE application to a SaaS provider, you now know that its not the end of the world!   ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-2750196507792350110?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/2750196507792350110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/2750196507792350110'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/saas-and-j2ee.html' title='SaaS and J(2)EE'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nUyieo9SMck/SPc2GZnYzoI/AAAAAAAAADo/opqFbOHvlt8/s72-c/mt3.bmp' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-255555296533466158</id><published>2008-10-16T01:02:00.001-07:00</published><updated>2008-10-16T07:54:21.677-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SLA'/><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='versioning'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Serivice Oriented Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>Service Characteristics - Extensible</title><content type='html'>The only constant in life is change, and this is no different for services. Services must be built with this in mind: that they will have to adapt to new or changing requirements. Extensibility is the ability for services to adapt whilst preserving existing consumer contracts.&lt;br /&gt;&lt;br /&gt;We would expect the following types of changes to services to have no impact on other consumers:&lt;br /&gt;- internal source code changes&lt;br /&gt;- interface changes&lt;br /&gt;- take on of new consumers&lt;br /&gt;- environmental changes&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Internal code changes&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Insulating consumers from internal changes is achieved through another service characteristic: Abstraction, I.e. it is critical that that services do not “leak” implementation detail into the interface. A typical example of this is the use of underlying database identifiers in the interface instead of meaningful business keys.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Interface changes&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In general interface changes will break existing code. The exceptions to this are the adding of new operations or certain types of service data types extension. Where breaking changes are introduced then a versioning scheme is required to separate the old and the new, whilst supporting both concurrently. Versioning for web services is typically done via the introduction of major and minor numbers to XML namespaces, such as proposed &lt;a href="http://blogs.iona.com/sos/20070410-WSDL-Versioning-Best-Practise.pdf"&gt;here&lt;/a&gt;, or alternatively via a service registry.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;New consumers take-on&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;The take-on of new consumers will increase the load on a service. Services need to ensure that previously agreed consumer service level agreements (SLA) are not violated. Achieving this will involve a combination of automated performance regression test suites and runtime SLA monitoring.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Environmental changes&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Services need to ensure that any planned maintenance that is performed on their underlying execution platform such as the application of critical patches does not affect consumers. Services need to run in a cluster with the ability for service instances to be transparently taken out of commission during maintenance periods whilst other service instances continue to support consumer requests. It is advisable to run automated regression test suites after such maintenance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-255555296533466158?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/255555296533466158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/255555296533466158'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-extensible.html' title='Service Characteristics - Extensible'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-525731853275738797</id><published>2008-10-15T00:59:00.000-07:00</published><updated>2008-10-15T02:31:17.972-07:00</updated><title type='text'>Service Characteristics - Discoverable</title><content type='html'>For services to be of use of anyone they must be discoverable. Discoverability is usually taken to refer to the ability for consumers to find a relevant service by attributes (tags) at runtime via a service registry. In other words, consumers go to a service “yellow pages” and find at runtime services that best meet their needs.&lt;br /&gt;&lt;br /&gt;#ifdef OPINION_COUNTS&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;This sort of runtime discoverability has not yet taken off despite all the hype. Service contracts are complex beasts that include non-trivial functional interfaces and runtime policies such as security and operational service level agreements. Then there are the capacity management and funding considerations involved in service adoption. Such runtime discoverability is more suited to a market place were variation and competition thrive, than to internal corporate landscapes where reuse and lower total cost of ownership is a key driver.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;#endif OPINION_COUNTS&lt;br /&gt;&lt;br /&gt;Is that the end of this post then?&lt;br /&gt;&lt;br /&gt;No. Services very much need to be discoverable in the sense that they are well publicised to the consumer community. Services will not be reused if they are not known about. Service registries must contain everything the consumer will want to know about the service, e.g. name, description, functional interface, locations, owner, operational and performance criteria, security model, invocation mechanism, cost, etc. but must equally importantly include tags that will make searches possible.&lt;br /&gt;&lt;br /&gt;However just having such a service registry is not enough. Governance is required to ensure that development communities making use of the registry; governance not just in the stick sense, i.e. thou shalt use the registry or else, but also in the carrot sense. It is important to capture the hearts and minds of both development and business communities. Reuse is like recycling, fine in principle, with everyone keen to do it, until it becomes inconvenient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-525731853275738797?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/525731853275738797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/525731853275738797'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-discoverable.html' title='Service Characteristics - Discoverable'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-8124345526923489007</id><published>2008-10-13T22:56:00.000-07:00</published><updated>2008-10-14T05:55:27.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='state'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='RAC'/><category scheme='http://www.blogger.com/atom/ns#' term='DBMS'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='Weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='URL'/><title type='text'>Service Characteristics - Stateless</title><content type='html'>&lt;p style="MARGIN-BOTTOM: 0cm"&gt;A service is said to be stateless if the consumer of that service can make use of any operating instance of that service. This is achieved by services not storing any internal data (state) that would be required if the consumer happened to invoke another instance of that service.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;In general this goal is achieve by ensuring that all service data (including state) is kept in an external store common to all instances of that service.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;However for performance reasons, service implementers are often inclined to cache back-end system query results or consumer session data. The reason for this is that the back-end systems and data stores which are accessed by services very often become points of contention and a source of bottlenecks, so avoiding the need to query those systems through caching at the service tier is attractive.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Service tier caching requires that cached data is available at all service instances, and that these instances are kept in sync both with each other and the underlying data store. Achieving this requires fairly sophisticated cache management software with cache refresh, propagation and invalidation mechanisms, as well as volatility analysis of the data being cached, i.e. the less volatile data is the more suitable it will be for caching.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;JEE applications servers such as Weblogic offer HTTP and Stateful EJB session state caching that can be replicated across a cluster and persisted to a variety of data stores for failover purposes. In addition consumer connections to servers can be made “sticky” so that a given consumer will always return to the same server and only be redirected to another server in a failover scenario. This is fine as long as either the state is replicated or the consumer is happy to lose some conversational state in the rare instance that a server becomes unavailable. It is also possible to store consumer state on the client, either via client cookies or via URL rewriting. Weblogic for example can be configure to use either depending on whether client browser cookies are enable or not.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;A viable and arguable simpler alternative to all of the above (where network latency between service and data tiers is not an issue) is to perform caching in the data tier using for example a DBMS feature such as Oracle RAC which provides a cluster of processes with data caches to improve performance and resilience.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Statelessness is a key characteristic of services which is essential for a scalable and fault tolerant SOA. State may be introduced if required but only after careful consideration as it will require complex and potentially less fault tolerant cache management facilities.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-8124345526923489007?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8124345526923489007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8124345526923489007'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-stateless.html' title='Service Characteristics - Stateless'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-5945691387121448460</id><published>2008-10-10T07:28:00.000-07:00</published><updated>2008-10-10T07:32:52.203-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Lightweight Enterprise SOA Platform!?</title><content type='html'>According to &lt;a href="http://soa.sys-con.com/node/706085"&gt;SOA World&lt;/a&gt;, Red Hat Will Realease JBoss Enterprise SOA Platform 4.3 and JBoss Operations Network 2.1 At the End of the Month.&lt;br /&gt;&lt;br /&gt;My mouth is watering already, though you do have to wonder at anything that is claimed to be a "Lightweight Enterprise SOA Platform" ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-5945691387121448460?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5945691387121448460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5945691387121448460'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/lightweight-enterprise-soa-platform.html' title='Lightweight Enterprise SOA Platform!?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-5579901729342406018</id><published>2008-10-10T01:00:00.000-07:00</published><updated>2008-10-10T01:50:55.443-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='Capacity Planning'/><title type='text'>Service Characteristics - Distributed</title><content type='html'>Services should be distributable, that is they need not and indeed should not run in the same process as the consumer.  Services that run in the same process offer no possibility of runtime reuse to other consumers.  &lt;br /&gt;&lt;br /&gt;In order to achieve this goal you minimally need two things: a remoting framework and location transparency&lt;br /&gt;&lt;br /&gt;1. Remoting Framework&lt;br /&gt;&lt;br /&gt;A remoting framework is the mechanism whereby consumers are able to locate and invoke remote services.  Typically for SOA this means Web Services, though less interoperable protocols such as JEE and .NET may also be used, for example where performance is a critical criterion.  However such decisions should not be taken lightly – the ability to interoperate is a key to achieving reuse across the enterprise.&lt;br /&gt;&lt;br /&gt;2. Location Transparency&lt;br /&gt;&lt;br /&gt;Location transparency refers to the ability for a consumer to use a service without knowing where that service is running.  This may be achieved to a degree through the use of DNS names hiding IP addresses, or creating server clusters fronted by an IP load balancer virtual service address.  However, both of these still bind the consumer to a logical instance of the service. In contrast a service registry provides additional decoupling in that consumers are searched for by attribute (e.g. name and version number) rather than being bound by name.&lt;br /&gt;&lt;br /&gt;Location transparency is also required of the service implementation itself.  Services should not be tied to any particular location, both for capacity planning reasons where it may be required to move services between platforms to support load, but also for portability reasons.  Achieving environment independence is achieved by running services in a container such as JEE or Spring that insulate the services from the underlying infrastructure, as well as ensuring that services are stateless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-5579901729342406018?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5579901729342406018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5579901729342406018'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-distributed.html' title='Service Characteristics - Distributed'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-58652269950741019</id><published>2008-10-09T06:52:00.000-07:00</published><updated>2008-10-09T06:54:38.445-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='reusability'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><title type='text'>Service Characteristics - Reusable</title><content type='html'>A service is said to be reusable if it can be used in more than one context, even in contexts for which it wasn't originally designed.  &lt;br /&gt;&lt;br /&gt;So how do we achieve this noble goal?&lt;br /&gt;&lt;br /&gt;1. Business domain modelling&lt;br /&gt;&lt;br /&gt;If you understand your business domain and model services according to that domain your services stand a better chance of being reused than if they were built in isolation to localised requirements. Business process modelling should drive the requirements for services.&lt;br /&gt;&lt;br /&gt;2. Adaptability&lt;br /&gt;&lt;br /&gt;If your service can be easily extended then it can be reused.  Extensibility is about being able to change the service implementation or extending the interface without affecting existing customers.  Extensibility is achieved through interface abstraction and well-defined versioning policies, but also surprisingly through aspects like testability and resourcing capability.&lt;br /&gt;&lt;br /&gt;Testability is about verifying service backward compatibility using an automated regression test which includes both functional and performance aspects of that service is key to service extensibility.&lt;br /&gt;&lt;br /&gt;With respect to resourcing, delays in making required changes to services will hinder service reuse, so flexible resourcing capabilities are required.&lt;br /&gt;&lt;br /&gt;3. Capacity Management&lt;br /&gt;&lt;br /&gt;Eh?  Yes, unless your service environment can support additional customers, that service cannot be said to be reusable.  Capacity management is about sizing and providing service operating environments both for current and projected volumes.&lt;br /&gt;&lt;br /&gt;4. Visibility&lt;br /&gt;&lt;br /&gt;If people don't know about services then they won't be reused.  A well designed and publicised service registry will help potential customers to quickly identify services that meet their needs.&lt;br /&gt;&lt;br /&gt;5. Governance&lt;br /&gt;&lt;br /&gt;Even if you have done all of the above, people will find reasons not to reuse, e.g. if the service does not exactly match the customer's requirements or the customer is not prepared to wait for the service to be enhanced.  To help with such cases, governance using both carrot and stick is required.  Governance is first about defining the rules, then helping people to understand and follow the rules.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-58652269950741019?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/58652269950741019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/58652269950741019'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-reusable.html' title='Service Characteristics - Reusable'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-7144817860294734743</id><published>2008-10-08T13:49:00.000-07:00</published><updated>2008-10-08T13:50:45.083-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='loosely coupled'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><title type='text'>Service Characteristics - Loosely Coupled</title><content type='html'>What does it mean for a service to be loosely coupled?&lt;br /&gt;&lt;br /&gt;A service is said to be loosely coupled if its consumers are minimally impacted by changes to that service or its environment. Some coupling is obviously inevitable since the consumer has to make use of the service but can be minimised in a number of ways:&lt;br /&gt;&lt;br /&gt;1. Separation of interface and implementation&lt;br /&gt;&lt;br /&gt;The service interface is the formal contract between producer and consumer.  This is the part that should not change frequently.  The implementation however may need to change as more services are created, as the platforms are upgraded or changed etc.  Separation of interface and implementation allows services to grow without impacting the client.&lt;br /&gt;&lt;br /&gt;Notice that attempting to reduce dependency by providing a weakly typed interface that does not “change” frequently just means runtime as opposed to bind time coupling.  &lt;br /&gt;&lt;br /&gt;2. Versioning Policy&lt;br /&gt;&lt;br /&gt;Service interfaces will change as new consumers bring new requirements or the business domain changes.  An effective versioning policy will allow existing consumers to be isolated from service interface changes as much as possible.  The policy should consist of mechanisms which allow services to be extended without forcing existing consumers to upgrade, i.e provide some degree of backward compatibility.  On the other hand, the policy should also enforce an upgrade interval which consumers would need to comply with.&lt;br /&gt;&lt;br /&gt;3. Runtime Contract&lt;br /&gt;&lt;br /&gt;The functional contract between a consumer and producer is covered by the interface, but there is also a runtime contract, a service level agreement (SLA) which both the service and its consumers should be subject to.  Consumers must be insulated as much as possible (within the bounds of the SLA) from any runtime changes to the service environment such as increased load or platform outage.  This is achieved through clustering of services to provide failover, and partitioning hardware so that services do not have a runtime impact other services sharing the same environment.&lt;br /&gt;&lt;br /&gt;4. Platform independence&lt;br /&gt;&lt;br /&gt;Platform independence is partly achieved through separation of interface and implementation, but primarily requires a platform agnostic communication mechanism such as web services between consumers and the service.  Platform independence allows infrastructural changes to occur with minimal impact on service consumers.&lt;br /&gt;&lt;br /&gt;5. Location transparency&lt;br /&gt;&lt;br /&gt;Services may change location for any number of reasons, e.g. servers are decommissioned, capacity management moves services to underutilised servers.  For this reason its important for consumers to be isolated from the exact location of the service.  This may be achieved to a degree through the use of DNS names hiding IP addresses, or creating server clusters fronted by an IP load balancer virtual service address.  However, both of these still bind the consumer to a logical instance of the service. In contrast a service registry provides additional decoupling in that consumers are searched for by attribute (e.g. name and version number) rather than being bound by name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-7144817860294734743?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/7144817860294734743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/7144817860294734743'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/service-characteristics-loosely-coupled.html' title='Service Characteristics - Loosely Coupled'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-164935404300072481</id><published>2008-10-08T00:59:00.001-07:00</published><updated>2008-10-08T01:07:45.676-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Weblogic'/><title type='text'>JBoss</title><content type='html'>I have in the past worked on Websphere and now Weblogic JEE application servers and fortunately never had to port between the two.  Just porting from one version of a product to the next is difficult enough, never mind a cross product port!  I have found Weblogic to be a fine product, certainly much easier to learn and use than Websphere, but its not cheap, and one of our prospective clients has raised the question of running on JBoss which is of cours open source.&lt;br /&gt;&lt;br /&gt;“No problem!” our sales people cry and I wince.  JEE is a fine thing in theory and certainly gives you a hope of porting whereas .NET gives you no such hope at all, but the problem is in those little extras that the vendors give you for competition's sake.&lt;br /&gt;&lt;br /&gt;So I worry about those JEE implementation variations, some obvious like the Weblogic deployment specific files, some more subtle, like the way CMP works, and I worry about whether JBoss' messaging and clustering will be as tidy as Weblogic's.&lt;br /&gt;&lt;br /&gt;So I've downloaded JBoss and will be giving it a go.  Hopefully there are some migration guides and even tools out there to simplify my task, but I'm expecting tears and further hair loss.&lt;br /&gt;&lt;br /&gt;What's worse is that I'm dying to get rid of all our EJBs, introduce Spring and Hibernate, and run in a servlet container rather than full a blown application server.  That would certainly be much more portable, since with Spring you are essentially taking your application container with you. Of course then you are tied into Spring...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-164935404300072481?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/164935404300072481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/164935404300072481'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/jboss.html' title='JBoss'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-6990411989090112881</id><published>2008-10-07T08:38:00.000-07:00</published><updated>2008-10-07T08:40:15.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ITIL'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>SOA Service Management</title><content type='html'>I have written and published an &lt;a href="http://soa.sys-con.com/node/702159?page=1"&gt;article&lt;/a&gt; at SOA World on SOA Service Management and ITIL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-6990411989090112881?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6990411989090112881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6990411989090112881'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/soa-service-management.html' title='SOA Service Management'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-968519970746000379</id><published>2008-10-01T01:06:00.001-07:00</published><updated>2008-10-02T04:18:28.385-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='ROI'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='EAI'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise architecture'/><title type='text'>Cost of SOA</title><content type='html'>SOA is great isn't it? Chaos becomes order. Services are available for everybody to reuse. Costs are lowered. The business is truly agile. Shareholders are smiling.&lt;br /&gt;&lt;br /&gt;Ah, but its gonna cost you!&lt;br /&gt;&lt;br /&gt;Here are some of the items you will need.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One big expensive Enterprise Service Bus for all your infrastructural needs.&lt;/li&gt;&lt;li&gt;Many application servers for those newly built services.&lt;/li&gt;&lt;li&gt;Lots of training and consultancy from the "experts".&lt;/li&gt;&lt;li&gt;EAI adapters for those troublesome legacy systems.&lt;/li&gt;&lt;li&gt;One pilot project, probably of neglible business benefit.&lt;/li&gt;&lt;li&gt;One Enterprise Architecture function to help with your systems governance.&lt;/li&gt;&lt;li&gt;One SOA Center of Excellence.&lt;/li&gt;&lt;li&gt;One agile software development function with well defined, measurable and repeatable processes&lt;/li&gt;&lt;li&gt;One sophisticated service management organisation capable of operating services as enterprise assets.&lt;/li&gt;&lt;li&gt;One patient business community as all this gets set up and they foot the bill.&lt;/li&gt;&lt;li&gt;One adaptive business community who will have to mend their tactical ways and start thinking of the greater good.&lt;/li&gt;&lt;li&gt;One understanding business community who will appreciate that their tactical requirements might need to be subordinated to more general and hence reusable requirements of the enterprise.&lt;/li&gt;&lt;li&gt;One adaptive technical community who will be willing to mend their ways and start reusing rather than reinventing.&lt;/li&gt;&lt;li&gt;One persuasive business case, which may be a challenge since chances are that the organisation will not be very good on the metrics front so providing a much needed concrete ROI is going to be a challenge.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ah, but it will be a thing of beauty for all to see. :)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-968519970746000379?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/968519970746000379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/968519970746000379'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/10/cost-of-soa.html' title='Cost of SOA'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-5112921524417645183</id><published>2008-09-27T03:13:00.000-07:00</published><updated>2008-09-30T06:00:09.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='iBatis'/><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis'/><category scheme='http://www.blogger.com/atom/ns#' term='ACEGI'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Server'/><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Who needs an application server?</title><content type='html'>If you are primarily building web services then I would give this question serious consideration.&lt;br /&gt;&lt;br /&gt;Why spend a fortune on expensive and complex JEE application servers when the combination of Apache Tomcat, Axis webservices (or your favourite open source alternative), Spring AOP container, ACEGI security framework, Hibernate or iBatis persistence frameworks offers a very viable and free alternative?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-5112921524417645183?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5112921524417645183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/5112921524417645183'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/09/who-needs-application-server.html' title='Who needs an application server?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-2632391228676598298</id><published>2008-09-26T05:37:00.000-07:00</published><updated>2008-09-27T03:04:03.559-07:00</updated><title type='text'>Service Management</title><content type='html'>Service-oriented Architecture operations management requires a sophisticated service management organisation which is capable of defining and sustaining service levels to its customers across the enterprise. SOA without the service management will result in greater systems fragility and chaos.&lt;br /&gt;&lt;br /&gt;ITIL is the widely adopted framework for implementing service management practices and so it figures that it would have relevance to SOA. Under ITIL services must become managed and supportable enterprise assets. This has the following requirements for an organisation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A service product/consumer model with defined, regulated, monitored and enforced service level agreements&lt;/li&gt;&lt;li&gt;Effective configuration management and the existence of a consistent, accurate, widely accessible and reportable configuration database. SOA requires a service registry with additional features not supported by traditional configuration databases. The usefulness of this registry to clients is central to SOA adoption.&lt;/li&gt;&lt;li&gt;The service desk is the human face of SOA and needs to be knowledgeable and efficient in its processing of incidents, in particular as service adoption grows and services become integral components of various business processes across the enterprise. &lt;/li&gt;&lt;li&gt;Understanding the dependencies (and the operational importance of those dependencies) between services and clients and the between the internal components of those services is crucial for effective incident, change and release management&lt;/li&gt;&lt;li&gt;Automatic verification of the quality, functional correctness, compatibility, and performance of services will greatly facilitate effective change management&lt;/li&gt;&lt;li&gt;Service implementations must share common standards, architecture and core business components. Governance will need to be put in place to ensure adherence to these standards.&lt;/li&gt;&lt;li&gt;Ownership of services and common standards and software must be clearly defined, as well as the change management process&lt;/li&gt;&lt;li&gt;Services must be deployed into a monitored, fault tolerant environment.&lt;/li&gt;&lt;li&gt;An enterprise security model is required to support single sign-on and consistent authorisation policies across the enterprise&lt;/li&gt;&lt;li&gt;Effective service component monitoring, whether infrastructural or software, is required for all the disciplines of service management. The monitoring solution must support both real-time and historical reporting to provide decision support&lt;/li&gt;&lt;li&gt;Capacity management must ensure the availability of spare capacity to support timely service adoption&lt;/li&gt;&lt;li&gt;Charging of services should be considered (either notional or hard charging), but only be implemented if it will give a clear value to the organization and if/when the environment is ready for it.&lt;/li&gt;&lt;li&gt;SOA requires a strong governance function to ensure architectural and functional consistency across services and to encourage reuse. Reuse is a strategic goal and will often be at odds with short term delivery pressures – this must be managed. Consider setting up a service review board involving parties from various business units and enterprise architecture to assist with this.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-2632391228676598298?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/2632391228676598298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/2632391228676598298'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/09/service-management.html' title='Service Management'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-6456820261260206537</id><published>2008-09-24T11:14:00.001-07:00</published><updated>2008-09-26T05:51:46.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtualisation'/><title type='text'>Why SOA?</title><content type='html'>&lt;div&gt;If you take a look at a typical medium to large company, the enterprise landscape is littered with systems and applications that firstly use diverse and often obsolete or hard to support technologies, and secondly overlap in terms of the business functionality that they offer. The result is a maintenance and operational nightmare that is increasingly costly to run and hampers business growth.&lt;br /&gt;&lt;br /&gt;There are two aspects to this problem: (i) the technology platforms, and (ii) the applications.&lt;br /&gt;&lt;br /&gt;The answer to the first is &lt;span style="FONT-WEIGHT: bold"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;virtualisation&lt;/span&gt;,&lt;/span&gt; i.e. the ability to standardise on a minimal set of technology platforms that can be grouped and offered as virtual platform service to the enterprise. This reduces operations costs and allows cost effect use of the platforms as economies of scale are applied.&lt;br /&gt;&lt;br /&gt;The answer to the second, which is what people &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;usually&lt;/span&gt; mean when they say &lt;span style="FONT-WEIGHT: bold"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;SOA&lt;/span&gt;&lt;/span&gt; (Service Oriented Architecture), is a way of organising software so that instead of applications being rigid &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;monoliths&lt;/span&gt; they become dynamic collaborations of autonomous software services, each providing a distinct function. &lt;/div&gt;&lt;p align="center"&gt;&lt;a href="http://1.bp.blogspot.com/_nUyieo9SMck/SNzarj_MTSI/AAAAAAAAAAo/pS6Zr8PMeLA/s1600-h/SOA.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5250311707536674082" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_nUyieo9SMck/SNzarj_MTSI/AAAAAAAAAAo/pS6Zr8PMeLA/s320/SOA.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;The key to achieving both of these is standardisation, both of the enterprise technology set, but also the business processes that utilise that technology. In other words &lt;strong&gt;the most fundamental precondition for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;SOA&lt;/span&gt; is a mindset change&lt;/strong&gt;: that the strategic needs of the enterprise &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;supersede&lt;/span&gt; the tactical needs of the local business unit. So before you go out and buy an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;ESB&lt;/span&gt; and the other goodies that will give your business "agility" and other such gloriously profitable attributes, make sure your organisation understands and is prepared for this, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;that&lt;/span&gt; it will need things like an enterprise architecture function, governance and a very patient and even enlightened business community.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-6456820261260206537?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6456820261260206537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/6456820261260206537'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/09/why-soa.html' title='Why SOA?'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nUyieo9SMck/SNzarj_MTSI/AAAAAAAAAAo/pS6Zr8PMeLA/s72-c/SOA.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-8201474333473785258</id><published>2008-09-24T11:09:00.002-07:00</published><updated>2008-09-25T10:31:32.782-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><title type='text'>10 Key Service Attributes</title><content type='html'>1. Interface, Policy and Contract based&lt;br /&gt;2. Location transparency&lt;br /&gt;3. Autonomous&lt;br /&gt;4. Abstract&lt;br /&gt;5. Reusable&lt;br /&gt;6. Composable&lt;br /&gt;7. Stateless&lt;br /&gt;8. Discoverable&lt;br /&gt;9. Extensible&lt;br /&gt;10. Loosely coupled&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-8201474333473785258?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8201474333473785258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8201474333473785258'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/09/10-key-principles-of-service.html' title='10 Key Service Attributes'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-3825159152896936294.post-8297703896305189334</id><published>2008-09-24T05:03:00.000-07:00</published><updated>2008-09-25T10:31:51.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><title type='text'>Software as a Service (SaaS)</title><content type='html'>SOA (Service Oriented Architecture) is fundamentally about enabling software to be constructed from a network of "services", so when I first encountered the SaaS (Software as a Service) acronym I assumed it was marketing hype for the same thing.&lt;br /&gt;&lt;br /&gt;It isn't.&lt;br /&gt;&lt;br /&gt;Software as a service is a model of software deployment very similar to the traditional ASP (Application Service Provider) model where an application is hosted as a service provided to customers over the internet. The benefit to the customer is that the burden of software maintenance, operation and support is alleviated, whilst for the service provider there is through virtualisation the possbility of applying economies of scale to the operation.&lt;br /&gt;&lt;br /&gt;It seems to me that SaaS is just like ASP, but apparently the differences are due to SaaS's focus on the web and multi-tenant back-ends which enable greater economies of scale than ASP.&lt;br /&gt;&lt;br /&gt;Its a pity, because I think SaaS as an acronym would have fitted the SOA space better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3825159152896936294-8297703896305189334?l=soaprobe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8297703896305189334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3825159152896936294/posts/default/8297703896305189334'/><link rel='alternate' type='text/html' href='http://soaprobe.blogspot.com/2008/09/saas.html' title='Software as a Service (SaaS)'/><author><name>Robert Morschel</name><uri>http://www.blogger.com/profile/08341533702585148498</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nUyieo9SMck/SOun7oZU40I/AAAAAAAAABo/aKCvwT0RjCk/S220/Robert_morschel_100.jpg'/></author></entry></feed>
