<?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-37825117</id><updated>2012-01-02T23:10:06.035-08:00</updated><category term='EJB3'/><category term='KittenAuth'/><category term='javapolis'/><category term='Wicket'/><category term='ESB'/><category term='Catch up'/><category term='technical architecture'/><category term='Service Oriented Architecture'/><category term='Java'/><category term='J2EE'/><category term='JEE'/><category term='Ajax'/><category term='echo 2'/><title type='text'>Enterprise Technical Architecture</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://enterprise-technical-architecture.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://enterprise-technical-architecture.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>matt brooks</name><uri>http://www.blogger.com/profile/10918077000011978830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-37825117.post-3738982015838254873</id><published>2008-10-20T06:22:00.000-07:00</published><updated>2008-10-20T06:27:22.335-07:00</updated><title type='text'></title><content type='html'>&lt;span style="font-family: arial;"&gt;Hi,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;This is just to let you know about my &lt;a href="http://www.rdfgroup.com/blog/3"&gt;new blog &lt;/a&gt;which can be found at my companies &lt;a href="http://www.rdfgroup.com"&gt;new website.&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Hopfully I'll blog on it rather more regularly than I have done here! :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;See you all over there....TTFN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Matt&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37825117-3738982015838254873?l=enterprise-technical-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://enterprise-technical-architecture.blogspot.com/feeds/3738982015838254873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37825117&amp;postID=3738982015838254873&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/3738982015838254873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/3738982015838254873'/><link rel='alternate' type='text/html' href='http://enterprise-technical-architecture.blogspot.com/2008/10/hi-this-is-just-to-let-you-know-about.html' title=''/><author><name>matt brooks</name><uri>http://www.blogger.com/profile/10918077000011978830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37825117.post-7615909978175966758</id><published>2008-05-14T07:49:00.000-07:00</published><updated>2008-05-14T08:20:13.612-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wicket'/><title type='text'></title><content type='html'>&lt;span style="font-family:arial;"&gt;Our first public facing Wicket app went live today.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;It's public facing and &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.tenantchecker.co.uk/"&gt;here &lt;/a&gt;&lt;span style="font-family:arial;"&gt;it is- so I thought I'd blog about it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As ever I was Technical Architect on this work and it was a technical pleasure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;It was our first wicket app - and it also uses Spring and Hibernate under the covers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;We ran a very agile process to go from a standing start to the finished product in the quickest possible time and I personally learned a lot about the strengths, and potential pitfalls, of a low calorie process :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If I get time I'll blog in a bit more technical depth on this app and the journey that we went on.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In the mean time hope things are good with any folk out their that read this.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37825117-7615909978175966758?l=enterprise-technical-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://enterprise-technical-architecture.blogspot.com/feeds/7615909978175966758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37825117&amp;postID=7615909978175966758&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/7615909978175966758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/7615909978175966758'/><link rel='alternate' type='text/html' href='http://enterprise-technical-architecture.blogspot.com/2008/05/our-first-public-facing-wicket-app-went.html' title=''/><author><name>matt brooks</name><uri>http://www.blogger.com/profile/10918077000011978830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37825117.post-6614197690848031915</id><published>2008-04-16T05:21:00.000-07:00</published><updated>2008-04-16T05:49:49.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='KittenAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='Catch up'/><title type='text'></title><content type='html'>Well I haven't blogged here for a while - and it's time to sort that out.&lt;br /&gt;In the intervening years various things have happened.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A large banking website that I did technical architecture on went live (hooray!) &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;I've recently got into to &lt;a href="http://wicket.apache.org/"&gt;Wicket &lt;/a&gt;as a UI framework and am overseeing architecture on two projects using it in the web tier (incidentally I  attended a very good&lt;a href="http://jweekend.com/dev/LWUGReg/"&gt; London Wicket User Group&lt;/a&gt; meeting the other day at Google's London offices)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;I've also been providing architectural consultancy for a number of well known organisations - which has been interesting. Seeing how other groups solve problems - sometimes in a way that I think is better than how I would have approached it and sometimes worse - has been a very interesting experience.&lt;/li&gt;&lt;/ul&gt;I've recently noticed that Wicket is becoming portlet friendly and am starting to investigate that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://lists.hippo.nl/pipermail/hippoportal-dev/2007-September/000006.html"&gt;Resource 1&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martijndashorst.com/blog/2007/09/25/portlet-support-rejoins-wicket/"&gt;Resource 2&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://issues.apache.org/jira/browse/WICKET-658#action_12528082"&gt;Resource 3&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://issues.apache.org/jira/browse/WICKET-647"&gt;Resource 4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Also apparently captcha is now easily read and broken by bot's  &lt;a href="http://arstechnica.com/news.ars/post/20060407-6554.html"&gt;this&lt;/a&gt;  looks like a (very) cute replacement.....&lt;br /&gt;&lt;br /&gt;Hope any readers that are out there are having a good year.....&lt;br /&gt;&lt;br /&gt;Cheers&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37825117-6614197690848031915?l=enterprise-technical-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://enterprise-technical-architecture.blogspot.com/feeds/6614197690848031915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37825117&amp;postID=6614197690848031915&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/6614197690848031915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/6614197690848031915'/><link rel='alternate' type='text/html' href='http://enterprise-technical-architecture.blogspot.com/2008/04/well-i-havent-blogged-here-for-while.html' title=''/><author><name>matt brooks</name><uri>http://www.blogger.com/profile/10918077000011978830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37825117.post-7198499280606316077</id><published>2006-12-04T07:22:00.000-08:00</published><updated>2006-12-04T07:30:29.543-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javapolis'/><category scheme='http://www.blogger.com/atom/ns#' term='technical architecture'/><title type='text'></title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;Javapolis Meet Up&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;&lt;br /&gt;Just let you know that I am in Antwerp for &lt;/span&gt;&lt;a style="font-family: arial; color: rgb(0, 0, 0);" href="http://www.javapolis.com"&gt;Javapolis&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt; on the 11th-15th of December. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;If anyone fancies meeting up and discussing Java technical architecture, AJAX, echo 2, SOA and so on drop me a line at mbrooks@rdfgroup.com and we can go for a meal, a beer and talk tech!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37825117-7198499280606316077?l=enterprise-technical-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://enterprise-technical-architecture.blogspot.com/feeds/7198499280606316077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37825117&amp;postID=7198499280606316077&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/7198499280606316077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/7198499280606316077'/><link rel='alternate' type='text/html' href='http://enterprise-technical-architecture.blogspot.com/2006/12/javapolis-meet-up-just-let-you-know.html' title=''/><author><name>matt brooks</name><uri>http://www.blogger.com/profile/10918077000011978830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37825117.post-8964868864857437945</id><published>2006-11-29T04:47:00.000-08:00</published><updated>2006-12-05T01:55:02.284-08: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='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Oriented Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='echo 2'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB3'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'></title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:130%;" &gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Building an Enterprise Scale Mass Market AJAX Web Site using echo2, EJB3 and ServiceMix ESB&lt;/span&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);font-family:arial;" &gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;By Matthew Brooks, Technical Architect, RDF Group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);font-family:arial;font-size:85%;"  &gt;mbrooks@rdfgroup.com&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Introduction&lt;/h3&gt;  &lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;I work for &lt;a href="http://www.rdfgroup.com/"&gt;RDF Group&lt;/a&gt; as Technical Architect and in February of 2006 it was our good fortune to meet &lt;a href="http://www.mform.co.uk/"&gt;mform&lt;/a&gt;, a start up company aiming to launch an innovative online mortgage search and application service.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;RDF Group delivered an enterprise scale public facing web based application to &lt;a href="http://www.mform.co.uk/"&gt;mform &lt;/a&gt;which went live on the 20th November at &lt;a href="http://www.mform.co.uk/"&gt;www.mform.co.uk.&lt;/a&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;This is the story of the team’s journey through some of the most cutting edge technologies in the Java space to deliver a fully web 2.0 style application backed up by a &lt;a href="http://en.wikipedia.org/wiki/Service_Oriented_Architecture"&gt;Service Oriented Architecture&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;h3 style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:arial;"&gt;The Brief&lt;/span&gt; &lt;/h3&gt;  &lt;span style="color: rgb(0, 0, 0);font-family:Arial;" &gt;Attending &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;Edinburgh&lt;/st1:place&gt;&lt;/st1:city&gt; with my colleagues from RDF it became apparent that this fledgling company was intending to provide a unique mortgage search service on line. We felt that by adopting some of the cutting edge technologies we could provide a significant USP for the client.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Simply put the business requirement was to provide:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;A compelling user interface to allow people to      enter their mortgage details and search the whole of market to find the      products which are right for them.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;For users to select a mortgage product and      provide as close an integration as is possible with mortgage providers to      allow users to apply for their chosen product with the minimum of effort&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;     &lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;The Technology&lt;/h3&gt;  &lt;span style="color: rgb(0, 0, 0);font-family:Arial;" &gt;The technology stack adopted was intended to be cutting edge, whilst not compromising delivery by introducing too much risk.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;The vision was to have:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;A fully &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;Ajax&lt;/st1:place&gt;&lt;/st1:city&gt;      based UI, that moved away completely from the old http request/response      cycle and only used the asynchronous XMLHttpRequest &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;To provide scalability using an EJB3 based farm      of application servers &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;To minimise the pain of introducing new      integration points with different lenders by utilising a Service Oriented      Architecture.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Happily a number of key technologies had come close to maturity in all these areas and we adopted the following technology stack&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;User Interface: &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Application Server: &lt;a href="http://www.jboss.com/"&gt;JBoss 4&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Integration with Mortgage Providers: &lt;a href="http://servicemix.org/site/home.html"&gt;ServiceMix&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Persistence Mechanism: &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;CMS System: &lt;a href="http://www.hippocms.org/display/CMS/Hippo+CMS+Home"&gt;Hippo&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Object Relational mapping: &lt;a href="http://www.hibernate.org/"&gt;Hibernate &lt;/a&gt;3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Dependency Injection: &lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;The Process&lt;/h3&gt;  &lt;span style="color: rgb(0, 0, 0);font-family:Arial;" &gt;Whilst this report is intended to cover the use of these technologies in delivering a fully fledged application, it is worth a brief mention of the work process we have at RDF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Our process is based around RUP and we have adopted some of the best tools from the agile movement to help facilitate this (&lt;a href="http://www.junit.org/index.htm"&gt;unit testing,&lt;/a&gt; uniform &lt;a href="http://maven.apache.org/"&gt;build management&lt;/a&gt;, &lt;a href="http://maven.apache.org/continuum/"&gt;continuous integration&lt;/a&gt; etc).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;Whilst many software houses talk about using RUP – they tend to fall into two camps:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Those that pay lip service to the process – but      don’t actually implement it&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Those that try to follow the process to the nth      degree and as a result fail to make progress with kind of speed that      customers require.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;By contrast RDF uses a strong process that is based around delivering operational slices of functionality to demonstrate progress and to test the requirements.&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;On the project:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Customer requirements were fully documented      using use cases and UML model&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Design was undertaken based on the analysis&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Development was only undertaken on the basis of      the design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;As a result we were able to deliver an innovative product with fully traceable documentation and design artefacts that mean we can easily support it going forward.&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;  &lt;/p&gt;&lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;User Interfaces and Echo 2&lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;In the spring of 2006 the most extensive and well rounded Ajaxian type web framework in existence was, to my eyes, &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;We implemented a great prototype of the UI and were confident of &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt;’s ability to deliver.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;One of the key things about the &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt; framework is the concept of an application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;There is one instance of an application per session and what the user sees in the browser is generated by constructing (or changing the state of) a widget lattice that is stored in the application instance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Here is a high level sequence diagram showing the interactions between the browser and the &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;e&lt;/a&gt;&lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;cho 2&lt;/a&gt; application&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/2653/4617/1600/513896/Sequence%20Diagram1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/2653/4617/320/980539/Sequence%20Diagram1.png" alt="" border="0" /&gt;&lt;/a&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;i style=""&gt;&lt;span style="font-family:Arial;"&gt;                Fig&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:8;"  &gt;&lt;span style="font-size:85%;"&gt; &lt;i style=""&gt;1: A sequence diagram showing the interactions between the browser and the echo 2 application&lt;/i&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Echo 2 and CMS&lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;One of the customer requirements was to be able to update the site content using a content management system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="color: rgb(0, 0, 0);font-family:Arial;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Arial;" &gt;We selected the Dutch based &lt;a href="http://www.hippocms.org/display/CMS/Hippo+CMS+Home"&gt;Hippo &lt;/a&gt;CMS system and built integration between&lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt; echo 2&lt;/a&gt; and &lt;a href="http://www.hippocms.org/display/CMS/Hippo+CMS+Home"&gt;Hippo &lt;/a&gt;CMS. Briefly we built a component that could display XHTML fragments (we could have used the one from &lt;a href="ttp://wiki.nextapp.com/echowiki/EchoPointNG"&gt;echopointNG &lt;/a&gt;but in the end built our own) and the data to be displayed is pulled from &lt;a href="http://www.hippocms.org/display/CMS/Hippo+CMS+Home"&gt;Hippo &lt;/a&gt;using DASL.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:arial;"&gt;Echo 2 the challenges&lt;/span&gt; &lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Whilst using &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt; we discovered that whilst it was the most advanced tool for the job (at least when we started, which was before &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT &lt;/a&gt;came out) we did find that we had to undertake the following:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Adjust some of the java script in widget peers      where it was not quite performing as we expected&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Subclass the &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt; servlet to ensure that:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;We can trap non java script type clients and       present a “non java script” type version of the page&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;We can present a more polished start up page       rather than the ||| presented as default by&lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt; echo 2&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Some post back functionality does not work well      with IE either under load or restricted bandwidth. Due to the way that IE      polls for the post back other events on the browser were being missed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Develop our own widgets where necessary if there      was no suitable one available from &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo &lt;/a&gt;or &lt;a href="ttp://wiki.nextapp.com/echowiki/EchoPointNG"&gt;echopointNG&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Echo 2 a summary&lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Overall &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt; provided a fantastic framework for delivering a fully Ajaxian web site. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Its swing style approach to UI’s provided a convenient and familiar development environment.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;It provides good encapsulation of JavaScript which in general works well over multiple browser versions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;Echo 2 &lt;/a&gt;could well do with some standard approach to layout management, however, and this has caused us some work during development.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;Here are some screen shots of the finished application&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/2653/4617/1600/550163/image003.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/2653/4617/320/160853/image003.png" alt="" border="0" /&gt;&lt;/a&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-style: italic;font-family:Arial;font-size:8;"  &gt;&lt;span style="font-size:85%;"&gt;                                            Fig 2: The polished start up screen&lt;/span&gt;&lt;/span&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:8;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/2653/4617/1600/244843/image005.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/2653/4617/320/203352/image005.png" alt="" border="0" /&gt;&lt;/a&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:8;"  &gt;&lt;span style="font-size:85%;"&gt;                                            Fig 3: The first application screen&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/2653/4617/1600/309722/image007.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/2653/4617/320/181267/image007.png" alt="" border="0" /&gt;&lt;/a&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;i style=""&gt;&lt;span style="font-family:Arial;"&gt;                                                            Fig 4: An example use of an accordion pane and a modal dialogue&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; color: rgb(0, 0, 0); font-weight: normal;"&gt;  &lt;/h2&gt;&lt;h3 style="font-family: arial;"&gt;EJB3 and JBoss&lt;/h3&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;We were keen to use EJB3 and Java 5 and &lt;a href="http://www.jboss.com/"&gt;JBoss &lt;/a&gt;4 gave us the opportunity to use this new technology.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;We broke down the layers in the EJB space in a manner that should be familiar to most people working in the JEE space:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;A services façade layer: Consisting of EJB3      Stateless Session Beans providing coarse grain services used by the &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt;      presentation layer and transactional demarcation. All calls from the      presentation tier go through this layer.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;An Application Services Layer containing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Business components which encapsulate the fine       grained business rules needed by the environment.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Domain Object Managers encapsulate complex       rules and relationships between a set of related domain objects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;A Domain Layer containing Domain Objects mapped      to the database using &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h3 style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:arial;"&gt;How Spring Fits In&lt;/span&gt; &lt;/h3&gt;      &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;The only EJB’s involved in the application are in the service façade layer.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;All the other layers are implemented using POJO’s wired together using &lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;  &lt;/p&gt;&lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Hibernate freezes out EJB3 Entity Management&lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;We used EJB3.0 annotations backed up by the &lt;a href="http://www.hibernate.org/"&gt;Hibernate &lt;/a&gt;persistence mechanism. This bought the stability of the mature hibernate product along with some of the extra functionality that &lt;a href="http://www.hibernate.org/"&gt;Hibernate &lt;/a&gt;provides.&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;  &lt;/p&gt;&lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Architectural Complexity and the new technologies&lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Some people could take the view that a multi layer approach as outlined above is no longer necessary in an enterprise scale app.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;They ask:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Why have Session Beans at all when you could use      &lt;a href="http://www.springframework.org/"&gt;Spring &lt;/a&gt;remoting? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Why have an Application Services Layer? Doesn’t      this encourage the anaemic data model anti-pattern?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Why have Domain Object managers when you can      just make Hibernate calls on a lattice of Domain Objects directly?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;h4 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Session Beans and Spring remoting&lt;/h4&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;This is arguably more of a style issue than anything else.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;We went down the Session Bean approach for the following reasons:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Use of Session Beans allows for easy integration      between &lt;a href="http://www.jboss.com/"&gt;JBoss&lt;/a&gt;-provided transaction management and the transactional boundaries      we wanted for the system&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Use of Session Beans makes it easy to tune      particular services by adjusting the maximum number of beans in the pool      for that service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;We were more familiar with Session Bean remoting      than &lt;a href="http://www.springframework.org/"&gt;Spring &lt;/a&gt;remoting &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;  &lt;/p&gt;&lt;h4 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Application Services and Anaemic Data Model.&lt;/h4&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;There is an anti pattern being suggested at the moment which is the &lt;a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html"&gt;Anaemic Data Model&lt;/a&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;This suggests that having “data carrying” objects and “data processing” components leads to a “functional” software development rather than proper object oriented development.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;On the other hand, others would say that, ill used, a rich data model could lead to object bloat.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Arial;font-size:12;"  &gt;&lt;span style="font-size:100%;"&gt;As ever we are in the architectural position of having to balance opposing forces. The solution we came up with was this.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol style="margin-top: 0cm; color: rgb(0, 0, 0);" start="1" type="1"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;Objects may have methods that contain behaviour.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;These methods may only act on the objects own      instance variables.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;When these methods wish to act on instance      variables of other objects they must delegate their behaviour to methods      on that objects&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;That these methods should only ever be called      (on a delegation basis) by Application Service managers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;This helps promote good encapsulation (points 1-3) and point 4 allows for easy post production code maintenance. If you know that business processes are kicked off by Application Service Managers (even if all they do is call a method on a Domain Object) then you always know where to look for the business behaviour of the system.&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;  &lt;/p&gt;&lt;h4 style="font-family: arial; color: rgb(0, 0, 0);"&gt;Domain Object Managers and Hibernate&lt;/h4&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;In some ways it is arguable that, with a sophisticated object relational mapping tool such as Hibernate one can dispense with Domain Object Managers completely. After all, the job of a Domain Object Manager used to be to manage invariants between domain objects in a related logical area, a function now delivered admirably by &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;The argument for the continuing usage of Domain Object Managers is about decoupling.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Ideally I’d rather not have the Application Service Managers know anything about the persistence mechanism.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;I would like to ensure that any calls to the &lt;a href="http://www.hibernate.org/"&gt;Hibernate &lt;/a&gt;framework take place in one area of the code, the Domain Object Managers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Also the &lt;a href="http://www.mform.co.uk/"&gt;mform &lt;/a&gt;application lends itself to very distinct, non-overlapping data domains.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;This led us to use the Domain Object Manager approach – although it may well be that the decoupling of the Object Relational mapping services can, in future, be provided by a single infrastructural type class.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;  &lt;/p&gt;&lt;h3 style="font-family: arial; color: rgb(0, 0, 0);"&gt;The mform application and the ESB&lt;/h3&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Part of &lt;a href="http://www.mform.co.uk/"&gt;mform’s &lt;/a&gt;key advantage is to be able to integrate with many lenders &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;We realised, however, that the costs of this integration could escalate and were keen that they were kept to a minimum. This is because each lender has different transport requirements. And each lender wants similar data delivered in different formats.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Some want XML&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Some want a CSV file &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;and so on.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;We were keen not to build all these integrations on a case by case basis, wanting to insulate, as far as possible, the central &lt;a href="http://www.mform.co.uk/"&gt;mform &lt;/a&gt;application from the services provided by lending institutions. &lt;span style=""&gt; &lt;/span&gt;An ESB is a key technology for delivering this.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;We adopted &lt;a href="http://servicemix.org/site/home.html"&gt;ServiceMix &lt;/a&gt;ESB due to its comparative ease of configuration and its ability to be deployed within JBoss.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;We defined a Web Service end point to be called by the core &lt;a href="http://www.mform.co.uk/"&gt;mform &lt;/a&gt;application. The Web Service definition contained as large a set of data as we could devise along with the end point for the message.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;The configuration of &lt;a href="http://servicemix.org/site/home.html"&gt;ServiceMix &lt;/a&gt;was then set up to &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0cm; color: rgb(0, 0, 0);" type="disc"&gt;&lt;li&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Inspect the incoming XML and decide which end      point it should be forwarded to.&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Transform the XML into the format required by      the Lender&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Transport the data to the Lender.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Every time we need to send mortgage applications to a lender we invoke this web service and let &lt;a href="http://servicemix.org/site/home.html"&gt;ServiceMix &lt;/a&gt;reformat and send the details to the lender.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;This will minimise the disruption of adding additional lenders – changes to the central application will only need to be made if there is some crucial data that we are not passing to the ESB that is required by a specific lender&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;font-size:180%;"  &gt;Conclusion&lt;/span&gt;      &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://www.rdfgroup.com/"&gt;RDF&lt;/a&gt; has been able to deliver a fully featured Web2.0 style enterprise application for &lt;a href="http://www.mform.co.uk/"&gt;mform &lt;/a&gt;rapidly. The technology stack of &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;echo 2&lt;/a&gt;, &lt;a href="http://www.jboss.com/"&gt;JBoss&lt;/a&gt;, EJB 3 and &lt;a href="http://servicemix.org/site/home.html"&gt;ServiceMix &lt;/a&gt;ESB provides a powerful tool for providing scalable and reliable web based application with rich UI experience that users are coming to expect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="color: rgb(0, 0, 0);" class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37825117-8964868864857437945?l=enterprise-technical-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://enterprise-technical-architecture.blogspot.com/feeds/8964868864857437945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37825117&amp;postID=8964868864857437945&amp;isPopup=true' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/8964868864857437945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37825117/posts/default/8964868864857437945'/><link rel='alternate' type='text/html' href='http://enterprise-technical-architecture.blogspot.com/2006/11/building-enterprise-scale-mass-market_29.html' title=''/><author><name>matt brooks</name><uri>http://www.blogger.com/profile/10918077000011978830</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry></feed>
