<?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-8670942274168320118</id><updated>2012-01-25T17:04:37.541Z</updated><category term='Book Review'/><category term='Mobile SQL'/><category term='XSLT'/><category term='SOA Governance'/><category term='QA'/><category term='Access Manager'/><category term='ESB'/><category term='Web Services'/><category term='SCA'/><category term='IFX'/><category term='Security'/><category term='Custom Functions'/><category term='Oracle'/><category term='ABA Check Digit Validation Java'/><category term='IBAN'/><category term='WebLogic'/><category term='PSR'/><category term='OC4J'/><category term='Testing'/><category term='JDeveloper'/><category term='Fusion CRM'/><category term='SOA Suite'/><category term='Social CRM'/><category term='SaaS'/><category term='Oracle BPEL'/><category term='Agile'/><category term='Oracle XE'/><category term='Siebel'/><category term='JAXB'/><category term='11g'/><category term='Oracle ADF'/><category term='JwscTask'/><category term='SOA Maturity Model'/><category term='Oracle ESB'/><category term='Oracle Lite'/><category term='JAX-WS'/><category term='Glassfish'/><category term='JBOSS'/><category term='JEE'/><category term='Ireland'/><title type='text'>SOA Station: Mind the gap!</title><subtitle type='html'>Travel log of a SOA journey. Looking back and looking forward along the line.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.soastation.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.soastation.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>83</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2793821420184118838</id><published>2012-01-25T17:04:00.002Z</published><updated>2012-01-25T17:04:37.553Z</updated><title type='text'>tnsping without the TNSNAMES.ORA entry</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7iIKenyMOcA/TyAyy94kLpI/AAAAAAAAAJk/WO5-6T2uCYw/s1600/sonar_ping.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="171" src="http://3.bp.blogspot.com/-7iIKenyMOcA/TyAyy94kLpI/AAAAAAAAAJk/WO5-6T2uCYw/s320/sonar_ping.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;It isn't immediately obvious in the &lt;a href="http://docs.oracle.com/cd/B19306_01/network.102/b14212/connect.htm#i427276" target="_blank"&gt;tnsping documentation&lt;/a&gt;, but it is possible to perform the ping without having the Transparent Network Substrate configuration in place (i.e net service name) on the client for the database in question.&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;$ORACLE_HOME/bin/tnsping &amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;sid&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2793821420184118838?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2793821420184118838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2793821420184118838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2793821420184118838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2793821420184118838'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2012/01/tnsping-without-tnsnamesora-entry.html' title='tnsping without the TNSNAMES.ORA entry'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-7iIKenyMOcA/TyAyy94kLpI/AAAAAAAAAJk/WO5-6T2uCYw/s72-c/sonar_ping.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-9142155799524603452</id><published>2011-11-01T22:36:00.000Z</published><updated>2011-11-01T22:36:51.590Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle ADF'/><category scheme='http://www.blogger.com/atom/ns#' term='Fusion CRM'/><title type='text'>Tailoring Fusion CRM</title><content type='html'>The journey for the Fusion CRM development team has been a long one. What a great feeling for all of us when Fusion Applications was officially released this year as Generally Available. During his &lt;a href="http://medianetwork.oracle.com/video/player/1176404833001"&gt;keynote speech at this year's Oracle OpenWorld&lt;/a&gt; Steve Miranda reiterates that statement. Also during his session there were some great demonstrations of Fusion CRM. Anthony Lye demonstrated (about 25 minutes into the presentation) how the application can be extended at run time.&amp;nbsp;Design time at run time features are made possible by a number of Fusion Middleware technologies including &lt;a href="http://www.oracle.com/technetwork/middleware/webcenter/suite/overview/index.html"&gt;WebCenter&lt;/a&gt; and &lt;a href="http://www.oracle.com/technetwork/developer-tools/jdev/metadataservices-fmw-11gr1-130345.pdf"&gt;MDS&lt;/a&gt;&amp;nbsp;(pdf 592kb). Extending the application, as Anthony Lye demonstrated, is one form of tailoring that can be performed with the out of the box application. Other forms of tailoring include personalisation and customisation (personalization and customization in the documentation). Both concepts are very similar in that changes to the application are persisted via MDS but they are&amp;nbsp;differentiated&amp;nbsp;by the scope of the change and for whom the change is made.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dsybckqC0e4/TrBsxFD0KwI/AAAAAAAAAIw/zLFsDjekc88/s1600/fusion_crm_personalization.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="82" src="http://1.bp.blogspot.com/-dsybckqC0e4/TrBsxFD0KwI/AAAAAAAAAIw/zLFsDjekc88/s320/fusion_crm_personalization.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Available to all users.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;Put simply, personalisation is a tailoring action performed by an end user for themselves to set their own preferences for how they work with the application. These changes can be to include dynamic content such as Business Intelligence reports or a syndication feed from an external source. The key point is that these are personal preferences explicitly specified by the user for the user by editing the page via the WebCenter &lt;a href="http://download.oracle.com/docs/cd/E21764_01/core.1111/e10103/components.htm#ASCON180"&gt;Page Composer&lt;/a&gt;. A user can also perform implicit personalisation of the Fusion CRM application without ever touching Page Composer simply by hiding columns in a table, or rearranging their order relative to each other by dragging and dropping. These personal preferences are also reflected in the shared components across Fusion CRM including the &lt;i&gt;Activities&lt;/i&gt;&amp;nbsp;UI components for Notes, Interactions, Appointments and Tasks. Setting a preference for the display width of the comments column for Tasks in the Marketing application is reflected in Opportunity Management.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wVwuUCCsVy4/TrBt0REDA-I/AAAAAAAAAI4/xAJDqqkiIgY/s1600/fusion_crm_customization.PNG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="82" src="http://4.bp.blogspot.com/-wVwuUCCsVy4/TrBt0REDA-I/AAAAAAAAAI4/xAJDqqkiIgY/s320/fusion_crm_customization.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Only available to users with Administration privileges.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;In the context of Fusion CRM, customisation is a modification made by an administrator, or someone with the appropriate permissions, to the application for a set of users. This set, referred to as &lt;i&gt;Customization Level&lt;/i&gt;, can be defined as all users for the installed application, internal users, external users or users with a particular set of roles. For the Partner Relationship Management functionality in Fusion CRM V1 the internal vs external layer was introduced so that&amp;nbsp;a Channel Administrator could tailor how they wanted their partners (external users) to see the Fusion CRM screens. Both internal and external users are interacting with the same screen, but the external users may see a lot more branding and content more suitable for partners rather than employees.&lt;br /&gt;&lt;br /&gt;From a development perspective, MDS terminology can make things a bit confusing because irrespective of the nature of change, MDS refers to it as a customisation. There are many cross platform components used in Fusion CRM that are individual products in themselves. Getting to grips with the terminology used by these different product teams and understanding the context has been a challenge, but really rewarding when you see the results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-9142155799524603452?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/9142155799524603452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=9142155799524603452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/9142155799524603452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/9142155799524603452'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2011/11/tailoring-fusion-crm.html' title='Tailoring Fusion CRM'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-dsybckqC0e4/TrBsxFD0KwI/AAAAAAAAAIw/zLFsDjekc88/s72-c/fusion_crm_personalization.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6247962941008963912</id><published>2011-10-05T17:27:00.000+01:00</published><updated>2011-11-07T20:40:25.778Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fusion CRM'/><title type='text'>Multi Byte String Generator</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://sites.google.com/site/soastation/multi-byte-string-generator" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-IwUg39vEjYc/TrQftEiB2uI/AAAAAAAAAJA/n9enYYFbF3Q/s1600/multi_byte_string_generator.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://sites.google.com/site/soastation/multi-byte-string-generator" target="_blank"&gt;Click to go to launch page.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://www.oracle.com/us/products/applications/fusion/index.html"&gt;Fusion Applications&lt;/a&gt; uses &lt;a href="http://www.oracle.com/technetwork/middleware/data-integrator/overview/index.html"&gt;Oracle Data Integrator&lt;/a&gt; as part of the data bulk import feature which includes migration and file import. While working on the Opportunity Bulk Import we had to ensure that multi byte characters were imported correctly. The majority of the test data we had to work with was from Siebel demo data used in North America. As a consequence, most of the data was ASCII and single byte. Just so we could generate multi byte strings for developer testing I put together a little &lt;a href="http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136112.html"&gt;Java Web Start&lt;/a&gt; application called &lt;a href="https://sites.google.com/site/soastation/multi-byte-string-generator" target="_blank"&gt;Multi Byte String Generator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It has a simple interface where you specify the number of bytes you want per character (1 to 3) and what the number of characters you want. The randomly generated string is displayed and you can copy it to your clipboard (using the &lt;i&gt;Copy to Clipboard&lt;/i&gt; button) and paste it into your application or test fixture. Due to the security features of Java Web Start, you will be prompted to allow the application to access your local clipboard. Some additional information about how many bytes the string occupies in UTF-8, UTF-16 and UTF-32 encoding is also displayed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6247962941008963912?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6247962941008963912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6247962941008963912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6247962941008963912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6247962941008963912'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2011/10/multi-byte-string-generator.html' title='Multi Byte String Generator'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-IwUg39vEjYc/TrQftEiB2uI/AAAAAAAAAJA/n9enYYFbF3Q/s72-c/multi_byte_string_generator.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2138416349395231845</id><published>2011-07-20T17:53:00.000+01:00</published><updated>2011-07-20T17:53:05.713+01:00</updated><title type='text'>Using OSGi to explain the difference between Factory and Broker pattern</title><content type='html'>&lt;a href="http://www.amazon.com/Osgi-Action-Creating-Modular-Applications/dp/1933988916?ie=UTF8&amp;amp;tag=ollentheevent-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img alt="Osgi in Action: Creating Modular Applications in Java" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=1933988916&amp;amp;tag=ollentheevent-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=ollentheevent-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1933988916" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;After some heated &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=62590"&gt;discussions about OSGi&lt;/a&gt; on The Server Side decided to put together a series of articles on the topic. Quite rightly I think, &lt;a href="http://www.linkedin.com/in/pkriens"&gt;Peter Kriens&lt;/a&gt; has the honour of getting the series started. His article on &lt;a href="http://www.theserverside.com/feature/OSGi-is-the-framework-for-all-modular-applications"&gt;developing modular applications&lt;/a&gt; provides one of the clearest explanations of the differences between the &lt;a href="http://www.oodesign.com/factory-pattern.html"&gt;Factory&lt;/a&gt; and &lt;a href="http://www.openloop.com/softwareEngineering/patterns/architecturePattern/arch_Broker.htm"&gt;Broker&lt;/a&gt; pattern. Put simply, the Factory must know implementation details of what it is creating, while the Broker does not, since it does not really create anything.&lt;br /&gt;&lt;br /&gt;Peter's explanation makes it very clear why Factory is good, but just not good enough, for enterprise applications. I hope he contributes more on the series.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2138416349395231845?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2138416349395231845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2138416349395231845' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2138416349395231845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2138416349395231845'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2011/07/using-osgi-to-explain-difference.html' title='Using OSGi to explain the difference between Factory and Broker pattern'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1499109804431347045</id><published>2010-09-08T16:10:00.001+01:00</published><updated>2010-09-08T16:11:19.430+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ireland'/><title type='text'>Irish software at Oracle OpenWorld 2010</title><content type='html'>&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;a href="http://www.oracle.com/us/openworld/036763"&gt;&lt;br /&gt;&lt;img border="0" src="http://www.oracle.com/dm/oow2010/10038776_oow_evtns_bnrs_221x165.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Preparation for the trio of Oracle's major conferences (&lt;a href="http://www.oracle.com/us/openworld/index.html"&gt;Oracle OpenWorld&lt;/a&gt;, &lt;a href="http://www.oracle.com/us/javaonedevelop/062264.html"&gt;JavaOne&lt;/a&gt;, &lt;a href="http://www.oracle.com/us/javaonedevelop/062265.html"&gt;Oracle Develop&lt;/a&gt;) has been underway for months, but once September comes around the pace really quickens. The final touches get put to product demonstration scripts, keynote speeches, and honing the elevator pitch. In product development you know it's September because you can not find a product manager without scheduling a meeting days in advance. Of course, this is not unique to Oracle. There will be over 300 exhibitors at Oracle OpenWorld and many of them will be making sure their product or service is presented in the best possible manner. Having &lt;a href="http://www.iquate.com/news/news-oracle-verification/"&gt;announced a major certification&lt;/a&gt; over the summer with Oracle's &lt;a href="http://www.oracle.com/us/corporate/license-management-services/index.html"&gt;Global License Management Services&lt;/a&gt;, the staff at one Irish software company will be no different.&lt;br /&gt;&lt;br /&gt;iQuate is an Irish software company which produces network inventory and network management solutions for large, complex networks. Using a multitude of protocols iQuate queries PCs, servers, network devices, databases to not only build up a profile of what is installed, but also what is actually being used. This information allows companies to potentially save a fortune on their software licencing fees, by simply not paying for what they are not using. Check them out at stand 3130 in the Moscone Center, West Exhibition Hall, Level 1.&lt;br /&gt;&lt;br /&gt;Come to thing of it, Oracle has development centres around the world and the Dublin offices have staff working on server technology, tools and application software. So some portions of the Oracle software on show will have been made in Ireland too! :-)&lt;br /&gt;&lt;br /&gt;Is iQuate really the only Irish software company exhibiting? It is the only one on the list of exhibitors with an Irish HQ. There might be other software companies that originated in or do the majority of their development in Ireland but have not listed an Irish address as their headquarters when registering as an exhibitor. In an effort to get into the US market and not appear as a foreign company, some businesses move their HQ to the US. This also demonstrates their commitment to the market. If you know of any other Irish software companies exhibiting this year please let me know and I would be delighted to include them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1499109804431347045?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1499109804431347045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1499109804431347045' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1499109804431347045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1499109804431347045'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/09/irish-software-at-oracle-openworld-2010.html' title='Irish software at Oracle OpenWorld 2010'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-505605238737188601</id><published>2010-08-16T13:34:00.003+01:00</published><updated>2010-12-16T13:49:28.706Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle ADF'/><title type='text'>ADF logging level to see SQL statements</title><content type='html'>Very handy for debugging runtime issues when developing, the &lt;a href="http://www.oracle.com/technetwork/developer-tools/adf/overview/index.html"&gt;Oracle ADF&lt;/a&gt; Business Components layer can output the SQL that it is executing. To do this though, the logging threshold must be set to a specific level...&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: tahoma, verdana, sans-serif; font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: tahoma, verdana, sans-serif; font-size: 11px;"&gt;'-Djbo.debugoutput=console -Djbo.logging.trace.threshold=5'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: tahoma, verdana, sans-serif; font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: tahoma, verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;Curiously. the SQL statements do not get displayed for any other threshold level.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-505605238737188601?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/505605238737188601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=505605238737188601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/505605238737188601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/505605238737188601'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/08/adf-logging-level-to-see-sql-statements.html' title='ADF logging level to see SQL statements'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3145174019021684870</id><published>2010-07-19T21:56:00.000+01:00</published><updated>2010-07-19T21:56:36.335+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle BPEL'/><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA Suite'/><title type='text'>Loosely typed interfaces - The Normalizer Pattern and Oracle SOA Suite</title><content type='html'>When getting two or more systems working together, the making a connection part is generally the easiest, identity propagation is a bit trickier, but many times, the syntax and semantics of one system is at odds with another one. Over the decades this has been manifest in many ways and thankfully there are tools and techniques to work through them. A collation of such techniques is &lt;a href="http://www.eaipatterns.com/eaipatterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt;. The book, along with the associated website, is worthy of a dedicated article or two, and is not the real subject of this article. One message transformation pattern the book describes is the &lt;a href="http://www.eaipatterns.com/Normalizer.html"&gt;Normalizer Pattern&lt;/a&gt; where different formats for essentially the same object are catered for.&lt;br /&gt;An example where this form of message translation becomes necessary is when using a service with a loosely typed interface. This can often happen when an existing system or utility (such as a batch / command processor) gets exposed as a web service. The request / response payload is little more than a collection of key / value pairs. There are a couple of ways to cater for this using &lt;a href="http://www.oracle.com/us/technologies/soa/soa-suite-066466.html"&gt;Oracle SOA Suite 11g&lt;/a&gt; which I will outline in this article. One has full tool support. The other, a solution using XSLT, is not fully supported, but has an advantage in that the XSLT can be used both with the &lt;a href="http://www.oracle.com/us/products/middleware/application-server/bpel-home-066588.html"&gt;BPEL&lt;/a&gt; and &lt;a href="http://www.oracle.com/us/technologies/soa/service-bus-066459.html"&gt;Mediator&lt;/a&gt; components.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Troublesome Payloads&lt;/span&gt;&lt;br /&gt;The challenge is to get something that is strongly typed into something that is loosely typed&lt;br /&gt;&lt;table border="1" cellpadding="10"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Strongly Typed&lt;/th&gt;&lt;th&gt;Loosely Typed&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;department&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;Furniture&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;manager&amp;gt;Pam Beech&amp;lt;/manager&amp;gt;&lt;br /&gt;  &amp;lt;budget&amp;gt;50000&amp;lt;/budget&amp;gt;&lt;br /&gt;  &amp;lt;spent&amp;gt;20000&amp;lt;/spent&amp;gt;&lt;br /&gt;  &amp;lt;committed&amp;gt;47000&amp;lt;/committed&amp;gt;&lt;br /&gt;&amp;lt;/department&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt; &lt;td&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;property&amp;gt;&lt;br /&gt;       &amp;lt;key&amp;gt;NAME&amp;lt;/key&amp;gt;&lt;br /&gt;       &amp;lt;value&amp;gt;Furniture&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property&amp;gt;&lt;br /&gt;       &amp;lt;key&amp;gt;MANAGER&amp;lt;/key&amp;gt;&lt;br /&gt;       &amp;lt;value&amp;gt;Pam Beech&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property&amp;gt;&lt;br /&gt;       &amp;lt;key&amp;gt;BUDGET&amp;lt;/key&amp;gt;&lt;br /&gt;       &amp;lt;value&amp;gt;50000&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property&amp;gt;&lt;br /&gt;       &amp;lt;key&amp;gt;SPENT&amp;lt;/key&amp;gt;&lt;br /&gt;       &amp;lt;value&amp;gt;20000&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property&amp;gt;&lt;br /&gt;       &amp;lt;key&amp;gt;COMMITTED&amp;lt;/key&amp;gt;&lt;br /&gt;       &amp;lt;value&amp;gt;47000&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now this is quite a simple example and the real world has a lot more complicated cases out there. Ones that would involve number formatting, character encoding, attribute concatenation, and so on. For the purposes of this exercise however, it is ideal to illustrate the point. All the &lt;a href="http://sites.google.com/site/soastation/soastation_looselytyped_normalizer.zip"&gt;files in this example&lt;/a&gt; are free and available for you to use, modify or incorporate into your own solution as you see fit. The example was produced and tested using Oracle Fusion Middleware 11.1.1.2.0. That is JDeveloper Studio 11.1.1.2.0 and WebLogic Server 11gR1. To reduce the number of files and dependencies involved, the example is a simple service (BPELProcessExample.wsdl) that takes a strongly typed request payload and returns a  loosely typed response payload. The SOA composite project contains two BPEL processes that provide slightly different implementations for this same WSDL. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_QdWe1hGsnN4/TESpuwO56AI/AAAAAAAAAGM/4HQu68j9_K0/s1600/BPELProcessAssign.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_QdWe1hGsnN4/TESpuwO56AI/AAAAAAAAAGM/4HQu68j9_K0/s320/BPELProcessAssign.jpeg" /&gt;&lt;br /&gt;Figure 1. Using BPEL assign to construct a new payload.&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;BPEL assign with copy and insertAfter&lt;/span&gt;&lt;br /&gt;You can cater for the key / value pair structure by repeatedly appending a new 'property' element and then, using an XPATH predicate to specify which 'property' element is the target, copying the desired values. In the BPEL process this can all be done in a single 'assign' command, using the insertAfter instruction from the Oracle BPEL extension library. The BPEL designer supports this approach, and it is used extensively in production systems around the globe. It can get difficult to maintain and hard to read if the payload is large though. If dealing with a large payload see if you can split the copy / insertAfter instructions into two or more 'assign' commands. Ideally, you would give these 'assign' commands logical names such as 'assign_part_1_admin_details' and 'assign_part_2_finance_details'. What is a large payload in this case then? Well, I would say that if you have more than 10 key value pairs you should be seriously thinking about splitting them up and if you have more than 20, you should be definitely splitting them up. Remember, you might be familiar with the structure and understand how it is constructed, but what about the college graduate brought in by the consulting firm in a months time, or even you having to come back to this in 6 months time? Go on, make the maintenance a bit easier for everyone and break that assign behemoth into manageable chunks!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_QdWe1hGsnN4/TESqqithD8I/AAAAAAAAAGU/vN5h10kIKbw/s1600/BPELProcessXSL.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_QdWe1hGsnN4/TESqqithD8I/AAAAAAAAAGU/vN5h10kIKbw/s320/BPELProcessXSL.jpeg" /&gt;&lt;br /&gt;Figure 2. Using XSL to transform the payload.&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;BPEL transform with XSLT&lt;/span&gt;&lt;br /&gt;If experienced in dealing with XML documents then this approach will probably be very familiar to you. &lt;a href="http://www.w3.org/TR/xslt"&gt;Extensible Stylesheet Language Transformations&lt;/a&gt; is used to convert XML data into some other format, which may also be XML data. In this case the stylesheet explicitly describes the target XML structure, making it somewhat easier to read than the BPEL assign approach described earlier. For example...&lt;br /&gt;&lt;pre&gt;&amp;lt;client:property&amp;gt;&lt;br /&gt; &amp;lt;client:key&amp;gt;&lt;br /&gt;  &amp;lt;xsl:text disable-output-escaping="no"&gt;MANAGER&amp;lt;/xsl:text&amp;gt;&lt;br /&gt; &amp;lt;/client:key&amp;gt;&lt;br /&gt; &amp;lt;client:value&amp;gt;&lt;br /&gt;  &amp;lt;xsl:value-of select="/client:process/client:department/client:manager"&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:value-of&amp;gt;&lt;br /&gt; &amp;lt;/client:value&amp;gt;&lt;br /&gt;&amp;lt;/client:property&amp;gt;&lt;br /&gt;&lt;/pre&gt;The 'client' is a namespace prefix for the schema and in this SOA composite example the request and response happen to be defined in the same schema. This is easier to read, even if one is not all that familiar with XSL. For large payloads it is not necessary to split up the transformation as one might consider for the BPEL assign, but it could be done. The single transformation file could have a whole set of templates. However, the XSL Mapper does not support this approach yet, so if using this approach you will have to work in the Source editor, not the Design mode. Since this is using XSLT, the same XSL file can be used by the Mediator too, so it is not only a BPEL solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Which one is right for me?&lt;/span&gt;&lt;br /&gt;As one can see from the diagrams there is not much difference in the BPEL designer between the two examples and the decision on which technique to use would be based on factors which are different from company to company, but clearly use of the XSL mapper is an important factor.&lt;br /&gt;The complete example application with SOA composite is available at &lt;a href="http://sites.google.com/site/soastation/soastation_looselytyped_normalizer.zip"&gt;http://sites.google.com/site/soastation/soastation_looselytyped_normalizer.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3145174019021684870?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3145174019021684870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3145174019021684870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3145174019021684870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3145174019021684870'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/07/loosely-typed-interfaces-normalizer.html' title='Loosely typed interfaces - The Normalizer Pattern and Oracle SOA Suite'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QdWe1hGsnN4/TESpuwO56AI/AAAAAAAAAGM/4HQu68j9_K0/s72-c/BPELProcessAssign.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6445031778874913732</id><published>2010-06-29T22:39:00.003+01:00</published><updated>2010-11-13T20:34:55.398Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>The Art of Agile Development</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.amazon.com/Art-Agile-Development-ebook/dp/B0043D2E18/ref=sr_1_1?ie=UTF8&amp;amp;qid=1289515440&amp;amp;sr=8-1&amp;amp;tag=ollentheevent-20" imageanchor="1" onclick="javascript:urchinTracker('/outgoing/amazon.com/artagiledevelopment');" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_QdWe1hGsnN4/TNxw8Aa4JxI/AAAAAAAAAGk/_VuEqpSJG0c/s1600/TheArtOfAgileDevelopment.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Keep this book to hand&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The Art of Agile Development was recommended to me by &lt;a href="http://community.serena.com/people/ac2d3c2305"&gt;Jeff McKenna&lt;/a&gt; when he provided some Scrum coaching to those of us in the Dublin office working on Oracle Social CRM. Back then it was a new, hot off the press book, but I have recently reread it because I have found it useful in providing guidance on what to watch out for when changing agile development practices. This was necessary due to changes in teams and technologies as some of us focused full time on Fusion Applications. Practices, roles and responsibilities we had gotten used to had to be adapted or dropped to blend in with APM, Oracle Fusion Application's development methodology.&lt;br /&gt;&lt;br /&gt;The book, by &lt;a href="http://www.oreillynet.com/pub/au/3187"&gt;Shane Warden&lt;/a&gt; and &lt;a href="http://jamesshore.com/"&gt;James Shore&lt;/a&gt;, is a great introduction to agile development methodologies by covering both XP and scrum. Practical examples are generally from XP projects because that is where the authors have the greatest experience. The authors identify a broad set of practices that would be considered as characteristics of agile development methodologies in way or another. Recognising that it is very rare in most organisations to be able to follow an agile methodology completely as prescribed alternatives are mentioned, but not in every case. Shane and James are also very clear that many of these practices are often taking place at the same time in a software project rather than in a sequential waterfall methodology. However, categorising practices by what sort of activity and the nature of the activity give a very useful matrix for teams to analyse how agile their own practices are and perhaps identify areas where realistic improvements can be made. Just being able to have a label or term for a specific practice makes discussing within a group easier.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_QdWe1hGsnN4/TNx2OfFfjYI/AAAAAAAAAGo/3XsJUqZdTNw/s1600/aspects-of-success-thumb.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/TNx2OfFfjYI/AAAAAAAAAGo/3XsJUqZdTNw/s320/aspects-of-success-thumb.jpg" width="246" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://jamesshore.com/Agile-Book/why_agile.html"&gt;Download poster&lt;/a&gt; from James Shore&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I see the collection of practices being grouped by nouns (planning, analysis, design &amp;amp; coding, testing, deployment) and verbs (thinking, collaborating, releasing, planning, developing). For example, when team members are working on implementing a specific feature that kind of collaboration is 'design &amp;amp; coding collaborating' and the section in the book covers some pair programming techniques. In fact, this particular section addresses the misconception that pair programming is a fulltime 'paired for life' regime. It is a useful tool that can be used for a few hours a day to make some significant progress, reduce interruptions, and spread the knowledge of how and why parts of the system being developed work.&lt;br /&gt;&lt;br /&gt;Other useful techniques peppered through the book include the Agility Self Assessment and the many skill development routines, which the authors called 'etudes'. These are short exercises that may help in getting the feel for a more agile approach. When reading the chapters you might be thinking we don't have the development experience to let team members do organic, incremental architecture design, or implement thorough automated testing. I wonder how many people never complete the book because they do not believe they can carry out these changes and deliver software in a timely fashion. It's not until towards the end of the book that the authors address the reality of the mixed capabilities of the team. If this was at the beginning it might give the readers more staying power. The book does have some helpful advice on working with and around the politics, the mixture in experience levels, and heavy weight project management within your organisation. It has to be read in it's entirety though and does make for an excellent reference book to dip in and out of.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;This article has been edited since it was first published.&lt;/i&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6445031778874913732?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6445031778874913732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6445031778874913732' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6445031778874913732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6445031778874913732'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/06/art-of-agile-development.html' title='The Art of Agile Development'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QdWe1hGsnN4/TNxw8Aa4JxI/AAAAAAAAAGk/_VuEqpSJG0c/s72-c/TheArtOfAgileDevelopment.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3676977411252125192</id><published>2010-05-21T15:46:00.002+01:00</published><updated>2010-05-21T15:52:33.697+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Should we ban anonymity on the Internet?</title><content type='html'>In an Information Security article a few months back, Bruce  Schneier (author of &lt;a href="http://www.amazon.com/gp/product/0470395354?ie=UTF8&amp;tag=ollentheevent-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0470395354"&gt;Schneier on Security&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=ollentheevent-20&amp;l=as2&amp;o=1&amp;a=0470395354" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;) and Marcus Ranum put some points forward &lt;a href="http://searchsecurity.techtarget.com/magazinePrintFriendly/0,296905,sid14_gci1380347,00.html"&gt;for and against internet anonymity&lt;/a&gt;. I have to admit that I agree with Schneier and find Ranum's argument quite weak. He appears to suggest that the main reason to enforce identity is to avoid spam. The tools aren't great, but there are already mechanisms in place to address this. Criminals are always getting better at finding ways to exploit weaknesses in  internet technologies increasingly at the heart of the way we shop, interact, work, entertain and inform ourselves. We just have to keep up with the pace in the cat and mouse game. Sacrificing anonymity, and the right to privacy, is too great a cost for just avoiding emails about Viagra (tm) and Nigerian generals with a stash of cash to move out of the country.&lt;br /&gt;&lt;br /&gt;What is the great danger of not being anonymous? Well it's all the inferring that goes on about &lt;i&gt;facts &lt;/i&gt;that get gathered around the things you search for, shop for, chat about, view and listen to. These are then used to categorise you for advertising, inclusion or exclusion from groups or activities. NetFlix provided a great example of this last year. Just weeks after the contest began, two  University of Texas researchers showed that with the NetFlix data one could identify users and in some cases their political leanings and  sexual orientation.&lt;br /&gt;&lt;div id="TixyyLink" style="background-color: transparent; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"&gt;&lt;br /&gt;Read more about that at: &lt;a href="http://www.wired.com/threatlevel/2009/12/netflix-privacy-lawsuit/#ixzz0oZfNuAqb"&gt;http://www.wired.com/threatlevel/2009/12/netflix-privacy-lawsuit/#ixzz0oZfNuAqb&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Getting back to Schneier's point, trying to implement a robust identification system, which criminals can not outwit or take advantage of, is not possible... &lt;br /&gt;&lt;blockquote&gt;Mandating universal identity and attribution is the wrong goal. Accept that there will always be anonymous speech on the Internet. Accept that you'll never truly know where a packet came from. Work on the problems you can solve: software that's secure in the face of whatever packet it receives, identification systems that are secure enough in the face of the risks. We can do far better at these things than we're doing, and they'll do more to improve security than trying to fix insoluble problems.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3676977411252125192?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3676977411252125192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3676977411252125192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3676977411252125192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3676977411252125192'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/05/should-we-ban-anonymity-on-internet.html' title='Should we ban anonymity on the Internet?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3519066417987474418</id><published>2010-04-30T15:23:00.001+01:00</published><updated>2010-04-30T15:24:26.071+01:00</updated><title type='text'>More than Iron Man - Oracle and Marvel</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.oracleimg.com/ocom/groups/public/@ocom/documents/digitalasset/067879.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" src="http://www.oracleimg.com/ocom/groups/public/@ocom/documents/digitalasset/067879.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="bodycopy"&gt;At the beginning of April 2010, Oracle, using the buzz around the release of &lt;a href="http://ironmanmovie.marvel.com/"&gt;Iron Man 2&lt;/a&gt;, kicked off  a worldwide advertising campaign focused on introducing the powerful  combination of Oracle and Sun. This includes old school billboards and commercials on a variety of old and new media platforms...&lt;br /&gt;&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/y56CbCpXohk&amp;hl=en_US&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/y56CbCpXohk&amp;hl=en_US&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;All this makes for some fantastic visuals, but how exactly is Marvel using Oracle? The list of Oracle products being used by Marvel is diverse:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="bodycopy"&gt; Oracle E-Business Suite, including Financials, Human Resources, Self Service HR, Manufacturing and Incentive Compensation&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="bodycopy"&gt;Oracle Business Intelligence Suite&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="bodycopy"&gt;Oracle Configurator&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="bodycopy"&gt;Oracle Enterprise Content Management Suite (formerly Stellent)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="bodycopy"&gt;Oracle Insight&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Further information on how Marvel is able to keep track of inventory, and manage the budget on epics like &lt;a href="http://ironmanmovie.marvel.com/"&gt;Iron Man&lt;/a&gt;, is revealed in &lt;a href="http://www.oracle.com/technology/oramag/oracle/08-mar/o28marvel.html"&gt;Support for Superheroes&lt;/a&gt;, &lt;a href="http://www.oracle.com/profit/features/031708_marvel_.html"&gt;Avengers, Assemble!&lt;/a&gt; and &lt;a href="http://www.oracle.com/pls/ebn/popup.navigate_download?p_shows_id=6265109&amp;amp;p_show_files_id=241738"&gt;Marvel Entertainment Grows its Business with Oracle (video)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3519066417987474418?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3519066417987474418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3519066417987474418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3519066417987474418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3519066417987474418'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/04/more-than-iron-man-oracle-and-marvel.html' title='More than Iron Man - Oracle and Marvel'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5508120848433796014</id><published>2010-03-29T22:49:00.006+01:00</published><updated>2010-03-30T12:26:56.224+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Interface Oriented Design</title><content type='html'>&lt;a href="http://www.amazon.com/gp/product/0976694050?ie=UTF8&amp;amp;tag=ollentheevent-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0976694050" onclick="javascript:urchinTracker('/outgoing/amazon.com/pragmaticprogrammer');"&gt;&lt;img style="float: right; cursor: pointer;" src="http://ecx.images-amazon.com/images/I/514NWwwHaIL._SS500_.jpg" /&gt;&lt;/a&gt;This book has been sitting on my desk for a long time and I've been dipping in and out of it for at least a year. I'm a big fan of &lt;a href="http://pragprog.com/about"&gt;The Pragmatic Programmers&lt;/a&gt; and the topic of interface is very close to my heart as it is often the most ignored when system analysis and design occurs. Apart from performance, interfaces are generally the biggest problem that is faced when a system goes live because once people start to use it, they want to use it with the other systems and tools they are using. The human interface to a computer system gets, quite rightly, a lot of focus. The topic gets it's own module in Computer Science degree courses. This has meant that today's software developer is familiar with the concepts of usability, task analysis, workspace arrangement, error detection and recognition.&lt;br /&gt;&lt;br /&gt;I was hoping that &lt;a href="http://www.amazon.com/gp/product/0976694050?ie=UTF8&amp;tag=ollentheevent-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0976694050" onClick="javascript:urchinTracker('/outgoing/amazon.com/pragmaticprogrammer');"&gt;Ken Pugh's Interface Oriented Design&lt;/a&gt; was going to be that seminal book which would set out design principles and approaches for deriving robust interfaces. It is not. While it does introduce some interesting concepts such as the Three Laws of Interfaces and Interface Responsibility Interaction it lacks a real world sense about it. In fact, the purpose of the book appears to be the platform to launch Pugh's Interface Responsibility Interaction format. It's an interesting idea, but unfortunately it does not make a strong case for using such a format in real projects. Some case studies from other projects where IRI was used would have been beneficial.&lt;br /&gt;&lt;br /&gt;One gets the sense that this is a serialisation of some lectures within a system design module in college, with a trivial exercise to prove the points. Put simply, there's really not much in the book to grab the experienced developers attention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5508120848433796014?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5508120848433796014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5508120848433796014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5508120848433796014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5508120848433796014'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/03/interface-oriented-design.html' title='Interface Oriented Design'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2899350956732002836</id><published>2010-03-12T00:32:00.009Z</published><updated>2010-03-12T01:25:17.973Z</updated><title type='text'>It's not you, it's me - Check the bugs log before going crazy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QdWe1hGsnN4/S5mXcxq3X0I/AAAAAAAAAFs/cGG4jHt4fn0/s1600-h/dont_panic_waggrakine_001.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_QdWe1hGsnN4/S5mXcxq3X0I/AAAAAAAAAFs/cGG4jHt4fn0/s400/dont_panic_waggrakine_001.jpg" alt="" id="BLOGGER_PHOTO_ID_5447551744906583874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;How many times have you been working on implementing, unsuccessfully, a feature in your application which relies on a framework, container, or some other indirection layer? You've studied the specifications, memorised the API and you're following the developers guide which are all telling you that what you are trying to implement is taken care of, but it still does not work!&lt;br /&gt;&lt;br /&gt;While recently working on a really simple application feature using &lt;a href="http://download.oracle.com/docs/cd/E15523_01/web.1111/b31974/bcrules.htm#CJAFFFCJ"&gt;ADF data model validation&lt;/a&gt; I had just this experience. The feature just did not work and there was nothing in the logs to indicate what the problem was or that there was even a problem. Admittedly, I was using an internal development build, so it would not have been a fully tested version. I checked, and double checked everything, the documentation, searched through forums and blogs, trying to find out what I was doing wrong.&lt;br /&gt;&lt;br /&gt;By the way, while searching I did come across an interesting blog about &lt;a href="http://adfbugs.blogspot.com/"&gt;ADF bugs and workarounds&lt;/a&gt;. &lt;a href="http://blogs.oracle.com/smuenchadf/bio.html"&gt;Steve Muench&lt;/a&gt;'s &lt;a href="http://blogs.oracle.com/smuenchadf/"&gt;Dive into ADF&lt;/a&gt; blog is probably the most comprehensive on ADF features though.&lt;br /&gt;&lt;br /&gt;It turned out I wasn't doing anything wrong but I only found this out when a colleague suggested I check the bugs database. And there it was! The exact scenario I was trying to implement had a bug against it. What a relief, because I thought I was missing or skipping over something really obvious and fundamental and that's why it wasn't working for me. Better still, the defect was marked as closed so it will be available in the next internal developers build.&lt;br /&gt;&lt;br /&gt;This got me thinking about all the documentation sources I had been to and how useful it would be to have a cross reference between the structured and unstructured text of developer guides, API, forums, blogs and bug databases. Isn't that what search engines are for?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2899350956732002836?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2899350956732002836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2899350956732002836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2899350956732002836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2899350956732002836'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/03/its-not-you-its-me-check-bugs-log.html' title='It&apos;s not you, it&apos;s me - Check the bugs log before going crazy'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QdWe1hGsnN4/S5mXcxq3X0I/AAAAAAAAAFs/cGG4jHt4fn0/s72-c/dont_panic_waggrakine_001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2482741030624588109</id><published>2010-02-18T22:03:00.000Z</published><updated>2010-03-22T22:34:28.416Z</updated><title type='text'>Unit Testing with SQL Developer</title><content type='html'>December's release of &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/files/NewFeatureList21.htm"&gt;SQL Developer 2.1&lt;/a&gt; has a number of new bells and whistles. Two of the main new features are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;Data Model Viewer.&lt;/span&gt; This is a free, read only, viewer based on &lt;a href="http://www.oracle.com/technology/products/database/datamodeler/index.html"&gt;Oracle SQL Developer Data Modeler&lt;/a&gt;. With this viewer you can open existing data models as well as generate data models based on your database. The generated data model can not be saved though.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;Unit Testing.&lt;/span&gt; Based on the popular &lt;a href="http://xunitpatterns.com/Four%20Phase%20Test.html"&gt;xunit Four Phase Test&lt;/a&gt; pattern, this feature makes testing of procedures and functions a breeze. Put simply, it allows one to construct a repository of unit tests cases which includes what one would expect for automated testing: setup, execute, assert result, record results, teardown.&lt;/li&gt;&lt;/ul&gt;The free Data Model Viewer is a nice introduction to the Data Modeler product which is not free. The unit testing framework though really does mean that the quality of code in the database can be asserted and maintained much easier than previously possible. There is a simple Oracle By Example tutorial on the SQL Developer Unit Test feature available at:&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/obe/11gr2_db_prod/appdev/sqldev/sqldev_unit_test/sqldev_unit_test_otn.htm"&gt;&lt;br /&gt;http://www.oracle.com/technology/obe/11gr2_db_prod/appdev/sqldev/sqldev_unit_test/sqldev_unit_test_otn.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2482741030624588109?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2482741030624588109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2482741030624588109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2482741030624588109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2482741030624588109'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/02/unit-testing-with-sql-developer.html' title='Unit Testing with SQL Developer'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6947124648535428562</id><published>2010-01-21T08:34:00.002Z</published><updated>2010-03-12T10:27:22.092Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Your ScrumMaster is a project manager in disguise</title><content type='html'>In &lt;a href="http://www.scrumalliance.org/articles/36-leader-of-the-band"&gt;6 attributes of a good ScrumMaster&lt;/a&gt; Mike Cohn repeats the common line that the &lt;span style="font-style: italic;"&gt;ScrumMaster role does not always require a full-time, eight-hour-a-day commitment&lt;/span&gt;. Often the 'orchestra conductor' role of ScrumMaster is an unofficial one within your organisation even though it clearly has well defined functions and responsibilities. So many people do ask the question I&lt;a href="http://borisgloger.com/en/2009/04/21/4711-is-a-scrummaster-a-full-time-position/"&gt;s a ScrumMaster a full time position?&lt;/a&gt; As Boris points out, it is, and he explains why it is a 100% fulltime job.&lt;br /&gt;&lt;br /&gt;The ScrumMaster has internal and external responsibilities. Even if the team is well disciplined with following the process, and they address most of their own impediments there is still the challenge of being a gatekeeper between the management and the team.  This is being recognised in many organisations now and you can even see &lt;a href="http://www.indeed.com/q-Scrum-Master-jobs.html"&gt;ScrumMaster as a recruitment position&lt;/a&gt;. It's interesting to note that many of these positions have &lt;span style="font-style: italic;"&gt;Project Manager / ScrumMaster&lt;/span&gt; as the title.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QdWe1hGsnN4/S5oD1DEHtQI/AAAAAAAAAF0/uYTp7RB5z-4/s1600-h/conductor.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 154px; height: 200px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/S5oD1DEHtQI/AAAAAAAAAF0/uYTp7RB5z-4/s200/conductor.JPG" alt="" id="BLOGGER_PHOTO_ID_5447670909148574978" border="0" /&gt;&lt;/a&gt;What does a Project Manager do that a ScrumMaster does not (or vice versa)? A project manager is the person who has the overall responsibility for the successful planning and execution of a project. This title is used in the construction industry, architecture, information technology and many different occupations that are based on production of a product or service. While strictly speaking, the team, rather than the ScrumMaster has responsibility for the success of the project, a ScrumMaster does assume responsibility for the team’s adoption of Scrum and practice of it. A ScrumMaster takes on this responsibility without assuming any of the power that might be useful in achieving in it.&lt;br /&gt;&lt;br /&gt;To boil it all down to it's essence, a ScrumMaster is a Project Manager who has realised that they don't really have the power to successfully deliver a project, and has adopted a &lt;a href="http://www.scrumalliance.org/pages/scrum_framework"&gt;framework&lt;/a&gt; to take advantage of that humbling position.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6947124648535428562?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6947124648535428562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6947124648535428562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6947124648535428562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6947124648535428562'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2010/01/your-scrummaster-is-project-manager-in.html' title='Your ScrumMaster is a project manager in disguise'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QdWe1hGsnN4/S5oD1DEHtQI/AAAAAAAAAF0/uYTp7RB5z-4/s72-c/conductor.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3837777954691560525</id><published>2009-12-26T23:31:00.004Z</published><updated>2010-03-23T00:33:42.555Z</updated><title type='text'>Oracle VPN</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QdWe1hGsnN4/S6gMUIeROzI/AAAAAAAAAGE/4HyLG0vO-yI/s1600-h/VPN.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 92px; height: 400px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/S6gMUIeROzI/AAAAAAAAAGE/4HyLG0vO-yI/s400/VPN.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5451620888943344434" /&gt;&lt;/a&gt;Virtual Private Networks have made remote working and access to critical corporate resources so much easier over the past few years. In fact, there is so much about the way we work today that is dependent on being able to get at data remotely yet in a secure manner. The VPN diagram to the left provides a simple representation of what a VPN does. It creates a secure tunnel (red lines) for the transfer of data (green line) between two points.&lt;br /&gt;&lt;br /&gt;So what do you do when you need to get some work done, but you've got your corporate laptop safely and securely locked in a drawer in the office?&lt;br /&gt;&lt;br /&gt;There is a website for Oracle employees that has software downloads, remote access tools, patches and so on. It is called &lt;a href="https://vsupport.oracle.com/index.html"&gt;Oracle Desktop External Support&lt;/a&gt; and can be accessed over the internet without the corporate VPN. Almost all downloads on the site are suitable for installation and are licensed for use on Oracle employee's personal systems. I have the site on my &lt;a href="http://www.xmarks.com/"&gt;synchronised bookmarks&lt;/a&gt; and it comes in very handy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3837777954691560525?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3837777954691560525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3837777954691560525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3837777954691560525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3837777954691560525'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/12/oracle-vpn.html' title='Oracle VPN'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QdWe1hGsnN4/S6gMUIeROzI/AAAAAAAAAGE/4HyLG0vO-yI/s72-c/VPN.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-586195004258322487</id><published>2009-11-10T16:02:00.003Z</published><updated>2009-11-10T16:44:23.587Z</updated><title type='text'>Strange cloud heads for Iceland</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QdWe1hGsnN4/SvmWOio9AXI/AAAAAAAAAFk/1sY26ockeZE/s1600-h/iceland.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 75px;" src="http://3.bp.blogspot.com/_QdWe1hGsnN4/SvmWOio9AXI/AAAAAAAAAFk/1sY26ockeZE/s400/iceland.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5402514404568531314" /&gt;&lt;/a&gt;&lt;br /&gt;Google appears to be always thinking about new tools or approaches to make or save money. Lots of these ideas sneak out onto the internet and lots of discussions, articles and opinions get generated. Occasionally, a real product is eventually seen. Way back in 2008 &lt;a href="http://technology.timesonline.co.uk/tol/news/tech_and_web/the_web/article4753389.ece"&gt;rumours about a Google data centre navy&lt;/a&gt; abounded. That particular Times Online article mentions some statistics and reports about data centres and carbon footprint which I have yet to verify. However, other articles and press releases have suggested the data is not without foundation. Here's a quote:&lt;br /&gt;&lt;blockquote&gt;Data centres consumed 1 per cent of the world’s electricity in 2005. By 2020 the carbon footprint of the computers that run the internet will be larger than that of air travel, a recent study by McKinsey, a consultancy firm, and the Uptime Institute, a think tank, predicted. &lt;/blockquote&gt;&lt;br /&gt;It was with great interest that I read about a &lt;a href="http://news.bbc.co.uk/1/hi/programmes/click_online/8297237.stm"&gt;zero carbon foot print data centre&lt;/a&gt; being proposed in Iceland. The data centre will not be up and running until next year, but is being built on an &lt;a href="http://www.nat.is/travelguideeng/plofin_nato_station_at_keflavik_airport.htm"&gt;old NATO base&lt;/a&gt;. Expecting to take advantage of free ambient cooling and 100% renewable electricity &lt;a href="http://www.verneglobal.com/"&gt;verneglobal&lt;/a&gt; are predicting substantial reductions in carbon released from day to day operations.&lt;br /&gt;&lt;br /&gt;While a great idea, I feel the greatest speed bump in the migration to Iceland is regulation and legislation, or rather the perception of compliance with data privacy laws and in particular the &lt;a href="http://www.gpo.gov/fdsys/pkg/PLAW-107publ56/pdf/PLAW-107publ56.pdf"&gt;Patriot Act&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-586195004258322487?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/586195004258322487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=586195004258322487' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/586195004258322487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/586195004258322487'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/11/strange-cloud-heads-for-iceland.html' title='Strange cloud heads for Iceland'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QdWe1hGsnN4/SvmWOio9AXI/AAAAAAAAAFk/1sY26ockeZE/s72-c/iceland.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4426367153634318945</id><published>2009-11-04T12:57:00.005Z</published><updated>2010-09-08T16:11:40.099+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Ireland'/><title type='text'>Ireland's new Baywatch mashup</title><content type='html'>Due to a new initiative from the &lt;a href="http://www.epa.ie/"&gt;EPA&lt;/a&gt; you can keep up to-date on the water quality of Ireland's major bays (hence the article title), beaches and rivers. Made possible by some hard work from the clever people at &lt;a href="http://www-05.ibm.com/ie/emerging_business_centre/water.html"&gt;IBM's Water Management Centre of Excellence&lt;/a&gt;, &lt;a href="http://www.bathingwater.ie/epa/home.htm"&gt;Splash&lt;/a&gt; provides a great way to research different beaches and decide where to visit based on a number of parameters — water quality, weather, and whether or not a lifeguard is on duty, and so on. You'll note from the spelling of &lt;span style="font-style: italic;"&gt;Centre&lt;/span&gt; that it is European based. In fact it's current home is right &lt;a href="http://maps.google.com/maps?q=53.332872,-6.241123&amp;amp;num=1&amp;amp;t=h&amp;amp;sll=53.33301,-6.237056&amp;amp;sspn=0.006743,0.012904&amp;amp;ie=UTF8&amp;amp;ll=53.332834,-6.240672&amp;amp;spn=0.001184,0.003484&amp;amp;z=19"&gt;here in Dublin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The site is a clever mashup of &lt;a href="http://www.bathingwater.ie/epa/background.htm#epalocalauthorityroles"&gt;EPA water quality data&lt;/a&gt;, which is provided by the local councils, some location data and weather reports from &lt;a href="http://www.accuweather.com/"&gt;AccuWeather&lt;/a&gt;. There also appears to be a &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; status check as well but I have not seen any data from this actually displayed on the site. The location data includes a description of the area and some images.&lt;br /&gt;&lt;br /&gt;For the Oracle offices in Dublin, the nearest beach is &lt;a href="http://www.world66.com/europe/ireland/dublin/beaches/dollymount_strand"&gt;Dollymount Strand&lt;/a&gt;. The Splash website provides the following description:&lt;br /&gt;&lt;blockquote&gt;Dollymount provides tremendous respite from Dubliners from the vagaries of city living. It is along beach with sweeping views of the Dublin Mountains. This seaside area and wildlife reserve is located north of Dublin Harbour. The strand is connected to the shore by a late 19th century wooden bridge. Dollymount is on the seaward side of Bull Island, one of the most protected pieces of property in Ireland. Cars are allowed on a small section of this beach which is separated from the Blue Flag beach by wooden pilings.&lt;/blockquote&gt;&lt;br /&gt;I'm not sure how 'respite from Dubliners' is achieved. Anytime I've been on the beach, at least one Dubliner has been there. The images are also of great interest as the site provides a birds eye view that you can zoom in and out of as well as a photo of the location. No Dubliners, or people for that matter appear in the images, so perhaps that is the respite referred to.&lt;br /&gt;One of the &lt;a href="http://smarterwater.wordpress.com/2009/11/02/november-2009-ibm-epa-ireland-team-for-smarter-water-management/"&gt;IBM blogs&lt;/a&gt; suggests that this form of mashup will be rolled out to other countries in the future. Personally, I think this is a great example of innovation within Ireland and I look forward to seeing more if it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4426367153634318945?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4426367153634318945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4426367153634318945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4426367153634318945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4426367153634318945'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/11/irelands-new-baywatch-mashup.html' title='Ireland&apos;s new Baywatch mashup'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-344348755062633293</id><published>2009-10-28T20:37:00.005Z</published><updated>2009-10-30T12:48:46.017Z</updated><title type='text'>Fear of maths is a problem worth solving</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QdWe1hGsnN4/SuivDWTsQFI/AAAAAAAAAFU/OWoXk5T5mlY/s1600-h/Math-homework-full.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/SuivDWTsQFI/AAAAAAAAAFU/OWoXk5T5mlY/s320/Math-homework-full.jpeg" alt="" id="BLOGGER_PHOTO_ID_5397756625466179666" border="0" /&gt;&lt;/a&gt;According to researchers at the &lt;a href="http://www.ugr.es/"&gt;University of Granada&lt;/a&gt;, 6 out of every 10 university students present "mathematical anxiety". &lt;a href="http://prensa.ugr.es/prensa/research/verNota/prensa.php?nota=582"&gt;This study&lt;/a&gt; was carried out in a sample consisting of 885 first-year students from 23 different degrees given at the UGR which include the subject of Mathematics, both compulsory and core. The sample included four of the five university fields of study: Health Sciences, Experimental Sciences, Technical Education and Social Sciences. The conclusion is that many students choose 3rd level courses different to those they preferred - and in which they would be really good in many cases – in order to avoid studying subjects connected with Mathematics. Clearly there needs to be some help with math at an early stage in life to avoid this anxiety and help people get comfortable with maths.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QdWe1hGsnN4/Suiv6z0ODrI/AAAAAAAAAFc/AfYQ7zU0RnI/s1600-h/Problem+Solving+Bee.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 170px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/Suiv6z0ODrI/AAAAAAAAAFc/AfYQ7zU0RnI/s320/Problem+Solving+Bee.gif" alt="" id="BLOGGER_PHOTO_ID_5397757578280046258" border="0" /&gt;&lt;/a&gt;At first this may not appear as such a big issue for Computer Programming, particularly as the majority of the software development emphasis is on business rather than scientific solutions. It may be obvious, but it has to be pointed out that one of the key residual benefits from studying to solve math problems is the development of &lt;span style="font-weight: bold;"&gt;problem solving&lt;/span&gt; skills. While many of us , years later, may rarily use the algebra we study in school, the process of breaking down a problem into it's constituent parts stays with us when we go out into the real world. Where problems have vague specifications. Where there is more than one way to solve a problem. Where you run into problems you have never seen before.&lt;br /&gt;&lt;br /&gt;There is free online math help available. To name just a couple there is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://www.math.com&lt;/li&gt;&lt;li&gt;http://www.mathway.com&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Also there is a great book called &lt;a href="http://www.amazon.co.uk/Maths-Students-Survival-Self-Help-Engineering/dp/0521017076"&gt;Maths: A Student's Survival Guide&lt;/a&gt; which will be valued particularly by those who need to make up a deficiency in a specific topic or to remove the rust from their mathematics. If all this is too much to start working on your own mathematical anxiety then &lt;a href="http://www.telegraph.co.uk/foodanddrink/foodanddrinknews/5094374/How-eating-chocolate-can-help-improve-your-maths.html"&gt;consider chocolate&lt;/a&gt;. At least you'll get something out of it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-344348755062633293?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/344348755062633293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=344348755062633293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/344348755062633293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/344348755062633293'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/10/fear-of-maths-is-problem-worth-solving.html' title='Fear of maths is a problem worth solving'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QdWe1hGsnN4/SuivDWTsQFI/AAAAAAAAAFU/OWoXk5T5mlY/s72-c/Math-homework-full.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-8440512766189718335</id><published>2009-10-21T22:24:00.005+01:00</published><updated>2009-10-21T23:36:50.365+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><title type='text'>What's the bedrock to your Social CRM Strategy?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QdWe1hGsnN4/St-ES4Kf4dI/AAAAAAAAAFE/WuwH0RYrzfI/s1600-h/pleasure_genius20080327.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 280px; height: 292px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/St-ES4Kf4dI/AAAAAAAAAFE/WuwH0RYrzfI/s320/pleasure_genius20080327.jpg" alt="" id="BLOGGER_PHOTO_ID_5395176338462073298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Perhaps it is taken for granted, but Esteban Kolsky's recent article  on &lt;a href="http://www.estebankolsky.com/2009/10/19/the-scrm-roadmap-part-1-of-5/"&gt;The SCRM Roadmap&lt;/a&gt;, is missing the requirement for a Social Media  Participation Policy for employees. No matter where you are on his &lt;a href="http://www.estebankolsky.com/wp-content/uploads/2009/10/Slide2.JPG"&gt;SCRM  pyramid&lt;/a&gt; such a policy is vital. The first thing it does is give an  employee permission to use their own initiative and participate in  customer conversations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Experts&lt;/span&gt;&lt;br /&gt;There are few better experts on your products or services than your employees. Apple Inc. makes a point of highlighting these &lt;a href="http://www.apple.com/ca/retail/geniusbar/"&gt;Geniuses&lt;/a&gt; and puts them to work in customer facing roles. With the advent of Social Networking, your experts do not need to have such a specific role, but can still be recognised for their contribution in making their company great.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Permission to talk&lt;/span&gt;&lt;br /&gt;Your company doesn't really have to have more of  a strategy than permission to get started on becoming a social business.  Moreover, a simple, publicly available guideline affords employees some  protection from pressure to discuss or comment on topics that are not  appropriate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Guidelines&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QdWe1hGsnN4/St-Ly9-xeeI/AAAAAAAAAFM/hPRkTw2Wd8Q/s1600-h/DosandDonts.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 292px; height: 284px;" src="http://2.bp.blogspot.com/_QdWe1hGsnN4/St-Ly9-xeeI/AAAAAAAAAFM/hPRkTw2Wd8Q/s320/DosandDonts.jpg" alt="" id="BLOGGER_PHOTO_ID_5395184586360715746" border="0" /&gt;&lt;/a&gt;It can be made clear that while all company employees are welcome to  participate in Social Media, it is expected that all who participates in  online commentary understand and follow some simple but important  guidelines. This really is irrespective of medium (video, blogs,  twitter, etc) and could also be applied to more traditional  communication mediums such as the press. However, I'll stick to the  internet based communication channels for now. These rules might sound  strict and contain a bit of legal-sounding jargon. Some of the rules may  be intuitive and considered basic common sense. However, please keep in  mind that the overall goal is simple: to participate online in a  respectful, relevant way that protects the company's reputation.&lt;br /&gt;&lt;br /&gt;A great list of &lt;a href="http://socialmediagovernance.com/policies.php"&gt;sample policies&lt;/a&gt; from existing organisations, some of  which are written with industry specific rules, is available at Social  Media Governance. It is well worth a read. The following is a guide  highlighting some of the dos and don’ts covered in most of these policies.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DO: &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Protect confidential information. &lt;/li&gt;&lt;li&gt;Respect copyrights. &lt;/li&gt;&lt;li&gt;Be credible, transparent and identify yourself as an employee. &lt;/li&gt;&lt;li&gt;Be in a position to offer comment from a point of clear knowledge  of the subject matter. &lt;/li&gt;&lt;li&gt;Avoid jargon by writing in simple terms. &lt;/li&gt;&lt;li&gt;Use caution.  While not all company employees are official  spokespeople, please use caution in your comments as reporters and  analysts may report on anything included in your online postings. Also,  once online, the comments are cached, distributed quickly and available  effectively forever. &lt;/li&gt;&lt;li&gt;Secure approval.  If you are an official spokesperson for the  company, you must submit each posting to for review / approval before  posting. If you are not a spokesperson, you will need to check with the  company to determine if your blog and postings need to be approved. &lt;/li&gt;&lt;li&gt; Make it clear that your views are your own and do not necessarily  reflect the views of your employer. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;DON’T: &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Comment on merger and acquisition activity. &lt;/li&gt;&lt;li&gt;Discuss future product offerings, including upgrades, or new releases. &lt;/li&gt;&lt;li&gt;Make growth predictions of any kind. &lt;/li&gt;&lt;li&gt;Break out revenue by specific product or country. &lt;/li&gt;&lt;li&gt;Use any inflammatory language or discredit others’ views. &lt;/li&gt;&lt;li&gt;Provide headcount numbers for any country, region, group or department. &lt;/li&gt;&lt;li&gt;Discuss customers that are not currently referenceable to the press. &lt;/li&gt;&lt;li&gt;Provide the number of customers for a specific product area. &lt;/li&gt;&lt;li&gt;Speak for the company. &lt;/li&gt;&lt;li&gt;Lie.&lt;/li&gt;&lt;/ul&gt;Even if your not sure &lt;a href="http://contactcenterintelligence.wordpress.com/2009/09/14/what-a-social-crm-strategy-is-all-about/"&gt;what a Social CRM strategy is all about&lt;/a&gt; and your current strategy is that you have no strategy, a policy providing guidelines to employees on the use of Social Media is an excellent platform enabling employees and customers to engage in dialogue about your products and services. That's the beginning of a beautiful relationship.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-8440512766189718335?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/8440512766189718335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=8440512766189718335' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8440512766189718335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8440512766189718335'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/10/whats-bedrock-to-your-social-crm.html' title='What&apos;s the bedrock to your Social CRM Strategy?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QdWe1hGsnN4/St-ES4Kf4dI/AAAAAAAAAFE/WuwH0RYrzfI/s72-c/pleasure_genius20080327.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-941097420958702467</id><published>2009-10-19T13:49:00.002+01:00</published><updated>2009-10-19T13:56:56.817+01:00</updated><title type='text'>Hosted Security Breakfast Seminar: Dublin</title><content type='html'>Staying on the topic of &lt;a href="/2009/10/your-hosted-application-is-virus-vector.html"&gt;hosted applications and security&lt;/a&gt; I thought I'd bring this to your attention. MessageLabs, a Symantec Company, is organising a breakfast seminar on Hosted Security in Dublin, in November. Although I won't be attending, you may find the presentations interesting and maybe get a free croissant or two.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.messagelabs.co.uk/seminars/dublin"&gt;http://www.messagelabs.co.uk/seminars/dublin&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-941097420958702467?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/941097420958702467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=941097420958702467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/941097420958702467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/941097420958702467'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/10/hosted-security-breakfast-seminar.html' title='Hosted Security Breakfast Seminar: Dublin'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6705320866293102803</id><published>2009-10-16T11:29:00.002+01:00</published><updated>2009-10-16T15:31:05.432+01:00</updated><title type='text'>New address http://www.soastation.org/</title><content type='html'>SOA Station has it's own domain now: soastation.org. The blog is still hosted via Google's Blogger service and will be still accessible at soastation.blogspot.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6705320866293102803?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6705320866293102803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6705320866293102803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6705320866293102803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6705320866293102803'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/10/new-address-httpwwwsoastationorg.html' title='New address http://www.soastation.org/'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1298079828294292678</id><published>2009-10-06T12:02:00.011+01:00</published><updated>2009-10-07T17:18:06.599+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><title type='text'>Your hosted application is a virus vector</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QdWe1hGsnN4/SstMxvlGGAI/AAAAAAAAADw/OmjoJ5moT5c/s1600-h/virus+sign.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 180px;" src="http://2.bp.blogspot.com/_QdWe1hGsnN4/SstMxvlGGAI/AAAAAAAAADw/OmjoJ5moT5c/s200/virus+sign.jpg" alt="" id="BLOGGER_PHOTO_ID_5389485796548286466" border="0" /&gt;&lt;/a&gt;We are all used to seeing SaaS as an acronym for Software as a Service. It also doubles as another acronym for the non-functional features of a SaaS architecture. When you're providing a hosted service there are a number of non-functional features that need to be considered such as Scalability, Availability, Agility and Security. I'll flesh out these concepts at a later date as they are all quite broad and encompass a lot of features. Security, for example, includes, but is not limited to ensuring the integrity of the system and the systems that connect to it.&lt;br /&gt;&lt;br /&gt;One threat to system integrity is a computer virus. If your hosted application becomes a vector for the dissemination of viruses to your clients system it becomes a threat to your business, not just your systems. So, how do you test you hosted application to make sure infected files are handled properly?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QdWe1hGsnN4/SstLhOuwncI/AAAAAAAAADo/Uz4tWsEqDO0/s1600-h/sales_library_small.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 170px; height: 116px;" src="http://2.bp.blogspot.com/_QdWe1hGsnN4/SstLhOuwncI/AAAAAAAAADo/Uz4tWsEqDO0/s200/sales_library_small.jpg" alt="" id="BLOGGER_PHOTO_ID_5389484413340917186" border="0" /&gt;&lt;/a&gt;At the beginning of this year I started working on &lt;a href="http://www.oracle.com/applications/socialcrm/oracle-sales-library.html"&gt;Oracle CRM Sales Library OnDemand&lt;/a&gt;, which permits the uploading of documents to be shared with others in your organisation. It provides a rich set of social networking features that enables users to share, rate, review, and tag PowerPoint presentations an MS Word documents so that everyone in your organization can leverage the most effective sales materials. To share a document, or it's contents, it must be uploaded to &lt;a href="http://www.oracle.com/applications/crm/siebel/resources/sales-library-data-sheet.pdf"&gt;Sales Library&lt;/a&gt; and of course, the upload process involves virus scanning. In fact, virus scanning is the first step. Irrespective of the file type, before any logical validation takes place, such as supported formats, the file is interrogated by an anti-virus system. When a file fails the virus scan, the user has to be informed with meaningful message. So, while your hosted application does not have to be coded with anti-virus logic, it does need to be able to handle and report effectively, when a virus is found.&lt;br /&gt;&lt;br /&gt;Once you have this logic in place, you have to be able to test that the behaviour of your application is correct. Now, you don't want your development or testing environment to be using files with viruses to test with. In fact, your organisations anti-malware system would probably prevent you from storing the files anyway. Thankfully, the &lt;a href="http://www.eicar.org/anti_virus_test_file.htm"&gt;European Institute for Computer Antivirus Research has a solution&lt;/a&gt;. For testing the anti-virus error handling logic in our application we attempt to upload a file with just the EICAR test string as content.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The above is not a virus, but is a test string for anti-malware systems. In unit tests, this can be used as the only content of an InputStream. You should provide a dummy implementation of your virus scan system when unit testing too. Remember, you're not trying to test the anti-virus software. You want to test the behaviour of your application when the anti-virus software reports a virus is found. When testing the deployed Sales Library application, the text file can be saved with a .ppt or .doc extension and then uploaded. The only content of the file should be the test string.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QdWe1hGsnN4/SstNDhYeWqI/AAAAAAAAAD4/sF8X3rCimEk/s1600-h/pc-virus.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 235px;" src="http://2.bp.blogspot.com/_QdWe1hGsnN4/SstNDhYeWqI/AAAAAAAAAD4/sF8X3rCimEk/s320/pc-virus.JPG" alt="" id="BLOGGER_PHOTO_ID_5389486101974899362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have yet to find an anti-virus system that does not comply with this EICAR anti-virus test string. A simple test in your own environment will reveal if your anti-virus software does or not. I suspect that it will, and you can proceed with confidence that your hosted application is handling contaminated files properly for the protection of yours and your customers business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1298079828294292678?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1298079828294292678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1298079828294292678' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1298079828294292678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1298079828294292678'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/10/your-hosted-application-is-virus-vector.html' title='Your hosted application is a virus vector'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QdWe1hGsnN4/SstMxvlGGAI/AAAAAAAAADw/OmjoJ5moT5c/s72-c/virus+sign.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1270904353569696983</id><published>2009-09-25T21:54:00.008+01:00</published><updated>2009-10-16T02:21:01.498+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>Sanity check your ORM</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QdWe1hGsnN4/StfGCed18tI/AAAAAAAAAEo/e3qFrIGLDw4/s1600-h/bridgecollapse.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 238px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/StfGCed18tI/AAAAAAAAAEo/e3qFrIGLDw4/s320/bridgecollapse.jpg" alt="" id="BLOGGER_PHOTO_ID_5392996824639730386" border="0" /&gt;&lt;/a&gt;Have you ever had your application completely crash under load and wondered why something that just worked fine yesterday can drive you mental today?&lt;br /&gt;&lt;br /&gt;Most of the time an Object-Relational Mapping package is the right solution for your applications to interact with a database. It does not matter if it is free, commercial or home grown, you will generally find that it reduces the amount of code. Moreover, the application code is better designed and easier to test. Depending on your chosen solution, you may even see performance improvements with caching and database specific optimisations.&lt;br /&gt;&lt;br /&gt;However, you may also find substational performance degradations when the data volume increases. It is important to remember that no matter how sophisticated your ORM package is, it may still produce inefficient SQL statements. If you had SQL statements embedded in your code you would review that as part of the code review. So if you are going to hand over a critical operation such as the generation of SQL statements then these need to be reviewed.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QdWe1hGsnN4/StfHK0Z4AdI/AAAAAAAAAEw/mmmGRf0Z_xc/s1600-h/crime-scene-investigation.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 311px;" src="http://1.bp.blogspot.com/_QdWe1hGsnN4/StfHK0Z4AdI/AAAAAAAAAEw/mmmGRf0Z_xc/s320/crime-scene-investigation.jpg" alt="" id="BLOGGER_PHOTO_ID_5392998067479249362" border="0" /&gt;&lt;/a&gt;Your application can become a performance crime scene. What can you do to prevent it? Early analysis.&lt;br /&gt;&lt;br /&gt;The execution plan, sometimes called query plan or explain plan, for an SQL statement will provide insight into how the database will act on the SQL statement. It is available in most databases and is a useful tool to determine the efficiency of the statement. For example, an execution plan can indicate what indexes would be used. When code is being reviewed, the execution plans for SQL statements should also be reviewed, in much the same way that the running test classes would be reviewed for correctness.&lt;br /&gt;&lt;br /&gt;I learned this the hard way when I found a delete operation took too long and eventually timed out in a test environment that had a high volume of records. A review of the code showed a nice, clean object oriented design and a very simple, easy to understand ORM configuration. The application in question was used to manage financial documents. It had the concept of a ChequeBook, one or more Cheques in a ChequeBook, but also that both a ChequeBook and Cheque were a Document. The class diagram in this article illustrates that relationship. The relationship was also reflected in the database with corresponding tables. The 'type' attribute was used as a discriminator for the two concrete objects: ChequeBook and Cheque.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QdWe1hGsnN4/StfDY4uYEaI/AAAAAAAAAEg/MM_ZDLxnqkw/s1600-h/Java+Class+Diagram.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 235px;" src="http://1.bp.blogspot.com/_QdWe1hGsnN4/StfDY4uYEaI/AAAAAAAAAEg/MM_ZDLxnqkw/s320/Java+Class+Diagram.png" alt="" id="BLOGGER_PHOTO_ID_5392993911110635938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The problem arose when attempting to delete a ChequeBook. The ORM could delete the Cheque records using the parentContentId easily enough, but since there was no corresponding column on the Documents table, the ORM then produced this innocuous looking statement.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;DELETE FROM DOCUMENTS&lt;br /&gt;WHERE TYPE = 'CHEQUE' AND&lt;br /&gt;    ROW_ID NOT IN (SELECT ROW_ID FROM CHEQUES)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Appears quite innocent at first, in fact it might even be thought quite a clever attempt to clean up all records on the DOCUMENTS table that should have a corresponding CHEQUES record but doesn't. In the development database with only a few hundred CHEQUES, this performs ok. Push that up to a few thousand and you soon realise the problem with doing this blanket select statement on CHEQUES even if it does use an index.&lt;br /&gt;&lt;br /&gt;In this case I had to code around the ORM with a hand crafted SQL statement. I could have just invoked remove() on each Cheque entity, but for large ChequeBooks this would have produced a lot of SQL statements. Another approach could have been to use a stored procedure but that would not have been easily portable.&lt;br /&gt;&lt;br /&gt;The key lesson learned though was to sanity check the ORM before it drives you crazy with it's unexpected eccentricities. Check your ORM documentation to see how you can get profile details of the SQL statements generated. Go to your database server and get reports on SQL execution plans. The ORM is effectively another developer on your team generating SQL statements. Know and understand what it is producing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1270904353569696983?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1270904353569696983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1270904353569696983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1270904353569696983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1270904353569696983'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/09/sanity-check-your-orm.html' title='Sanity check your ORM'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QdWe1hGsnN4/StfGCed18tI/AAAAAAAAAEo/e3qFrIGLDw4/s72-c/bridgecollapse.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3422865885937491288</id><published>2009-09-21T20:54:00.002+01:00</published><updated>2009-09-21T21:20:31.438+01:00</updated><title type='text'>A new decade for Enterprise Java Applications</title><content type='html'>We are coming up on the 10th anniversary of the EJB 1.1 final release. When you take a look at the J2EE specification and the Enterprise Java Application programming models and frameworks that are out there now you begin to appreciate what an important step the EJB specification was. Not so much for what you can do with it today, but how it introduced a paradigm shift.&lt;br /&gt;&lt;br /&gt;A more recent paradigm shift is cloud computing which effectively puts the application container, in a container.  One to watch is &lt;a href="http://www.springsource.com/products/cloudfoundry"&gt;CloudFoundry&lt;/a&gt; which provides a pay-as-you-go platform using the SpringSource &lt;a href="http://www.springsource.com/products/run"&gt;application server&lt;/a&gt;. This is a Spring base &lt;a href="http://www.springsource.com/"&gt;java application server&lt;/a&gt; which is built on &lt;a href="http://www.springsource.com/products/tcserver"&gt;Apache Tomcat&lt;/a&gt;. The CloudFoundry makes this platform available using Amazon Web Service infrastructure. Although still in beta, it is available now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3422865885937491288?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3422865885937491288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3422865885937491288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3422865885937491288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3422865885937491288'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/09/new-decade-for-enterprise-java.html' title='A new decade for Enterprise Java Applications'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2297971537859134542</id><published>2009-08-13T19:01:00.002+01:00</published><updated>2009-08-13T19:13:10.372+01:00</updated><title type='text'>Computer Software articles to use on your website</title><content type='html'>Often, when getting a web site or online service started the 'shop front' can look bare until you build up content. Producing your own content can take time. One option is to use &lt;a href="http://www.articlealley.com/index_1_11.html"&gt;free articles&lt;/a&gt; from other sources.  The Computer Software section at &lt;a href="http://www.articlealley.com/index_1_11.html"&gt;Article Alley&lt;/a&gt; has hundreds of software product and software development articles that are free to use. The &lt;a href="http://www.articlealley.com/index_1_11.html"&gt;software articles&lt;/a&gt; cover a wide range of sub topics such as security, integration, gaming, office productivity, business management and lots more. &lt;a href="http://www.articlealley.com/about.php"&gt;Article Alley&lt;/a&gt; does have a broader article directory with articles on almost any topic. Their content is free to use if a working hyperlink is retained to the source page on Article Alley and the author has selected their articles to be free to republish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2297971537859134542?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2297971537859134542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2297971537859134542' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2297971537859134542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2297971537859134542'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/08/computer-software-articles-to-use-on.html' title='Computer Software articles to use on your website'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1404674488267891737</id><published>2009-08-04T22:02:00.002+01:00</published><updated>2009-08-10T22:06:19.376+01:00</updated><title type='text'>TrImport - Trim your insert statements</title><content type='html'>Did you ever want to copy data from database to another and want to exclude certain columns? With the basic export utility in SQL Developer one can specify a selection criteria (effectively a where clause) to export certain rows. It will produce an SQL script with insert statements. However, virtual, or calculated, columns are also included, even though their data can be derived. This is a problem only when attempting to run the script against the target database, it will not allow you to perform an insert on a virtual column. It is my understanding that this is to be addressed in a later Oracle Database 11g release. Until then, what are you to do?&lt;br /&gt;&lt;br /&gt;Well, you could use &lt;a href="http://www.oracle.com/technology/products/database/utilities/htdocs/data_pump_overview.html"&gt;Oracle Data Pump&lt;/a&gt; to export only the specific columns.  However, in my case, I had the export SQL scripts to start with, provided my someone else, and not the original DB.&lt;br /&gt;&lt;br /&gt;I put together a very simple &lt;a href="http://soastation.googlepages.com/trimport-0.1.jar"&gt;Java Swing application (called TrImport)&lt;/a&gt; which allows you to remove columns, and their corresponding values, from an insert statement in an SQL script.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://soastation.googlepages.com/trimport-0.1.jar"&gt;TrImport&lt;/a&gt; now you can easily change the following SQL statement&lt;br /&gt;&lt;br /&gt;insert into TABLE_A set (ROW_ID, NAME, DESC, NAME_VC) values (456, 'Record Two', 'This is a record', 'record two');&lt;br /&gt;&lt;br /&gt;to this&lt;br /&gt;&lt;br /&gt;insert into TABLE_A set (ROW_ID, NAME, DESC) values (456, 'Record Two', 'This is a record');&lt;br /&gt;&lt;br /&gt;with ease. Obviously the benefit is not that this can be done with just one insert statement, but all of the insert statements in a file.&lt;br /&gt;&lt;br /&gt;The steps are really simple:&lt;br /&gt;1. Open the file with you SQL script. This can be a mixed script with inserts, updates, comments, just about anything.&lt;br /&gt;2. Open the columns window to see the tables and columns that TrImport has identified in any insert statements it has found.&lt;br /&gt;3. Tick the columns you want to exclude and press OK.&lt;br /&gt;4. Save the file to a new location.&lt;br /&gt;&lt;br /&gt;TrImport is not just for virtual columns either, it can also be used in a situation where the table in the destination database has fewer columns.&lt;br /&gt;&lt;br /&gt;To get TrImport and run it simply download the&lt;a href="http://soastation.googlepages.com/trimport-0.1.jar"&gt; trimport-0.1.jar&lt;/a&gt; and from the command line execute 'java -jar trimport-0.1.jar'. If you wanted to, you could setup a short cut. TrImport is provided without any support. It has only been tested with a small set of SQL scripts and only with one function, that is to_timestamp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1404674488267891737?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1404674488267891737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1404674488267891737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1404674488267891737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1404674488267891737'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/08/trimport-trim-your-insert-statements.html' title='TrImport - Trim your insert statements'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-279905882207266443</id><published>2009-06-22T20:21:00.004+01:00</published><updated>2009-06-22T20:47:30.407+01:00</updated><title type='text'>Broadband in India</title><content type='html'>Normally I would not provide a link to a site &lt;a href="http://www.indiabroadband.net/privacy.php"&gt;without a privacy policy&lt;/a&gt;. However, for &lt;a href="http://www.indiabroadband.net/"&gt;India Broadband Forum&lt;/a&gt; I will make an exception with a warning: do not post, just browse for information to see what others are saying about broadband providers in India. The reason I'm doing this is to highlight the huge differences in services provided in different regions. This is important particularly if you are relying on staff in India to work from home at times that overlap with Eastern or Pacific timezones.&lt;br /&gt;&lt;br /&gt;You could use the&lt;a href="http://www.speedtest.net/global.php"&gt; World Speed Test&lt;/a&gt; to compare download and upload speeds between regions, cities and service providers in India. Mumbai (10.08 Mbps max) is better off than Madra (9.09 Mbps max), which in turn is better off than Bangalore (7.21 Mbps max). This, however, only gives you part of the picture. The forum, with it's &lt;a href="http://www.indiabroadband.net/groups/"&gt;groups&lt;/a&gt; and &lt;a href="http://www.indiabroadband.net/blogs/"&gt;blogs&lt;/a&gt; can give you better insight into user's experiences with reliability, cost and support. Fast internet access removes one of the barriers to effective distributed teams.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-279905882207266443?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/279905882207266443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=279905882207266443' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/279905882207266443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/279905882207266443'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/06/broadband-in-india.html' title='Broadband in India'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2744648003921273846</id><published>2009-05-28T17:46:00.002+01:00</published><updated>2009-06-09T00:16:37.807+01:00</updated><title type='text'>Coherence failed to load the factory</title><content type='html'>&lt;div&gt;Recently I've been working on a set of applications which are deployed in their own, separate OC4J instances in a cluster. Many of these applications share data and &lt;a href="http://www.oracle.com/technology/products/coherence/index.html"&gt;Coherence&lt;/a&gt; is used to provide synchronised data caching between the OC4J instances.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Normally this is straight forward enough, except that when I went to set up another environment I started getting failures at startup.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The logs would show messages like...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;getConfigurableCacheFactory "Failed to load the factory"&lt;/blockquote&gt;and&lt;br /&gt;&lt;blockquote&gt;Caused by: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException&lt;br /&gt;  at com.tangosol.util.Base.ensureRuntimeException(Base.java:286)&lt;br /&gt;  at com.tangosol.net.CacheFactory.getConfigurableCacheFactory(CacheFactory.java:607)&lt;br /&gt;  at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:686)&lt;br /&gt;  at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:664)&lt;/blockquote&gt;&lt;div&gt;Coherence generally has nice, helpful, error messages which point you in the right direction to solve the problem. This time however, all we got is a 'Failed to load the factory' message which, while accurate, does not give an indication about how to fix things.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After some verification in my local development environment I determined that the above message occurs if the coherence cache config file can not be found in the location specified, or if the config file XML is not well formed. In other words, the factory can not be loaded if the cache config file can not be found or parsed.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2744648003921273846?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2744648003921273846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2744648003921273846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2744648003921273846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2744648003921273846'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/05/coherence-failed-to-load-factory.html' title='Coherence failed to load the factory'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3310397965996710966</id><published>2009-05-19T17:54:00.004+01:00</published><updated>2009-05-20T19:56:59.533+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>When is a string literal too long?</title><content type='html'>When it's a multi-byte encoded string, that's when.&lt;br /&gt;&lt;br /&gt;Recently I came across a runtime problem where an ORA-01704 (string literal too long) error was occuring when inserting some text into a database table.  The column had been set to the maximum amount of characters allowed for VARCHAR2, that is 4000 characters. Before inserting any values, the text was put through a truncation method to make sure it did not exceed 4000 characters. That's what made the issue such a conundrum. If we had code limiting the string to 4000 characters, and the logs for the SQL statement were showing that the truncation to 4000 characters was happening, why was the Oracle database reporting that the string was longer than 4000 characters?&lt;br /&gt;&lt;br /&gt;This is where the logs became very important. I noticed that the some of the text contained non-Western European characters, which was perfectly valid. However, while these characters are counted as single characters, depending on the encoding, they could be multi-byte characters. Not only is 4,000 the maximum number of characters for VARCHAR2, it is also the maximum number of bytes. In our case, we had a string of 4,000 characters, but in UTF-8 it required 4,017 bytes to store it. So, the solution was to make a slight change to the truncation logic, by introducing a maximum number of bytes for a specific character encoding. Now the truncation method has the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;try {&lt;br /&gt;while (truncatedString.getBytes(charSetName).length &gt; maxBytes) {&lt;br /&gt; // remove the last character and check the bytes lenght again&lt;br /&gt; truncatedString = truncatedString.substring(truncatedString.length() - 2);&lt;br /&gt;}&lt;br /&gt;} catch (UnsupportedEncodingException e) {&lt;br /&gt;logger.log(Level.SEVERE, "The character set " + charSetName +&lt;br /&gt;" is not supported. Unable to truncated string if it is too long.", e);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The variable charSetName is set to the character set used by the database (in our case UTF-8) and the maxBytes variable is the maximum number of bytes allowed (in our case 4000). In the rare cases when there are over 4000 bytes in the string, this code will systematically remove the last character until the number of bytes come down. This code could be improved to be more efficient. For example, the code could check how many characters need to be removed and then remove that chunk, rather than removing a character at a time. It performs in the scenario it is used because the string is already chopped down to 4,000 characters. If the system begins to receive a large amount of multi-byte characters in a single string, then reducing the string to 4,000 characters may still leave you with an 8,000 byte string. Let me know if you determine a more efficient approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3310397965996710966?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3310397965996710966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3310397965996710966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3310397965996710966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3310397965996710966'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/05/when-is-string-literal-too-long.html' title='When is a string literal too long?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4019904726050536384</id><published>2009-05-08T15:10:00.002+01:00</published><updated>2009-05-08T15:21:30.832+01:00</updated><title type='text'>Use Social Networks for Competitive Intelligence</title><content type='html'>In a &lt;a href="http://www.kiplinger.com/businessresource/summary/archive/2009/social_networks_Sawka.html"&gt;recent article&lt;/a&gt;, Outward Insight's Ken Sawka examines how Twitter, LinkedIn and other social networking Web sites and tools have enormous potential for establishing a network of competitor information sources.&lt;br /&gt;&lt;blockquote&gt;In combination with other primary and secondary information sources, LinkedIn can contribute to locating and communicating with business professionals that have the knowledge and expertise to address your company’s competitive intelligence needs.&lt;br /&gt;...&lt;br /&gt;Competitive intelligence analysts can similarly use wikis to collaborate with CI function practitioners and contributors to define intelligence requirements, share observations and information, and test and debate analytic hypotheses and conclusions.&lt;br /&gt;&lt;/blockquote&gt;Apart from reaching out to customers and potential customers, Kenneth makes the point that social networking can &lt;a href="http://www.kiplinger.com/businessresource/summary/archive/2009/social_networks_Sawka.html"&gt;dramatically increase the value and impact of competitive intelligence inside their organisation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Kenneth Sawka is the managing partner of competitive intelligence and strategy consulting firm &lt;a href="http://www.outwardinsights.com/"&gt;Outward Insights&lt;/a&gt; in suburban Boston. Outward Insights contributes a monthly column on competitive intelligence issues to &lt;a href="http://www.kiplinger.com/businessresource/"&gt;&lt;i&gt;Kiplinger Recommends&lt;/i&gt;&lt;/a&gt;. Sawka has more than 20 years' of business and government intelligence experience and has appeared on CNBC's &lt;i&gt;Squawk Box&lt;/i&gt; and in publications such as &lt;i&gt;Time&lt;/i&gt; and &lt;i&gt;Investor's Business Daily&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4019904726050536384?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4019904726050536384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4019904726050536384' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4019904726050536384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4019904726050536384'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/05/use-social-networks-for-competitive.html' title='Use Social Networks for Competitive Intelligence'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5428579245408102663</id><published>2009-05-08T01:01:00.005+01:00</published><updated>2009-05-08T01:17:54.835+01:00</updated><title type='text'>What colour is IT?</title><content type='html'>&lt;div&gt;The IDC estimates that for every dollar spent on IT, 50% is spent on related energy costs.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Source: IDC, Worldwide Server Power and Cooling Expense 2006-2010 Forecast, Doc # 203598, September, 2006&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Certainly a business could spend a truck load of cash on building new, energy efficient data centres with the latest in ambient cooling technology and low power consumption servers. However, the majority of businesses are looking at how to go green with what they already have. Server virtualisation is perhaps the most talked about technique for doing so.&lt;/div&gt;&lt;div&gt;Perhaps it is not immediately obvious, but a Service Orientated Architecture is green. By focusing on the goal of having one set of application assets that effectively and efficiently serve the business needs and using those assets to the fullest, one is reducing computational and IT asset waste. Moreover, as the level of seamless integration with loose coupling grows, there will be some systems, or components of systems that are identified as surplus to requirements. As in, the Currency Transaction Report system is no longer required, because the logic is part of the customer initiated financial transaction orchestration.&lt;/div&gt;&lt;div&gt;Some other quick solutions to reducing costs are:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Duplex printing. The maths is fairly straight forward, but if one has to print something, printing on both sides of paper nearly halves the amount of paper used.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Turn off the desktop PC and monitors. Leaving desktop PCs running when not in use is a big waste of energy, the power saving mode is not nearly as efficient as the not turned on mode. We got into the habit of leaving machines on because it took so long for them to boot in the first place. If it is taking a long time for the desktop machines to boot, then check the configuration. Still taking ages, even after removing all the unnecessary start up stuff? Then use the time constructively, like going for a coffee. Talking about coffee...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use coffee Mugs, not disposable cups. How much time do disposable cups really save? How long does it take to wash a mug out people?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Recycle &lt;a href="http://www.castleink.com/"&gt;inkjet cartridges&lt;/a&gt;. Many businesses still use inkjet printers. They can be the cheap and easy option to put convenient printing in a manager's office. Recharging the cartridge is so easy these days. Some companies, such as &lt;a href="http://www.castleink.com/"&gt;castleink&lt;/a&gt;, give &lt;a href="http://www.castleink.com/_recycle-ink-cartridges.html"&gt;cash back for empty cartridges&lt;/a&gt; and will even pay for the postage!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Opt for energy efficient light bulbs. Office lighting retrofits can be relatively inexpensive with &lt;a href="http://www1.eere.energy.gov/femp/pdfs/economics_eel.pdf"&gt;quick ROI&lt;/a&gt; (five years or less). A lighting upgrade in one Pacific Northwest National Laboratory building resulted in annual electricity &lt;a href="http://www1.eere.energy.gov/femp/news/news_detail.html?news_id=7274"&gt;savings of $6,167 and 154,163 kilowatt-hours&lt;/a&gt; of energy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Control office lighting with timers and motion sensors. Installing timers or motion sensors on CFLs and T8s set to stay on for 15 minutes or more provides a good balance of light life expectancy and energy savings. However, rooms that are occupied for shorter periods of time (bathrooms, storage rooms, and so on) should be fitted with light emitting diodes (LEDs) or incandescents with motions sensors or light timers.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are all simple, straight forward steps. Getting people involved is generally not an issue, particularly as they feel they are doing their bit for the &lt;a href="http://www.climatecrisis.net/"&gt;polar bears&lt;/a&gt;. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5428579245408102663?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5428579245408102663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5428579245408102663' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5428579245408102663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5428579245408102663'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/05/what-colour-is-it.html' title='What colour is IT?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4958485846130675861</id><published>2009-05-06T01:07:00.003+01:00</published><updated>2009-05-06T02:23:21.107+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><title type='text'>Social Networks in Business</title><content type='html'>Last week I heard on the &lt;a href="http://newstalk.ie/"&gt;radio&lt;/a&gt;  that The &lt;a href="http://www.sbpost.ie/"&gt;Sunday Business Pos&lt;/a&gt;&lt;a href="http://www.sbpost.ie/"&gt;t&lt;/a&gt; Computers in Business magazine was doing a special 'Social Networking in Business' edition. Since I'm more of an online news hound, I can't remember the last time I bought a physical newspaper, I put a reminder on my phone to pickup a copy of SBP on Sunday May 4th. Which I did. It's a rarity these days, but Sunday was not too bad weather-wise, so I sat down in a local park to enjoy Computers in Business and the sunshine.&lt;br /&gt;&lt;br /&gt;The three Social Networking sites focussed on where &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.facebook.com/"&gt;Facebook&lt;/a&gt; and &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;. &lt;a href="http://www.yourtechstuff.com/"&gt;Adrian Weckler&lt;/a&gt;'s  article about Twitter was a nice step by step guide to getting started, but lacked a business case for using Twitter in the first place. The other articles did at least provide some, but limited, business scenarios: Facebook for B2C advertising, LinkedIn for B2B advertising. This is perhaps an oversimplification of the articles, the online versions will not be available for a week or two. When they are I'll link to them from this article and you can decide.&lt;br /&gt;&lt;br /&gt;Business, and success in business, requires relationships, so Social Networking would appear to be the ideal tool. It needs to be carefully and thoughtfully applied though. When the only tool you have is a hammer, everything looks like a nail. So, with Social Networking one should be aware of how and when one is using it for lead generation, building a community of loyal fans, providing customer support, or just keeping in touch. Another important factor to consider is identity. I'm not talking about credentials, but rather who is being represented, the individual or the business? This is probably not too much of a concern for small businesses where the owner's personality is blended with the brand. While it is taboo for a politician or celebrity to delegate their Tweeting to someone else, a large organisation is infact separate from the people who run it, so the Social Networking responsibilities often fall to the marketing department by default. However, the marketing department is not the only point of contact that customers, or potential customers, have with a business. A business using Social Networking sites should reflect that, ensuring that at least Sales and Customer Support have an involvement.&lt;br /&gt;&lt;br /&gt;Staying on the topic of Twitter and business, &lt;a href="http://sarahmilstein.com/"&gt;Sarah Milstein&lt;/a&gt; recently spoke about &lt;a href="http://www.web2expo.com/webexsf2009/public/schedule/detail/7543"&gt;Effective Twitter for Communication &amp;amp; Product Integration&lt;/a&gt;  and touched on this matter of having individuals, recognised as real people, tasked with representing the business in social networks. Sarah often refers to two different companies with a similar approach to engage with their customers through Twitter. &lt;a href="http://www.wesabe.com/"&gt;Wesabe&lt;/a&gt;, a personal finance site, and &lt;a href="http://www.comcast.com/"&gt;Comcast&lt;/a&gt;, a TV, phone and internet company, both use Twitter's search feature to learn about what peopple are saying about them and respond accordingly. Sometimes this can be to address a complaint, or provide advice on a purchase.&lt;br /&gt;&lt;br /&gt;If a business is made up of individuals, how does that business get meaningfully represented in a social network? One option, and I'm surprised it was not mentioned in the Computers in Business magazine is &lt;a href="https://cotweet.com/"&gt;CoTweet&lt;/a&gt;. It is designed for businesses using Twitter to engage existing customers and attract new ones. CoTweet allows multiple people to communicate through corporate Twitter accounts and stay in sync while doing so.&lt;br /&gt;&lt;br /&gt;Of course, microblogging is not just for external communication either. Increasingly, social networks have been appearing within the enterprise too. &lt;a href="http://www.yammer.com/"&gt;Yammer&lt;/a&gt; and &lt;a href="https://presentlyapp.com/"&gt;Present.ly&lt;/a&gt; both provide private microblogging with features tailored for the workplace, like the ability to add attachments and to communicate in subgroups. Those who have found it useful report that email traffic is down, but information sharing and collaboration is up. Those who didn't find it useful are still wondering what the fuss is about. It's just another stream of information one has to struggle keep up with.&lt;br /&gt;&lt;br /&gt;The use of social networks in the enterprise for internal or external communication does need to be carefully considered. In particular, one needs to be aware of what existing communication processes are being supported, and what new communication processes are required. This is where the adoption of social networks for business can struggle, not recognising the opportunity to use the technology to support new ways of doing business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4958485846130675861?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4958485846130675861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4958485846130675861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4958485846130675861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4958485846130675861'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/05/social-networks-in-business.html' title='Social Networks in Business'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3737469494319334391</id><published>2009-04-15T15:44:00.006+01:00</published><updated>2009-04-30T16:08:32.438+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Priorities in agile software development</title><content type='html'>After discussions with friends, family and work colleagues over the past few months it became apparent that we all have a different idea on what priorities are and how do we identify priorities. Here are my thoughts on the matter.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why prioritise?&lt;/span&gt;&lt;br /&gt;It’s very dangerous to ask staff and customers what they want to see in the next release. The result is a mixed wish list of the most amazing things. By the time you’re ready to start development, you’ve got enough ideas for improvement to occupy 500 programmers for a few decades. &lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 170px;" src="http://3.bp.blogspot.com/_QdWe1hGsnN4/Sfm6BLNv07I/AAAAAAAAADQ/wNBuI-AmnXE/s200/long_list.PNG" alt="A long list of features is a good place to start, but it needs to be prioritised." id="BLOGGER_PHOTO_ID_5330496163322778546" border="0" /&gt;&lt;br /&gt;Unfortunately, all you have is three, and we wanted to be shipping within 6 months, so there has to be some prioritisation. Time is an important resource, and we have a limited amount of it. With software, one does not have the luxury of a long development period to bring a product, or a new release of an existing product, to the market. Potential new customers will not be interested in a product that does not improve on a regular basis. Someone else may do it quicker. Your customers may migrate to a different solution that has the feature(s) they are looking for.&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Capacity must be influencing our priorities. Because capacity is time based, our priorities are time based. Too many software development teams suffer from ‘inflation of time’; that is to say, they devalue future time by using it to solve present problems. The problems may not be the most important ones to solve today. Of course, the time spent on one thing means that some other activity remains undone. Each time we put off a portion of our work to do at a later date, becaue we haven't time to do it today, we are devaluing future time in the sense that we now have less of it.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 163px; height: 200px;" src="http://4.bp.blogspot.com/_QdWe1hGsnN4/Sfm7iqlW1qI/AAAAAAAAADY/XaBCcgiqACw/s200/juggling_priorities.PNG" alt="No one can juggle tasks indefinitely. Hard decisions have to be made about what matters." id="BLOGGER_PHOTO_ID_5330497838190614178" border="0" /&gt;There can be a tendency for people to avoid the hard decisions and use capacity, or estimation of effort to set the priorities. For example, if the risk management feature takes more effort to implement we’ll go with the loan book profitability feature instead. While capacity is effective in determining what to do with activities of the same priority, it is not the only influencing factor in establishing a prioritised product backlog. There may be features that are must haves for the next release. They may be expensive to implement, but without them market share may not grow. This is where market research is really important. The product owner must be able to say: “To get the risk management feature we can sacrifice the loan book profitability feature because risk management addresses a need for a broader range of potential high value customers.” The product owner must also have the courage of their convictions and vision, based on their research and understanding of the market. Just because something is difficult does not mean it is not worth doing.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prioritisation pitfalls&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sometimes certain features or activities can appear to be important and necessary in the next release. Here are some prioritisation pitfalls. If you find yourself condsidering this sort of features in your next release, spending some more time on research, verifying the importance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Single customer requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is generally cheaper to get new business from existing customers than it is to get new customers. Having customers can cause it’s own headaches, particularly if your sales person has sold the customer a product you don’t sell. This happens a lot more than it should, and opens the door to legal hassles that are just not worth the effort. Even when this doesn’t happen, there can often be enhancements suggested by your customers. Many of these will make sense, others may be bespoke features that no one else is interested in. Building features into your software based on single customer requirements implies that you are actually building consultant-ware, not shrinkwrap software. Shrinkwrap software is better than consultant-ware. That's because shrinkwrap has no marginal costs for each additional customer, so you can essentially sell the same thing over and over again and make a lot more profit. Not only that, but you can lower the price, because you can spread your development costs out over a lot more customers, and lowering the price &lt;em&gt;gets you more customers&lt;/em&gt; because more people will suddenly find your now-cheaper software worthwhile, and life is good and all is sweet. If you have customers that are requesting unique features not no other customer is requesting, then perhaps the real priority feature is a plug-in architecture, rather than the business feature.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Perceived inevitable requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Good software developers often think in the abstract so that the real implementations are more reusable in concrete scenarios. However, just because something is the next logical thing to do, does not mean it is the most important thing to do next. For example, a system may have a notification module with SMTP and SMS interfaces. A logical next step would be a XMPP interface for instant messaging. Such a feature may be interesting for the developer to work on, and may even give the marketing department something cool and trendy to draw attention to, but is it a deal clinching feature? Are more customers looking for this feature than some other feature, such as not notifying people who are on leave, but they’re deputies instead?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prioritise interface that the user sees&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 188px;" src="http://3.bp.blogspot.com/_QdWe1hGsnN4/Sfm8BDhLQ-I/AAAAAAAAADg/kLpVPngP888/s200/prioritised_checklist.PNG" alt="A prioritised list, reflecting the capacity of the team, and what the business value of the new features are makes for a more sustainable development effort." id="BLOGGER_PHOTO_ID_5330498360280040418" border="0" /&gt;There is one category of features that software developers may subconsciously discount. I’m referring to what the end user interacts with as a tool to for their job. The interface with your software may not be the GUI, but also a web service or a device. These deserve our attention because they increase the awareness of the value of what we can do with technology. Nobody sees a shared library or a driver, and no one cares about them, unless they're broken. Yet that's where software developers can tend to focus much of their time and resources. Doesn’t this contradict an earlier point about building a plug-in architecture? No. The motivation, in that case, to build something that the user does not see, is to provide a sustainable and cost effective solution so that the customer gets what they want (a business feature) without you having to provide it or maintain it.&lt;br /&gt;&lt;p&gt;A prioritised list, reflecting the capacity of the team, and what the business value of the new features are makes for a more sustainable (if no one pays for it, who pays the team) development effort down through the years.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3737469494319334391?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3737469494319334391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3737469494319334391' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3737469494319334391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3737469494319334391'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/04/priorities-in-agile-software.html' title='Priorities in agile software development'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QdWe1hGsnN4/Sfm6BLNv07I/AAAAAAAAADQ/wNBuI-AmnXE/s72-c/long_list.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-49866510293373602</id><published>2009-03-31T09:57:00.002+01:00</published><updated>2009-04-30T10:41:55.499+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA Suite'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Oracle SOA Suite Developer's Guide</title><content type='html'>Service-Oriented Architecture (SOA) is not about technology, although technology is used to implement it. The principles of reliability and accommodating unexpected changes at a manageable cost can be applied equally in any programming language. However, as with most things in life, not just software development, it is easiest to use a model that is supported by tools and inter-operable (the ability of two or more systems or components to exchange information and to use the information that has been exchanged). A standards-based Service-Oriented Architecture (SOA), is such a model that enables IT infrastructure is continuously adapted to keep up with the pace of business change.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/dp/1847193552?tag=ollentheevent-20&amp;amp;camp=1406&amp;amp;creative=6394&amp;amp;linkCode=as1&amp;amp;creativeASIN=1847193552"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 246px;" src="http://images.packtpub.com/images/full/1847193552.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.bpel-people.com/"&gt;Matt Wright&lt;/a&gt; and &lt;a href="http://blogs.oracle.com/reynolds/"&gt;Antony Reynolds&lt;/a&gt; have just published a book &lt;a href="http://www.amazon.com/dp/1847193552?tag=ollentheevent-20&amp;amp;camp=1406&amp;amp;creative=6394&amp;amp;linkCode=as1&amp;amp;creativeASIN=1847193552"&gt;Oracle SOA Suite Developer’s Guide&lt;/a&gt; that provides a best practice guide to  using the &lt;a href="http://www.oracle.com/technologies/soa/soa-suite.html"&gt;Oracle SOA Suite&lt;/a&gt; for building a real world applications. This book bridges the gap between SOA theory and the Oracle SOA Suite Manuals and is based on the experience of implementing SOA across a number of organisations in EMEA and APAC. It is a book of three parts. The first section of the book provides detailed coverage of all components of the SOA Suite, namely &lt;a href="http://www.oracle.com/technology/products/integration/service-bus/index.html"&gt;OSB&lt;/a&gt;, &lt;a href="http://www.oracle.com/technology/bpel"&gt;BPEL&lt;/a&gt;, &lt;a href="http://www.oracle.com/appserver/rules.html"&gt;Rule&lt;/a&gt;, &lt;a href="http://www.oracle.com/appserver/business-activity-monitoring.html"&gt;BAM&lt;/a&gt; and &lt;a href="http://www.oracle.com/appserver/web-services-manager.html"&gt;OWSM&lt;/a&gt;. The second section addresses the common question: "What is the best way to combine / use all of these different components to implement a real-world SOA solution?". Using a working example of an online auction site, it leads you through key SOA design considerations in implementing a robust solution that is designed for change. Though the examples in the book are based on Oracle SOA Suite 10.1.3.4 the book will still be extremely useful for anyone using 11g. The final section addresses non-functional considerations and covers the packaging, deployment, and testing of SOA applications; it then details how to use Web Service Manager to secure and administer SOA applications.&lt;br /&gt;&lt;br /&gt;I'm sure this book will continue to be relevant in years to come to. Unlike other technical books, this one does more than just explain "how" to do A, B, and C, but goes to great lengths to explain the concepts. As a software developer it is vital to understand why we were doing what we were doing, so that we know which principles to apply in different situations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-49866510293373602?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/49866510293373602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=49866510293373602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/49866510293373602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/49866510293373602'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/03/oracle-soa-suite-developers-guide.html' title='Oracle SOA Suite Developer&apos;s Guide'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4179808913483632126</id><published>2009-03-08T18:51:00.000Z</published><updated>2009-04-08T18:52:11.894+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Offshoring / Outsourcing with scrum</title><content type='html'>Clearly the use of scrum with distributed teams is something a lot of people are talking about right now. After last months article on scrum and offshoring, focusing mostly on communication challenges, I have noticed a number of blog postings on the subject. David Myers (a consultant at London based &lt;a href="http://charteris.com/"&gt;Charteris&lt;/a&gt;), in his article on &lt;a href="http://blogs.charteris.com/blogs/davidmy/archive/2009/02/09/scrum-and-outsourcing.aspx"&gt;Scrum and Outsourcing&lt;/a&gt;, goes into great detail about the challenges with distributed teams. For me, the key points are that basic agile practices of communication, meaningful documentation and continuous integration removes some of the hurdles. However, the manner that the standards / approaches applied have to suit the team.&lt;br /&gt;&lt;br /&gt;I'll leave the last word to David...&lt;br /&gt;&lt;blockquote&gt;For me the most important consideration when employing Scrum with offshore resources is that it should not be employed without modifying and/or tuning some of the practices to be more suited to working with geographically split teams. This tweaking (or lack thereof) can have a fundamental effect on the end result.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4179808913483632126?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4179808913483632126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4179808913483632126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4179808913483632126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4179808913483632126'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/03/offshoring-outsourcing-with-scrum.html' title='Offshoring / Outsourcing with scrum'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4655283398761103400</id><published>2009-02-02T17:40:00.000Z</published><updated>2009-04-08T18:11:03.439+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Does “scrum” work in offshoring?</title><content type='html'>A question posed a few months back on &lt;a href="http://stackoverflow.com/"&gt;stackoverflow&lt;/a&gt; on &lt;a href="http://stackoverflow.com/questions/89067/does-scrum-work-in-offshoring"&gt;scrum and offshoring&lt;/a&gt; got a number of mixed responses. Many state that scrum does not work with remote teams. There may be a number of factors to scrum not working, which has very little to do with scrum in the first place. Some teams are not suitable to scrum, or rather, the individuals on the team are not suitable. Scrum requires a change in mindset, to be proactive, not be willing to fail, and be willing to be honest.&lt;br /&gt;&lt;br /&gt;The time difference does appear to be the biggest obstacle. Many of the other issues, such as cultural differences, can be resolved, or at least mitigated, with direct communication.  Direct communication is hampered when remote teams work in different time zones.&lt;br /&gt;&lt;br /&gt;Flexibility is required from the team members in all locations. It may suit some members of the team to start early and leave early so that their working hours overlap with some of the others. This has to be sustainable. The team members that come in early should not be the ones who regularly leave late. If this occurs, there is a problem with resource bottlenecking. What would happen to the team when this member goes on holidays? A meeting that involves the whole team is often not required if the team members take the responsibility to communicate to each other. I have found instant messaging to be quite useful in this regard. When having a discussion with some team members in a chat room, the messages can be saved and posted to a wiki or emailed to the rest of the team. This also helps to clear up confusion over what was said during a telephone conversation.&lt;br /&gt;&lt;br /&gt;Note that I only refer to one team. Referring to a group of team members by their location may reinforce the differences between the groups. For example, rather that referring to team members as the 'San Jose Team' or the 'Palo Alto Team', try 'The team members in San Jose' or 'The team members in Palo Alto'. This suitable change emphasises that the team is one unit, just distributed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4655283398761103400?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4655283398761103400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4655283398761103400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4655283398761103400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4655283398761103400'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/02/does-scrum-work-in-offshoring.html' title='Does “scrum” work in offshoring?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2620406762156423387</id><published>2009-01-03T13:34:00.000Z</published><updated>2009-04-08T17:38:40.485+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA Suite'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA Governance'/><title type='text'>Getting requestor's IP address through Oracle WSM</title><content type='html'>&lt;span class="bodycopy"&gt; Oracle &lt;a href="http://www.oracle.com/technology/products/webservices_manager/index.html"&gt;Web Services Manager&lt;/a&gt; (OWSM - some people pronounce it as 'Awesome') plays an important roll in Oracle's contribution to SOA governance. Put simply, it brings better control and visibility over how, when and by whom, web services are invoked. &lt;/span&gt;OWSM, which is a key product in the Oracle SOA Suite, was voted one of the best security solutions by &lt;a href="http://www.sys-con.com/"&gt;SYS-CON Media&lt;/a&gt;, the world's leading i-technology media and events company in it's &lt;a href="http://soa.sys-con.com/read/397933.htm"&gt;2007 SOAWorld Readers' Choice Awards&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Apart from the predefined policies, OWSM  provides an extensibility point to define a custom    policy step that can be executed as part of the request or response pipeline.    There is an Oracle by Example (OBE) tutorial available that provides details for &lt;a href="http://www.oracle.com/technology/obe/fusion_middleware/owsm/custom%20steps/custom%20steps.htm"&gt;creating a custom step&lt;/a&gt;. The custom    step authenticates the user against a fixed set of username/password credentials    configured in the policy step pipeline.&lt;br /&gt;&lt;br /&gt;You can go one step further and check IP address of the requesting client by accessing the HttpServletRequest in the MessageContext in the &lt;span style="color: rgb(0, 0, 0);font-family:tahoma,verdana,sans-serif;font-size:85%;"  &gt;execute&lt;/span&gt; operation of your custom step code.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:tahoma,verdana,sans-serif;font-size:85%;"  &gt;&lt;br /&gt;import com.cfluent.pipelineengine.container.MessageContext;&lt;br /&gt;...&lt;br /&gt;((HttpServletRequest) ((&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:tahoma,verdana,sans-serif;font-size:85%;"  &gt;MessageContext) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:tahoma,verdana,sans-serif;font-size:85%;"  &gt;messageContext).getProperty("javax.servlet.request")).getRemoteHost()&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Remember that if there are proxies or NAT address translations between the requester and the provider you won't know the real source IP. Clearly this only works for HTTP based requests. However, a similar approach could be used for JMS.&lt;br /&gt;&lt;br /&gt;It is worth mentioning Vikas Jain's &lt;a href="http://ws-security.blogspot.com/"&gt;Web Services Security blog&lt;/a&gt; which is a treasure trove of useful information on OWSM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2620406762156423387?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2620406762156423387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2620406762156423387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2620406762156423387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2620406762156423387'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2009/01/getting-requestors-ip-address-through.html' title='Getting requestor&apos;s IP address through Oracle WSM'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5363768066071013762</id><published>2008-12-15T20:17:00.002Z</published><updated>2008-12-15T20:43:30.179Z</updated><title type='text'>Best in class for digital camera advice</title><content type='html'>Now that I'm doing more Flex development I'm branching out into all sorts of wonderful animations, charts, and countless ways to navigate through and manipulate images. So, after years of 'server side' I'm discovering pictures! I'm also discovering that lot's of people I know include photography amongst their list of hobbies. Some of them go even further by trying to make some money out of it, and they do, sometimes. Of course it doesn't necessarily always cover the cost of the equipment. Or at least I thought so until I started noticing that not everyone is using a hi-tech superduper gizmo and gadgets to take good photos. Quite a few use cameras from the &lt;a href="http://www.bestinclass.com/digital-cameras/best/canon-powershot"&gt;Canon PowerShot&lt;/a&gt; range because they are fast, but not ridiculously expensive.&lt;br /&gt;&lt;br /&gt;After a while you begin to notice that they actually have more than one camera, quite a few actually. So how do they choose which is right one? Many are using &lt;a href="http://www.bestinclass.com/digital-cameras"&gt;BestInClass&lt;/a&gt; to research digital cameras in particular. Using the unbiased recommendations of qualified &lt;a href="http://www.bestinclass.com/digital-cameras/experts"&gt;hobbyists and professionals&lt;/a&gt;, and a clever set of simple search criteria, this simple site is a good place to start when looking for best in class advice on digital cameras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5363768066071013762?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5363768066071013762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5363768066071013762' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5363768066071013762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5363768066071013762'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/12/best-in-class-for-digital-camera-advice.html' title='Best in class for digital camera advice'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6612505636804844260</id><published>2008-11-15T12:35:00.002Z</published><updated>2009-04-08T12:57:46.901+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Performance testing of asynchronous processes</title><content type='html'>Generally, the most complicated part of performance testing is getting the data shape right. Populating the system with thousands of users, records and so on is made easier by data generation tools, but it still requires a lot of thought. Often the testing simply involves making a request and asserting that the response time was within acceptable limits. Systems that validate the parameters, particularly time based parameters, in these requests make it a bit more complicated to automate the performance testing. Think of session tokens, or other sets of data that are only valid for a short period of time.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;When working on Social CRM we had a similar challenge. There are a number of processes that are asynchronous and to further complicate matters, involve email. The reset password process is a good example. There are 3 steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Initiate reset password - A user specifies an email address and the system sends an email asking do they really want to reset their password. This email contains a URL with a number of parameters to verify that only the person receiving the email can move to the next step.&lt;/li&gt;&lt;li&gt;Confirm reset password - A user clicks on the URL link in the email to confirm that they want to reset their password. The system verifies the parameters, generates a new temporary password and sends the user an email. The user can not log in with this temporary password.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Complete reset password - A user clicks on the URL link in the email, enters their temporary password and their new password in order to be able to log into the system.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QdWe1hGsnN4/SdyQnGPcfUI/AAAAAAAAADI/_T0WlINFVfY/s1600-h/psr_reset_password.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 306px;" src="http://3.bp.blogspot.com/_QdWe1hGsnN4/SdyQnGPcfUI/AAAAAAAAADI/_T0WlINFVfY/s320/psr_reset_password.png" alt="" id="BLOGGER_PHOTO_ID_5322287861009775938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A number of these parameters are not stored anywhere, except in the email. There are other system checks and balances to verify some of these parameters. Therefore, when automating the performance testing, it is not possible to populate the database with a full set of valid data and run the script. Access to the generated email content is required. This is where &lt;a href="http://subethasmtp.tigris.org/"&gt;SubEthaSMTP&lt;/a&gt; and &lt;a href="http://subethasmtp.tigris.org/wiser.html"&gt;Wiser&lt;/a&gt; help out.&lt;br /&gt;&lt;br /&gt;By having an implementation of Wiser to write the emails to a file, all of the time based parameters, that are not stored anywhere, are available for a subsequent performance testing script to refer to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6612505636804844260?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6612505636804844260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6612505636804844260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6612505636804844260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6612505636804844260'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/11/performance-testing-of-asynchronous.html' title='Performance testing of asynchronous processes'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QdWe1hGsnN4/SdyQnGPcfUI/AAAAAAAAADI/_T0WlINFVfY/s72-c/psr_reset_password.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2985396645150755103</id><published>2008-10-20T12:09:00.003+01:00</published><updated>2009-04-08T12:58:09.918+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>When is automated testing required?</title><content type='html'>This question gets asked a lot, particularly as there is a cost in implementing automated tests. There is also a benefit, but it is harder to quantify. When a development team has a limited amount of time between releases there is often a preference to implement new functionality rather than automate testing for existing functionality. With &lt;a href="http://www.agilealliance.org/show/2"&gt;Agile Software Development&lt;/a&gt; methodologies, the &lt;a href="http://www.agile-software-development.com/2008/02/agile-testing-changing-role-of-testers.html"&gt;role of the tester is more complex&lt;/a&gt;, but automation of testing is clearly a responsibility.&lt;br /&gt;&lt;br /&gt;It is easy to say that 100% of the system functionality should be tested automatically and to ensure that regressions do not occur, that this testing should be performed by a developer before they check in changes. It is hard to justify the cost of doing so as the information on how many defects automated testing prevented does not often get recorded.&lt;br /&gt;&lt;br /&gt;The simplest place to start is to review the regression defects that have been raised in the past. This should highlight the functionality that tends to break the most when changes are made. After implementing automated regression testing the journey starts in growing the range of automated test suites. Assuming, of course, that developers are using the automated testing before checking in their changes, one should also see a reduction of the regression defects being raised in areas with automated testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2985396645150755103?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2985396645150755103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2985396645150755103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2985396645150755103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2985396645150755103'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/10/when-is-automated-testing-required.html' title='When is automated testing required?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-8441487357516173772</id><published>2008-09-19T12:09:00.008+01:00</published><updated>2008-09-19T12:31:49.316+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><title type='text'>Social CRM @ OOW 2008</title><content type='html'>At this years &lt;a href="http://www.oracle.com/openworld/2008/index.html"&gt;Oracle Open World&lt;/a&gt; watch out for some fantastic &lt;a href="http://www.blogger.com/2008/07/social-crm-goes-live.html"&gt;Social CRM&lt;/a&gt; &lt;a href="http://www28.cplan.com/cc208/catalog.jsp?ilc=208-1&amp;amp;ilg=english&amp;amp;isort_sessions=&amp;amp;isort_demos=&amp;amp;isort_exhibitors=&amp;amp;is=yes&amp;amp;ip=%3C%2Fipresentations%3E&amp;amp;isort_sessions_type=&amp;amp;isort_exhibitors_type=&amp;amp;isort_demos_type=&amp;amp;search_sessions=yes&amp;amp;search_exhibitors=yes&amp;amp;icriteria1=Siebel&amp;amp;icriteria2=+&amp;amp;icriteria5=Customer+Relationship+Management&amp;amp;icriteria8=&amp;amp;icriteria9=+&amp;amp;icriteria6=&amp;amp;icriteria3=+&amp;amp;icriteria7="&gt;sessions and demonstrations&lt;/a&gt;. Below are two sessions in particular to put into your diary where the next generation of Social CRM applications will be shown off. Since the launch of the &lt;a href="http://www.oracle.com/applications/socialcrm/index.html"&gt;Oracle Social CRM Applications&lt;/a&gt; earlier in the year &lt;a href="http://blogs.oracle.com/socialcrm/2008/08/knowledgeable_sales_people_produce_happy_customers.html"&gt;Tara Roberts&lt;/a&gt;, amongst others, have been &lt;a href="http://blogs.oracle.com/socialcrm/"&gt;blogging&lt;/a&gt; about the new Social CRM paradigm.&lt;br /&gt;&lt;br /&gt;&lt;table border="20"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Session ID:&lt;/td&gt;&lt;td&gt;S300050&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session Title:&lt;/td&gt;&lt;td&gt;Social CRM Applications Strategy Overview and Road Map&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session Abstract:&lt;/td&gt;&lt;td&gt;Oracle's social CRM applications provide a new level of end-user productivity that finally gives sales professionals the kinds of tools they need for accelerating sales cycles. In this session, learn from Oracle product experts how organizations can use these applications to increase user adoption and make their sales teams more productive.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Duration:&lt;/td&gt;&lt;td&gt;60 minutes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Speaker:&lt;/td&gt;&lt;td&gt;Mark Woollen, Oracle&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="20"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Session ID:&lt;/td&gt;&lt;td&gt;S300051&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session Title:&lt;/td&gt;&lt;td&gt;Social Sales Applications: Focus on End-User Productivity&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session Abstract:&lt;/td&gt;&lt;td&gt;Oracle's new Social Sales Applications -- Oracle Sales Prospector, Oracle Sales Campaigns, and Oracle Sales Library -- deliver specific end-user functionality to make sales professionals more productive throughout the sales cycle. This session will highlight social capabilities and social intelligence supported by these applications and provide demonstrations of these applications at work.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Duration:&lt;/td&gt;&lt;td&gt;60 minutes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Speaker:&lt;/td&gt;&lt;td&gt;Tara Roberts, Oracle&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-8441487357516173772?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/8441487357516173772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=8441487357516173772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8441487357516173772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8441487357516173772'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/09/social-crm-oow-2008.html' title='Social CRM @ OOW 2008'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5731134171232545557</id><published>2008-08-13T23:23:00.008+01:00</published><updated>2008-09-19T13:03:34.631+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><title type='text'>Its my data and I'll share if I want to</title><content type='html'>One day I'll figure out how &lt;a href="http://news.cnet.com/otl/"&gt;Dan Farber&lt;/a&gt; manages to keep his finger on the pulse of EVERYTHING. Certainly over twenty years of 'editor in chief' roles has given the man some insight. A few months back he made a very apt observation about &lt;a href="http://news.cnet.com/8301-13953_3-9945803-80.html"&gt;corporations, social networks and controlling data&lt;/a&gt;, where's the money?&lt;br /&gt;&lt;br /&gt;There is value in the knowledge, or wisdom if you prefer, derived from data (facts and figures). &lt;i&gt;&lt;b&gt;scientia potentia est. &lt;/b&gt;&lt;/i&gt;Consequently, there is intrinsic value in data. That's why our parents forked out hard earned cash for &lt;a href="http://www.worldbook.com/"&gt;World Book Encylopedias&lt;/a&gt; in the 1980's and still have them on the bookshelf in the hall for all to see! Well, perhaps that just an Irish thing.&lt;br /&gt;&lt;br /&gt;I think the social networks phenomenon is driving home the value of tools that produce knowledge from data, particularly when there is so much data and &lt;a href="http://www.wired.com/science/discoveries/magazine/16-07/pb_theory"&gt;old models for interpreting data no longer work.&lt;/a&gt; Staying with Google, when they bought YouTube, did they pay &lt;a href="http://www.google.com/press/pressrel/google_youtube.html"&gt;$1.65 Billion USD&lt;/a&gt; for the video content, or the tag cloud, data relationships, and viewing history about the content? I propose that as  a video portal, YouTube's value (although I wouldn't have paid &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; much for it) was in it's meta data and how it used it, not it's content. Although &lt;a href="http://www.firstmonday.org/issues/issue6_2/odlyzko/"&gt;content is not king&lt;/a&gt;, having it was critical in building up the meta data (or 'connectivity' using Odlyzko terminology).&lt;br /&gt;&lt;br /&gt;We are used to getting things for free on the internet. In the social internet we are producers as well as consumers of information. So there is a real challenge in encouraging people to share data, particularly when it is possible, but not always probable, that someone is going to try use that data for their own ends. Yet people, including myself, do it.&lt;br /&gt;&lt;br /&gt;Why do people share the things they know, such as &lt;a href="http://soastation.blogspot.com/2007/08/java-iban-check-digit-validation.html"&gt;code to validate an IBAN&lt;/a&gt; or &lt;a href="http://msglaze.typepad.com/paris/2008/08/tempura-zucchin.html"&gt;scrumptious zucchini recipes&lt;/a&gt; for nothing? It's because we still hold on to our own experience and knowledge in applying this 'data', and the 'connectivity' gained when &lt;a href="http://soastation.blogspot.com/2008/08/search-engine-optimisation.html"&gt;someone discovers it&lt;/a&gt;.  So, while I could learn to make a &lt;a href="http://www.donogh.com/cooking/chescake/baileys.shtml"&gt;Bailey's Cheesecake&lt;/a&gt; I much prefer &lt;a href="http://www.deathbychocolate.ie/"&gt;buy one&lt;/a&gt; (well two or three actually, they don't sell retail) and share.&lt;br /&gt;&lt;br /&gt;Let's wrap up with a classic anecdote/joke from the &lt;a href="http://www.toastmasters.org/"&gt;Toastmasters &lt;/a&gt;handbook...&lt;br /&gt;&lt;br /&gt;There was an engineer who had an exceptional gift for fixing           all things mechanical. After serving his company loyally for over 30 years, he           happily retired. Several years later the company contacted him regarding a seemingly         impossible problem they were having with one of their           multimillion-dollar machines. It shook and vibrated violently every time they started           the machine. They had tried everything and everyone else to get           the machine to work but to no avail. In desperation, they called on the retired engineer who had         solved so many of their problems in the past. The engineer reluctantly took the         challenge. He spent a day studying the huge machine. At the end of the day, he         marked a small "x" in  chalk on a particular spot on the side         component of the machine, took a sledge hammer and hit the spot a smashing blow. Instantly, the         machine quit vibrating and ran smooth as silk.           &lt;p&gt;The company received a bill for $50,000 from the engineer for           his service.&lt;/p&gt;           &lt;p&gt;They wrote him a letter saying that $50,000 for hitting the machine           was outrageous as any fool could have done that. They demanded an           explanation.&lt;/p&gt;           &lt;p&gt;The engineer responded with a new bill stating:&lt;br /&gt;     One sledge hammer blow to machinery - $1.00&lt;br /&gt;     Knowing where to hit machinery - $49,999.00&lt;/p&gt;                &lt;p&gt;It was paid in full and the engineer retired again in peace, but in a much bigger house.&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/8670942274168320118-5731134171232545557?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5731134171232545557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5731134171232545557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5731134171232545557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5731134171232545557'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/08/its-my-data-and-ill-share-if-i-want-to.html' title='Its my data and I&apos;ll share if I want to'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3469521420316830428</id><published>2008-08-06T08:15:00.002+01:00</published><updated>2008-08-06T08:31:04.656+01:00</updated><title type='text'>Who's the best web host?</title><content type='html'>Sometime ago a friend asked me the exact same question: who's the best web host? At the time I didn't have an answer. It's been that long since I've organised the hosting of a domain, content, and so on. What I do remember, is that web hosting companies are definitely not all the same. So, how do you find out who's the best web host?&lt;br /&gt;&lt;br /&gt;Recently I discovered a site for &lt;a href="http://www.webhostinggeeks.com/"&gt;web hosting reviews&lt;/a&gt; that has ratings from customers on most, if not all, of the major US based web hosting companies. Reflecting the fact that one size does not fit all they have categories for &lt;a href="http://webhostinggeeks.com/bestunixhosting.html"&gt;Unix&lt;/a&gt;, &lt;a href="http://webhostinggeeks.com/bestwindowshosting.html"&gt;Windows&lt;/a&gt;, &lt;a href="http://webhostinggeeks.com/bestbudgethosting.html"&gt;hosting on a budget&lt;/a&gt;, and so on. The customer reviews are also well categorised with ratings for User Friendliness, Quality, Price, Space, Reliability &amp;amp; Uptime, Traffic, Customer Support and Technical Support. This gives you a better picture on the characteristics of each provider. Allowing you to choose who's the best web host for you. Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3469521420316830428?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3469521420316830428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3469521420316830428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3469521420316830428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3469521420316830428'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/08/whos-best-web-host.html' title='Who&apos;s the best web host?'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6336422536138131992</id><published>2008-08-01T15:16:00.004+01:00</published><updated>2008-08-01T16:12:38.713+01:00</updated><title type='text'>Search Engine Optimisation</title><content type='html'>As mentioned in the first birthday article, &lt;a href="http://soastation.blogspot.com/2008/05/1-year-old-today.html"&gt;1 Year Old Today!&lt;/a&gt; I use Google Analytics to get an idea of visitor trends, and what articles people are reading the most. Another piece if insight is how people are finding the articles through search engines. It's interesting to see what people are looking for, and how that changes over time. Here are the top search keywords used each month for people finding SOA Station.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;July - 'mind the gap oracle'&lt;/li&gt;&lt;li&gt;June - 'trailing block elements must have an id attribute'&lt;/li&gt;&lt;li&gt;May - 'trailing block elements must have an id attribute'&lt;/li&gt;&lt;li&gt;April - 'iban check'&lt;/li&gt;&lt;li&gt;March - 'oracle bpel custom functions'&lt;/li&gt;&lt;li&gt;February - 'extension functions for xsl in bpel'&lt;/li&gt;&lt;li&gt;January - 'soa diagram'&lt;/li&gt;&lt;/ul&gt;Of course, this is only showing you what people that found SOA Station had been searching for.  What such information gives is a picture of how search engines represent your website and the content on it. This is often quite different from how you, the publisher, sees it. The styling, context and structure of the site gets lost in search engine algorithms. Many people use the search engines as their portal to the internet so Search Engine Optimisation becomes very important when trying to make your web site stand out from all the others.&lt;br /&gt;&lt;br /&gt;Search Engine Optimisation (SEO) is the process of improving the volume and quality of traffic to a web site from search engines via search results for targeted keywords. Usually, the earlier a site is presented in the search results or the higher it "ranks", the more searchers will visit that site. SEO is not advertising, but to get it done well often involves specialists with in-depth knowledge of search engine algorithms.&lt;br /&gt;&lt;br /&gt;One such specialist is &lt;a href="http://www.seoexpert.us/about_us.php#company"&gt;Sean O'Brien&lt;/a&gt; ( no relation ) founder of                              &lt;a href="http://www.seoexpert.us/"&gt;SEO Expert&lt;/a&gt;, a search engine optimisation company that provides consultation, but also tailored optimisation services such as getting inbound links, listed in directories and making optimisation changes to your site. This means that these &lt;a href="http://www.seoexpert.us/"&gt;SEO Experts&lt;/a&gt; can be engaged on a once off or on going basis depending on your on budget and capabilities. Their site has further information on this, but only a little information on their clients or techniques. This is understandable, to a certain degree, however, having some figures on page rank improvements achieved, and a high level description of actions taken would give better justification for using SEO.&lt;br /&gt;&lt;br /&gt;Bringing in an external, specialist, company to boost your sites ranking in search engines does make a good deal of sense. While it is not the same as advertising, you are looking for the same results. That is, increased brand awareness, and sales.&lt;br /&gt;&lt;br /&gt;Of course, once you've spent your advertising budget, it's gone. Applying SEO and using SEO techniques on your site does have longer lasting effects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6336422536138131992?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6336422536138131992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6336422536138131992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6336422536138131992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6336422536138131992'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/08/search-engine-optimisation.html' title='Search Engine Optimisation'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1715804361456788101</id><published>2008-07-22T14:30:00.005+01:00</published><updated>2008-07-22T20:33:13.930+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Lost in translation - Globalisation Gotchas</title><content type='html'>When we think of Globalisation, we often think of the manufacture and trade of goods. With the advent of the &lt;a href="http://europa.eu/"&gt;European Union&lt;/a&gt; came the more formalised notion of 'the four freedoms' (&lt;a href="http://ec.europa.eu/internal_market/top_layer/index_15_en.htm"&gt;people&lt;/a&gt;, &lt;a href="http://ec.europa.eu/internal_market/top_layer/index_18_en.htm"&gt;goods&lt;/a&gt;, &lt;a href="http://ec.europa.eu/internal_market/top_layer/index_19_en.htm"&gt;services&lt;/a&gt;, &lt;a href="http://ec.europa.eu/internal_market/top_layer/index_42_en.htm"&gt;capital&lt;/a&gt;) of the internal market. People, goods and capital is fairly tangible, but what is interesting from an IT point of view is globalisation (or free movement) of services. It's not just fashionable to outsource your call centre department, but also development effort.&lt;br /&gt;&lt;br /&gt;High speed internet aspect takes care of one of the challenges of communication, but what about the language itself? When outsourcing, how does one ensure the requirements are communicated correctly. Using online translation tools can go &lt;a href="http://www.jpost.com/servlet/Satellite?cid=1192380743991&amp;amp;pagename=JPost%2FJPArticle%2FShowFull"&gt;horribly wrong&lt;/a&gt;. In this case journalists from Isreal managed to insult a prominent Dutch politician and his mother!&lt;br /&gt;&lt;br /&gt;The top destination for outsourcing is &lt;a href="https://www.cia.gov/library/publications/the-world-factbook/geos/in.html"&gt;India&lt;/a&gt;. India has the world's second largest labour force with             516.4 million (2007 est.), 27% of them involved services (2003 est.). Global consultancy firm PricewaterhouseCoopers has &lt;a href="http://www.pwc.com/extweb/pwcpublications.nsf/docid/244E23BB170A0B69CA25718100075183/$file/IACC_PwCBPOSurvey2005.pdf"&gt;more details&lt;/a&gt;. This is a highly skilled, well educated workforce and though not always needed, &lt;a href="http://www.iaflindia.com/"&gt;Hindi translation&lt;/a&gt;, &lt;a href="http://www.iaflindia.com/"&gt;Punjabi translation&lt;/a&gt; and &lt;a href="http://www.iaflindia.com/"&gt;Urdu translation&lt;/a&gt; services are available. While Hindi is the official language, English enjoys the status of 'subsidiary official language'. Certainly within the services sector there is a &lt;a href="http://www.guardian.co.uk/money/2003/dec/07/internetphonesbroadband.phones"&gt;English language revolution&lt;/a&gt; going on.  Add to that the fact that most of the development languages, and IT infrastructure product documentation, are in English  and there are obvious advantages here.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Outsourcing is no longer just for Fortune 500 companies.  Small and mid-sized firms, as well as busy professionals, can outsource their work to increase their productivity and free time for more important commitments. It's time for the world to take advantage of this revolution.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;a href="http://www.virtualbangalore.com/Ppl/PplVKulkarni.php"&gt;Vivek Kulkarni&lt;/a&gt; (CEO Brickwork India and former IT Secretary, Bangalore)&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Of course this level of outsourcing still requires commitment and a lot of upfront preparation and documentation. A lot of industries are moving away from the heavy weight processes of the 20th century. It will be interesting to see how Agile development methodologies, which put a greater emphasis on communication over documentation, work with distributed development teams, in different timezones. Feel free to share your experiences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1715804361456788101?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1715804361456788101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1715804361456788101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1715804361456788101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1715804361456788101'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/07/lost-in-translation-globalisation.html' title='Lost in translation - Globalisation Gotchas'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3875956475848143560</id><published>2008-07-21T14:33:00.007+01:00</published><updated>2010-03-30T12:21:50.047+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Starting up in a Credit Crunch</title><content type='html'>&lt;a href="http://www.amazon.com/gp/product/1599712741?ie=UTF8&amp;amp;tag=ollentheevent-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1599712741" onclick="javascript:urchinTracker('/outgoing/amazon.com/gobigorgohome');"&gt;&lt;img style="float: left; cursor: pointer;" src="http://ecx.images-amazon.com/images/I/51YtemluH7L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" /&gt;&lt;/a&gt;It is hard enough to come up with a unique business idea, let alone see it through to implementation. One of the big challenges is the cost of getting going, as well as meeting existing financial commitments. Oh, and there's the time commitment too. Statistically, most self employed people work well over 60 hours a week.&lt;br /&gt;&lt;br /&gt;With open source, and development licences, the technology costs in getting started are not significant. The &lt;a href="http://www.oracle.com/technology/index.html"&gt;OTN licence&lt;/a&gt; permits free use of Oracle products while developing an application. Oracle also provides &lt;a href="http://oss.oracle.com/"&gt;Free and Open Source&lt;/a&gt; software products too. Even the Oracle 10g Database can be packaged and distributed in your application for free.&lt;br /&gt;&lt;br /&gt;The BIG cost for a start up is expertise. So, even if the technology stack is free, someone needs to be paid to put a scalable, robust and reliable solution in place. Someone needs to be paid to market and sell the product too.  Finding such resources is tough, finding the money to pay them is tougher.  The author of &lt;a href="http://www.amazon.com/gp/product/1599712741?ie=UTF8&amp;amp;tag=ollentheevent-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1599712741"&gt;Go BIG or Go HOME&lt;/a&gt;, a book about startup strategies, offers a social network dedicated to startups that seeks to make finding resources, and investment, easier.&lt;br /&gt;&lt;br /&gt;As an obvious marketing tie-in, the network is called &lt;a href="http://www.gobignetwork.com/"&gt;Go BIG&lt;/a&gt; where &lt;a href="http://www.gobignetwork.com/small-business-funding/"&gt;Angel Investors&lt;/a&gt; and people looking for &lt;a href="http://www.gobignetwork.com/small-business-funding/"&gt;funding&lt;/a&gt; to grow their business can meet. The member profiles are quite detailed, allowing an &lt;a href="http://www.gobignetwork.com/small-business-funding/"&gt;Angel Investor&lt;/a&gt; to specify exactly what sort of industries, business types, and geographies, they are interested in providing &lt;a href="http://www.gobignetwork.com/small-business-funding/"&gt;venture capital&lt;/a&gt; for. At this point it is worth mentioning the international aspect of &lt;a href="http://www.gobignetwork.com/"&gt;Go BIG&lt;/a&gt;. The network is tailored for &lt;a href="http://www.gobignetwork.com/International.aspx"&gt;11 countries&lt;/a&gt; so far. It's not all about the money though, the network also allows people to get help on business plans, and to promote their own skill sets. So, finding a Flash Developer or  an Accounting Assistant is a bit easier. Just a bit though :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3875956475848143560?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3875956475848143560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3875956475848143560' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3875956475848143560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3875956475848143560'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/07/starting-up-in-credit-crunch.html' title='Starting up in a Credit Crunch'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4895205214257396077</id><published>2008-07-08T22:31:00.005+01:00</published><updated>2008-07-22T20:33:33.959+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Social CRM'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Social CRM Goes Live!</title><content type='html'>Announced at last year's OpenWorld, and previewed at last month's &lt;span class="PRSubHeadingid1siteid0"&gt;Enterprise 2.0 Conference, Oracles' &lt;a href="http://www.oracle.com/applications/social-crm.html"&gt;Social CRM&lt;/a&gt; goes live today at &lt;a href="http://sales.oracle.com/"&gt;http://sales.oracle.com&lt;/a&gt;.  This adds another social network, although quite a unique one, to the Oracle social grid.&lt;br /&gt;&lt;br /&gt;So, how does Social CRM compare to the Oracle social networks and what makes it so special? Let's look at what is in the &lt;a href="http://www.oracle.com/community/index.html"&gt;Oracle Community&lt;/a&gt; already. There are blogs, forums and wikis that bring together people who are i&lt;/span&gt;nterested in Oracle products and technology. They provide the &lt;span style="font-style: italic;"&gt;communication&lt;/span&gt; aspect of collobaration. And, more importantly, it is collobaration around what Oracle sells.&lt;br /&gt;&lt;br /&gt;Social CRM introduces tools to support the &lt;span style="font-style: italic;"&gt;doing&lt;/span&gt; aspect of colloboration. However, it is collobaration around the products and services you sell. The heavy weight, process driven, data entry intensive tools of which we are so familiar with, and still serves a valuable purpose in the enterprise, does not cater for every aspect of how business is done. The human element in selling, in particular, is not easily &lt;a href="http://www.amazon.com/gp/product/0671027034?ie=UTF8&amp;amp;tag=ollentheevent-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0671027034"&gt;modelled&lt;/a&gt;. Social CRM is a small step in the right direction with tools, such as &lt;a href="http://sales.oracle.com/en-us/products/sales_prospector/"&gt;Sales Prospector&lt;/a&gt;, to increase sales and decrease data entry.&lt;br /&gt;&lt;span class="PRSubHeadingid1siteid0"&gt;&lt;br /&gt;My own involvement in Social CRM started in January of this year, looking after the Security and User Provisioning side of the platform. Of course we hadn't even reached code chill before we started work on the next version, so we are still very busy. Watch out for more (&lt;a href="http://sales.oracle.com/en-us/products/sales_campaigns/"&gt;1&lt;/a&gt;, &lt;a href="http://sales.oracle.com/en-us/products/sales_library/"&gt;2&lt;/a&gt;)  later in the year. For me, the most rewarding part of the work is, coincidentally, the collaboration. You see, Social CRM is made possible through &lt;a href="http://www.agilealliance.org/"&gt;Agile software development practices&lt;/a&gt;. It is collaborative from the inside out.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4895205214257396077?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4895205214257396077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4895205214257396077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4895205214257396077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4895205214257396077'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/07/social-crm-goes-live.html' title='Social CRM Goes Live!'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5061911450163350706</id><published>2008-07-07T11:08:00.003+01:00</published><updated>2008-07-12T22:06:25.241+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Oracle Directory Manager and Application Development</title><content type='html'>Oracle Directory Manager is a Java-based tool for administering Oracle Internet Directory (LDAP). The Oracle Directory Manager is the main directory administration tool and it is installed with Oracle Internet Directory.&lt;br /&gt;&lt;br /&gt;When developing applications there is often one or more central LDAP directories for developers to use. When working on a new application it is often necessary to reset entries, test scenarios, etc. However, it is unlikely that everyone's desktop will have the entire OID installation. On my desk alone there are 3 desktop machines, and one laptop and non of them have the full &lt;a href="http://www.oracle.com/technology/products/id_mgmt/index.html"&gt;Identity Management&lt;/a&gt; stack. In fact, the laptop is from when I was with Siebel so, although it was manufactured this century, it has little more than JDeveloper, Thunderbird and Oracle Calendar running on it.&lt;br /&gt;&lt;br /&gt;One easy way to have Oracle Directory Manager on every developer's machine, but not having to install anything else, is to take advantage of the fact that it is a Java application.&lt;br /&gt;&lt;br /&gt;To achieve this, copy some jars (over 15 of them!) from the ORACLE_HOME/jlib and the ORACLE_HOME/ldap/oidadmin directories to a directory on your PC. Let's call it &lt;span style="font-style: italic;"&gt;oidadmin&lt;/span&gt;. Keep the directory structures. The entire list of jars is below. The main class is oracle.ldap.admin.client.NavigatorFrame and there are a few parameters that need to be passed to it. The entire command line is too long to type, let alone remember, so put it all in a file called oidadmin.cmd (when on windows) in the same &lt;span style="font-style: italic;"&gt;oidadmin&lt;/span&gt; directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;oidadmin.cmd&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java&lt;br /&gt;-ms4m&lt;br /&gt;-mx128m&lt;br /&gt;-Dsun.java2d.noddraw=true&lt;br /&gt;-Dsun.java2d.font.DisableAlgorithmicStyles=true&lt;br /&gt;-classpath "./ldap/oidadmin/osdadmin.jar;&lt;br /&gt;      ./jlib/netcfg.jar;&lt;br /&gt;      ./jlib/help4.jar;&lt;br /&gt;      ./jlib/help4-nls.jar;&lt;br /&gt;      ./jlib/oracle_ice.jar;&lt;br /&gt;      ./jlib/jewt4.jar;&lt;br /&gt;      ./jlib/share.jar;&lt;br /&gt;      ./jlib/ewt3.jar;&lt;br /&gt;      ./jlib/ewt3-nls.jar;&lt;br /&gt;      ./jlib/ewtcompat-3_3_15.jar;&lt;br /&gt;      ./jlib/swingall-1_1_1.jar;&lt;br /&gt;      ./jlib/dbui2.jar;&lt;br /&gt;      ./jlib/dbui2-nls.jar;&lt;br /&gt;      ./ldap/oidadmin/oidldap.jar;&lt;br /&gt;      ./ldap/oidadmin/netutil.jar;&lt;br /&gt;      ./jlib/oemlt-9_0_2.jar;&lt;br /&gt;      ./jlib/ldapjclnt10.jar"&lt;br /&gt;oracle.ldap.admin.client.NavigatorFrame&lt;br /&gt;-AdminRoot:Start&lt;br /&gt;-ldap&lt;br /&gt;-AdminRoot:End&lt;br /&gt;-LDAPRoot:Start&lt;br /&gt;-meta&lt;br /&gt;-ohhome&lt;br /&gt;"."&lt;br /&gt;-LDAPRoot:End&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The above is formatted for readability and should be all on the one line. On windows I create shortcut on the desktop to the command file. The final touch is to use the OID Directory Manager icon for the shortcut. Any machine with Java can become a OID Directory Manager machine which I have found really useful for demonstrations and collaboration with developing new solutions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5061911450163350706?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5061911450163350706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5061911450163350706' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5061911450163350706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5061911450163350706'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/07/oracle-directory-manager-and.html' title='Oracle Directory Manager and Application Development'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-7652049703922185773</id><published>2008-05-17T20:17:00.005+01:00</published><updated>2008-05-19T17:14:09.177+01:00</updated><title type='text'>The differences between Cheque and Check</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.victorianweb.org/periodicals/iln/34.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.victorianweb.org/periodicals/iln/34.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Banking is old, very old. The first banks were probably the religious temples of the ancient world, as long as 5,000 years ago. Banks probably predated the invention of money. The current &lt;span style="font-style: italic;"&gt;modern&lt;/span&gt; western  financial products and services can be traced back to the coffee houses of London. Even that was a long time ago. The London Royal Exchange was built in the 16th centuary!&lt;br /&gt;&lt;br /&gt;Although North American and Northern European banking share a similar beginning, as you would expect, down through the years, differences in certain practices have emerged. The most obvious difference is the spelling of Cheque. While the rest of the planet uses the term Check, the Common Wealth Nations, and Ireland, use the less ambiguous spelling.&lt;br /&gt;&lt;br /&gt;Another notable difference between banking practices on opposite sides of the Atlantic is the use of checks. The use of checks in Europe have been in decline over the past 20 years. Only Ireland, Britain and France use checks to any significant degree. With the advent of debit cards and electronic funds transfers the checkbook has all but disappeared. I'm certain there are people working in German banks that have never seen a EuroCheque.&lt;br /&gt;&lt;br /&gt;One of the things I liked about banking in the US, when I was living in Boston, was the range of personalised checkbooks available. The use of personalised checkbooks, for regular retail customers, is one of the nice touches to banking in North America which one does not get in Europe.&lt;br /&gt;&lt;br /&gt;Not only can a customer be issued personlised checkbooks, but they can print their own! The use of &lt;a href="http://www.checkomatic.com/check-on-top-computer-checks-p-113.html"&gt;computer checks&lt;/a&gt; is steadily growing particularly by sole traders &amp;amp; small businesses which would not normally qualify for big business perks with their banks. Computer checks are cost effective and make a really powerful, professional impression. Many of the accounting and money management software packages in use today support the printing of checks. There are also preprinted paper stock available for use with them, such as &lt;a href="http://www.checkomatic.com/quickbooks-checks-c-22.html"&gt;QuickBooks Checks&lt;/a&gt; and &lt;a href="http://www.checkomatic.com/quicken-checks-c-56.html"&gt;Quicken Checks&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Infact, there is a huge business built up around the humble check in the USA. Perhaps this is the reason the check has not disappeared from the North American banking system to the extent it has in Europe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-7652049703922185773?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/7652049703922185773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=7652049703922185773' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7652049703922185773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7652049703922185773'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/05/differences-between-cheque-and-check.html' title='The differences between Cheque and Check'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4111593425085246958</id><published>2008-05-13T13:07:00.013+01:00</published><updated>2008-05-14T01:29:51.862+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>LifeLock - Identity Theft Protection</title><content type='html'>&lt;p class="MsoNormal"&gt;Although the &lt;a href="http://www.ffiec.gov/pdf/authentication_guidance.pdf"&gt;FFIEC advices against it&lt;/a&gt;, many banks, particularly in the USA, still use single factor authentication for most, if not all of their services. The banks do, however, implement a number of pattern and behaviour matching in an attempt to find account fraud and identity theft. This is somewhat reassuring until you realise that bank staff, and government agency employees, have been known to &lt;a href="http://breachblog.com/2008/04/22/boi.aspx"&gt;loose laptops with customer data&lt;/a&gt;, and worse still, not follow their own &lt;a href="http://news.sky.com/skynews/article/0,,30200-1310212,00.html"&gt;corporate policies on data protection&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Fraud and identity theft protection is a consumer, as well as corporate issue. In my day job I focus on the corporate solutions, but there are consumer solutions out there too. One consumer solution of note is &lt;a href="http://www.lifelockpromotioncode.net/"&gt;Life Lock&lt;/a&gt;, which provides some novel approaches to tackling this problem. These include registering, and continually registering, fraud alerts with credit bureaus, monitoring address changes and a $1,000,000 guarantee to cover costs of restoring things to their proper state if a fraud does take place. The fact that they can put an end to getting those annoying pre-approved credit letters may well be the most significant immediate &lt;a href="http://www.lifelockpromotioncode.net/value-of-life-lock.html"&gt;value&lt;/a&gt; for some.&lt;br /&gt;&lt;br /&gt;One of the interesting automated services provided is the &lt;a href="http://www.lifelockpromotioncode.net/blog/"&gt;recently announced eRecon&lt;/a&gt;, which trawls the murky underbelly of the Internet to see if your personal information, or a snippet of same, shows up in the identity thieves’ marketplaces. I guess you could call it the Black Ops of identity theft protection.&lt;br /&gt;&lt;br /&gt;My point is that not only is multi-factor authentication a must, but multi-factor identity protection, both corporate and consumer, is a must in the information age.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4111593425085246958?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4111593425085246958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4111593425085246958' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4111593425085246958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4111593425085246958'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/05/lifelock-identity-theft-protection.html' title='LifeLock - Identity Theft Protection'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2996011714477026822</id><published>2008-05-03T09:51:00.003+01:00</published><updated>2008-05-08T16:58:59.092+01:00</updated><title type='text'>1 Year Old Today!</title><content type='html'>It was exactly one year ago that the SOA Station blog went on air. For me, it is really interesting to look back over the content posted and compare it to what was originally envisaged. What is immediately obvious is the broad range of topics within the SOA subject: Security, Governance, Scalability, Quality &amp;amp; Reliability, and of course Interoperability.&lt;br /&gt;&lt;br /&gt;Over the entire year, according to Google Analytics, the site received 28.11 visits per day. There was a dramatic increase in September when the blog was listed on &lt;a href="http://blogs.oracle.com/"&gt;Oracle Blogs&lt;/a&gt;. Visits per day since then works out as 39.13. Since the beginning of this year, the visits per day is at 51.58. This increase is really encouraging. People are obviously accessing the blog from work as the number of site visits on a Saturday and Sunday are tiny.&lt;br /&gt;&lt;br /&gt;The top content (most number of views) is:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://soastation.blogspot.com/2007/10/sca-diagram-stencil-for-visio.html"&gt; SCA Diagram stencil for Visio&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://soastation.blogspot.com/2007/08/java-iban-check-digit-validation.html"&gt; Java IBAN check digit validation&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://soastation.blogspot.com/2007/08/custom-xslt-functions-in-oracle-bpel.html"&gt; Custom XSLT functions in Oracle BPEL and ESB&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://soastation.blogspot.com/2007/09/oracle-lite-and-soa-suite.html"&gt;Oracle Lite and SOA Suite&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://soastation.blogspot.com/2007/05/jax-ws-jaxb-rock-and-roll.html"&gt; JAX-WS &amp;amp; JAXB rock and roll...&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;One thing that did surprise me was the level of interest in the industry specific functionality, rather than the generic technical content. The &lt;a href="http://soastation.blogspot.com/2007/08/java-iban-check-digit-validation.html"&gt;IBAN Check Digit Validation&lt;/a&gt; article is one of the post popular on the site. I'll certainly look into providing more industry specific content. Suggestions welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2996011714477026822?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2996011714477026822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2996011714477026822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2996011714477026822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2996011714477026822'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/05/1-year-old-today.html' title='1 Year Old Today!'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4701736413092627684</id><published>2008-04-30T22:06:00.005+01:00</published><updated>2008-05-05T09:41:28.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>Running web service clients without a web service</title><content type='html'>One of the challenges with large scale Enterprise Application development is dealing with the dependencies between teams and parts of the system being developed. Despite Agile software development methodologies a waterfall style of producing artifacts can occur. For example, the UI can not be completed because the web services are not built and the web services are not built because the data model is not complete. The data model is not complete because there are outstanding questions that the customer hasn't answered.&lt;br /&gt;&lt;br /&gt;In an ideal world we would all be able to agree the integration interfaces up front and then farm out the development effort so that the UI and Server Side teams can get coding straight away. One way to make this happen is for the UI team to define the WSDL interfaces for the services they plan to invoke. It is good practice for the 'caller' to define the interface where possible.&lt;br /&gt;&lt;br /&gt;The UI team could also go ahead and provide their own simple implementation. Included in this article is some code for a servlet that accepts a SOAP Envelope request and returns a SOAP Envelope response. It uses the element name in the SOAP Body to look up an XML file with the same name in the classpath and then returns the contents. A client can define a WSDL, set the URL for the Servlet as the SOAP address and provide a 'canned' response XML file for each operation. There is also an Enterprise Service Bus (ESB) approach that is outlined as an alternative at the end of the article.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Simple SOAP Servlet&lt;/span&gt;&lt;br /&gt;The servlet uses the JAXP libraries...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DocumentBuilderFactory builderFactory&lt;br /&gt;   = DocumentBuilderFactory.newInstance();&lt;br /&gt;DocumentBuilder builder = null;&lt;br /&gt;&lt;br /&gt;public void init() throws ServletException {&lt;br /&gt;try {&lt;br /&gt; this.builderFactory.setNamespaceAware(true);&lt;br /&gt; this.builder = this.builderFactory.newDocumentBuilder();&lt;br /&gt;} catch (ParserConfigurationException e) {&lt;br /&gt; throw new ServletException("Error initialising servlet", e);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A mechanism to get the SOAP Body from the request is needed. This method is part of that. It is inelegant as getElementsByTagName() just did not work during testing. Probably due to some configuration issue in my environment or codebase. Since the SOAP Envelope might contain a Header element, the Body element may be the second element.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private Element getSOAPBodyElement(Element requestSOAPEnvelope) {&lt;br /&gt;Element firstChild = (Element) requestSOAPEnvelope.getFirstChild();&lt;br /&gt;if (firstChild.getLocalName().equalsIgnoreCase("body")) {&lt;br /&gt; return firstChild;&lt;br /&gt;}&lt;br /&gt;Element secondChild = (Element) firstChild.getNextSibling();&lt;br /&gt;if (secondChild.getLocalName().equalsIgnoreCase("body")) {&lt;br /&gt; return secondChild;&lt;br /&gt;}&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The following method is where the real work is done. Most of the effort is spent on making sure that the request is a SOAP Envelope.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private QName getRequestPayLoadQualifiedName(HttpServletRequest request)&lt;br /&gt;      throws ServletException, IOException&lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt; Document requestXML = this.builder.parse(request.getInputStream());&lt;br /&gt; Element requestSOAPEnvelope = requestXML.getDocumentElement();&lt;br /&gt; if (!requestSOAPEnvelope.getLocalName().equalsIgnoreCase("envelope"))&lt;br /&gt; {&lt;br /&gt;    throw new ServletException(&lt;br /&gt;        "Unable to parse request. Are you sure it is a SOAP Envelope?"&lt;br /&gt;        );&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt; Element requestSOAPBody = this.getSOAPBodyElement(requestSOAPEnvelope);&lt;br /&gt; if (requestSOAPBody == null) {&lt;br /&gt;    throw new ServletException(&lt;br /&gt;        "Unable to parse request. Body element not found. Are you sure it is a SOAP Envelope?"&lt;br /&gt;        );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; Element requestPayload = (Element) requestSOAPBody.getFirstChild();&lt;br /&gt; QName name = new QName(&lt;br /&gt;                requestPayload.getNamespaceURI(),&lt;br /&gt;                requestPayload.getLocalName());&lt;br /&gt; return name;&lt;br /&gt;} catch (SAXException e) {&lt;br /&gt;  throw new ServletException("Unable to parse request. Are you sure it is a SOAP Envelope?", e);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And finally the doPost method which looks up the file and writes the contents to the response stream. Note that due to the use of getResourceAsStream, the XML file is expected to be in the classpath in the same package as the servlet. Also, the response content must be set to text/xml for a SOAP response.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void doPost(HttpServletRequest request,&lt;br /&gt;                 HttpServletResponse response)&lt;br /&gt;   throws IOException, ServletException&lt;br /&gt;{&lt;br /&gt;QName requestPayLoadQualifiedName =&lt;br /&gt;    this.getRequestPayLoadQualifiedName(request);&lt;br /&gt;InputStream responseXML = this.getClass()&lt;br /&gt;    .getResourceAsStream(&lt;br /&gt;        requestPayLoadQualifiedName.getLocalPart() + ".xml");&lt;br /&gt;&lt;br /&gt;if (responseXML == null) {&lt;br /&gt;  throw new ServletException("Unable to find "&lt;br /&gt;              + requestPayLoadQualifiedName.getLocalPart()&lt;br /&gt;              + ".xml in the classpath.");&lt;br /&gt;}&lt;br /&gt;response.setContentType("text/xml");&lt;br /&gt;int respInt = responseXML.read();&lt;br /&gt;while (respInt != -1) {&lt;br /&gt; response.getOutputStream().write(respInt);&lt;br /&gt; respInt = responseXML.read();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;An example of where this could be used is with a Flex front end where the SWF file is host in a web app. The WAR file could be organised as follows:&lt;br /&gt;/MyApplication.SWF (the Flex front end)&lt;br /&gt;/MyApplication.html  (wrapper html which embeds the SWF file)&lt;br /&gt;/MyService.wsdl (WSDL defining the interface for the web service. Has servlet address as endpoint)&lt;br /&gt;/WEB-INF/web.xml (registers the SimpleSOAP class as a servlet)&lt;br /&gt;/WEB-INF/classes/SimpleSOAP.class (the servlet)&lt;br /&gt;/WEB-INF/classes/myOperation.xml (the canned response for a call to 'myOperation')&lt;br /&gt;&lt;br /&gt;The UI development team can now orchestrate their screens, making web service calls to web services that haven't been implemented yet. Once they are implemented, the soap address in the WSDL can change. The above servlet could be further worked on with some XPATH expresssions to map certain combination of parameters to responses. One could make it really sophisticated to follow a sequence like a demonstration script. However, putting all that together takes the pressure of the server side team in delivering the real implementation, doesn't it?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Simple ESB Solution&lt;/span&gt;&lt;br /&gt;Another approach would be to use the Enterprise Service Bus and have routing rules to read responses from files. The ESB approach would also allow for more content based routing allowing for different responses to be given depending on parameters passed at runtime. If the development environment is going to involve an Enterprise Service Bus, then the above servlet approach is best limited to individual developers environment or for simple automated component testing of the UI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4701736413092627684?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4701736413092627684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4701736413092627684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4701736413092627684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4701736413092627684'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/04/running-web-service-clients-without-web.html' title='Running web service clients without a web service'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-13663840348054798</id><published>2008-03-29T14:59:00.002Z</published><updated>2008-05-02T21:48:23.329+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle XE'/><title type='text'>JBoss and Oracle XE</title><content type='html'>JBoss and Oracle XE (Express Edition) make for an interesting, and cost effective, J2EE stack for non-mission critical, small scale, software applications. Getting JBoss and Oracle XE to work together is really straight forward. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Resolve port conflicts&lt;/span&gt;&lt;br /&gt;By default, JBoss and Oracle XE both use port 8080. So, when using JBoss and Oracle XE on the same machine, something has got to give. As one is most likely to be using and interacting with the container more, it might as well be the database that has to adapt. To change the default Oracle XE HTTP Listening port (8080) to 9090 do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start sqlplus (Run SQL Command Line icon in windows)&lt;/li&gt;&lt;li&gt;Enter 'connect / sysdba'&lt;/li&gt;&lt;li&gt;Enter 'exec dbms_xdb.sethttpport(9090);'&lt;/li&gt;&lt;li&gt;Stop and then Start the Oracle XE database&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Note that this does not change the default TNS Listening port 1521, although the short cut (&lt;oraclexe&gt;/app/oracle/product/10.2.0/server/Database_homepage.url) to launch the Database home page will need to be updated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setup DataSource&lt;/span&gt;&lt;br /&gt;The Oracle XE installation comes with a sample HR database. A DataSource in JBoss can be defined for it, but first the Oracle JDBC library needs to be in the JBoss server classpath. Copy ojdbc14.jar from &lt;oraclexe&gt;/app/oracle/product/10.2.0/server/jdbc/lib to &lt;jboss&gt;/server/default/lib. Now the DataSource can be defined. DataSources are 'deployed' in JBoss. Their configuration information is in an XML file with a name that ends in '-ds'.&lt;br /&gt;&lt;br /&gt;In &lt;jboss&gt;/server/default/deploy create a file called oraclexe-ds.xml with the following content:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- The Oracle XE database JCA connection factory config --&gt;&lt;br /&gt;&amp;lt;datasources&gt;&lt;br /&gt;   &amp;lt;local-tx-datasource&gt;&lt;br /&gt;      &amp;lt;!-- The jndi name of the DataSource, it is prefixed with java:/ --&gt;&lt;br /&gt;      &amp;lt;!-- Datasources are not available outside the virtual machine --&gt;&lt;br /&gt;      &amp;lt;jndi-name&gt;OracleXEDS&amp;lt;/jndi-name&gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;connection-url&gt;jdbc:oracle:thin:@127.0.0.1:1521:XE&amp;lt;/connection-url&gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&amp;lt;/driver-class&gt;&lt;br /&gt;      &amp;lt;user-name&gt;hr&amp;lt;/user-name&gt;&lt;br /&gt;      &amp;lt;password&gt;hr&amp;lt;/password&gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;min-pool-size&gt;5&amp;lt;/min-pool-size&gt;&lt;br /&gt;      &amp;lt;max-pool-size&gt;100&amp;lt;/max-pool-size&gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;!-- Checks the Oracle error codes and messages for fatal errors--&gt;&lt;br /&gt;      &amp;lt;exception-sorter-class-name&gt;org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter&amp;lt;/exception-sorter-class-name&gt;&lt;br /&gt;   &amp;lt;/local-tx-datasource&gt;&lt;br /&gt;&amp;lt;/datasources&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Remember that in &lt;a href="http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25610/toc.htm#CHDEDICH"&gt;Unlocking the Sample User Account&lt;/a&gt; step in Oracle XE Getting Started Guide, the HR account password is set to 'hr'. The console for JBoss should display something like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=OracleXEDS' to JNDI name 'java:OracleXEDS'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Testing DataSource witha JDBC client&lt;/span&gt;&lt;br /&gt;A simple JSP, in an expanded WebApp, can be used to test the DataSource. In &lt;jboss&gt;/server/default/deploy create a directory called 'jdbcclient.war'. In that directory create a file called 'client.jsp' and add the following content:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;%@page contentType="text/html"&lt;br /&gt; import="java.util.*,javax.naming.*,javax.sql.DataSource,java.sql.*"&lt;br /&gt; %&gt;&lt;br /&gt; &amp;lt;%&lt;br /&gt;   &lt;br /&gt;  DataSource ds = null;&lt;br /&gt;  Connection con = null; &lt;br /&gt;  PreparedStatement pr = null; &lt;br /&gt;  InitialContext ic; &lt;br /&gt;  try {&lt;br /&gt;  ic = new InitialContext();&lt;br /&gt;  ds = (DataSource)ic.lookup( "java:/OracleXEDS" );&lt;br /&gt;  con = ds.getConnection(); &lt;br /&gt;  pr = con.prepareStatement("SELECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEES");&lt;br /&gt;  ResultSet rs = pr.executeQuery();&lt;br /&gt;  while (rs.next()) {&lt;br /&gt;  out.println("&lt;br&gt; " +rs.getString("EMPLOYEE_ID") + " | " +rs.getString("LAST_NAME")); &lt;br /&gt;  }&lt;br /&gt;  rs.close();&lt;br /&gt;  pr.close();&lt;br /&gt;  }catch(Exception e){&lt;br /&gt;  out.println("Exception thrown " +e); &lt;br /&gt;  }finally{&lt;br /&gt;  if(con != null){&lt;br /&gt;  con.close();&lt;br /&gt; }      &lt;br /&gt;}&lt;br /&gt;%&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Open your browser and point it to http://localhost:8080/jdbcclient/client.jsp. A list of employee numbers and last names get displayed. This 'jdbcclient' approach is used in the JBoss DataSource tutorials.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-13663840348054798?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/13663840348054798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=13663840348054798' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/13663840348054798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/13663840348054798'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/03/jboss-and-oracle-xe.html' title='JBoss and Oracle XE'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-7848408925075415293</id><published>2008-02-20T00:36:00.004Z</published><updated>2008-02-20T01:18:12.608Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Access Manager'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA Governance'/><title type='text'>Changing post-installation configuration for Oracle Access Manager Identity Server</title><content type='html'>&lt;span class="bodycopy"&gt;Oracle Access Manager is an enterprise scale solution for both centralized identity management and access control. &lt;/span&gt;&lt;span class="bodycopy"&gt;It integrates out-of-the-box with all leading directory servers, application servers, web servers, and enterprise applications. &lt;/span&gt;&lt;span class="bodycopy"&gt;By protecting resources at the point of access and delegating authentication and authorization decisions to a central authority, Access Manager helps secure web, J2EE, and enterprise applications. It also provides self service administration functionality, complying with the authentication and authorization policies that are defined centrally. Not only that, Access Manager has API's for customisation and integration, making it possible address a number of functional and non-functional requirements for security solutions in different industries. However, it's most topical feature is it's Single Sign-on capabilities. Making it a very attractive solution for &lt;a href="http://download-uk.oracle.com/docs/cd/B31017_01/core.1013/b28939.pdf"&gt;enterprise deployment&lt;/a&gt; of SOA software solutions.&lt;br /&gt;&lt;br /&gt;As you would expect with software that does so much, there is a lot involved in setting up Oracle Access Manager. Although it is not very complicated, there are a significant number of steps which have to be done right. Thankfully, these steps are set out in an Oracle By Example series &lt;/span&gt;which provides step-by-step instructions                      on how to perform a variety of tasks by &lt;a href="http://www.oracle.com/technology/obe/fusion_middleware/im1014/ovd-oam/index.html"&gt;integrating Oracle                      Virtual Directory with Oracle Access Manager&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When setting up Identity Server and Web Pass there is a post-installation configuration sequence which is really straight forward. However, if you make a mistake, which is not addressed before the setup completes, how do you change these settings? Here's how...&lt;br /&gt;&lt;br /&gt;The post-installation configuration process involves a number of screens. The status of the configuration is maintained by the Identity Server in identity/oblix/config/setup.xml. To trick the Identity Server to take you through the post-installation configuration process again when you click on the 'Identity System Console', you have to edit this file.&lt;br /&gt;&lt;br /&gt;Simply comment out the 'status' NameValPair element. Save the file and restart both the Identity Server and HTTP Server. Then, go back over the &lt;a href="http://www.oracle.com/technology/obe/fusion_middleware/im1014/ovd-oam/oam-ovd/install_oam/install_oam.htm#t4"&gt;Postinstallation Configuration for Oracle Access Manager Identity Server&lt;/a&gt; as normal. &lt;i&gt;Voilà!&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-7848408925075415293?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/7848408925075415293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=7848408925075415293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7848408925075415293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7848408925075415293'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/02/changing-post-installation.html' title='Changing post-installation configuration for Oracle Access Manager Identity Server'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6728425621199133376</id><published>2008-01-25T14:24:00.001Z</published><updated>2008-07-22T20:34:02.710+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Practices of an Agile Developer</title><content type='html'>&lt;a href="http://www.amazon.com/dp/097451408X?tag=ollentheevent-20&amp;amp;camp=1406&amp;amp;creative=6394&amp;amp;linkCode=as1&amp;amp;creativeASIN=097451408X&amp;amp;adid=0S685G13BX2RXS25EVZS&amp;amp;" onClick="javascript:urchinTracker('/outgoing/amazon.com/pragmaticprogrammer');"&gt;&lt;br /&gt;&lt;img style="float: right; cursor: pointer;" src="http://ecx.images-amazon.com/images/I/51YRKG4QX8L._AA240_.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Title: Practices of an Agile Developer&lt;/td&gt;&lt;br /&gt;Authors: Venkat Subramaniam &amp;amp; Andy Hunt&lt;br /&gt;Publisher: Pragmatic Bookshelf&lt;br /&gt;&lt;br /&gt;If you are looking for a step by step guide on running your software development projects, THIS IS NOT THE BOOK! This book, published in 2006 but still very valid today, collects the personal habits, ideas, and approaches of successful agile software developers and presents them in a series of short, easy-to-digest tips. There are 45 tips in all, covering a broad range of subjects such as the development process , incremental learning, etc. The format taken for each tip is quite interesting. As well as the indepth explanation and case study references, each tip has:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A taunt from the devil. That voice in your head that seems perfectly reasonable, but is infact taking you to a world of pain in the future.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Advice from your guardian angel. The counter-argument to the devil's shenanigans.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A 'What it feels like' section. Nice short description of what happens when the tip is applied.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A 'Keeping your balance' section. This really reflects the Agile Development philosophy of adapting to the circumstances.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The authors have taken this approach out of the firm belief that the most important part of software development takes place in the developers head, so there is little focus on tools. However, they do provide a little sidebar called the Agile Toolkit which outlines the uses for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wiki&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Version Control&lt;/li&gt;&lt;li&gt;Unit Testing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Build Automation &amp;amp; Continuous Integration&lt;/li&gt;&lt;/ul&gt;These tools support Agile Development, which the book describes as follows:&lt;br /&gt;Agile Development uses &lt;span style="font-weight: bold;"&gt;feedback&lt;/span&gt; to make &lt;span style="font-weight: bold;"&gt;constant&lt;/span&gt; adjustments in a highly &lt;span style="font-weight: bold;"&gt;collaborative&lt;/span&gt; environment. Emphasis is mine, but I think this is a very good definition.&lt;br /&gt;&lt;br /&gt;To summarise, &lt;a href="http://www.amazon.com/dp/097451408X?tag=ollentheevent-20&amp;amp;camp=1406&amp;amp;creative=6394&amp;amp;linkCode=as1&amp;amp;creativeASIN=097451408X&amp;amp;adid=0S685G13BX2RXS25EVZS&amp;amp;" onClick="javascript:urchinTracker('/outgoing/amazon.com/pragmaticprogrammer');"&gt;Practices of an Agile Developer&lt;/a&gt; provides pragmatic ways of approaching the development process and your personal coding techniques as well as your own attitudes,  issues with working on a team, and how to best manage your learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6728425621199133376?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6728425621199133376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6728425621199133376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6728425621199133376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6728425621199133376'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/01/practices-of-agile-developer.html' title='Practices of an Agile Developer'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1259574060879591055</id><published>2008-01-18T21:36:00.000Z</published><updated>2008-01-18T22:13:29.015Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle XE'/><title type='text'>Oracle XE default port and windows firewall</title><content type='html'>&lt;a href="http://soastation.blogspot.com/2008/01/announcing-technology-preview-for-soa.html"&gt;SOA Suite 11g Technology Preview 3&lt;/a&gt; needs an Oracle database and &lt;a href="http://www.oracle.com/technology/products/database/xe/index.html"&gt;Oracle XE&lt;/a&gt; (the free database edition) is ideal as the installation is so straight forward. By default the installation sets the database listener port to 1521 and the http server port to 8080. If these ports are already in use on your machine, the installer will prompt you to specify an available port number.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QdWe1hGsnN4/R5Efmd6c37I/AAAAAAAAABg/udTMEJ1Q0go/s1600-h/OracleXE_ChooseDatabaseListenerPort.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QdWe1hGsnN4/R5Efmd6c37I/AAAAAAAAABg/udTMEJ1Q0go/s320/OracleXE_ChooseDatabaseListenerPort.PNG" alt="" id="BLOGGER_PHOTO_ID_5156937794041208754" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Figure 1. Choosing another port number.  This dialog box only gets displayed during installation if port is in use or blocked by firewall.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;On a Windows XP installation the Oracle XE installer reports that a port is in use if that port number is being blocked by the firewall. Disabling the firewall is generally not a good idea as, along with anti-virus software, it provides a crucial defence for your machine, network and business.&lt;br /&gt;&lt;br /&gt;The windows firewall settings can be found in the Control Panel. Just add the default port numbers to the firewall exception list. Once that is done, one can switch back to the 'Choose Port' dialog, put the default value in and continue with the Oracle XE installation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QdWe1hGsnN4/R5EhTd6c38I/AAAAAAAAABo/K3nGHM7GOHU/s1600-h/WindowsFirewallExceptions.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QdWe1hGsnN4/R5EhTd6c38I/AAAAAAAAABo/K3nGHM7GOHU/s320/WindowsFirewallExceptions.PNG" alt="" id="BLOGGER_PHOTO_ID_5156939666646949826" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Figure 2. Keep the firewall 'On' and go to the Exceptions list.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QdWe1hGsnN4/R5Eift6c39I/AAAAAAAAABw/D6DSKdXUQK8/s1600-h/WindowsFirewallExceptionsAddXEPort.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QdWe1hGsnN4/R5Eift6c39I/AAAAAAAAABw/D6DSKdXUQK8/s320/WindowsFirewallExceptionsAddXEPort.PNG" alt="" id="BLOGGER_PHOTO_ID_5156940976611975122" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Figure 3. Adding the Oracle XE port 1521 to the Exceptions list.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1259574060879591055?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1259574060879591055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1259574060879591055' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1259574060879591055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1259574060879591055'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/01/oracle-xe-default-port-and-windows.html' title='Oracle XE default port and windows firewall'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QdWe1hGsnN4/R5Efmd6c37I/AAAAAAAAABg/udTMEJ1Q0go/s72-c/OracleXE_ChooseDatabaseListenerPort.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4280958415095338290</id><published>2008-01-15T11:07:00.000Z</published><updated>2008-01-15T11:27:08.215Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA Governance'/><title type='text'>Securing SOA</title><content type='html'>A recent white paper by Marc Chanliau, Oracle Fusion Middleware Product Management, on Web Services Security &lt;span class="837390507-15012008"&gt;is now available on OTN. The &lt;a href="http://www.oracle.com/technology/products/webservices_manager/pdf/Oracle-SOA-security-whitepaper-Jan08.pdf"&gt;What is required to secure SOA&lt;/a&gt; white paper gives a clear overview of the security requirements for services and how these requirements, with corresponding 'standards', have evolved.&lt;br /&gt;&lt;br /&gt;In his paper, Marc discusses transport layer as well as application layer security for services. He also outlines the role of the many security related standards, technologies and tools out there. The approach taken shows how and where they compliment or overlap. Such topics include:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="837390507-15012008"&gt;Confidentiality, Integrity, Authenticity: XML Encryption, XML Signature.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Message-Level Security: WS-Security.&lt;/li&gt;&lt;li&gt;Secure Message Delivery: WS-Addressing, WS-ReliableMessaging.&lt;/li&gt;&lt;li&gt;Metadata: WS-Policy, WS-SecurityPolicy.&lt;/li&gt;&lt;li&gt;Trust Management: SAML, WS-Trust, WS-SecureConversation, WSFederation.&lt;span class="837390507-15012008"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="837390507-15012008"&gt;Public Key Infrastructure: PKCS, PKIX, XKMS&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="837390507-15012008"&gt;Every web services developer should have an understanding of these concepts.  &lt;/span&gt;&lt;span class="837390507-15012008"&gt;I highly recommend this document as a basic primer in web services security.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4280958415095338290?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4280958415095338290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4280958415095338290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4280958415095338290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4280958415095338290'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/01/securing-soa.html' title='Securing SOA'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4216220567867519520</id><published>2008-01-03T08:48:00.000Z</published><updated>2008-01-03T09:10:03.986Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA Suite'/><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper'/><title type='text'>Announcing: Technology Preview for SOA Suite 11g</title><content type='html'>&lt;p class="MsoNormal"&gt;Within the past week the 3rd technology preview of JDeveloper 11g was made available on the Oracle Technology Network (OTN) website. For me, the most significant aspect of this preview is that it includes a preview of the long awaited SOA Suite 11g which supports the &lt;a href="http://www.osoa.org/display/Main/Service+Component+Architecture+Home"&gt;Service Component Architecture&lt;/a&gt; (SCA) specification. This Technology Preview release of Oracle SOA Suite 11g showcases the support for SCA through the new composite assembly editor in JDeveloper as well as a unified service engine foundation for the full set of SOA Suite components.&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The SOA Suite 11g software is available within the JDeveloper 11g environment – yes, that’s right!  You only install JDeveloper and you also get the SOA Suite server side for deploying your 11g composite applications!  &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Go to OTN for instructions and details for the &lt;a href="http://www.oracle.com/technology/products/ias/bpel/techpreview/index.html"&gt;SOA Suite 11g Technology Preview&lt;/a&gt;. Be sure to read the &lt;a href="http://www.oracle.com/technology/products/ias/bpel/techpreview/soa11g_installation_tp3.pdf"&gt;Quick Start &amp;amp; Installation Guide&lt;/a&gt; and remember that you will need an Oracle database installed. This one is definitely worth taking for a test drive!&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/8670942274168320118-4216220567867519520?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4216220567867519520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4216220567867519520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4216220567867519520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4216220567867519520'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2008/01/announcing-technology-preview-for-soa.html' title='Announcing: Technology Preview for SOA Suite 11g'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6908959422095628478</id><published>2007-11-27T20:20:00.000Z</published><updated>2007-12-05T23:24:34.772Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper'/><title type='text'>JAX-WS Handlers</title><content type='html'>Web service handlers are not a new concept. One obvious issue with developing a web service is catering for common behaviour. If each operation requires the same set of services, such as security or logging, how do you provide those services? A web service handler is the solution for both common client-side as well as server-side behaviour. Handlers allow you to process SOAP messages before and after the message is sent through the network.&lt;br /&gt;&lt;br /&gt;Web service handlers are a part of the JAX-RPC specification, and the JAX-WS specification caters for the same concept, but in a slightly different way. There are some &lt;a href="http://www.google.com/search?q=JAX-WS+handler+examples"&gt;handler examples on the net&lt;/a&gt; but most just deal with logging the request and response. This article will introduce something a bit more complicated, putting a &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service"&gt;Software As A Service&lt;/a&gt; handler on the &lt;a href="http://soastation.blogspot.com/2007/05/jax-ws-jaxb-rock-and-roll.html"&gt;Dice web service&lt;/a&gt;. For an overview of JAX-WS handler infrastructure, as well as the difference between SOAPHandler and LogicalHandler see the excellent &lt;a href="https://jax-ws.dev.java.net/articles/handlers_introduction.html"&gt;Handlers Introduction&lt;/a&gt; on java.net.&lt;br /&gt;&lt;br /&gt;In this Dice SAAS example &lt;a href="http://www.oracle.com/technology/products/jdev/11/index.html"&gt;JDeveloper 11g Technology Preview 2&lt;/a&gt; is used. It supports JAX-WS and has an embedded OC4J server for running the web service. To get started, &lt;a href="http://soastation.googlepages.com/DiceHandler.zip"&gt;download the Dice project&lt;/a&gt;, which is ready to go with the annotated web service code and add it to your JDev workspace. Details about the Dice web service and how it is constructed can be found in a &lt;a href="http://soastation.blogspot.com/2007/05/jax-ws-jaxb-rock-and-roll.html"&gt;previous article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://soastation.googlepages.com/JDEV11_LaunchTestWebService.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 445px;" src="http://soastation.googlepages.com/JDEV11_LaunchTestWebService.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first thing to do is test that the web service works in your environment. To do this launch the Test Web Service utility by right clicking on the Dice web service in the Application Navigator.&lt;br /&gt;&lt;br /&gt;This will start the embedded OC4J server, deploy the web service and launch the HTTP Analyzer with the WSDL for the Dice web service loaded. In the SOAP Structure panel  enter a number of sides for the Die and press the Send Request button. Of course you can choose to add more Die by clicking on the + symbol beside the die: Array, or editing the request in the HTTP Content panel.&lt;br /&gt;&lt;br /&gt;After pressing the Send Request button you should see the response showing each Die and their value after rolling.&lt;br /&gt;&lt;br /&gt;Once you have that working you can move on to writing a handler class and configure the web service to use it. In this example, the SOAP handler class will use resource injection (i.e. @Resource annotation and environment entry elements) for initialisation parameters rather than using the init-params element in the deployment descriptor. This is a little emphasised difference between JAX-RPC and JAX-WS.&lt;br /&gt;&lt;br /&gt;There is one more download to get for this example, the handler class and the handler chain descriptor which refers to it. A handler chain defines a set of handlers that should be used for the web service. The web service implementation will have an annotation stating where the handler chain descriptor file is. Extract these &lt;a href="http://soastation.googlepages.com/DiceHandlerAdditional.zip"&gt;two files &lt;/a&gt;to the project. To use them add the following to the Dice.java, just after the @WebService annotation:&lt;br /&gt;&lt;blockquote&gt;@HandlerChain(file = "DiceService-HandlerChain.xml")&lt;/blockquote&gt;Note that you will need to import javax.jws.HandlerChain.&lt;br /&gt;&lt;br /&gt;The SaaSServerHandler class in this case checks that the calling client is allowed to invoke the web service by looking in the SOAP header for a 'key' element with a namespace of urn:soastation:saas. It will also check that the value matches a 'ValidKeyValue' environment entry in the web app deployment descriptor. You could further modify the handler to only allow a single Die element in the SOAP envelope if no valid key is provided. That is, a client with the key can use multiple Die while a client without, such as a guest or demonstration client can only use one. Alternatively you could keep track of registered keys and usage. The software as a service options are endless.&lt;br /&gt;&lt;br /&gt;Back to the example, looking at the SaaSServerHandler the handleMessage method checks if the message is inbound (request coming in) or outbound (response going out). If the handler was being used for a web service client the outbound message would be the request being sent and the inbound message would be the response beng received. In our example we are interested in the inbound message because we are expecting a particular element. Note that the handler class has a instance variable called saasKeyValue which is set be the 'ValidKeyValue' environment entry. To set this, edit the web.xml and add the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &amp;lt;env-entry&gt;&lt;br /&gt;     e&amp;lt;nv-entry-name&gt;ValidKeyValue&amp;lt;/env-entry-name&gt;&lt;br /&gt;     &amp;lt;env-entry-type&gt;java.lang.String&amp;lt;/env-entry-type&gt;&lt;br /&gt;     &amp;lt;env-entry-value&gt;soastation&amp;lt;/env-entry-value&gt;&lt;br /&gt; &amp;lt;/env-entry&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Test the web service as before. You should get the following fault: &lt;blockquote&gt;javax.xml.ws.WebServiceException: Invalid service key in SOAP Header. Expecting {urn:soastation:saas}key&lt;/blockquote&gt;&lt;br /&gt;Now test it again, but add the required element to the SOAP header. To do this edit the request in the HTTP Content tab. The request should look like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&gt;&lt;br /&gt;  &amp;lt;soap:Header&gt;&lt;br /&gt;     &amp;lt;saas:key xmlns:saas="urn:soastation:saas"&gt;soastation&amp;lt;/saas:key&gt;&lt;br /&gt;  &amp;lt;/soap:Header&gt;&lt;br /&gt;  &amp;lt;soap:Body xmlns:ns1="http://jaxwsdice.soastation/"&gt;&lt;br /&gt;     &amp;lt;ns1:roll&gt;&lt;br /&gt;        &amp;lt;die sides="12"/&gt;&lt;br /&gt;     &amp;lt;/ns1:roll&gt;&lt;br /&gt;  &amp;lt;/soap:Body&gt;&lt;br /&gt;&amp;lt;/soap:Envelope&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The corresponding result should be the same as when you originally tested the web service before adding the handler. If so, you have successfully implemented the soap handler.&lt;br /&gt;&lt;br /&gt;This article discussed how to implement a server side JAX-WS SOAP Handler using the second technology preview of JDeveloper. It has provided code examples of how the handler concept work, including externalising properties in the environment entry elements. Also mentioned were ideas for further development such as reducing the capabilities for 'guest' clients. There really is a lot one can do with web service handlers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6908959422095628478?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6908959422095628478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6908959422095628478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6908959422095628478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6908959422095628478'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/11/jax-ws-handlers.html' title='JAX-WS Handlers'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-8670767685906224658</id><published>2007-11-13T10:44:00.000Z</published><updated>2007-11-13T11:08:28.549Z</updated><title type='text'>Making things go faster — but not worse</title><content type='html'>At last! A software development manifesto for all of us! Martha Stewart provides some top tips for success in the Autumn edition of wired magazine's &lt;a href="http://www.wired.com/culture/lifestyle/magazine/15-08/ff_howto"&gt;How To Guide&lt;/a&gt;. Now, whether you are Agile, Extreme, or recovering from &lt;a href="http://www.catb.org/jargon/html/C/COBOL-fingers.html"&gt;COBOL Fingers&lt;/a&gt; you can huddle with the masses under the 'Making things go faster - but not worse' banner.&lt;br /&gt;&lt;br /&gt;Of course Martha is not a patch on &lt;a href="http://www.maryfitzgeraldpr.ie/news/news37.html"&gt;The Toilet Roll Lady&lt;/a&gt; who inspired a whole generation of scientists, engineers and public relation gurus. Yes folks, Mary 'Make and Do' has a &lt;a href="http://www.maryfitzgeraldpr.ie/dvd/"&gt;DVD&lt;/a&gt; out to capture the nostalgia of yesteryear. Ideal Christmas present for the toilet roll collector in your family.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-8670767685906224658?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/8670767685906224658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=8670767685906224658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8670767685906224658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8670767685906224658'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/11/making-things-go-faster-but-not-worse.html' title='Making things go faster — but not worse'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1175165267505817942</id><published>2007-11-12T14:10:00.000Z</published><updated>2007-11-12T14:35:34.649Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper'/><title type='text'>trailing block elements must have an id attribute</title><content type='html'>&lt;span class="jive-subject"&gt;A couple of weeks back some colleagues working on a POC came across this runtime error when invoking a web service through a generated web service proxy client: &lt;blockquote&gt;trailing block elements must have an id attribute&lt;/blockquote&gt;&lt;br /&gt;This exception was being thrown within the web service proxy client when parsing the response from the web service. Using HttpAnalyzer in JDeveloper (versions 10.1.3.1 &amp;amp; 10.1.3.2 were used) we could see that the request was being sent and a response was being received, so clearly nothing wrong with the web service being invoked. Or so we thought...&lt;br /&gt;&lt;br /&gt;It turned out that the published WSDL &amp;amp; XSD and the web service implementation were not matching. The XSD for an element in the response said that Address had a maxOccurs="1" however, the web service implementation was returning multiple Address elements. The web service proxy client is generated from the WSDL &amp;amp; XSD so it is only expecting one Address element in the response stream, hence the error at runtime.&lt;br /&gt;&lt;br /&gt;We had to double check which was correct, and a quick check through documentation showed that the schema had not been updated when the object model had changed. Once that was determined, it was straight forward to correct the schema entry, maxOccurs="unbounded", and regenerate the web service proxy client.&lt;br /&gt;&lt;br /&gt;So, if you get this obscure '&lt;/span&gt;&lt;span class="jive-subject"&gt;trailing block elements must have an id attribute' error message at runtime double check that the published interfaces (WSDL &amp;amp; XSD) match the implementation.&lt;/span&gt;&lt;br /&gt;&lt;span class="jive-subject"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1175165267505817942?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1175165267505817942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1175165267505817942' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1175165267505817942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1175165267505817942'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/11/trailing-block-elements-must-have-id.html' title='trailing block elements must have an id attribute'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-218029282001259617</id><published>2007-10-05T11:55:00.000+01:00</published><updated>2007-10-08T17:18:22.921+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCA'/><title type='text'>SCA Diagram stencil for Visio</title><content type='html'>A visual representation of an SCA composite is a crucial part of composite documentation. Many diagrams are based on section &lt;span style="font-style: italic;"&gt;1.2.1 Diagram used to Represent SCA Artifacts&lt;/span&gt; in the &lt;a href="http://www.osoa.org/display/Main/Service+Component+Architecture+Specifications"&gt;SCA Assembly Model Specification&lt;/a&gt;. Also worth checking out is a simple, but very useful, &lt;a href="http://wiki.apache.org/ws-data/attachments/Tuscany%282f%29SCADiagram/attachments/sca.htm"&gt;description of SCA parts&lt;/a&gt; from the Tuscany project.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://soastation.googlepages.com/SCACompositeScreenShot.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://soastation.googlepages.com/SCACompositeScreenShot.GIF" alt="" border="0" /&gt;&lt;/a&gt;Since I could not find one, after about 10 minutes of looking, I decided to put together a &lt;a href="http://soastation.googlepages.com/SCAComposite.vss"&gt;Visio stencil for SCA composite diagrams&lt;/a&gt; which you are free to use. Use the basic Visio connectors to provide links between services, components, references etc. Obviously you can add more service and references to components or composites as you require.&lt;br /&gt;&lt;br /&gt;As usual, feedback is welcome, so let me know what you think and if there are any improvements you would suggest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-218029282001259617?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/218029282001259617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=218029282001259617' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/218029282001259617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/218029282001259617'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/10/sca-diagram-stencil-for-visio.html' title='SCA Diagram stencil for Visio'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-3413088930617596852</id><published>2007-09-25T11:05:00.000+01:00</published><updated>2007-09-25T11:09:22.857+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA Governance'/><title type='text'>SOA Governance isn't about technology either...</title><content type='html'>&lt;a href="http://www.uk.capgemini.com/news/bios/steve_jones/"&gt;Steve Jones&lt;/a&gt; summarises a few of the points from a recent &lt;a href="http://icsoc.org/"&gt;ICSOC 2007&lt;/a&gt; debate on SOA Governance and mentions some enforcement ideas in his recent &lt;a href="http://service-architecture.blogspot.com/2007/09/soa-governance-isnt-about-technology.html#links"&gt;Service Architecture - SOA: SOA Governance isn't about technology either...&lt;/a&gt; article. He makes a good point about people and process.&lt;br /&gt;&lt;br /&gt;In the same way that the &lt;a href="http://www.rsa.ie/PUBLICATIONS/upload/File/ROTR_2007.pdf"&gt;Rules of the Road&lt;/a&gt; is not about what car you drive but about your behaviour and the behaviour of other road users. The reason we have Rules of the Road is because we know, and people recognise, the cause and effect of accidents as well as traffic chaos.&lt;br /&gt;&lt;br /&gt;Highlighting SOA anti-patterns (e.g. &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-antipatterns/"&gt;IBM Article&lt;/a&gt;, &lt;a href="http://www.infoq.com/articles/SOA-anti-patterns"&gt;SOA anti-patterns book&lt;/a&gt;) is a good start in bringing to people's attention poor 'driver behaviour'. However, as governance is really a business, rather than technical issue, and the business should be the 'driver', we also need a higher level exposition (ala &lt;a href="http://www.whomovedmycheese.com/"&gt;Who moved my cheese?&lt;/a&gt;) of good business practice around 'doing IT right'. Any volunteers?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-3413088930617596852?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/3413088930617596852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=3413088930617596852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3413088930617596852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/3413088930617596852'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/09/soa-governance-isnt-about-technology.html' title='SOA Governance isn&apos;t about technology either...'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2614437323075782577</id><published>2007-09-20T12:06:00.000+01:00</published><updated>2007-09-19T12:23:15.934+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle BPEL'/><title type='text'>How to find BPEL Process Manager version</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://soastation.googlepages.com/BPEL_PM_Version_Number.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 424px;" src="http://soastation.googlepages.com/BPEL_PM_Version_Number.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One can see the build version in the 'Manage BPEL Domain' section of the 'BPEL Control' web app (AKA BPELConsole). In the above screen snippet the version is 10.1.3.3.0.&lt;br /&gt;&lt;br /&gt;This information is also available on the top line of the log files in $ORACLE_HOME/bpel/system/logs so you can still get the version info if the BPELConsole is inaccessible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2614437323075782577?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2614437323075782577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2614437323075782577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2614437323075782577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2614437323075782577'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/09/how-to-find-bpel-process-manager.html' title='How to find BPEL Process Manager version'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-7347288109104772165</id><published>2007-09-19T11:42:00.000+01:00</published><updated>2007-09-19T11:45:33.789+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='PSR'/><title type='text'>Right sizing the QA environment</title><content type='html'>Although clearly embarrassing for Canada Bell the QA and User Acceptance environment for their &lt;a href="http://www.canada.com/montrealgazette/news/story.html?id=4785fdb4-38d7-4272-bce0-e9d813f0ca6a"&gt;Solo discount ad campaign&lt;/a&gt; did not match (i.e. literally reflect in scale) the production environment. This is something that happens in IT too, a lot more often than it should. I have come across a number of banking system implementation projects over the years that do not QA on an environment reflecting production. These are simple things to get right:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the same network load balancers&lt;/li&gt;&lt;li&gt;Use the same cluster configuration&lt;/li&gt;&lt;li&gt;Use the same data&lt;/li&gt;&lt;/ul&gt;The latter criterion obviously requires a lot of effort, particularly when implementing new functionality. High volumes of data and concurrent users is not just for PSR testing! It is an over simplification, but PSR is there to tell you about capacity not quality.&lt;br /&gt;&lt;br /&gt;Thankfully, most of the banks (big and small) I have worked with have put in place a 'pre production' environment which allows you to work with a copy of real data which may only be a week or two old. To not do so is really naive and in the long run is asking for trouble. It's worth the effort to find issues with quality before your customers tell you about it when they come in to close their accounts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-7347288109104772165?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/7347288109104772165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=7347288109104772165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7347288109104772165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7347288109104772165'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/09/right-sizing-qa-environment.html' title='Right sizing the QA environment'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2479455329439617707</id><published>2007-09-18T11:59:00.000+01:00</published><updated>2007-09-18T12:13:23.893+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Lite'/><title type='text'>Embedded Oracle on OTN TechCasts</title><content type='html'>At about the same time I was putting together an article on &lt;a href="http://soastation.blogspot.com/2007/09/oracle-lite-and-soa-suite.html"&gt;Oracle Lite and the SOA Suite&lt;/a&gt; there was an &lt;a href="http://www.oracle.com/technology/syndication/techcasts/index.html"&gt;OTN TechCast&lt;/a&gt; published where Justin Kestelyn talks with Mike Olson, VP Embedded Technologies at Oracle. Mike was formerly the CEO of &lt;a href="http://www.oracle.com/sleepycat/index.html"&gt;Sleepycat Software Inc.&lt;/a&gt; which was acquired by Oracle in 2006. In this discussion he gives a great overview of the range of embedded product options from Oracle.&lt;br /&gt;&lt;br /&gt;Press the play button to listen to &lt;a href="http://feeds.feedburner.com/%7Er/OTN_TechCasts/%7E3/156739526/5914850.mp3"&gt;Focus on Embedded Technologies: Embedded Oracle&lt;/a&gt;&lt;br /&gt;&lt;embed src="http://www.odeo.com/flash/audio_player_standard_gray.swf" quality="high" allowscriptaccess="always" wmode="transparent" type="application/x-shockwave-flash" flashvars="valid_sample_rate=true&amp;amp;external_url=http://feeds.feedburner.com/~r/OTN_TechCasts/~3/156739526/5914850.mp3" pluginspage="http://www.macromedia.com/go/getflashplayer" height="52" width="300"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2479455329439617707?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2479455329439617707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2479455329439617707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2479455329439617707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2479455329439617707'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/09/embedded-oracle-on-otn-techcasts.html' title='Embedded Oracle on OTN TechCasts'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4207043152411921638</id><published>2007-09-14T12:03:00.000+01:00</published><updated>2007-09-17T15:13:38.297+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='JwscTask'/><title type='text'>ModuleException http:101216 on WebLogic</title><content type='html'>A number of people have asked about the '&lt;span style=""&gt;ModuleException: [&lt;b&gt;HTTP:101216&lt;/b&gt;]Servlet:' &lt;/span&gt; error I came across as part of the multi-platform Dice Service example. The experiences are covered in three (&lt;a href="http://soastation.blogspot.com/2007/05/dice-service-does-not-auto-deploy-on.html"&gt;first problem&lt;/a&gt;, &lt;a href="http://soastation.blogspot.com/2007/05/more-problems-with-dice-service-on-wls.html"&gt;second problem&lt;/a&gt;, &lt;a href="http://soastation.blogspot.com/2007/06/dice-service-working-on-wls.html"&gt;solved&lt;/a&gt;) separate articles which I will collate and summerise here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use ant to build web app&lt;/span&gt;&lt;br /&gt;Some JEE 5 containers allow you to define your annotated classes and then drop them in an 'autodeploy' folder. Not with WebLogic Server v10 though, an ant script is required to do some more work on the web application. Interestingly, the WLS documentation does not refer to autodeploy for web services, in fact according to the &lt;a href="http://edocs.bea.com/wls/docs100/webserv/index.html"&gt;WLS Web Service documentation&lt;/a&gt; a weblogic ant task 'JwscTask' is needed to compile the annotated web service and produce the necessary WAR and EAR for deployment.&lt;br /&gt;&lt;br /&gt;Without the JwscTask, simply dropping a JAX-WS web app in the deplopyment folder will give you an deployment error like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;The deployment error is:&lt;br /&gt;weblogic.application.ModuleException:&lt;br /&gt; [HTTP:101216]Servlet: "DiceServicePort"&lt;br /&gt;     failed to preload on startup in Web application:&lt;br /&gt;            "WebServices.war".&lt;br /&gt;javax.servlet.ServletException: Servlet class:&lt;br /&gt;    'soastation.jaxwsdice.Dice' does not implement&lt;br /&gt;            javax.servlet.Servlet&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Tell JwscTask the type&lt;/span&gt;&lt;br /&gt;Not only is an ant script required to invoke weblogic.wsee.tools.anttasks.JwscTask but when using it with JAX-WS web services you must set the type attribute. The &lt;a href="http://edocs.bea.com/wls/docs100/webserv/jaxws.html#wp225466"&gt;guidelines&lt;/a&gt; in the WLS documentation states that the ant tasks need to have a type="JAXWS" attribute set. Without this, WLS will treat the web service as a JAX-RPC service.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;target name="build-service"&gt;&lt;br /&gt; &amp;lt;jwsc srcdir="src" destdir="output/DiceEar"&gt;&lt;br /&gt;  &amp;lt;jws file="soastation/jaxwsdice/Dice.java" type="JAXWS" /&gt;&lt;br /&gt; &amp;lt;/jwsc&gt;&lt;br /&gt;&amp;lt;/target&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;&lt;br /&gt;To deploy JAX-WS web services on WebLogic Server v10 use JwscTask, with type="JASWS",  in an ant script. Of course, if you are going to the effort of putting an ant script together to build the web application, it might as well have it deploy the web app too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4207043152411921638?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4207043152411921638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4207043152411921638' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4207043152411921638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4207043152411921638'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/09/moduleexception-http101216-on-weblogic.html' title='ModuleException http:101216 on WebLogic'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4731170674231149748</id><published>2007-09-14T10:25:00.001+01:00</published><updated>2008-02-20T01:27:16.739Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA Suite'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Lite'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile SQL'/><title type='text'>Oracle Lite and SOA Suite</title><content type='html'>The &lt;a href="http://www.oracle.com/technologies/soa/soa-suite.html"&gt;Oracle SOA Suite&lt;/a&gt; bundles a number of Oracle products (BPEL Process Manager, ESB, Oracle Business Rules and Web Services Manager) to provide complete set of service infrastructure components for building, deploying, and managing SOAs. For the windows platform it also comes with slimmed down version of &lt;a href="http://www.oracle.com/technology/products/lite/index.html"&gt;Oracle Lite&lt;/a&gt;, and embedded database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why Oracle Lite?&lt;/span&gt;&lt;br /&gt;Oracle Lite has a lot of great features including data synchronisation, device management, as well as support for SQL92 and ACID transactions amongst other things. It is the embedded relational database features that are used for the 'basic' installation of SOA Suite on windows. Antony Reynolds recently posted a great article on &lt;a href="http://blogs.oracle.com/reynolds/2007/09/07#a189"&gt;basic and advanced installation&lt;/a&gt; options which really puts an emphasis on the fact that Oracle Lite is intend to get you developing fast and not for production environments.&lt;br /&gt;&lt;br /&gt;In the development environment the SOA Suite will use Oracle Lite under the hood and generally you don't need to access this database. Of course, there are always the odd occasions when you do, such as tracing an error, or doing an upgrade.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Connecting to Oracle Lite&lt;/span&gt;&lt;br /&gt;Over the summer a patch set was released to upgrade Oracle Application Server 10.1.3.1 (SOA Suite) to &lt;a href="http://download.oracle.com/docs/cd/E10291_01/index.htm"&gt;10.1.3.3&lt;/a&gt;. The patch (#6148874) is available on &lt;a href="https://metalink.oracle.com/"&gt;metalink&lt;/a&gt;. The post installation steps involve running a database script. Since the SOA Suite is distributed with a slimmed down Oracle Lite there is no Mobile Client Workspace, i.e. webtogo web app, to manage the database, so the Mobile SQL Client is your easiest option.&lt;br /&gt;&lt;br /&gt;Mobile SQL Client ($ORACLE_HOME\Mobile\Sdk\BIN\msql.exe) is used to connect to an Oracle Lite version 9 and upwards database. For earlier versions SQLPlus can be used. The version distributed with SOA Suite is 10.2.0.2. The usage is quite like SQLPlus:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;msql system/manager@jdbc:polite:&lt;database&gt;&lt;/database&gt;&lt;/blockquote&gt;For the SOA Suite there are three databases: orabpel, oraesb, orawsm. Connecting to the database used by Oracle BPEL Process Manager looks like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;D:\msql system/manager@jdbc:polite:orabpel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Oracle Lite MSQL Version 10.2.0.2.0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Copyright (c) 1997, 2005, Oracle. All rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Connected to: Oracle Lite ORDBMS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Database Name: ORABPEL (Read Write)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Database Version: 10.2.0.2.0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Auto Commit: off&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Driver Name: oracle.lite.poljdbc.POLJDBCDriver (OLite 4.0)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;SQL&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Alternatives&lt;/span&gt;&lt;br /&gt;Another option to using Mobile SQL Client is to use &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;Oracle SQL Developer&lt;/a&gt; a free graphical tool for database development. Just use the same JDBC connection properties that you can find in the Enterprise Manager, and ensure the olite*.jar files (in Mobile/SDK/bin) are in the classpath.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;&lt;br /&gt;Oracle Lite is OK for a small SOA Suite development environment and even the slimmed down version that is distributed provides access to the  databases via  the Mobile SQL Client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4731170674231149748?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4731170674231149748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4731170674231149748' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4731170674231149748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4731170674231149748'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/09/oracle-lite-and-soa-suite.html' title='Oracle Lite and SOA Suite'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-9096779917455162150</id><published>2007-08-30T21:24:00.000+01:00</published><updated>2008-02-08T10:10:22.638Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle BPEL'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Functions'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Custom XSLT functions in Oracle BPEL and ESB</title><content type='html'>In the Oracle SOA Suite there is a Custom XSLT function example. You can find it in bpel/samples/demos/XSLMapper/ExtensionFunctions. It is not immediately obvious that this approach of enabling access to static methods on a java class works for transformations in the ESB too. This is because both BPEL and ESB use the same Oracle XSLT processor.&lt;br /&gt;&lt;br /&gt;The principle is simple:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Write a class with a static method to implement the logic you want.&lt;/li&gt;&lt;li&gt;Use the namespace http://www.oracle.com/XSL/Transform/java/{$classname$} in your XSLT as the namespace prefix.&lt;/li&gt;&lt;/ul&gt;To illustrate how straight forward this is I'll go through an example that converts HEX to Decimal. So, with a class called &lt;span style="font-style: italic;"&gt;xsltfunctions.HEX2DEC&lt;/span&gt; the namespace is defined in an XSL file as xmlns:sample = "http://www.oracle.com/XSL/Transform/java/xsltfunctions.HEX2DEC".&lt;br /&gt;&lt;br /&gt;The class HEX2DEC has static method called toDecimal:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public static String toDecimal(String hex) {&lt;br /&gt;     String dec = new BigInteger(hex, 16).toString(10);&lt;br /&gt;     return dec;            &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the XSL file this method is invoked like this:&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:value-of select="sample:toDecimal('8D56B')" /&gt;&lt;br /&gt;&lt;br /&gt;Note that the namespace prefix 'sample'  is defined as mentioned earlier using the http://www.oracle.com/XSL/Transform/java/ combined with the classname.&lt;br /&gt;&lt;br /&gt;So, you could compile the HEX2DEC class, add it to a jar and put that jar in &lt;oc4j_home&gt;/j2ee/home/applib so that any transform using the custom function in BPEL or ESB will work. It's that simple.&lt;br /&gt;&lt;br /&gt;All that's left is to inform JDeveloper of your custom function so that you can easily refer to it in the XSL Mapper to do this you need to do two things:&lt;br /&gt;&lt;/oc4j_home&gt;&lt;ol&gt;&lt;li&gt;Create an XML file detailing the extension functions you have and tell JDeveloper about it in the "User Defined Extension Functions Config File" field of the XSL Map preferences (Tools-&gt;Preferences-&gt;XSL Map).  This will list the functions in the User Defined Extension Functions section of the XSL Map component palette so you can drag and drop it into the XSLT at design time.&lt;/li&gt;&lt;li&gt;Add the class to the JDeveloper classpath so that you can run the transform using the test feature with JDeveloper.&lt;/li&gt;&lt;/ol&gt;The extension functions XML looks like this:&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&amp;lt;extension-functions&gt;&lt;br /&gt;&amp;lt;functions xmlns:sample = "http://www.oracle.com/XSL/Transform/java/xsltfunctions.HEX2DEC"&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- converts a hex string to a decimal string --&gt;&lt;br /&gt; &amp;lt;function name="sample:toDecimal" as="string"&gt;&lt;br /&gt;   &amp;lt;param name="hex" as="string"/&gt;&lt;br /&gt; &amp;lt;/function&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/functions&gt;&lt;br /&gt;&amp;lt;/extension-functions&gt;&lt;br /&gt;&lt;br /&gt;To add the class to the JDeveloper classpath involves defining a JDeveloper extension. For JDeveloper 10.1.3.2 the extension needs to be a valid JSR 198 extension. Documentation on this can be found in &lt;jdev&gt;/doc/extension/ide-extension-packaging.html.&lt;br /&gt;&lt;br /&gt;Do this by defining a simple 'extension.xml' like this:&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&gt;&lt;br /&gt;&amp;lt;extension version="1.0" esdk-version="1.0" id="xstlfunctions"&lt;br /&gt;        xmlns="http://jcp.org/jsr/198/extension-manifest"&gt;&lt;br /&gt;&amp;lt;name&gt;SOAStationXSLTFunctions&amp;lt;/name&gt;&lt;br /&gt;&amp;lt;owner&gt;Peter O'Brien&amp;lt;/owner&gt;&lt;br /&gt;&amp;lt;/extension&gt;&lt;br /&gt;&lt;br /&gt;The extension.xml (naming convention for these files) needs to be in the meta-inf folder of the jar containing the classes. The filename for the jar needs to be a combination of the extention id and esdk-version so in this case it would be xsltfunctions.1.0.jar. This jar should then be copied into the &lt;jdev&gt;/extension directory.&lt;br /&gt;&lt;br /&gt;Restart JDeveloper to pick up the changes for both the 'User Defined Extension Functions Config File' and the JDeveloper extension and you're ready to go.&lt;/jdev&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-9096779917455162150?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/9096779917455162150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=9096779917455162150' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/9096779917455162150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/9096779917455162150'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/08/custom-xslt-functions-in-oracle-bpel.html' title='Custom XSLT functions in Oracle BPEL and ESB'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5900881701451636417</id><published>2007-08-14T16:29:00.000+01:00</published><updated>2007-08-14T16:44:35.403+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABA Check Digit Validation Java'/><title type='text'>ABA Routing Number check digit validation</title><content type='html'>Following on from the &lt;a href="http://soastation.blogspot.com/2007/08/java-iban-check-digit-validation.html"&gt;IBAN check digit validation&lt;/a&gt; I decided to share some code to validate an ABA routing number. The routing number is a 9 digit number. Each digit is multiplied by a particular number (3, 7, or 1) depending on its position, the total added up and then divided by 10. The routing number is considered valid if there is no remainder. You can download the &lt;a href="http://soastation.googlepages.com/ABARoutingNumber.java"&gt;code&lt;/a&gt; and the &lt;a href="http://soastation.googlepages.com/ABARoutingNumberTest.java"&gt;test case&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5900881701451636417?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5900881701451636417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5900881701451636417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5900881701451636417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5900881701451636417'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/08/aba-routing-number-check-digit.html' title='ABA Routing Number check digit validation'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6552629388980027054</id><published>2007-08-10T15:43:00.000+01:00</published><updated>2007-08-10T17:44:03.692+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IBAN'/><title type='text'>Java IBAN check digit validation</title><content type='html'>The &lt;b&gt;International Bank Account Number&lt;/b&gt; (&lt;b&gt;IBAN&lt;/b&gt;) is an international standard for identifying bank accounts across national borders. It was originally adopted by the &lt;a href="http://www.ecbs.org/"&gt;European Committee for Banking Standards&lt;/a&gt;, and was later adopted as an ISO standard (ISO 13616). Although currently only used in Europe, where it was adopted to facilitate cross border payments, it is anticipated that IBAN will a more global standard in a few years.&lt;br /&gt;&lt;br /&gt;A quick search on the web for IBAN will show up information on the standard, including some web based validators. Since I could not find one, I have just put together a Java implementation of the IBAN check digit validation algorithm based on &lt;a href="http://www.ecbs.org/Download/EBS204_V3.2.PDF"&gt;ECBS IBAN standard v 3.2&lt;/a&gt;. Code , including test cases, are available &lt;a href="http://soastation.googlepages.com/iban-checkdigit-src.jar"&gt;here&lt;/a&gt;. Please note that this works with the 'electronic format' (no spaces) of IBAN and not the 'paper format'.&lt;br /&gt;&lt;br /&gt;The code is reasonably straight forward, the challenge I had was to elegantly determine the appropriate numeric value of a letter as per section 6.3 (Alpha to Numeric conversion). In the end I found the simplest way was to compare the given character to 'A'. This gave me the position of the character in the alphabet. Two key points though:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Comparison of characters must be in the same case. Don't compare 'D' to 'a'.&lt;/li&gt;&lt;li&gt;The position will start at zero. For example, E the fifth letter in the alphabet is at position 4.&lt;/li&gt;&lt;/ol&gt;Here is the code snippet for that:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; private static int getAlphabetPosition(char letter) {&lt;br /&gt;     return Character.valueOf(&lt;br /&gt;                   Character.toUpperCase(letter))&lt;br /&gt;                   .compareTo(Character.valueOf('A')&lt;br /&gt;                 );&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of course once you have the position of a letter in the alphabet don't forget to add 10 to the result to get the numeric value as per IBAN standard.&lt;br /&gt;&lt;br /&gt;In the implementation I have included an IBAN.properties which contains the lengths for all the country codes currently signed up to the IBAN initiative. You could take this forward by adding in the formatting patterns that exist for each country and include this in the validation too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6552629388980027054?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6552629388980027054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6552629388980027054' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6552629388980027054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6552629388980027054'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/08/java-iban-check-digit-validation.html' title='Java IBAN check digit validation'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-6251959888886842396</id><published>2007-06-15T15:50:00.000+01:00</published><updated>2007-06-15T16:11:13.314+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA Suite'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Differences between BPEL and ESB</title><content type='html'>Dave Berry (ESB Product Manager @Oracle) recently brought my attention to a discussion on the Oracle SOA Suite forum: &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=517863"&gt;Difference between Oracle ESB and BPEL&lt;/a&gt;. In short, the differences are in the problems they address. Confusion arises because there are similar capabilities in both. However, BPEL is about orchestrating business logic and ESB is about highly efficient integration.&lt;br /&gt;&lt;br /&gt;The forum discussion is worth a read as there are useful contributions on which tool is right for what job, i.e. when to use BPEL and when to use ESB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-6251959888886842396?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/6251959888886842396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=6251959888886842396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6251959888886842396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/6251959888886842396'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/06/differences-between-bpel-and-esb.html' title='Differences between BPEL and ESB'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2107145207161667825</id><published>2007-06-15T14:15:00.000+01:00</published><updated>2007-06-15T14:34:50.002+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA Maturity Model'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Finding your SOA sweet spot</title><content type='html'>Quocirca is a UK based research and analysis firm that particularly focuses on the business impact of IT. In a recent article '&lt;a href="http://www.theregister.co.uk/2007/06/14/soa_comment/"&gt;SOA - Dead or Alive?&lt;/a&gt;', Clive Longbottom raises the issue faced by ISVs in selling SOA solutions. Not all SOA initiatives have to be strategic and at the enterprise level, which is where a lot of the bigger software firms are more comfortable making their pitch.&lt;br /&gt;&lt;br /&gt;Reflecting this need for tactical SOA solutions to evolve into a strategic game plan, Oracle outlines a &lt;a href="http://www.oracle.com/technologies/soa/center.html"&gt;SOA Maturity Model &lt;/a&gt;which helps IT folks in these businesses to make the move to SOA. It clearly outlines how benefits can be achieved in incremental steps. There is even a useful survey tool available to help you identify the SOA profile of your own organisation. This is a great place to start understanding the business audience and to begin tailoring the messages around the benefits of SOA to the business where it is today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2107145207161667825?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2107145207161667825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2107145207161667825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2107145207161667825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2107145207161667825'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/06/finding-your-soa-sweet-spot.html' title='Finding your SOA sweet spot'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5797694531586241646</id><published>2007-06-08T16:26:00.000+01:00</published><updated>2007-06-11T11:13:22.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>Dice service working on WLS</title><content type='html'>As mentioned in a &lt;a href="http://soastation.blogspot.com/2007/05/more-problems-with-dice-service-on-wls.html"&gt;previous post&lt;/a&gt; the &lt;a href="http://soastation.blogspot.com/2007/05/jax-ws-jaxb-rock-and-roll.html"&gt;Dice service&lt;/a&gt;, which is my JAX-WS example for a cross platform service implementation, was not working on BEA WebLogic Servier v10. It turns out I missed a key part of JAX-WS &amp; WLS documentation when putting the build script together. The &lt;a href="http://edocs.bea.com/wls/docs100/webserv/jaxws.html#wp225466"&gt;guidelines&lt;/a&gt; in the WLS documentation states that the ant tasks need to have a type="JAXWS" attribute set. Without this, WLS was treating the web service as a JAX-RPC one and that was the cause of the strange WSDL and the runtime exception.&lt;br /&gt;&lt;br /&gt;The build-service target now looks like this:&lt;br /&gt;  &lt;pre&gt;&lt;br /&gt;     &amp;lt;target name="build-service"&gt;&lt;br /&gt;      &amp;lt;jwsc srcdir="src" destdir="output/DiceEar"&gt;&lt;br /&gt;        &amp;lt;jws file="soastation/jaxwsdice/Dice.java" type="JAXWS" /&gt;&lt;br /&gt;      &amp;lt;/jwsc&gt; &lt;br /&gt;     &amp;lt;/target&gt;&lt;br /&gt;  &lt;/pre&gt;&lt;br /&gt;So the only change is setting the type attribute to JAXWS. The WSDL generated for this service is identical to the one generated on Glassfish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5797694531586241646?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5797694531586241646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5797694531586241646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5797694531586241646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5797694531586241646'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/06/dice-service-working-on-wls.html' title='Dice service working on WLS'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5571970106517494083</id><published>2007-06-07T16:19:00.000+01:00</published><updated>2007-06-11T11:16:12.644+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle ESB'/><title type='text'>Generating IFX RqUID in Oracle ESB</title><content type='html'>Interactive Financial eXchange (IFX) is an XML based inter bank communication standard used by a number of banks around the world. You can find out more about IFX at the &lt;a href="http://www.ifxforum.org"&gt;IFX Forum&lt;/a&gt;. An IFX message must have a request identifier called RqUID. A client uses RqUID to uniquely identify a request message. It is a universally unique ID (UUID) that is generated by the client and is used to correlate responses with requests.&lt;br /&gt;&lt;br /&gt;Often with integration exercises the interfaces do not match. Take the simple case where one system must send a request to another system but the request structures are defined differently for both. One example is when a system sends a customer search message which must be provisioned by an IFX system. The customer search message has to be tranformed into a CustInqRq message for the IFX system. This can be facilitated through the ESB. The transformation performed by the ESB can be used to generate field values that are not supplied in the initial request.&lt;br /&gt;&lt;br /&gt;To include an IFX RqUID using Oracle ESB you can take advantage of the XPath Extension Function &lt;a href="http://download-east.oracle.com/docs/cd/B31017_01/integrate.1013/b28211/app_xpath_functions.htm#CJAEAEJF"&gt;orcl:generate-guid()&lt;/a&gt; and format it accordingly like this:&lt;br /&gt;  &lt;pre&gt;&lt;br /&gt;&amp;lt;xsl:variable name="guid" select="orcl:generate-guid()" /&gt;&lt;br /&gt;&amp;lt;xsl:variable name="rquid" &lt;br /&gt;         select="orcl:format-string(&lt;br /&gt;                   '{0}-{1}-{2}-{3}-{4}', &lt;br /&gt;                   substring($guid,1,8), &lt;br /&gt;                   substring($guid,9,4), &lt;br /&gt;                   substring($guid,13,4), &lt;br /&gt;                   substring($guid,17,4), &lt;br /&gt;                   substring($guid,21, 12))" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will create a variable called rquid with the required XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX format. You can now assign this variable to the relevant RqUID fields in the transformation. e.g.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;ifx:RqUID&gt;&lt;br /&gt;          &amp;lt;xsl:value-of select="$rquid" /&gt;&lt;br /&gt;  &amp;lt;/ifx:RqUID&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note: If there are mutlitple requests to be sent at the same time then redefine the variable each time it is needed. Otherwise just defined it once at the beginning of the transformation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5571970106517494083?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5571970106517494083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5571970106517494083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5571970106517494083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5571970106517494083'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/06/generating-ifx-rquid-in-oracle-esb.html' title='Generating IFX RqUID in Oracle ESB'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-8146813846387083416</id><published>2007-05-28T15:30:00.000+01:00</published><updated>2007-05-28T17:21:44.698+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>ESBREQUEST in Oracle ESB Routing Services</title><content type='html'>&lt;a href="http://www.oracle.com/technology/products/integration/esb/index.html"&gt;Oracle's Enterprise Service Bus&lt;/a&gt; (ESB) is designed to implement service-oriented architecture (SOA) and event-driven architecture (EDA), providing a responsive, low-cost, high-impact framework for matching technology needs to business problems.&lt;br /&gt;&lt;br /&gt;One of the powerful capabilities of Oracle's ESB is the 'Routing Service' which caters for service virtualization through content based routing. It supports one way and request response operations. One of the challenges with service virtualization and the request response pattern is matching the response from the implementation service to the response that the routing service should return. There is no easy answer to this one, but the Oracle ESB provides some help. One is the transformation capabilities, but you would expect this from any ESB system. The really useful feature is being able to refer to the request in the response transformation. Oracle ESB does this by declaring a parameter to the XSLT called $ESBREQUEST.&lt;br /&gt;&lt;br /&gt;Elements in the request can be referred to through XPATH. For example:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;xsl:value-of select="$ESBREQUEST/tns:BankSvcRq/ns5:RqUID" /&gt;&lt;/blockquote&gt;&lt;br /&gt;This is great, but there are a few things I need to draw to your attention:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;$ESBREQUEST refers to the root element of the request sent to the service implementation and not the request sent to the routing service. So, if your implementation service request structure is DoMethodRequest/MyParam then refer to MyParam as $ESBREQUEST/MyParam not $ESBREQUEST/DoMethodRequest/MyParam.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You need to enter the XPATH manually because the mapper does not know the structure of the request.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You have to specify 'Include Request in the Reply Payload' when defining the routing rule. This can not be added to the routing rule or XSL file through the tools afterwards.&lt;/li&gt;&lt;/ol&gt;The latter point is what I really wanted to cover in this article. At the moment, in version 10.1.3, you can not retrospectively 'Include Request in the Reply Payload' using the JDeveloper or the ESB console. When you use JDeveloper the first time it puts&lt;br /&gt;&amp;lt;xsl:param name="ESBREQUEST"&gt; in the XSL file and sets attachRequestPayload="true" in the transformation element of the routingRule section of the routing service esbsvc file.&lt;br /&gt;&lt;br /&gt;So, you can do this manually to retrospectively add 'Include Request in the Reply Payload' to your existing routing rules. Unfortunately the only way I have found to update the running ESB routing service routing rules with these changes is to to delete the routing service (through ESB console), shutdown JDeveloper, edit the esbsvc file manually, restart JDeveloper and then register the ESB project with the integration server.&lt;br /&gt;&lt;br /&gt;The Oracle Mapper tool in JDeveloper which is used to edit XSL files does understand the parameter concept, so you can test your stylesheet in JDeveloper before deploying it. Just open the XSL file in JDeveloper, right click in the design view and select Test. Be sure to enter the ESBREQUEST parameter as an XML fragment. Don't forget that ESBREQUEST corresponds to the request structure sent to the service implementation and not the request received by the routing service!&lt;br /&gt;&lt;br /&gt;This ESBREQUEST parameter gives you the benefit of manipulating the reply such as returning correlation information or using the data from the request to perform filtering and other manipulation that the service implementation does not provide.&lt;br /&gt;&lt;br /&gt;Should you wish to use data from the original request received by the routing service then you have to add elements manually to the request transformation. This will work at runtime if the implentation service doesn't validate the request for extra elements not part of the schema. However, once you add these elements to the XSL transformation you will not be able to use the JDeveloper mapper as it does validate the target document structure against the schema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-8146813846387083416?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/8146813846387083416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=8146813846387083416' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8146813846387083416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/8146813846387083416'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/esbrequest-in-oracle-esb-routing.html' title='ESBREQUEST in Oracle ESB Routing Services'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-7430054161536565577</id><published>2007-05-19T00:53:00.000+01:00</published><updated>2007-05-19T01:38:14.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>More problems with Dice service on WLS</title><content type='html'>As mentioned before, the Dice service does not auto deploy on WebLogic Server 10. According to the &lt;a href="http://edocs.bea.com/wls/docs100/webserv/index.html"&gt;WLS Web Service documentation&lt;/a&gt; a weblogic ant task 'JwscTask' is needed to compile the annotated web service and produce the necessary WAR and EAR for deployment.&lt;br /&gt;&lt;br /&gt;The build script I put together looks like this:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;project default="all"&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;target name="all" depends="clean,build-service,deploy" /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;target name="clean"&gt;&lt;br /&gt;   &amp;lt;delete dir="output" /&gt;&lt;br /&gt; &amp;lt;/target&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask"/&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;target name="build-service"&gt;&lt;br /&gt;     &amp;lt;jwsc srcdir="src" destdir="output/DiceEar"&gt;&lt;br /&gt;       &amp;lt;jws file="soastation/jaxwsdice/Dice.java" /&gt;&lt;br /&gt;     &amp;lt;/jwsc&gt;&lt;br /&gt; &amp;lt;/target&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;target name="deploy"&gt;&lt;br /&gt;   &amp;lt;wldeploy action="deploy" name="DiceEar" source="output/DiceEar" user="weblogic" password="weblogic" verbose="true" adminurl="t3://localhost:7001" targets="examplesServer" /&gt;&lt;br /&gt; &amp;lt;/target&gt;&lt;br /&gt;&amp;lt;/project&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;It successfully builds and deploys the web service. The deployed web service endpoint is /Dice/Dice so the service name makes up the context and the servlet url-pattern. As mentioned in a previous post both JBoss and OC4J default the servlet url-pattern to diceserviceport while Glassfish defaults to DiceService.&lt;br /&gt;&lt;br /&gt;Also of note is that the WSDL on WLS is so different from the others by using the SOAP array type and ignoring the Die structure in the schema. That means that the size attribute is missing.&lt;br /&gt;&lt;br /&gt;The big thing to note though is that there is a runtime error when trying to test the web service:&lt;br /&gt;com.bea.xbean.values.XmlValueOutOfRangeException&lt;br /&gt;   at com.bea.xml.soap.SOAPArrayType.&lt;init&gt;&lt;br /&gt;   at com.bea.staxb.runtime.internal.LiteralUnmarshalResult.extractSoapArrayType&lt;br /&gt;&lt;br /&gt;So the mystery tour continues. I might just try the top down route based on a WSDL from the Dice service deployed on another platform. Naturally, I will keep you posted.&lt;/init&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-7430054161536565577?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/7430054161536565577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=7430054161536565577' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7430054161536565577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7430054161536565577'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/more-problems-with-dice-service-on-wls.html' title='More problems with Dice service on WLS'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-1738832420317453243</id><published>2007-05-16T15:44:00.000+01:00</published><updated>2007-05-16T15:57:08.547+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='WebLogic'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>Dice Service does not auto deploy on WLS 10</title><content type='html'>I really wanted to see if WLS 10 would auto deploy the Dice Service WAR file just as easily as the OC4J, JBoss and Glassfish containers did. Since my early J2EE days (I started developing with  Tengah WebLogic before BEA bought the small San Francisco based company) WLS has been a platform of choice for me. However, I have found that the Dice Service does not automatically deploy on WLS like it does on the other platforms.&lt;br /&gt;&lt;br /&gt;The deployment error is:&lt;br /&gt;weblogic.application.ModuleException: [HTTP:101216]Servlet: "DiceServicePort" failed to preload on startup in Web application: "WebServices.war".&lt;br /&gt;javax.servlet.ServletException: Servlet class: 'soastation.jaxwsdice.Dice' does not implement javax.servlet.Servlet&lt;br /&gt;&lt;br /&gt;This will require some investigation, perhaps running through some of the WLS JAX-WS examples to find out what it's real dependancies are. Watch this space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-1738832420317453243?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/1738832420317453243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=1738832420317453243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1738832420317453243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/1738832420317453243'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/dice-service-does-not-auto-deploy-on.html' title='Dice Service does not auto deploy on WLS 10'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-72679834158868880</id><published>2007-05-15T14:15:00.000+01:00</published><updated>2007-09-13T14:19:53.231+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='OC4J'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper'/><category scheme='http://www.blogger.com/atom/ns#' term='Glassfish'/><title type='text'>Greater web service independence with JEE 5</title><content type='html'>One of the reasons I did the &lt;a href="http://soastation.blogspot.com/2007/05/jax-ws-jaxb-rock-and-roll.html"&gt;Dice web service example&lt;/a&gt; was to see if it really was possible to build a JEE 5 POJO web service (all be it a simple one) and deploy it in different JEE 5 containers without having to maintain separate deployment descriptors, or test classes, for the target platforms. The answer is a yes! Although it is a slightly qualified yes. More on that below, here are the target platforms first:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OC4J 11g Technology Preview (standalone version packaged in JDeveloper)&lt;/li&gt;&lt;li&gt;Glassfish v1 ur1 p01&lt;/li&gt;&lt;li&gt;JBoss 4.2.0 GA&lt;/li&gt;&lt;/ul&gt;The same WAR file built in JDeveloper 11g Technology Preview will deploy on all three containers without modification. To create the WAR file I followed the steps in the &lt;a href="http://www.oracle.com/technology/obe/obe11jdev/11/ws/ws.html#t2s3"&gt;HelloService tutorial&lt;/a&gt;. However, I did have to change the project properties to set the output directory to public_html/WEB-INF/classes/ otherwise the classes would not be packaged in the WAR.&lt;br /&gt;&lt;br /&gt;Deploying the web service on OC4J is covered in the tutorial. Deploying on the other platforms is just as easy, just take advantage of the auto deploy features by dropping the WAR file into the relavant directory of the running server:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Glassfish: glassfish/domains/domain1/autodeploy&lt;/li&gt;&lt;li&gt;JBoss: jboss-4.2.0.GA/server/default/deploy&lt;/li&gt;&lt;/ul&gt;It is worth taking a look at the WAR file as the only things in it are the classes (Dice and Die) and the web.xml which registers Dice as a servlet (DiceServicePort). It is the JAX-WS annotations on the Dice class that tell the container it is a web service and the container takes it from there generating WSDL, etc.&lt;br /&gt;&lt;br /&gt;The service works on all three platforms without modification, which is good. However, there is difference in the WSDL files for each platform and that's the qualification mentioned earlier. The end point structures are different. JBoss and OC4J keeping the servlet url-pattern and Glassfish opting for the service name (i.e. DiceService). This is only a slight difference as everything else remains the same. In fact you could generate a web service proxy client from one WSDL and use those proxy client classes for invoking the service on another platform. Just change the ENDPOINT_ADDRESS_PROPERTY. This is reassuring as the code and interface have not changed, only the platform. This is not a problem at all if test cases have the web service end point externalised.&lt;br /&gt;&lt;br /&gt;One thing I need to point out here for those wanting to reproduce the excercise, I had to use JDeveloper 10.1.3.2 to generate the DiceServiceProxy classes because 11g Technology Preview version would treat the service 'roll' operation as a one way method and not return a response.&lt;br /&gt;&lt;br /&gt;So there you have it. JEE 5 has brought us a step closer to build and test enterprise software components without the overhead of maintaining platform specific artefacts. Given more time I would try some more JEE 5 containers. Suggestions welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-72679834158868880?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/72679834158868880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=72679834158868880' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/72679834158868880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/72679834158868880'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/greater-web-service-platform.html' title='Greater web service independence with JEE 5'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-7120828169417686985</id><published>2007-05-14T16:59:00.000+01:00</published><updated>2007-05-15T12:17:14.602+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='OC4J'/><category scheme='http://www.blogger.com/atom/ns#' term='JAXB'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper'/><title type='text'>JAX-WS &amp; JAXB rock and roll...</title><content type='html'>During his Wednesday keynote at the JavaOne conference last week, Oracle Senior Vice President Thomas Kurian unveiled the next-generation architecture for Oracle Fusion Middleware. The 11g Technology Preview of &lt;a href="http://www.oracle.com/technology/products/jdev/11/index.html"&gt;JDeveloper&lt;/a&gt; and &lt;a href="http://www.oracle.com/technology/tech/java/oc4j/11/index.html"&gt;OC4J&lt;/a&gt; are currently available. Also available are some nifty tutorials and demos like &lt;a href="http://download.oracle.com/otn_hosted_doc/jdeveloper/11/demos/ws/WSNewFeatures.html"&gt;Web Services Development in Oracle JDeveloper &lt;/a&gt;which shows off some great &lt;a href="http://java.sun.com/javaee/"&gt;JEE 5&lt;/a&gt; features like &lt;a href="https://jax-ws.dev.java.net/"&gt;JAX-WS&lt;/a&gt; and &lt;a href="https://jaxb.dev.java.net/"&gt;JAXB 2.0&lt;/a&gt;. Although the latter is not really focused on much in the tutorial, it is the basis of what gets your java objects to and from XML.&lt;br /&gt;&lt;br /&gt;What these two standards bring to the table from a web service development point of view is a more lightweight POJO oriented way of developing services. They will not make for better SOA in the enterprise though. In fact, they may even make things worse since a poorly designed interface can easily get a false SOA badge of credibility amongs the uninitiated by being exposed as a web service. Enough with the rant already, on with the example...&lt;br /&gt;&lt;br /&gt;I thought it would be interesting to expand upon the bottom up HelloService tutorial by making things a bit more complicated with some old world technology: Dice. The Dice class in this example has a roll(List&lt;die&gt;) operation that rolls the dice (plural of die) passed to it and returns the result. So there are really only two classes in this example:&lt;br /&gt;&lt;/die&gt;&lt;ul&gt;&lt;li&gt;Die represents (you guessed it) a die. It has two properties, number of sides and value.&lt;/li&gt;&lt;li&gt;Dice provides the collective operation of rolling dice.&lt;/li&gt;&lt;/ul&gt;This is the Die source:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;package soastation.jaxwsdice;&lt;br /&gt;&lt;br /&gt;public class Die {&lt;br /&gt;   protected int numberOfSides;&lt;br /&gt;   protected int value;&lt;br /&gt;   public Die() {&lt;br /&gt;      this(6); //Default number of sides is Six;&lt;br /&gt;   }&lt;br /&gt;   public Die(int sides) {&lt;br /&gt;        if (sides &lt; 2)&lt;br /&gt;          throw new throw new IllegalArgumentException();&lt;br /&gt;        this.numberOfSides = sides;&lt;br /&gt;   }&lt;br /&gt;    public int getNumberOfSides() {&lt;br /&gt;        return numberOfSides;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int getValue() {&lt;br /&gt;            return value;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void roll() {&lt;br /&gt;        int rollValue = (int) (this.getNumberOfSides() * Math.random()) + 1;&lt;br /&gt;        if (rollValue &gt; this.getNumberOfSides())&lt;br /&gt;            rollValue -= 1;&lt;br /&gt;        this.value = rollValue;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;Note that the number of sides property is immutable and the value defaults to zero until the die is first rolled. It would seem natural to extend something like Integer to hold the 'value'. This can't be done in Java as these classes (Number, Integer, BigInteger, etc) are immutable so changing the value on every roll is not a runner. Besides, Integer is final so can't be extended anyway.&lt;br /&gt;&lt;br /&gt;You'll probably also note the lack of comments on the code too. Tell me if you are for or against comments in code!&lt;br /&gt;&lt;br /&gt;Here is the Dice source:&lt;br /&gt;&lt;blockquote&gt;package soastation.jaxwsdice;&lt;br /&gt;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class Dice {&lt;br /&gt;&lt;br /&gt;public List&lt;die&gt; roll(List&lt;die&gt; dice) {&lt;br /&gt;    Iterator&lt;die&gt; diceIterator = dice.iterator();&lt;br /&gt;    while (diceIterator.hasNext()) {&lt;br /&gt;        Die die = diceIterator.next();&lt;br /&gt;        die.roll();&lt;br /&gt;    }&lt;br /&gt;    return dice;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/die&gt;&lt;/die&gt;&lt;/die&gt;&lt;/blockquote&gt;&lt;br /&gt;The rest of the steps are identical to the HelloService example (which you can also get to from the Build Web Service link on the Start page of the JDeveloper 11 Technology Preview ).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add an @WebService annotation to the Dice class&lt;/li&gt;&lt;li&gt;In the code fix menu select Configure project for web services&lt;/li&gt;&lt;li&gt;Choose the Java EE 1.5 option and press OK&lt;/li&gt;&lt;li&gt;Add an @WebMethod annotation to the roll method&lt;/li&gt;&lt;li&gt;Right click on Dice service (note that the icon has changed) and select Test Web Service&lt;/li&gt;&lt;li&gt;Gaze in awe at the handy HTTP Analyzer with Web Service support. That's all you can do at this stage because JAX-WS doesn't know what to do with the Die class.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This is where JAXB really comes into play. We want the properties of the Die object to be properly represented in the web service. Lets make the number of sides an attribute and the value of the Die appear as the value of the element. Do this by:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add @XmlAttribute(name="sides") to the numberOfSides field.&lt;/li&gt;&lt;li&gt;Add @XmlValue to the value field.&lt;/li&gt;&lt;/ol&gt;Now you can test the web service again by right clicking on the Dice service in the Applications Navigator and selecting Test Web Service. In the HTTP Analyzer window you can enter the details of each die you want to roll. By clicking on the plus sign you can add more die to the SOAP request.  The value attribute is in the schema but has no relavance to the operation (unless you want to implement a LoadedDie object?). Actually, you could leave the number of sides blank too as it will default to 6.&lt;br /&gt;&lt;br /&gt;This example takes advantage of convention over configuration features of JEE 5. The property inspector in JDeveloper 11g Technology Preview provides some great tooling around the annotations. It is worth playing with it to see the extent of configuration possible.&lt;br /&gt;&lt;br /&gt;We can improve the WSDL and XML representations with annotations. In the Dice class add a   @WebResult(name="die") annotation to the roll method so that the result is not called 'result' by default. Also, in the roll method arguments add @WebParam(name="die") annotation so that the die element does not get call 'arg0' by default.&lt;br /&gt;&lt;br /&gt;These JAX-WS and JAXB annotations make the web service and XML representation of the java operation and classes much more suitable. Of course these simple examples only scratch the surface of what can be achieved. It is a good idea to get familiar with capabilities of both technologies.&lt;br /&gt;&lt;br /&gt;Let me know how you get on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-7120828169417686985?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/7120828169417686985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=7120828169417686985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7120828169417686985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/7120828169417686985'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/jax-ws-jaxb-rock-and-roll.html' title='JAX-WS &amp; JAXB rock and roll...'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-2016697030268702368</id><published>2007-05-08T11:43:00.000+01:00</published><updated>2007-05-08T13:19:48.657+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Siebel'/><title type='text'>Troubleshooting Siebel Web Services: No Active Web Service</title><content type='html'>Siebel 7.8 has the concept of inbound and outbound web services which provide a great deal of integration points with the Siebel application. It doesn't mean that integration is straight forward though. Knowledge of the Siebel data model is a must. One thing that always catches me out when I set up a web service in the Siebel environment is this runtime error which is the fault returned when an operation on the generated WSDL is invoked:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;There is no active Web Service with&lt;br /&gt;    operation named 'xxx'.&lt;br /&gt;( SBL-EAI-04313 )&lt;br /&gt;( IDS_EAI_WS_OP_NOT_FOUND )&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Getting a &lt;a href="http://ws-i.org/"&gt;WS-I&lt;/a&gt; compliant web services working is a simple process in the 'Administration - Web Services' view:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Select web service and change status to Active&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select operation and change binding to 'SOAP_DOC_LITERAL'&lt;/li&gt;&lt;li&gt;Click on Generate WSDL button and save the WSDL file&lt;/li&gt;&lt;li&gt;Click on Clear Cache button.&lt;/li&gt;&lt;/ol&gt;It's the 'Clear Cache' button step I always forget. Perhaps now that I've written about it I won't forget the next time and I hope you don't either. However, if you ever come across  SBL-EAI-04313 when you try to use a web service for the first time, click on the Clear Cache button before checking anything else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-2016697030268702368?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/2016697030268702368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=2016697030268702368' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2016697030268702368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/2016697030268702368'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/troubleshooting-siebel-web-services-no.html' title='Troubleshooting Siebel Web Services: No Active Web Service'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-5651945687513606296</id><published>2007-05-03T15:25:00.000+01:00</published><updated>2007-05-03T15:47:14.119+01:00</updated><title type='text'>Welcome to SOA Station</title><content type='html'>&lt;span style="font-style: italic;"&gt;    &lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;Time is a train&lt;br /&gt;Makes the future the past&lt;br /&gt;Leaves you standing in the station&lt;br /&gt;Your face pressed up against the glass.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;a href="http://www.u2.com/"&gt;U2&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;The more things change, the more they stay the same and we keep on trying to manage the gap between capabilities (what we can do) and ambitions (what we want to achieve).  It's not such a bad thing. Our ambitions grow with our capabilities so the destination is always out there.&lt;br /&gt;&lt;br /&gt;This blog is a placeholder for musings and rants about software capabilities and ambitions. A few hints and tips will be thrown in for good measure. SOA is the current name for the train, but we have always been oriented towards service. Just as there has always been a gap between journey and destination.&lt;br /&gt;&lt;br /&gt;Welcome to SOA Station. Please mind the gap!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-5651945687513606296?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/5651945687513606296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=5651945687513606296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5651945687513606296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/5651945687513606296'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/welcome-to-soa-station.html' title='Welcome to SOA Station'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8670942274168320118.post-4575580323315364964</id><published>2007-05-03T08:57:00.002+01:00</published><updated>2009-05-27T09:09:59.507+01:00</updated><title type='text'>Privacy Policy</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;Privacy Policy for soastation.blogspot.com&lt;/p&gt; &lt;p&gt;The privacy of our visitors to soastation.blogspot.com is important to us. &lt;/p&gt; &lt;p&gt;At soastation.blogspot.com, we recognize that privacy of your personal information is important. Here is information on what types of personal information we receive and collect when you use and visit soastation.blogspot.com, and how we safeguard your information.  We never sell your personal information to third parties.&lt;/p&gt; &lt;p&gt;Cookies and Web Beacons&lt;br /&gt;We do use thirdy party services for site usage analysis and they use technology such as &lt;a href="http://www.allaboutcookies.org/"&gt;cookies and web beacons&lt;/a&gt; to gather information. Such information includes  your IP (internet protocol) address, your ISP (internet service provider, such as AOL or Shaw Cable), the browser you used to visit our site (such as Internet Explorer or Firefox), the time you visited our site and which pages you visited throughout our site.  &lt;/p&gt;&lt;p&gt;We also use third party advertisements on soastation.blogspot.com to support our site.  Some of these advertisers may use technology such as &lt;a href="http://www.allaboutcookies.org/"&gt;cookies and web beacons &lt;/a&gt;when they advertise on our site, which will also send these advertisers (such as Google through the Google AdSense program) information including your IP address, your ISP , the browser you used to visit our site, and in some cases, whether you have Flash installed.  This is generally used for geotargeting purposes (showing New York real estate ads to someone in New York, for example) or showing certain ads based on specific sites visited (such as showing cooking ads to someone who frequents cooking sites).&lt;/p&gt;&lt;p&gt;You can chose to disable or selectively turn off our cookies or third-party cookies in your browser settings, or by managing preferences in programs such as Norton Internet Security.  However, this can affect how you are able to interact with our site as well as other websites.  This could include the inability to login to services or programs, such as logging into forums or accounts. To learn more about cookies and web beacons please visit &lt;a href="http://www.allaboutcookies.org/"&gt;http://www.allaboutcookies.org/&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Privacy Policy based on the sample Privacy Policy available from &lt;a href="”http://www.JenSense.com”"&gt;JenSense&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8670942274168320118-4575580323315364964?l=www.soastation.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.soastation.org/feeds/4575580323315364964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8670942274168320118&amp;postID=4575580323315364964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4575580323315364964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8670942274168320118/posts/default/4575580323315364964'/><link rel='alternate' type='text/html' href='http://www.soastation.org/2007/05/privacy-policy.html' title='Privacy Policy'/><author><name>Peter O'Brien</name><uri>http://www.blogger.com/profile/05549543084958276823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_QdWe1hGsnN4/SstOf9bmAeI/AAAAAAAAAEA/qSamqMs5h6Q/S220/pobrien_sydney.jpg'/></author><thr:total>0</thr:total></entry></feed>
