<?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-5025071</id><updated>2012-01-24T08:05:05.436Z</updated><category term='linux'/><category term='media'/><category term='java'/><category term='mysql'/><category term='web'/><category term='lenya'/><category term='JAXB'/><category term='rails'/><category term='family'/><category term='weblogic'/><category term='france'/><category term='germany'/><category term='JAX-WS'/><category term='eclipse'/><category term='Spring'/><category term='web services'/><category term='tunbridge wells'/><category term='servicemix'/><title type='text'>Jeannot's Weblog</title><subtitle type='html'>The World According to Jeannot</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default?start-index=101&amp;max-results=100'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>207</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5025071.post-4268566431356553855</id><published>2012-01-19T07:34:00.002Z</published><updated>2012-01-19T07:39:37.037Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Servicemix</title><content type='html'>Initial links for ServiceMix 4...&lt;div&gt;The documentation isn't good, often it's not clear if ServiceMix 3 or 4 is being referred to.&lt;/div&gt;&lt;div&gt;So use the FUSE documentation at &lt;a href="http://fusesource.com/products/enterprise-servicemix/"&gt;http://fusesource.com/products/enterprise-servicemix/&lt;/a&gt;, it's better, and the FUSE version of ServiceMix is really the same as the pure Apache version, but with the potential to buy support and consultancy alongside.&lt;/div&gt;&lt;div&gt;A couple of popular links to get going:&lt;/div&gt;&lt;div&gt;This question on stackoverflow reflects what I found - the documentation is out of date: &lt;a href="http://stackoverflow.com/questions/3501581/tutorial-for-servicemix-4-2"&gt;http://stackoverflow.com/questions/3501581/tutorial-for-servicemix-4-2&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This is a succinct first-steps tutorial: &lt;a href="http://www.ithoughts.de/getting-started-with-servicemix-4-2-and-webservices-with-maven-and-eclipse-on-windows"&gt;http://www.ithoughts.de/getting-started-with-servicemix-4-2-and-webservices-with-maven-and-eclipse-on-windows&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I think I'll be writing more about ServiceMix in the next few months...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-4268566431356553855?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/4268566431356553855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=4268566431356553855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4268566431356553855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4268566431356553855'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2012/01/servicemix.html' title='Servicemix'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3868861312671759820</id><published>2011-09-08T08:19:00.003Z</published><updated>2011-09-08T08:23:31.724Z</updated><title type='text'>Eclipse VM settings reminder!</title><content type='html'>You need to make sure your Eclipse is running with a JDK, not just a JRE&lt;br /&gt;eclipse.ini needs something like the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-startup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;--launcher.library&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-product&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;org.eclipse.epp.package.jee.product&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;--launcher.defaultAction&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;openFile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;--launcher.XXMaxPermSize&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1024M&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-showsplash&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;org.eclipse.platform&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;--launcher.XXMaxPermSize&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1024m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;--launcher.defaultAction&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;openFile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-vm &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;C:\Program Files\Java\jdk1.7.0\bin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-vmargs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Dosgi.requiredJavaVersion=1.5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xms256m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xmx1024m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that the path to the JDK must be the full path to the executable (i.e. include the /bin), and the path must be on a NEW LINE after the "-vm".&lt;br /&gt;Don't forget to adjust your PermGen and Heap sizes whilst you're about it - see above for the relevant settings...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-3868861312671759820?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3868861312671759820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3868861312671759820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3868861312671759820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3868861312671759820'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2011/09/eclipse-vm-settings-reminder.html' title='Eclipse VM settings reminder!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3639070875758450245</id><published>2011-04-20T13:28:00.003Z</published><updated>2011-04-20T14:01:27.961Z</updated><title type='text'>Weblogic JMS and SAF - notes</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-GB&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin-top:0cm;  mso-para-margin-right:0cm;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-fareast-language:EN-US;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;h1&gt;&lt;a name="_Toc288214986"&gt;Introduction&lt;/a&gt;&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;This provides some info and background information needed to configure and operate Weblogic messaging (partly using SAF).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;We start with a discussion of how Weblogic JMS and SAF (Store-And-Forward) will be used to enable this traffic, including its features and limitations. &lt;span style=""&gt; &lt;/span&gt;Then the specific configuration steps are given, including things to note and watch out for which were learnt during the Proof Of Concept phase. After that, there is some information about how to operate and troubleshoot&lt;span style=""&gt;  &lt;/span&gt;the connection, plus whatever extra information might be useful.&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 36pt; margin-right: 0cm;"&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;I have put the actual configuration steps which need to be executed via the Weblogic console (as opposed to the discussion and background information etc.) in these green boxes.&lt;br /&gt;NB 1: each update on the Weblogic console is enclosed within “Lock &amp;amp; Edit” and “Activate Changes”, to ensure that each one is applied successfully before proceeding.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;NB 2: be careful as some of the resource names are long and split up over two lines in this document!&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;NB 3: bear in mind a useful and comprehensible naming convention for the Weblogic JMS/SAF resources! e.g.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; text-indent: 36pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;resource_type&gt;-ComponentName&lt;/resource_type&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;(This is because if they all start with the same ComponentName, they kind of look the same, if you happen to only have browser width only able to show the first few characters.)&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 0cm; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt; &lt;/p&gt;  &lt;/div&gt;  &lt;h1&gt;&lt;a name="_Toc288214987"&gt;Environment&lt;/a&gt;&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;The aim here is to get a Weblogic domain talking to another Weblogic domain for the purposes of exchanging JMS traffic for messaging requirements. This involves setting up Weblogic JMS and SAF (Store-And-Forward) configurations to provide access to JMS Destinations on each domain. If you are using OSB/ALSB, ALSB components (proxy and business services) will also have to be written which will make use of the JMS/SAF configuration, so that needs to be in place before the ALSB components will work.&lt;/p&gt;  &lt;h1&gt;&lt;a name="_Toc288214989"&gt;The Solution&lt;/a&gt;&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;The capability to send JMS messages between the two domains will be provided using Weblogic JMS and its SAF (Store And Forward) feature. This feature allows JMS messages to be sent from one domain to another, being queued in the originating domain should the destination not be available. This is achieved by configuring a real Weblogic JMS queue in the destination domain, and “importing” that destination into the originating domain using the SAF resources. The Message Producing component is therefore sending to an imported representation of a real, remote queue. Message Consumers will consume from the “real” JMS destination and be unaware of it being anything to do with SAF.&lt;/p&gt;  &lt;h1&gt;&lt;a name="_Toc288214990"&gt;Configuration&lt;/a&gt;&lt;/h1&gt;  &lt;h2&gt;&lt;a name="_Toc288214991"&gt;Domain Trust&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;In order to exchange messages via SAF, the two domains involved will need to “trust” each other. This means they need to share the same domain credential. We will need to agree with the other side the domain credential to use, and both sides will need to set it on their domain. See this page for explanation: &lt;a href="http://download.oracle.com/docs/cd/E13222_01/wls/docs92/ConsoleHelp/taskhelp/security/EnableTrustBetweenDomains.html"&gt;http://download.oracle.com/docs/cd/E13222_01/wls/docs92/ConsoleHelp/taskhelp/security/EnableTrustBetweenDomains.html&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Extract from this page reproduced here:&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt;"&gt;  &lt;p class="MsoNormal" style="border: medium none; padding: 0cm;"&gt;“Trust between domains is established so that principals in a Subject from one WebLogic Server domain are accepted as principals in another domain. When this feature is enabled, identity is passed between WebLogic Server domains over an RMI connection without requiring authentication in the second domain. When inter-domain trust is enabled, transactions can commit across domains. A trust relationship is established when the Domain Credential for one domain matches the Domain Credential for another domain.&lt;/p&gt;  &lt;p class="MsoNormal" style="border: medium none; padding: 0cm;"&gt;By default, the Domain Credential is randomly generated and therefore, no two domains will have the same Domain Credential. If you want two WebLogic Server domains to interoperate, you need to replace the generated credential with a credential you select, and set the same credential in each of the domains.”&lt;/p&gt;  &lt;/div&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 18pt; margin-right: 0cm;"&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In Weblogic console, go to: Home -&amp;gt; Domain -&amp;gt; Security (tab)&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Lock &amp;amp; Edit” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Advanced”&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Update “Credential” and “Confirm Credential” to be the agreed value&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Activate Changes” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;6.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Restart the entire Weblogic domain (all servers, inluding the Admin server)&lt;/p&gt;  &lt;/div&gt;  &lt;h2&gt;&lt;a name="_Toc288214992"&gt;JMS Server&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;Do we actually need any extra JMS Servers? A suitable JMS server or servers (for the cluster) may already be available. This implies that suitable File Stores are also already set up, which are used by default.&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288214993"&gt;JMS Module&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;This JMS Module groups all the configuration related to the SAF communication into one place. Is a good idea to group these configs together or you will lose stuff.&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 18pt; margin-right: 0cm;"&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In Weblogic console, go to: Home -&amp;gt; Messaging -&amp;gt; JMS Modules&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Lock &amp;amp; Edit” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Module “JMSModule-ThisComponent”&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;Target the module to the local cluster&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;6.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Activate Changes” button&lt;/p&gt;  &lt;/div&gt;  &lt;h2&gt;&lt;a name="_Toc288214994"&gt;JMS Subdeployment&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;This is to group together the components which need to be deployed together&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 18pt; margin-right: 0cm;"&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In Weblogic console, go to: Home -&amp;gt; Messaging -&amp;gt; JMS Modules -&amp;gt; JMSModule-ThisComponent&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click on “Subdeployments” tab&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Lock &amp;amp; Edit” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Subdeployment “JMSSubDep-ThisComponent”&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;Target the subdeployment to the local cluster&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;6.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Activate Changes” button&lt;/p&gt;  &lt;/div&gt;  &lt;h2&gt;&lt;a name="_Toc288214995"&gt;JMS Connection Factories&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;Define the connection factories needed to support the message producers/consumers – or use the default ones...&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 19.5pt; text-indent: -18pt;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;One to support the outbound producer&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 19.5pt; text-indent: -18pt;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;One to support the inbound consumer&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 18pt; margin-right: 0cm;"&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In Weblogic console, go to: Home -&amp;gt; Messaging -&amp;gt; JMS Modules -&amp;gt; JMSModule-ThisComponent&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Lock &amp;amp; Edit” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Connection Factory:&lt;br /&gt;choose a sensible name!&lt;br /&gt;Set JNDI name the same as the resource name&lt;br /&gt;Accept all defaults and set Subdeployment to “JMSSubDep-ThisComponent”&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Connection Factory:&lt;br /&gt;Choose a sensible name!&lt;br /&gt;Set JNDI name the same as the resource name&lt;br /&gt;Accept all defaults and set Subdeployment to “JMSSubDep-ThisComponent”&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Connection Factory:&lt;br /&gt;Choose a sensible name!&lt;br /&gt;Set JNDI name the same as the resource name&lt;br /&gt;Accept all defaults (&lt;b style=""&gt;&lt;i style=""&gt;except below&lt;/i&gt;&lt;/b&gt;) and set Subdeployment to “JMSSubDep-ThisComponent”&lt;br /&gt;Go to “Default Delivery” tab. Set “Default Time-to-Deliver” to 600000 (this would be a separate connection factory in case you wanted to have a retry facility which would put messages back onto the queue, but with a delay, to stop an immediate retry...)&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;6.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;Click “Activate Changes” button&lt;/p&gt;  &lt;/div&gt;  &lt;h2&gt;&lt;a name="_Toc288214996"&gt;JMS Queues&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;This defines the JMS Queue that will support incoming messages. Note that we don’t define a queue for the outbound messages, this will be handled via an imported SAF Destination, which we’ll come to later.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The queue is a Uniform Distributed Queue and has a Forward Delay option set to 10 seconds, to ensure that messages which land on a member queue which doesn’t have a consumer get automatically forwarded to another member queue which does have a consumer, if possible.&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 18pt; margin-right: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In Weblogic console, go to: Home -&amp;gt; Messaging -&amp;gt; JMS Modules -&amp;gt; JMSModule-ThisComponent  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Lock &amp;amp; Edit” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Distributed Queue:&lt;br /&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:8pt;"  &gt;ThisComponent.QueueName&lt;/span&gt;&lt;br /&gt;Set JNDI name the same as the resource name&lt;br /&gt;Accept all defaults&lt;br /&gt;Click on “Advanced Targeting” and set Subdeployment to “JMSSubDep-ThisComponent”.&lt;br /&gt;Save&lt;br /&gt;Re-enter the newly created Queue. On the Configuration General tab, set “Forward Delay” to 10.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Activate Changes” button&lt;/p&gt;  &lt;/div&gt;  &lt;h2&gt;&lt;a name="_Toc288214997"&gt;Weblogic Store-And-Forward (SAF) Configuration&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;This contains the configuration which is needed to support the cross-domain JMS traffic for the outbound messages. Note that we don’t configure here anything to do with the inbound messages. They are dealt with in the previous section, and the idea is that the other side will have a corresponding imported SAF Destination on their side to support it.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;To configure SAF, you first need a Store-and-Forward agent deployed on the cluster. Then you can import destinations which reside on remote Weblogic instances. This involves adding a “SAF Remote Context” which will instruct SAF to point to the remote Weblogic cluster at the URL provided by the other side. A “SAF Error Handling” resource is also added which determines what to do when problems occur. Then a “SAF Imported Destinations” resource is added to specify which queues should be imported from the Remote Context. All these resources are bundled up in the JMS Module we created earlier.&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 4pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); margin-left: 18pt; margin-right: 0cm;"&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;See Implementation Script document for definitive version of these steps!&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;In Weblogic console, go to: Home -&amp;gt; Messaging -&amp;gt; Store-and-Forward Agents&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Lock &amp;amp; Edit” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new Store-and-Forward Agent “SAFAgent-ThisComponent”&lt;br /&gt;Accept all defaults&lt;br /&gt;Target to the local cluster&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Go to: Home -&amp;gt; Messaging -&amp;gt; JMS Modules -&amp;gt; JMSModule-ThisComponent so that you can add new resources to the module&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;6.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new “SAF Error Handling” resource named “ErrorHandling-ThisComponent”&lt;br /&gt;Change Message Handling Policy to “Log”&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;7.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new “Remote SAF Context” resource named “RemoteSAFContext-ThisComponent”&lt;br /&gt;Set URL to that of the appropriate remote system for this environment (e.g. “t3://remotesystem:7001”).&lt;br /&gt;Set the remote credentials (User Name and Password) which will be used&lt;br /&gt;Accept other defaults&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;8.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Add new “SAF Imported Destinations” resource named “SAFImportedDestinations-ThisComponent”&lt;br /&gt;set Remote SAF Context to “RemoteSAFContext-ThisComponent”&lt;br /&gt;set SAF Error Handling to “ErrorHandling-ThisComponent”&lt;br /&gt;Target to the “JMSSubDep-ThisComponent” subdeployment&lt;br /&gt;Save&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;9.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Re-enter the newly created “SAFImportedDestinations-ThisComponent” resource&lt;br /&gt;Click on Configuration tab, Queues sub-tab&lt;br /&gt;Add new SAF Queue with name of the real remote queue where we should be putting the outbound messages. See table below.&lt;br /&gt;Remote JNDI name should be the same&lt;br /&gt;Finish&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;10.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Click “Activate Changes” button&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 18pt; text-indent: -18pt; background: none repeat scroll 0% 0% rgb(146, 208, 80); border: medium none; padding: 0cm;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;11.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;It may be advisable to restart the domain to ensure everything is reinitialized with the new configuration and there aren’t any old bits and pieces hanging around. Weblogic does sometimes throw confusing errors which miraculously go away after a restart.&lt;/p&gt;  &lt;/div&gt;  &lt;h1&gt;&lt;a name="_Toc288214998"&gt;Post-configuration checks&lt;/a&gt;&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;After the configuration above is done, and everything’s up and running, we should be in a position to see messages flowing across the domains, assuming you’ve got some way of creating test messages and JMS producers onto the SAF queue... (or consumers onto the real inbound queue).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you’re going via OSB/ALSB you could use a Proxy service to create test messages...Create a test message with the proxy and check that it goes out and appears in the safagent logs (assuming you’ve switched on the message logging for the SAF destinations).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;For the inbound messages, we need to have some sort of harness which simulates the remote systems (unless we have connectivity to a real one), and puts a suitable message onto an imported SAF queue, which will forward it to the REAL queue which has been added (as part of the above script) to our domain, and in turn will get picked up by whatever is listening/consuming that queue. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;There is a bit of test Java code (QueueEchoer/QueueSender) from the POC stage to help with simulating the message flow, which could be set up to talk to whatever domains we have available. There are plenty of sample JMS Message Producer/Consumer java classes to try out on t’internet.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;To point a producer to a SAF queue, you need to point it at the cluster address that the Destination (assuming it’s a Distributed&lt;span style=""&gt;  &lt;/span&gt;Destination) is on. You can get the cluster address from the Weblogic console: Log into the Weblogic console, and navigate to “Clusters”. For the active cluster, copy the “Cluster Address” This could be something like “host1:7001,host2:7001,host3:7001” if there are multiple Weblogic instances that it’s deployed to...&lt;/p&gt;  &lt;h1&gt;&lt;a name="_Toc288214999"&gt;Environments&lt;/a&gt;&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;You will probably want to set up configurable properties for things like:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 19.5pt; text-indent: -18pt;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;the remote system URL&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 19.5pt; text-indent: -18pt;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;the destination cluster address (if applicable)&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 19.5pt; text-indent: -18pt;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;the user name and password for the SAF context&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 19.5pt; text-indent: -18pt;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;etc.&lt;/p&gt;  &lt;h1&gt;&lt;a name="_Toc288215000"&gt;Troubleshooting&lt;/a&gt;&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;A random collection of notes concerning possible pitfalls and things learnt about Weblogic JMS/SAF...&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288215001"&gt;“ServerIdentity failed validation. Downgrading to anonymous.”&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;If you see this in the logs it may mean that the domains don’t trust each other. See the above section on enabling domain trust.&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288215002"&gt;Firewalls&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;If SAF fails to connect, one thing to make sure is that any necessary ports are opened on the firewall(s).&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288215003"&gt;Debug logs for SAF&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;To debug SAF, use the Debug tab in the Server page and enable the jms.saf.DebugJMSSAF (+DebugMessaging) options. Also you need to ensure the debug options in the server(s) Logging tabs are set to Debug at least. Then restart the server(s). Log items referring to “JMSSAF” and other JMS-related items should start appearing in the server logs (suggestion: tail –f logname.log | grep “JMSSAF”).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;It may also be useful to switch on Message Logging in the JMS Queue resources themselves. These get written to a jms.message.log file in the server logs directory. SAF messages can also be logged, these appear in files in the safagents subdirectory of the server logs directory. &lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288215004"&gt;Patch Level&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;There have been various rumours of known problems with SAF on Weblogic 9, although we haven’t encountered any - yet. According to registry.xml in the BEA Weblogic folder on our Dev system, we are at the following patch level of Weblogic 9.2: &lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 36pt;"&gt;level=9.2 ServicePackLevel=1 PatchLevel=0&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288215005"&gt;JMS resources not targeted properly?&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;Ensure “Default Targeting Enabled” isn’t ticked, and the items are deployed on the correct server, targeted to the right subdeployment, etc. Check they appear in the JNDI tree (any JNDI tree for the cluster should do, as cluster-available resources will appear in all the server-level JNDI trees).&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Toc288215006"&gt;“Server Affinity” setting&lt;/a&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;This setting is connected with load balancing and has been identified as something which needs to be switched on in the connection factories. It should be on by default, add something in the scripts to check that this is definitely the case when the connection factories are created.&lt;/p&gt;  &lt;h2&gt;Messages/SAF Agent hangs?&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;Apparently can happen, especially if patches aren’t in. Apart from the list of possible patches which could help with this, check the following: need to ensure the JMS destination for the business service, which will actually send to the SAF queue, has got all the cluster hosts/ports mentioned. If you just have one it maybe a problem? E.g. check outbound message producer – is it pointing to an endpoint something like “t3://host1:7210,host2:7210/ConnexFactory/SAFQueueName”...&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-3639070875758450245?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3639070875758450245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3639070875758450245' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3639070875758450245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3639070875758450245'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2011/04/weblogic-jms-and-saf-notes.html' title='Weblogic JMS and SAF - notes'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-6029671388889576496</id><published>2011-03-29T12:34:00.003Z</published><updated>2011-03-29T12:39:08.248Z</updated><title type='text'>Connecting JMX client to Weblogic</title><content type='html'>There is an "experimental" JMX client inside the JDK called jconsole. You can start this GUI and then enter a Remote connection address for your Weblogic server.&lt;br /&gt;&lt;br /&gt;To enable it to connect however, you have to add the JMX options to the Weblogic startup. (See this page: http://malliktalksjava.wordpress.com/2010/08/19/enabling-jmx-port-in-weblogic/)&lt;br /&gt;&lt;br /&gt;This involves editing your setDomainEnv.cmd script for your Weblogic domain, and adding some options:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;set JAVA_OPTIONS= %JAVA_OPTIONS%&lt;br /&gt;-Dcom.sun.management.jmxremote&lt;br /&gt;-Dcom.sun.management.jmxremote.port=8006&lt;br /&gt;-Dcom.sun.management.jmxremote.ssl=false&lt;br /&gt;-Dcom.sun.management.jmxremote.authenticate=false&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then restart Weblogic. It should now be listening on port 8006 for clients.&lt;br /&gt;&lt;br /&gt;Start jconsole, enter address in Remote tab, and Connect. You should now be able to browse MBeans. My Weblogic is running Sun Java 5, not sure if it's the same if you're running it under JRockit or something else...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-6029671388889576496?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/6029671388889576496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=6029671388889576496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6029671388889576496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6029671388889576496'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2011/03/connecting-jmx-client-to-weblogic.html' title='Connecting JMX client to Weblogic'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5606960665167775097</id><published>2011-03-28T15:21:00.002Z</published><updated>2011-03-28T15:33:23.527Z</updated><title type='text'>WLST to get some info about a Weblogic JMS/SAF Resource...</title><content type='html'>Example script of how to get a statistic (in this case the BytesReceivedCount) from a SAF resource (queue/topic)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Connect to Weblogic server&lt;br /&gt;# NB choose right port if you want to talk to a Managed Server instead of&lt;br /&gt;# the Admin server...&lt;br /&gt;connect('weblogic','weblogic','t3://localhost:7003')&lt;br /&gt;serverRuntime()&lt;br /&gt;&lt;br /&gt;# For a JMS resource:&lt;br /&gt;cd('/JMSRuntime/servername.jms/JMSServers/jmsservername/Destinations/JMSModuleName!jmsservername@JMSDestinationName')&lt;br /&gt;&lt;br /&gt;# For a SAF resource:&lt;br /&gt;cd('/SAFRuntime/servername.saf/Agents/SAFAgentName/RemoteEndpoints/JMSModule!SAFImportedDestinations!SAFDestinationName')&lt;br /&gt;&lt;br /&gt;count = cmo.getBytesReceivedCount()&lt;br /&gt;print 'bytes received = %d' % count&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Note the &lt;code&gt;serverRuntime()&lt;/code&gt; call which connects you to the runtime tree for the server you're interested in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-5606960665167775097?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5606960665167775097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5606960665167775097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5606960665167775097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5606960665167775097'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2011/03/wlst-to-get-some-info-about-weblogic.html' title='WLST to get some info about a Weblogic JMS/SAF Resource...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-117603334362202944</id><published>2010-06-15T11:34:00.005Z</published><updated>2010-06-16T08:52:22.894Z</updated><title type='text'>Oracle BPEL: Correlation sets</title><content type='html'>Useful post on correlation sets:&lt;br /&gt;&lt;br /&gt;http://swapnil-soa.blogspot.com/2008/01/correlation-this-post-would-effort-to.html&lt;br /&gt;&lt;br /&gt;The thing that it took me a while to realize is this. The "properties" of the correlation set are those values which are needed to correlate messages. The way to think of it is that you need to remember which instance you are going back to, like in the example of the flight request. If a flight agent fires off ten reservation requests, with a unique ID in each, then how do you tell which response has come back? You look at the ID which is returned by the flight system, and route the response to the corresponding instance. This isn't the same as putting a correlation ID into the correlationSet even before the message has gone anywhere, it's picking an ID from the message and looking for the same ID on the way back in order to know which reply has come back (and therefore which instance to use). God that was confused, the guy who wrote the above blog post puts it better.&lt;br /&gt;&lt;br /&gt;To put it in concrete terms. If you want to correlate a message with a particular instance, when you've got three different services working togethetr, then do the following.&lt;br /&gt;&lt;br /&gt;Here we have three services:&lt;br /&gt;CallingService - this sends a message to the WorkerService, which starts up and then waits for a second message (different operation) to tell it to finish.&lt;br /&gt;WorkerService - receives an incoming message from the initiate operation, then waits pending receipt of a "stop" operation message to tell it to finish. Worker service, in its contract, includes an "id" (string or integer or whatever) to correlate on.&lt;br /&gt;StopService - this sends the "stop" message to the WorkerService, using the same ID in the input message which has been set up to correlate on.&lt;br /&gt;&lt;br /&gt;The flow proceeds as follows:&lt;br /&gt;1. CallingService sets up an ID of "id0001" in the message to WorkerService&lt;br /&gt;2. CallingService calls "initiate" on WorkerService, with the ID (NB: no correlationSet defined in CallingService!!)&lt;br /&gt;3. CallingService now ends or does other stuff.&lt;br /&gt;4. WorkerService has defined a correlationSet in which is defined a property (and property alias) pointing to the ID in its input message for the initiate operation&lt;br /&gt;5. the WorkerService instance starts up, receives the input data and immediately goes into a wait, pending receipt of a "stop" message correlated on the ID. Note that the stop message has the same input request message as the "initiate" operation.&lt;br /&gt;6. The StopService is invoked.  (NB: no correlationSet defined in StopService!!) This invokes the WorkerService "stop" operation, which is defined to use the same input request message as the "initiate" operation, so it also has the ID field. So the ID "id0001" is set up in the request message before the "stop" is invoked.&lt;br /&gt;7. The WorkerService instance is now woken up as it has correlated on the ID field in the message. This ensures that the right instance is invoked. If there are several waiting for a "stop", only the instance waiting on the ID of "id0001" will be woken up.&lt;br /&gt;8. WorkerService instance for ID "id0001" now finishes its work.&lt;br /&gt;&lt;br /&gt;Don't forget that in this scenario ONLY the service which is waiting around (WorkerService) needs to do or know anything about correlationSets. The correlation ID passed by the CallerService and the StopService are just part of the regular data passed in on the input request. No need to define correlationSets on these two services.&lt;br /&gt;&lt;br /&gt;One other thing. I got into a problem because both my operations were using the same input request message XML element, although different SOAP Actions. You should use different request message structures (best practice!). The properties for the correlation can point to different places in different messages - i.e. same property id but different XPath depending on the message!&lt;br /&gt;&lt;br /&gt;This post is useful BPEL background on correlation:&lt;br /&gt;http://www.ibm.com/developerworks/webservices/library/ws-bpelcol6/&lt;br /&gt;&lt;br /&gt;See also Anthony Reynolds on the subject:&lt;br /&gt;http://blogs.oracle.com/reynolds/2005/12/bpel_correlation.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-117603334362202944?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/117603334362202944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=117603334362202944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/117603334362202944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/117603334362202944'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2010/06/oracle-bpel-correlation-sets.html' title='Oracle BPEL: Correlation sets'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-2624937185453401106</id><published>2010-06-08T12:16:00.003Z</published><updated>2010-06-08T12:38:30.333Z</updated><title type='text'>Oracle BPEL Worklist Application</title><content type='html'>Note to self on Oracle BPEL/BPM/BPA Human Interaction / Worklist task handling...&lt;br /&gt;&lt;br /&gt;To add a Worklist interaction to a BPEL process, add a "Human Task" from the Component Palette. By default, this is set up with an Invoke to initiate the task, and also a Receive to receive the response.&lt;br /&gt;&lt;br /&gt;The Receive causes the task to return immediately, which doesn't help if you want to try out the actual Human Interaction bit. If you comment out the Receive, and replace it with a Pick on the same partner link (to wait for an "onTaskCompleted" message (or it could be "onTaskAssigned", or "onTaskUpdated", or even "onSubTaskUpdated", depending what you want to do with it...)), you can cause it to wait for a real response. I'll come to generating that in a minute.&lt;br /&gt;&lt;br /&gt;On the Pick, also add an Alarm branch to cause it to time out after, say, 30 minutes.&lt;br /&gt;After the Pick, by default a set of options are generated to handle what comes back from the task once it has been dealt with. The default outcomes are APPROVE and REJECT, but the outcome can also become EXPIRED, STALE, and others.&lt;br /&gt;&lt;br /&gt;Adding the Human Task also causes a .task to be opened, with a whole bunch of defaults filled in. For a test, you can set the task to be completed by a valid user "approving" or "rejecting" the task. To set the Human Task up to do this, open up the Assignment and Routing Policy section and click on the green plus to add a Participant. Fill in the dialogue to add a name with a userid of "bpeladmin". This allows you to use a default user who should be included in the default installation. You should now see that you have one user acting as a "SingleApprover". Save the Human Task.&lt;br /&gt;&lt;br /&gt;If you now deploy and invoke the BPEL process, you should now see a process instance sitting there waiting for the Human Task to complete.&lt;br /&gt;&lt;br /&gt;To complete the Human Task, you need to log onto the Worklist Application provided in the default install. Under Windows, if you're running the BPEL/BPM on your local machine, the default Worklist application is under Start -&gt; All Programs -&gt; &lt;OracleHome&gt; -&gt; Oracle BPEL Process Manager -&gt; Worklist Application.&lt;br /&gt;This resolves to the URL where the Worklist application is running. It'll be something like:&lt;br /&gt;http://localhost:8888/integration/worklistapp/Login&lt;br /&gt;&lt;br /&gt;If you login with the user that you used for the task - a usable default one seems to be "bpeladmin" with password of "welcome1". This should log you into the BPM Worklist Application and you should see the Task sitting there in the "My Tasks" section of the logged-in user.&lt;br /&gt;&lt;br /&gt;You can now choose what to do with the task. If you "approve", or "reject", you should then see the BPEL process instance completing on the BPEL console.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-2624937185453401106?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/2624937185453401106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=2624937185453401106' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2624937185453401106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2624937185453401106'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2010/06/oracle-bpel-worklist-application.html' title='Oracle BPEL Worklist Application'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-1128937079052690467</id><published>2010-06-01T09:00:00.005Z</published><updated>2010-06-03T12:03:13.444Z</updated><title type='text'>How to stop an Oracle AQ queue</title><content type='html'>Run the following as an anonymous block of PL/SQL:&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;DBMS_AQADM.STOP_QUEUE(queue_name =&gt; 'my_queue_name', enqueue =&gt; false, dequeue =&gt; true);&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;The above stops dequeuing from the queue (because dequeue=true).&lt;br /&gt;The opposite command is START_QUEUE.&lt;br /&gt;&lt;br /&gt;Useful post on working with AQ:&lt;br /&gt;http://www.oracle-developer.net/display.php?id=411&lt;br /&gt;&lt;br /&gt;And if you're looking for how to view the data that's on your queue, see this page:&lt;br /&gt;http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html&lt;br /&gt;Very useful post on how to look into the data, e.g.&lt;br /&gt;SELECT QT.USER_DATA.TEXT_VC FROM &amp;lt;queue table name&amp;gt; QT;&lt;br /&gt;(note use of QT table alias to refer to it...)&lt;/queue&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-1128937079052690467?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/1128937079052690467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=1128937079052690467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1128937079052690467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1128937079052690467'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2010/06/how-to-stop-oracle-aq-queue.html' title='How to stop an Oracle AQ queue'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-2592695734076718777</id><published>2010-01-04T17:27:00.000Z</published><updated>2011-03-28T13:28:30.343Z</updated><title type='text'>Oracle BPEL (10g): Email Activity</title><content type='html'>Noticed that, if you create an Email Activity, the Oracle BPEL Process Designer will default to using the multipart options. Which means that even if you just want some plain text, you'll end up with an email which has no text but 1 attachment (containing your text). You can untick the "multipart" option in the Email dialogue, but if you go back into the design view, it will be re-ticked. So, save your option without going back into the Design View!! Also, you may need to set the MIME option manually from "text/html" to "text/plain" (in the Source view) or Outlook won't display it right by default. What a fuss, eh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-2592695734076718777?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/2592695734076718777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=2592695734076718777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2592695734076718777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2592695734076718777'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2010/01/oracle-bpel-10g-email-activity.html' title='Oracle BPEL (10g): Email Activity'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3843868827402884600</id><published>2009-09-15T09:52:00.004Z</published><updated>2009-09-15T12:01:21.146Z</updated><title type='text'>Yes No Probably</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_koYWWC7jByk/Sq9kEZ6bCNI/AAAAAAAAAD4/AqPS2KFB4zA/s1600-h/ynp.bmp"&gt;&lt;img style="cursor: pointer; width: 363px; height: 45px;" src="http://2.bp.blogspot.com/_koYWWC7jByk/Sq9kEZ6bCNI/AAAAAAAAAD4/AqPS2KFB4zA/s320/ynp.bmp" alt="" id="BLOGGER_PHOTO_ID_5381630106569214162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Infuriating. They have deliberately left out one option (and the one I would probably tick): "Probably Not".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-3843868827402884600?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3843868827402884600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3843868827402884600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3843868827402884600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3843868827402884600'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/09/yes-no-probably.html' title='Yes No Probably'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_koYWWC7jByk/Sq9kEZ6bCNI/AAAAAAAAAD4/AqPS2KFB4zA/s72-c/ynp.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-2467422373288411086</id><published>2009-09-13T10:15:00.003Z</published><updated>2009-09-13T10:20:55.079Z</updated><title type='text'>Oh FFS</title><content type='html'>All I want to do is extract a few 100MB of zip file to my Desktop, and here's what Windows tells me:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_koYWWC7jByk/SqzHA8n8X9I/AAAAAAAAADw/ys6MmobXAXQ/s1600-h/ffs.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 153px;" src="http://2.bp.blogspot.com/_koYWWC7jByk/SqzHA8n8X9I/AAAAAAAAADw/ys6MmobXAXQ/s320/ffs.bmp" alt="" id="BLOGGER_PHOTO_ID_5380894473888489426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Why can't they bloody well fix this sort of moronicness?&lt;br /&gt;Cf. &lt;a href="http://xkcd.com/612/"&gt;this&lt;/a&gt; cartoon.&lt;br /&gt;&lt;img src="file:///C:/Users/Paul/AppData/Local/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-2467422373288411086?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/2467422373288411086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=2467422373288411086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2467422373288411086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2467422373288411086'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/09/oh-ffs.html' title='Oh FFS'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_koYWWC7jByk/SqzHA8n8X9I/AAAAAAAAADw/ys6MmobXAXQ/s72-c/ffs.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-383989341800333865</id><published>2009-08-26T16:56:00.000Z</published><updated>2011-03-28T13:28:30.345Z</updated><title type='text'>Useful article on WSDL styles...</title><content type='html'>is &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/"&gt;here&lt;/a&gt;. Very good summary. An overview would be:&lt;br/&gt;&lt;br/&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;rpc-encoded&lt;/strong&gt;&lt;/span&gt;: SOAP body has a child with the method name. Child elements of the method are type encoded e.g. with an xsi:type attribute. Not WS-I compliant.&lt;br/&gt;&lt;br/&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;rpc-literal&lt;/strong&gt;&lt;/span&gt;: similar to rpc-encoded but the child elements don't have type attributes, which are probably overhead anyway, but means the message can't be validated.&lt;br/&gt;&lt;br/&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;document-encoded&lt;/strong&gt;&lt;/span&gt;: is never used.&lt;br/&gt;&lt;br/&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;document-literal&lt;/strong&gt;&lt;/span&gt;: no element inside the SOAP body which tells you which method to invoke. Maybe that's fine if you know what sort of content to expect, e.g. on a particular messaging channel, or URL.&lt;br/&gt;&lt;br/&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;document-literal-wrapped&lt;/strong&gt;&lt;/span&gt;: variant of the above, but with a child element of the SOAP body to wrap the parameters to a method, which gives you an easy way to dispatch the method to a handler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-383989341800333865?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/383989341800333865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=383989341800333865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/383989341800333865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/383989341800333865'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/08/useful-article-on-wsdl-styles.html' title='Useful article on WSDL styles...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-2922531032313415907</id><published>2009-07-09T14:54:00.000Z</published><updated>2011-03-28T13:28:30.346Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>Local WSDL</title><content type='html'>When wsimport creates artefacts for accessing a web service, it uses the URL which you specify. However maybe you don't want requests for that WSDL traversing the network when you access a service. In these cases you can store the WSDL locally and access it as a local resource.&lt;br/&gt;&lt;br/&gt;To do this, do something like:&lt;br/&gt;URL wsdlURL = this.getClass().getClassLoader().getResource("MyTestService.wsdl");&lt;br/&gt;if (wsdlURL==null) {&lt;br/&gt;LOG.error("unable to get WSDL from local file...");&lt;br/&gt;} else {&lt;br/&gt;LOG.debug("Getting WSDL from: " + wsdlURL.toExternalForm());&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;This should try to retrieve the WSDL from somewhere accessible by the application. In practice, you need to put the WSDL on the classpath, for example in the "WEB-INF/classes" folder.&lt;br/&gt;&lt;br/&gt;I needed to do this because the JBoss I'm deploying to doesn't support OASIS Catalogs, so you can't point an application to local WSDL by means of the jax-ws-catalog.xml file that I posted about &lt;a href="http://www.merlesystems.co.uk/wordpress/?p=19"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-2922531032313415907?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/2922531032313415907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=2922531032313415907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2922531032313415907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2922531032313415907'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/07/local-wsdl.html' title='Local WSDL'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-2722129758657761901</id><published>2009-07-03T07:03:00.001Z</published><updated>2009-07-03T07:03:38.068Z</updated><title type='text'>First time i've seen this...</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://4.bp.blogspot.com/_koYWWC7jByk/Sk2tSRjv29I/AAAAAAAAADo/V0CLmuvrQE0/s1600-h/image-upload-237-717093.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_koYWWC7jByk/Sk2tSRjv29I/AAAAAAAAADo/V0CLmuvrQE0/s320/image-upload-237-717093.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-2722129758657761901?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/2722129758657761901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=2722129758657761901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2722129758657761901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2722129758657761901'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/07/first-time-i-seen-this.html' title='First time i&amp;#39;ve seen this...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_koYWWC7jByk/Sk2tSRjv29I/AAAAAAAAADo/V0CLmuvrQE0/s72-c/image-upload-237-717093.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-8247052863580341906</id><published>2009-07-01T10:15:00.000Z</published><updated>2011-03-28T13:28:30.348Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAXB'/><title type='text'>JAXB list mappings</title><content type='html'>If you have an object to serialize to XML using JAXB which contains a List, for example:&lt;br/&gt;List&amp;lt;String&amp;gt; things;&lt;br/&gt;public List&amp;lt;String&amp;gt; getThings() {&lt;br/&gt;return things;&lt;br/&gt;}&lt;br/&gt;public void setThings(List&amp;lt;String&amp;gt; things) {&lt;br/&gt;this.things = things;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;the default serialization for this is into a list of elements as follows:&lt;br/&gt;&amp;lt;things&amp;gt;thing 1&amp;lt;/things&amp;gt;&lt;br/&gt;&amp;lt;things&amp;gt;thing 2&amp;lt;/things&amp;gt;&lt;br/&gt;&amp;lt;things&amp;gt;thing 3&amp;lt;/things&amp;gt;&lt;br/&gt;&lt;br/&gt;This is not quite what I want, because I want it to be clear to the consumer that there's a list and that each item in the list is intuitively named:  e.g. having a wrapper called &amp;lt;things&amp;gt; and each item being in an element called &amp;lt;thing&amp;gt;. To do this, use some JAXB annotations to set the element name and also a name for a wrapper element to hold the list. For example:&lt;br/&gt;@XmlElementWrapper(name="things")&lt;br/&gt;@XmlElement(name="thing")&lt;br/&gt;&lt;br/&gt;Note that these annotations need to be on the getter method, it won't work if you put them on the variable declaration (or on the setter method for that matter). What this will give you (if you initialize the list with data) is something like this:&lt;br/&gt;&amp;lt;things&amp;gt;&lt;br/&gt;&amp;lt;thing&amp;gt;thing 1&amp;lt;/thing&amp;gt;&lt;br/&gt;&amp;lt;thing&amp;gt;thing 2&amp;lt;/thing&amp;gt;&lt;br/&gt;&amp;lt;thing&amp;gt;thing 3&amp;lt;/thing&amp;gt;&lt;br/&gt;&amp;lt;/things&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-8247052863580341906?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/8247052863580341906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=8247052863580341906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8247052863580341906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8247052863580341906'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/07/jaxb-list-mappings.html' title='JAXB list mappings'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-6655000571446634868</id><published>2009-06-25T13:26:00.002Z</published><updated>2009-06-25T13:30:17.125Z</updated><title type='text'>Waitrose Sandwich</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_koYWWC7jByk/SkN72WNJ7_I/AAAAAAAAADg/D-Xy4CjsAcQ/s1600-h/sandwich.jpg"&gt;&lt;img style="cursor: pointer; width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_koYWWC7jByk/SkN72WNJ7_I/AAAAAAAAADg/D-Xy4CjsAcQ/s320/sandwich.jpg" alt="" id="BLOGGER_PHOTO_ID_5351256955850190834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;&lt;span&gt;Am pleased to read that Waitrose don't use Waitrose-disapproved farms... &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/5025071-6655000571446634868?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/6655000571446634868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=6655000571446634868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6655000571446634868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6655000571446634868'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/waitrose-sandwich.html' title='Waitrose Sandwich'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_koYWWC7jByk/SkN72WNJ7_I/AAAAAAAAADg/D-Xy4CjsAcQ/s72-c/sandwich.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3151278728554307808</id><published>2009-06-23T08:58:00.000Z</published><updated>2011-03-28T13:28:30.350Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>wsimport - with a proxy</title><content type='html'>&lt;strong&gt;wsimport&lt;/strong&gt; supports getting WSDL from a remote site using a proxy, via the "&lt;strong&gt;httpproxy&lt;/strong&gt;" parameter. However I have read (haven't tried it) that this parameter doesn't support proxies which require you to enter username and password, which in yer standard corporate environment is likely to be the case. So here's an alternative. You can also enter the following when you start up the JVM which is going to run wsimport (e.g. when you start Ant):&lt;br/&gt;&lt;br/&gt;-Djava.net.useSystemProxies=true&lt;br/&gt;&lt;br/&gt;This tells Java to use the default proxy which has been defined for the system. On Windows, this is the proxy which is set up in Internet Explorer. I found this useful tip &lt;a href="http://weblogs.java.net/blog/kohsuke/archive/2005/08/we_deserve_a_be.html"&gt;here&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;HOWEVER! The problem I've subsequently discovered with this is that, on Windows, Oracle clients seem to use the same setting, so when you try to get a JDBC connection when useSystemProxies is true, you won't get a connection. How annoying. So you have to be really careful how you set up your proxy rules... in the situation I'm in, I've left the useSystemProxies=true, but it means I've had to add my database server host to my proxy exceptions list in Internet Explorer! Sounds like a fudge, but it works...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-3151278728554307808?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3151278728554307808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3151278728554307808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3151278728554307808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3151278728554307808'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/wsimport-with-proxy.html' title='wsimport - with a proxy'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-6289749609210598744</id><published>2009-06-22T10:28:00.000Z</published><updated>2011-03-28T13:28:30.351Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>JAX-WS handler usage for clients</title><content type='html'>See &lt;a href="http://java.sun.com/mailers/techtips/enterprise/2006/TechTips_Sept06.html"&gt;this&lt;/a&gt; page for a Sun Tech Tip on how to get Handlers working for client code. Getting it working on the web service producer side seemed to go fine, but for the client side (e.g. logging requests and responses for a web service client embedded in your web application), I have had some problems. The Tech Tip referred to gives three ways of doing it: 1) add a @HandlerChain annotation after your @WebServiceClient,&lt;br/&gt;2) add a HandlerResolver, or&lt;br/&gt;3) programatically add the Handler at runtime.&lt;br/&gt;I've so far only had any joy with the last option, by writing code to add a handler once I've actually got myself an instance of the SEI/port. E.g.:&lt;br/&gt;&lt;br/&gt;SynchServiceSoap port = synchService.getPort(SynchServiceSoap.class);&lt;br/&gt;//Log the messages via a Handler...&lt;br/&gt;&lt;br/&gt;//should get the current handler chain and then add the new handler to it,&lt;br/&gt;//but in this case it's the only one...&lt;br/&gt;LoggingHandler loggingHandler = new LoggingHandler();&lt;br/&gt;List&amp;lt;Handler&amp;gt; handlerChain = new ArrayList&amp;lt;Handler&amp;gt;();&lt;br/&gt;handlerChain.add(loggingHandler);&lt;br/&gt;((BindingProvider)port).getBinding().setHandlerChain(handlerChain);&lt;br/&gt;&lt;br/&gt;This works fine. I also tried to use the &amp;lt;jaxws:binding&amp;gt; configuration file option and then running wsimport, expecting wsimport to add @HandlerChain annotations to the generated service class, but it didn't.&lt;br/&gt;&lt;br/&gt;I have tried out the "basic" option, which is to annotate with @HandlerChain after the @WebServiceClient, but it's been quite tricky to get right. This is because, if you're not careful, every time you run wsimport it will recreate the service classes and your annotation will be lost. If you bear this in mind, and ensure the annotation is preserved, it works OK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-6289749609210598744?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/6289749609210598744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=6289749609210598744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6289749609210598744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6289749609210598744'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/jax-ws-handler-usage-for-clients.html' title='JAX-WS handler usage for clients'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-7714522139602146757</id><published>2009-06-19T15:25:00.000Z</published><updated>2011-03-28T13:28:30.352Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>JAX-WS: using local WSDL copy</title><content type='html'>If  you need to create a web service from a local copy of the WSDL, which can happen if the remote system is not available or accessible, there are a number of options, mentioned on &lt;a href="https://jax-ws.dev.java.net/guide/Developing_client_application_with_locally_packaged_WSDL.html"&gt;this&lt;/a&gt; page. I am in the situation where I have already created my web service client (using wsimport), so I need to resolve the service address at runtime. If the remote system can't be accessed (the current environment I'm working in has a proxy/firewall issue, so I can't get to the remote WSDL as I would normally like to), then my option is this:&lt;br/&gt;&lt;br/&gt;1. create a jax-ws-catalog.xml file like the following:&lt;br/&gt;&amp;lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system"&amp;gt;&lt;br/&gt;&amp;lt;system systemId="http://remote.system.host.address:6666/ServiceName.asmx?WSDL"&lt;br/&gt;uri="wsdl/ServiceName.wsdl"/&amp;gt;&lt;br/&gt;&amp;lt;/catalog&amp;gt;&lt;br/&gt;&lt;br/&gt;The systemId will be the normal remote WSDL address that you would be using if you could. This is the WSDL that the web service client will be created using. The uri is the address of your local copy of the WSDL.&lt;br/&gt;&lt;br/&gt;2. add that file to your build, directly underneath WEB-INF. This is where the JAX-WS code expects it to be. Not in the "classes" folder.&lt;br/&gt;&lt;br/&gt;3. change your build to store the local WSDL copy inside the webapp in the "wsdl" folder. This is used by the uri attribute in the jax-ws-catalog.xml to point to your local copy of the WSDL.&lt;br/&gt;&lt;br/&gt;4. redeploy. Now, when the web service client is created, it should not try to connect over the network to the remote WSDL, but will use the local version.&lt;br/&gt;&lt;br/&gt;Don't forget to keep your local copy of the WSDL up to date! If you get a new version, make sure the build reflects it.&lt;br/&gt;&lt;br/&gt;The jax-ws-catalog.xml can also be used to force your web service client to use a different remote copy of the WSDL - e.g. if it moves to a different host. For example, leave the systemId the same (as that's what your application code will continue to use), but change the uri to another location, e.g. "http://alternative.remote.system.host.address:6666/ServiceName.asmx?WSDL"&lt;br/&gt;&lt;br/&gt;From what I read, this should work fine, but I haven't tried it yet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-7714522139602146757?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/7714522139602146757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=7714522139602146757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/7714522139602146757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/7714522139602146757'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/jax-ws-using-local-wsdl-copy.html' title='JAX-WS: using local WSDL copy'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-8922969753301209579</id><published>2009-06-19T15:13:00.001Z</published><updated>2009-06-19T15:13:40.477Z</updated><title type='text'>Prospect of whitby</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://1.bp.blogspot.com/_koYWWC7jByk/SjurI55sn9I/AAAAAAAAADQ/_gnJJxbIL14/s1600-h/image-upload-112-719670.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_koYWWC7jByk/SjurI55sn9I/AAAAAAAAADQ/_gnJJxbIL14/s320/image-upload-112-719670.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-8922969753301209579?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/8922969753301209579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=8922969753301209579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8922969753301209579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8922969753301209579'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/prospect-of-whitby.html' title='Prospect of whitby'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_koYWWC7jByk/SjurI55sn9I/AAAAAAAAADQ/_gnJJxbIL14/s72-c/image-upload-112-719670.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-9198605385921543427</id><published>2009-06-17T12:31:00.001Z</published><updated>2009-06-17T12:31:40.678Z</updated><title type='text'>Another sign</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://3.bp.blogspot.com/_koYWWC7jByk/SjjiK9Q1UII/AAAAAAAAADI/mzjHXWOCuzo/s1600-h/image-upload-23-799601.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_koYWWC7jByk/SjjiK9Q1UII/AAAAAAAAADI/mzjHXWOCuzo/s320/image-upload-23-799601.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-9198605385921543427?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/9198605385921543427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=9198605385921543427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/9198605385921543427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/9198605385921543427'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/another-sign.html' title='Another sign'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_koYWWC7jByk/SjjiK9Q1UII/AAAAAAAAADI/mzjHXWOCuzo/s72-c/image-upload-23-799601.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-4306036887641728312</id><published>2009-06-16T09:17:00.000Z</published><updated>2011-03-28T13:28:30.354Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Quartz job scheduling with Spring under Tomcat</title><content type='html'>One part of the JAX-WS project I'm currently working on is to regularly poll a database and send any relevant updates via a JAX-WS client to a remote system. I had integrated Spring already, and I wanted to make use of the Quartz job scheduling capability that is built into Spring. I set up all the beans which are needed to configure a job scheduler, according to the instructions &lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/scheduling.html"&gt;here&lt;/a&gt; and also using the excellent book &lt;a href="http://www.amazon.co.uk/gp/product/1933988134?ie=UTF8&amp;amp;tag=jeannot-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=1933988134"&gt;Spring in Action&lt;/a&gt;&lt;img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.co.uk/e/ir?t=jeannot-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=1933988134" border="0" alt="" width="1" height="1" /&gt; by Craig Walls. However the scheduler did not start when I started my application in Tomcat. I couldn't figure out why, and unless I'd missed something the documents implied that I didn't need to do anything else.&lt;br/&gt;&lt;br/&gt;What eventually worked for me was to define a startup servlet which simply gets the scheduler bean. This seemed to be enough to kick the job scheduler into action. To do this, I added a startup servlet to web.xml, as follows:&lt;br/&gt;&lt;br/&gt;&amp;lt;servlet&amp;gt;&lt;br/&gt;&amp;lt;servlet-name&amp;gt;Startup&amp;lt;/servlet-name&amp;gt;&lt;br/&gt;&amp;lt;servlet-class&amp;gt;&lt;br/&gt;com.jeannot.test.scheduler.StartupServlet&lt;br/&gt;&amp;lt;/servlet-class&amp;gt;&lt;br/&gt;&amp;lt;load-on-startup&amp;gt;0&amp;lt;/load-on-startup&amp;gt;&lt;br/&gt;&amp;lt;/servlet&amp;gt;&lt;br/&gt;&lt;br/&gt;and coded the StartupServlet with an init() method (which is invoked on startup) to get the scheduler bean which I had defined in my Spring application context.&lt;br/&gt;&lt;br/&gt;The scheduler now calls the job class I created (which implements org.quartz.Job), invoking the execute(JobExecutionContext context) method, which is what I wanted. I can now add code to the execute() method to get the updates from the database and send them out to the remote system via a JAX-WS client. I found another post which points out that gives some extra things you need to do in order to refer to other Spring beans (e.g. a DAO) from within a Quartz job - the post is &lt;a href="http://cse-mjmcl.cse.bris.ac.uk/blog/2007/06/20/1182370280435.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-4306036887641728312?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/4306036887641728312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=4306036887641728312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4306036887641728312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4306036887641728312'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/quartz-job-scheduling-with-spring-under.html' title='Quartz job scheduling with Spring under Tomcat'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-932314721439030546</id><published>2009-06-07T15:17:00.000Z</published><updated>2011-03-28T13:28:30.355Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>JAX-WS and constraints</title><content type='html'>Initially I just assumed there would be a clever way to annotate classes, such that when the XSD was created for them, it would create constraint elements for validating against, e.g. minLength, maxLength, minOccurs, maxOccurs. After all, you can say&lt;br/&gt;&lt;br/&gt;@XmlElement(required=true)&lt;br/&gt;&lt;br/&gt;which is kind of a constraint, right?&lt;br/&gt;&lt;br/&gt;However after looking around, it appears that this possibility does not exist yet. See &lt;a href="https://jaxb.dev.java.net/guide/Generating_Schema_that_you_want.html"&gt;this&lt;/a&gt; page for the status as of JAXB 2.1.4 - they are looking for people to code the solution...&lt;br/&gt;&lt;br/&gt;So maybe, for now, I will have to hand-edit the XSDs created by JAX-WS in order to add constraints that can then be validated against. Which I don't like doing as the XSDs will inevitably be recreated and my changes will be lost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-932314721439030546?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/932314721439030546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=932314721439030546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/932314721439030546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/932314721439030546'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/jax-ws-and-constraints.html' title='JAX-WS and constraints'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-8209907557965550135</id><published>2009-06-07T14:39:00.000Z</published><updated>2011-03-28T13:28:30.357Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAXB'/><title type='text'>JAXB "Class has two properties of the same name" issue</title><content type='html'>Using the JAX-WS RI, if you want to annotate a field as "required" (for example), you can use the following annotation:&lt;br/&gt;@XmlElement(required=true)&lt;br/&gt;&lt;br/&gt;When I added this before a field in a class, e.g.:&lt;br/&gt;@XmlElement(required=true)&lt;br/&gt;private String action;&lt;br/&gt;&lt;br/&gt;and then ran wsgen to generate the web service, it would always fail with&lt;br/&gt;&lt;pre&gt;Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:&lt;br/&gt;1 counts of IllegalAnnotationExceptions&lt;br/&gt;Class has two properties of the same name "action"&lt;/pre&gt;&lt;br/&gt;However, if you move the annotation to the getter method, e.g.&lt;br/&gt;@XmlElement(required=true)&lt;br/&gt;public String getAction() {&lt;br/&gt;return action;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;it works fine.&lt;br/&gt;&lt;br/&gt;I came across this issue when using the JAX-WS RI, and there's been some discussion about it on the web. The answer is detailed on &lt;a href="http://forums-beta.sun.com/thread.jspa?messageID=9798273"&gt;this&lt;/a&gt; page (if you can get to it, some of those sun.com sites (incuding, annoyingly, jax-ws.dev.java.net) seem to be down or not available a lot of the time! I ended up just looking at the Google cached text of the page...).&lt;br/&gt;&lt;br/&gt;In short, the answer is that unless you specify it, the XmlAccessorType will default to PUBLIC_MEMBER, which will cause JAXB to bind public fields and public getter/setters. So a private instance variable won't be bound unless you change the default using @XmlAccessorType(XmlAccessType.FIELD) on the class. Not sure if I understand the message though - how come wsgen reports two properties with the same name in this case? - but this is a workaround anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-8209907557965550135?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/8209907557965550135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=8209907557965550135' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8209907557965550135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8209907557965550135'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/jaxb-has-two-properties-of-same-name.html' title='JAXB &amp;quot;Class has two properties of the same name&amp;quot; issue'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-8402058901856114544</id><published>2009-06-05T15:19:00.000Z</published><updated>2011-03-28T13:28:30.359Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>Notes on JAX-WS</title><content type='html'>I'm kind of using this as a dumping ground for technical notes about these web services projects I'm doing...&lt;br/&gt;&lt;br/&gt;Things to remember:&lt;br/&gt;&lt;br/&gt;1. JAX-WS uses JAXB 2.0 by default, so no need to choose from the myriad of OXM products that are around. Create JAXB 2.0-annotated classes using the xjc compiler - this takes XSDs and makes annotated Java objects out of them. Download the JAXB RI and run xjc, you should get sourcecode of classes which you can then use. If your data doesn't seem to be being serialized/deserialized, check that you've got valid JAXB annotations on it: I created a test class with a couple of fields, and was confused when I didn't get anything on the inbound object. But of course I'd forgotten the annotations - if they're not there JAXB won't try to do anything with it, so nothing will get in or out. If you're creating a test message class, maybe it's a better idea to create an XSD for it and then run it through the JAXB Binding Compiler (xjc)?&lt;br/&gt;&lt;br/&gt;2. Be ultra-careful with namespaces: make sure your messages are consistently using the namespaces specified on the SOAP envelope and are defined as the same targetNamespace on the service methods. Especially if your JAXB-annotated objects are in a different namespace to the service methods themselves. You will need to specify both as attributes on the SOAP envelope, e.g.&lt;br/&gt;&lt;br/&gt;&amp;lt;env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&lt;br/&gt;xmlns:ns1="http://services.merlesystems.co.uk/"&lt;br/&gt;xmlns:ns2="http://schemas.merlesystems.co.uk"&amp;gt;&lt;br/&gt;&amp;lt;env:Header /&amp;gt;&lt;br/&gt;&amp;lt;env:Body&amp;gt;&lt;br/&gt;&amp;lt;ns1:testStructuredName&amp;gt;&lt;br/&gt;&amp;lt;ns2:structuredName&amp;gt;&lt;br/&gt;&amp;lt;ns2:forename&amp;gt;Lily&amp;lt;/ns2:forename&amp;gt;&lt;br/&gt;&amp;lt;ns2:surname&amp;gt;Allen&amp;lt;/ns2:surname&amp;gt;&lt;br/&gt;&amp;lt;/ns2:structuredName&amp;gt;&lt;br/&gt;&amp;lt;/ns1:testStructuredName&amp;gt;&lt;br/&gt;&amp;lt;/env:Body&amp;gt;&lt;br/&gt;&amp;lt;/env:Envelope&amp;gt;&lt;br/&gt;&lt;br/&gt;You can specify the namespaces on the elements themselves as well, but that gets quite verbose if you have a lot of elements, you can't see the wood for the trees.&lt;br/&gt;&lt;br/&gt;3. Deploying the service is pretty easy using the Weblogic Workshop, it does all the spadework for you, as long as you want to deploy it on Weblogic... Creating a JAX-WS service with Axis2 seems a lot harder than it needs to be. The documentation is a bit random and I just couldn't get it to do what I hoped it would. Spring-WS promises to be easy too, as long as you don't have any problems downloading the Maven artifacts that it needs!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-8402058901856114544?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/8402058901856114544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=8402058901856114544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8402058901856114544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8402058901856114544'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/notes-on-jax-ws.html' title='Notes on JAX-WS'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-777899029218527602</id><published>2009-06-02T09:43:00.001Z</published><updated>2009-06-02T09:43:55.547Z</updated><title type='text'>St catherines dock</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://3.bp.blogspot.com/_koYWWC7jByk/SiT0WtiaIZI/AAAAAAAAADA/BbnS5_AxlV8/s1600-h/image-upload-5-734434.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_koYWWC7jByk/SiT0WtiaIZI/AAAAAAAAADA/BbnS5_AxlV8/s320/image-upload-5-734434.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-777899029218527602?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/777899029218527602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=777899029218527602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/777899029218527602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/777899029218527602'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/06/st-catherines-dock.html' title='St catherines dock'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_koYWWC7jByk/SiT0WtiaIZI/AAAAAAAAADA/BbnS5_AxlV8/s72-c/image-upload-5-734434.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-7788731734247146089</id><published>2009-05-14T17:59:00.002Z</published><updated>2009-05-14T18:03:06.769Z</updated><title type='text'>JAX-WS service with JAXB</title><content type='html'>&lt;p&gt;Things to remember:&lt;/p&gt; &lt;p&gt;1. JAX-WS uses JAXB 2.0 by default, so no need to choose from the myriad of OXM products that are around. Create JAXB 2.0-annotated classes using the xjc compiler - this takes XSDs and makes annotated Java objects out of them. Download the JAXB RI and run xjc, you should get sourcecode of classes which you can then use. If your data doesn't seem to be being serialized/deserialized, check that you've got valid JAXB annotations on it: I created a test class with a couple of fields, and was confused when I didn't get anything on the inbound object. But of course I'd forgotten the annotations - if they're not there JAXB won't try to do anything with it, so nothing will get in or out. If you're creating a test message class, maybe it's a better idea to create an XSD for it and then run it through the JAXB Binding Compiler (xjc)?&lt;/p&gt;  &lt;p&gt;2. Be ultra-careful with namespaces: make sure your messages are consistently using the namespaces specified on the SOAP envelope and are defined as the same targetNamespace on the service methods. Especially if your JAXB-annotated objects are in a different namespace to the service methods themselves. You will need to specify both as attributes on the SOAP envelope, e.g.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"&lt;br /&gt; xmlns:ns1="http://services.merlesystems.co.uk/"&lt;br /&gt; xmlns:ns2="http://schemas.merlesystems.co.uk"&amp;gt;&lt;br /&gt;  &amp;lt;env:Header /&amp;gt;&lt;br /&gt;    &amp;lt;env:Body&amp;gt;&lt;br /&gt;     &amp;lt;ns1:testStructuredName&amp;gt;&lt;br /&gt;      &amp;lt;ns2:structuredName&amp;gt;&lt;br /&gt;    &amp;lt;ns2:forename&amp;gt;Lily&amp;lt;/ns2:forename&amp;gt;&lt;br /&gt;    &amp;lt;ns2:surname&amp;gt;Allen&amp;lt;/ns2:surname&amp;gt;&lt;br /&gt;      &amp;lt;/ns2:structuredName&amp;gt;&lt;br /&gt;     &amp;lt;/ns1:testStructuredName&amp;gt;&lt;br /&gt;  &amp;lt;/env:Body&amp;gt;&lt;br /&gt;&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;You can specify the namespaces on the elements themselves as well, but that gets quite verbose if you have a lot of elements, you can't see the wood for the trees.&lt;/p&gt; 3. Deploying the service is pretty easy using the Weblogic Workshop, it does all the spadework for you, as long as you want to deploy it on Weblogic... Creating a JAX-WS service with Axis2 seems a lot harder than it needs to be. The documentation is a bit random and I just couldn't get it to do what I hoped it would. Spring-WS promises to be easy too, as long as you don't have any problems downloading the Maven artifacts that it needs!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-7788731734247146089?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/7788731734247146089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=7788731734247146089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/7788731734247146089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/7788731734247146089'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/05/jax-ws-service-with-jaxb.html' title='JAX-WS service with JAXB'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-1439520391184258353</id><published>2009-04-30T07:39:00.001Z</published><updated>2009-04-30T07:39:12.431Z</updated><title type='text'>Bath abbey</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://1.bp.blogspot.com/_koYWWC7jByk/SflVnwBOUVI/AAAAAAAAAC4/8T8_cAZsLlM/s1600-h/image-upload-529-751912.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_koYWWC7jByk/SflVnwBOUVI/AAAAAAAAAC4/8T8_cAZsLlM/s320/image-upload-529-751912.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-1439520391184258353?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/1439520391184258353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=1439520391184258353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1439520391184258353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1439520391184258353'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/04/bath-abbey.html' title='Bath abbey'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_koYWWC7jByk/SflVnwBOUVI/AAAAAAAAAC4/8T8_cAZsLlM/s72-c/image-upload-529-751912.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-1005505265177395807</id><published>2009-04-16T08:49:00.001Z</published><updated>2009-04-16T08:52:15.934Z</updated><title type='text'>Bracelet 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_koYWWC7jByk/SebxhYHI0cI/AAAAAAAAACw/rZWPuPnDh00/s1600-h/Bracelet2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_koYWWC7jByk/SebxhYHI0cI/AAAAAAAAACw/rZWPuPnDh00/s320/Bracelet2.JPG" alt="" id="BLOGGER_PHOTO_ID_5325209165122556354" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-1005505265177395807?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/1005505265177395807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=1005505265177395807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1005505265177395807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1005505265177395807'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/04/bracelet-2.html' title='Bracelet 2'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_koYWWC7jByk/SebxhYHI0cI/AAAAAAAAACw/rZWPuPnDh00/s72-c/Bracelet2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-6856097978688845619</id><published>2009-04-15T21:54:00.001Z</published><updated>2009-04-15T21:54:57.753Z</updated><title type='text'>H</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://3.bp.blogspot.com/_koYWWC7jByk/SeZXsdylfQI/AAAAAAAAACg/8CnlD59hCkk/s1600-h/image-upload-64-797000.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_koYWWC7jByk/SeZXsdylfQI/AAAAAAAAACg/8CnlD59hCkk/s320/image-upload-64-797000.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-6856097978688845619?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/6856097978688845619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=6856097978688845619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6856097978688845619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6856097978688845619'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/04/h.html' title='H'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_koYWWC7jByk/SeZXsdylfQI/AAAAAAAAACg/8CnlD59hCkk/s72-c/image-upload-64-797000.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5524313041791578559</id><published>2009-04-06T16:50:00.001Z</published><updated>2009-04-06T16:50:56.990Z</updated><title type='text'>Red rubber bands</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://1.bp.blogspot.com/_koYWWC7jByk/Sdoy8MbE4-I/AAAAAAAAACY/OL5UTw-0U9E/s1600-h/image-upload-221-756459.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_koYWWC7jByk/Sdoy8MbE4-I/AAAAAAAAACY/OL5UTw-0U9E/s320/image-upload-221-756459.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-5524313041791578559?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5524313041791578559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5524313041791578559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5524313041791578559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5524313041791578559'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/04/red-rubber-bands.html' title='Red rubber bands'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_koYWWC7jByk/Sdoy8MbE4-I/AAAAAAAAACY/OL5UTw-0U9E/s72-c/image-upload-221-756459.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5887805792004580439</id><published>2009-03-25T14:49:00.003Z</published><updated>2009-03-26T13:32:15.800Z</updated><title type='text'>Hudson on Weblogic</title><content type='html'>&lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt; is a brilliant continuous integration tool, easier to configure than &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;Cruise Control&lt;/a&gt;... but how to deploy it on Weblogic? When I tried it, it complained that the Ant version bundled with Weblogic 10g was incompatible with Hudson's.&lt;br /&gt;Initially I tried giving the hudson.war a weblogic.xml file containing:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app"&amp;gt;&lt;br /&gt;   &amp;lt;container-descriptor&amp;gt;&lt;br /&gt;    &amp;lt;prefer-web-inf-classes&amp;gt;true&amp;lt;/prefer-web-inf-classes&amp;gt;&lt;br /&gt;   &amp;lt;/container-descriptor&amp;gt;&lt;br /&gt;  &amp;lt;/weblogic-web-app&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;but it didn't seem to work for me, so I went with the suggestion in &lt;a href="http://m-button.blogspot.com/2008/09/how-to-deploy-hudson-on-weblogic.html"&gt;this&lt;/a&gt; useful post, which suggests wrapping the hudson.war in an EAR, and deploying that, with the classloader configured to prefer application packages for the org.apache.* classes.&lt;br /&gt;&lt;br /&gt;So that got me up and running (merci &lt;a href="http://m-button.blogspot.com/"&gt;Maxence&lt;/a&gt;!), but when I started trying to run builds for projects using Maven, I hit another problem. Under Weblogic, calling out to the bundled Maven agent seems to have a bug. See &lt;a href="http://www.nabble.com/Issue-with-Master-Slave-execution-td21063761.html"&gt;this post&lt;/a&gt;, which looks similar to my problem as it cannot access the Maven agent JAR using the zip: protocol - there are other posts knocking around for similar problems in JBoss and/or Tomcat, but no fix available yet.&lt;br /&gt;&lt;br /&gt;Unable to get the native Hudson Maven integration working properly, I resorted to invoking the Maven command line interface from Hudson: create a script which cds to the folder containing the Maven project (as Hudson by default runs scripts from its workspace folder) and then does "CALL mvn clean install" to run your Maven installation. Then, from the Hudson web console,  set your Hudson job up to run your script (again, relative to the workspace folder).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-5887805792004580439?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5887805792004580439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5887805792004580439' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5887805792004580439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5887805792004580439'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/03/hudson-on-weblogic.html' title='Hudson on Weblogic'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3077793741033331758</id><published>2009-01-27T13:36:00.001Z</published><updated>2009-01-27T13:36:58.270Z</updated><title type='text'>Pointless sign</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://2.bp.blogspot.com/_koYWWC7jByk/SX8N-VO75lI/AAAAAAAAAB4/_I3zAqskvrY/s1600-h/image-upload-9-717831.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_koYWWC7jByk/SX8N-VO75lI/AAAAAAAAAB4/_I3zAqskvrY/s320/image-upload-9-717831.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-3077793741033331758?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3077793741033331758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3077793741033331758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3077793741033331758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3077793741033331758'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2009/01/pointless-sign.html' title='Pointless sign'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_koYWWC7jByk/SX8N-VO75lI/AAAAAAAAAB4/_I3zAqskvrY/s72-c/image-upload-9-717831.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3149189453598269318</id><published>2008-12-15T12:35:00.002Z</published><updated>2008-12-15T12:54:30.666Z</updated><title type='text'>Nativity scene</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://3.bp.blogspot.com/_koYWWC7jByk/SUZPFkociEI/AAAAAAAAABk/9UoEuL5lvG4/s1600-h/image-upload-79-734289.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_koYWWC7jByk/SUZPFkociEI/AAAAAAAAABk/9UoEuL5lvG4/s320/image-upload-79-734289.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Our home nativity scene has attracted some extra worshippers at the crib this year. A dolphin, an unrealistic large blue fish, even a giant penguin. And wait: what's Ganesh the Hindu elephant god doing in the background?&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-3149189453598269318?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3149189453598269318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3149189453598269318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3149189453598269318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3149189453598269318'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2008/12/nativity-scene.html' title='Nativity scene'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_koYWWC7jByk/SUZPFkociEI/AAAAAAAAABk/9UoEuL5lvG4/s72-c/image-upload-79-734289.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5728380976019892951</id><published>2008-12-04T14:31:00.005Z</published><updated>2008-12-04T14:52:32.022Z</updated><title type='text'>Creating an Oracle stored procedure in Java</title><content type='html'>For haters of PL/SQL, you can create Oracle stored procedures in Java. Here are some notes on how to do it, cobbled together from pages I found on the web plus my own trial and error...&lt;br /&gt;&lt;br /&gt;1. Add a Java schema entity:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;blockquote&gt;create or replace and compile java source named "test" as&lt;br /&gt;import java.sql.*;&lt;br /&gt;import oracle.jdbc.*;&lt;br /&gt;public class test {&lt;br /&gt;public static void test(String name) {&lt;br /&gt; System.out.println("Doing something... " + name);&lt;br /&gt; }&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;2. The above doesn't do anything. You can add JDBC handling code, and when you get the connection, if you use the special connection string "jdbc:default:connection:" this will automatically connect to the database in which the class has been stored.&lt;br /&gt;&lt;br /&gt;3. Run the above, which should compile the Java class and store it in the database.&lt;br /&gt;&lt;br /&gt;4. You can see if it's been stored by doing:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;blockquote&gt;select object_name,object_type,status from user_objects where object_type like 'JAVA%';&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;If it compiled OK, status should be 'VALID'.&lt;br /&gt;&lt;br /&gt;5. Now you have to create a normal Oracle procedure to wrap the method call. E.g:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;blockquote&gt;&lt;code&gt;create or replace procedure test(name varchar2) as language java name 'test.test(java.lang.String)';&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;If it's not working, check if there were any errors by using "show err;" in SQLPlus or whatever...&lt;br /&gt;&lt;br /&gt;6. Now you can run it. Do the following which should make sure you actually see the output...&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;blockquote&gt;call dbms_java.set_output(2000);&lt;br /&gt;set serveroutput on;&lt;br /&gt;call test('paul');&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You should see your method output in the console...&lt;br /&gt;&lt;br /&gt;Pages I referred to for this, thanks to their authors!:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://programmersjournal.blogspot.com/2008/04/writing-java-stored-procedure-in-oracle.html"&gt;http://programmersjournal.blogspot.com/2008/04/writing-java-stored-procedure-in-oracle.html&lt;/a&gt; (includes useful sample JDBC code which actually does something, and has more detail generally!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dbasupport.com/forums/archive/index.php/t-19941.html"&gt;http://www.dbasupport.com/forums/archive/index.php/t-19941.html&lt;/a&gt; (helped me realize that I needed to declare the argument types in Oracle form (varchar2 etc.) and Java form (java.lang.String etc.) in the procedure which wraps the method call. This wasn't immediately apparent to me...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-5728380976019892951?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5728380976019892951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5728380976019892951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5728380976019892951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5728380976019892951'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2008/12/creating-oracle-stored-procedure-in.html' title='Creating an Oracle stored procedure in Java'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5631475610434757214</id><published>2008-11-19T09:27:00.001Z</published><updated>2008-11-19T09:27:56.467Z</updated><title type='text'></title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://4.bp.blogspot.com/_koYWWC7jByk/SSPcHDmG7GI/AAAAAAAAABc/grb4GB1XPZc/s1600-h/image-upload-199-775913.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_koYWWC7jByk/SSPcHDmG7GI/AAAAAAAAABc/grb4GB1XPZc/s320/image-upload-199-775913.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&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/5025071-5631475610434757214?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5631475610434757214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5631475610434757214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5631475610434757214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5631475610434757214'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2008/11/blog-post.html' title=''/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_koYWWC7jByk/SSPcHDmG7GI/AAAAAAAAABc/grb4GB1XPZc/s72-c/image-upload-199-775913.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-7592448375975449163</id><published>2008-06-18T09:53:00.002Z</published><updated>2008-06-18T11:56:22.000Z</updated><title type='text'>Poppy</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://bp3.blogger.com/_uPkO6biUR44/SFjbL87a0tI/AAAAAAAAAAM/dI3_bbvYXVM/s1600-h/image-upload-140-729969.jpg"&gt;&lt;img src="http://bp3.blogger.com/_uPkO6biUR44/SFjbL87a0tI/AAAAAAAAAAM/dI3_bbvYXVM/s320/image-upload-140-729969.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;My new mobile phone just posts photos to my blog without me having to even think about it. The wonders of technology!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-7592448375975449163?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/7592448375975449163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=7592448375975449163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/7592448375975449163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/7592448375975449163'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2008/06/poppy.html' title='Poppy'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_uPkO6biUR44/SFjbL87a0tI/AAAAAAAAAAM/dI3_bbvYXVM/s72-c/image-upload-140-729969.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-237108088672936065</id><published>2007-11-18T15:26:00.001Z</published><updated>2008-11-24T09:33:36.342Z</updated><title type='text'>Ten Reasonably Random Things About Me</title><content type='html'>Betty C., thanks for this opportunity to think up ten random things about me. They won't be truly random of course: that would just be embarrassing. Instead, they will be apparently random but actually cunningly and subtly selected in order to present myself in a certain light. Isn't that what everybody does?&lt;br /&gt;&lt;br /&gt;1. We have 3 cats. Rudy and Sappho are siblings - black, 8 years old, half oriental and half neighbourhood mog. Poppy is a 3 year old short-haired tabby.&lt;br /&gt;&lt;br /&gt;2. I went to the University of Warwick where I met my wife-to-be, Helen. I studied French and History. In our final year, we acquired a small white glove puppet in the shape of a rabbit, whom we named Jeannot le Pushkin. Hence the name of this blog.&lt;br /&gt;&lt;br /&gt;3. I was in a band at school called Psychosis. "The worst band of the 80s - except for Haircut 100" as a friend fondly recalled recently. I played bass guitar and wore a white lab coat on stage, as we were somewhat influenced by Hawkwind, and knew about as many chords as they do.&lt;br /&gt;&lt;br /&gt;4. My father was in the merchant navy, and when I was a child my family sometimes had the opportunity to go on trips on his ship. I remember walking along a dockside in the dark at Guayaquil in Ecuador, huge cockroaches crunching under my feet.&lt;br /&gt;&lt;br /&gt;5. The most interesting place I have ever been is Kathmandu.&lt;br /&gt;&lt;br /&gt;6. My shoe size is 11. Or 45 in Europe. I hate shopping in general, but especially for shoes, so thank goodness I can buy online now!&lt;br /&gt;&lt;br /&gt;7. I am a bit of a sugar addict.&lt;br /&gt;&lt;br /&gt;8. My most embarrassing memory about France is of being on a French exchange when I was about 15, losing the keys to my hosts' house at a party and being discovered at about 3am, standing tiptoe on stacked-up dustbins and rabbit hutches, trying to break into my first-floor bedroom.&lt;br /&gt;&lt;br /&gt;9. The first records I asked to be bought for me for Christmas were in about 1972: "Solid Gold Easy Action" by T-Rex and "No More Mr. Nice Guy" by Alice Cooper. I think the first record I actually bought myself when I started frequenting record shops several years later, was "See You" by Depeche Mode.&lt;br /&gt;&lt;br /&gt;10. In the front pocket of my rucksack are: a radio, half a packet of mints, a mobile phone bill, an Oyster card, a toothbrush, some earplugs, and an adapter for my bike tyres.&lt;br /&gt;&lt;br /&gt;I tag &lt;a href="http://bitchinkitchen.blogspot.com/"&gt;Jezz&lt;/a&gt; to come up with Ten Random Things next...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-237108088672936065?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/237108088672936065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=237108088672936065' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/237108088672936065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/237108088672936065'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/11/ten-reasonably-random-things-about-me.html' title='Ten Reasonably Random Things About Me'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-4781170532088758178</id><published>2007-10-25T10:54:00.000Z</published><updated>2007-10-25T10:59:18.567Z</updated><title type='text'>Getting ResourceBundles in a webapp</title><content type='html'>I tend to forget that in a container, the working directory will probably be the directory that the container is launched from - e.g. jboss-4.0.5.GA/bin or something like that. Which is no use for retrieving properties files from within a webapp, which have their own contexts managed by the container. So how to retrieve a properties file in a class running in a webapp. Here's a good method I found on the web - see this page: &lt;a href="http://www.mambo.net/as/view/170"&gt;http://www.mambo.net/as/view/170&lt;/a&gt;&lt;br /&gt;This is so useful, I'm copying it here for my reference, in case it disappears...&lt;br /&gt;&lt;br /&gt;NB: your properties file should be in the WEB-INF/classes directory!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;import java.util.*;&lt;br /&gt;import java.net.*;&lt;br /&gt;import java.io.*&lt;br /&gt;&lt;br /&gt;ResourceBundle res   = null;               // Resource bundle storage&lt;br /&gt;String         bname = "X.properties";     // in WEB-INF/classes dir&lt;br /&gt;&lt;br /&gt;URL url = this.getClass().getClassLoader().getResource(bname);&lt;br /&gt;&lt;br /&gt;if (null != url) {&lt;br /&gt;    try {&lt;br /&gt;        String fname   = url.getFile();&lt;br /&gt;        InputStream is = new FileInputStream(fname);&lt;br /&gt;        res            = (ResourceBundle) new PropertyResourceBundle(is);&lt;br /&gt;        is.close();&lt;br /&gt;     } catch (Exception e) {&lt;br /&gt;        res = null;&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (null == res) {&lt;br /&gt;    // Screwed. Do something fatal.&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-4781170532088758178?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/4781170532088758178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=4781170532088758178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4781170532088758178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4781170532088758178'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/10/getting-resourcebundles-in-webapp.html' title='Getting ResourceBundles in a webapp'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-1122797950211103949</id><published>2007-10-22T11:59:00.000Z</published><updated>2007-10-22T12:06:14.433Z</updated><title type='text'>JBoss - j'y bosse...</title><content type='html'>The JBoss deployment scanner will only redeploy an exploded application when the main config file changes: i.e:&lt;br /&gt;- for a WAR, WEB-INF/web.xml; &lt;br /&gt;- for an EAR, META-INF/application.xml&lt;br /&gt;- for a JAR, META-INF/ejb-jar.xml&lt;br /&gt;So you always need to at least "touch" this file in order to redeploy without restarting the server. This could be done via the Ant build - use the Ant "touch" task to do it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-1122797950211103949?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/1122797950211103949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=1122797950211103949' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1122797950211103949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1122797950211103949'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/10/jboss-jy-bosse.html' title='JBoss - j&apos;y bosse...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5838402177310972053</id><published>2007-10-02T10:51:00.000Z</published><updated>2007-10-02T10:54:41.129Z</updated><title type='text'>JBoss web server - logging</title><content type='html'>By default, the Tomcat request logging seems to be switched off. To turn it on, do the following.&lt;br /&gt;JBoss 4 has Tomcat deployed as a service inside Tomcat, called jbossweb-tomcat55.sar. This can be found in the server/default/deploy directory.&lt;br /&gt;In the root of jbossweb-tomcat55.sar is a server.xml file: you need to activate (uncomment) the valve which does the access logging in order to see the HTTP requests in the appropriate .log file in the log directory.&lt;br /&gt;The relevant valve in server.xml looks something like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"&lt;br /&gt;    prefix="localhost_access_log." suffix=".log"&lt;br /&gt;    pattern="common" directory="${jboss.server.home.dir}/log" &lt;br /&gt;    resolveHosts="false" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-5838402177310972053?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5838402177310972053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5838402177310972053' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5838402177310972053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5838402177310972053'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/10/jboss-web-server-logging.html' title='JBoss web server - logging'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-2633935807350561483</id><published>2007-06-04T06:41:00.000Z</published><updated>2007-06-04T07:15:21.316Z</updated><title type='text'>Tour de France</title><content type='html'>(Haven't done any blogging for a while as I've been in the process of moving to France, and I haven't had the time.)&lt;br /&gt;Guillaume Prébois, a journalist with &lt;a href="http://www.lemonde.fr/"&gt;Le Monde&lt;/a&gt;, is planning to cycle the entire &lt;a href="http://www.letour.fr/"&gt;Tour de France&lt;/a&gt; route, as part of a controlled experiment to see if someone can really maintain the hours and distance demanded of the riders in the real Tour, without recourse to "certain substances". He will be doing the route (I have read - but not confirmed!) one day before the real stage goes through, and his blood etc. will be constantly monitored and the results published. He says that he really expects to find himself utterly exhausted, contrasting with other Tour riders who apparently can still do a coherent media interview immediately after a feat of extreme endurance such as a stage of the tour should be. He says that there used to be "exhaustion", but not so much any more - why?&lt;br /&gt;I noticed a piece about this on &lt;a href="http://www.france5.fr/magazinesante/"&gt;Le Journal de la Santé&lt;/a&gt; on France 5, but other information seems a bit thin on the ground (doesn't he have a website for this adventure??). I found a bit of second-hand info &lt;a href="http://forum.equipebouyguestelecom.fr/showthread.php?t=1135"&gt;here&lt;/a&gt;, but not much else.&lt;br /&gt;So for any Tunbridge Wells-based readers out there, Guillaume Prébois will presumably be coming through your neck of the woods on &lt;span style="font-weight: bold;"&gt;Saturday 7 July&lt;/span&gt; - and I wish him lots of luck since the roads will not have been cleared for him, so he'll be running the gauntlet of 4x4s and chav-mobiles that normally plague the town.&lt;br /&gt;Are there any journalists out there who could take this up and perhaps interview him en route through Kent? I don't know where he's planning to stop... or if no journalists, at least somebody could chalk encouraging words for him on the road somewhere. Chapeau!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-2633935807350561483?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/2633935807350561483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=2633935807350561483' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2633935807350561483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/2633935807350561483'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/06/tour-de-france.html' title='Tour de France'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-1154825256084672597</id><published>2007-03-02T12:17:00.000Z</published><updated>2007-03-02T12:30:13.077Z</updated><title type='text'>Write Dumb Code</title><content type='html'>I really enjoyed &lt;a href="http://java.sun.com/developer/technicalArticles/Interviews/goetz_qa.html"&gt;this&lt;/a&gt; article by Brian Goetz of Sun Microsystems, in which amongst other things he exhorts developers to "write dumb code" - in the sense of code which is straightforward, clean and follows obvious principles. I wholeheartedly agree with this.&lt;br /&gt;There are two main reasons why code gets overcomplicated. The first is that in a way it's "easier" to code up a solution for a specific case, and then try to widen the solution to fit other conditions. What tends to happen here is that you end up building in lots of options and special code to cater for different things, which complicates and clouds the original aim. This is where refactoring is important. Refactoring is not a luxury - time needs to be allowed to do it properly.&lt;br /&gt;The second reason is the programmer kudos that comes from complex solutions. I'm looking at a problem at the moment where there are layers of object caching and refreshing options in a situation where it's probably not even needed: the database does its own caching, so why reinvent the wheel?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-1154825256084672597?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/1154825256084672597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=1154825256084672597' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1154825256084672597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1154825256084672597'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/03/write-dumb-code.html' title='Write Dumb Code'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-5888664456553889155</id><published>2007-02-23T11:13:00.001Z</published><updated>2007-02-23T11:13:40.926Z</updated><title type='text'>This guy should've been promoted, not fired!</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/QFS0xl4_LAA' name='movie'&gt;&lt;/param&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/QFS0xl4_LAA'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;But perhaps he wouldn't have wanted to be. This is a great video though. If only all sales support telephone people were like this, the world would be a lot more interesting place...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-5888664456553889155?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/5888664456553889155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=5888664456553889155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5888664456553889155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/5888664456553889155'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/02/this-guy-should-been-promoted-not-fired.html' title='This guy should&amp;#39;ve been promoted, not fired!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-6338716897910649159</id><published>2007-02-16T10:15:00.001Z</published><updated>2008-11-24T09:37:14.047Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>PC vs Mac</title><content type='html'>&lt;a href="http://www.flickr.com/photos/56571359@N00/391923766/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/139/391923766_d56d3e983e_o.jpg" alt="mac" width="500" height="390" /&gt;&lt;/a&gt;&lt;br /&gt;Have you seen these Apple ads featuring Mitchell and Webb of radio and TV fame? Quite funny ads but somehow for me they end up backfiring - in the sense that they make me prefer the PC. They are supposed to make you think that Macs are just cool, relaxed and very competent, whereas the PC is nerdy and riddled with conflicts and problems. But I must admit I end up preferring the PC. The Mac just seems smug, but the PC, for all its problems, is somehow lovable. The ad is based on a wrong idea anyway: that the Mac is somehow for the home (ignoring all the offices - especially in media/creative businesses) which are full of Macs, and the PC is for the office - ignoring most computer-equipped homes which have Windows PCs.&lt;br /&gt;So I was sort of thinking about changing to a Mac (I like the idea of running Unix under a beautifully slick user interface), so headed over to the Apple UK site - but then these ads put me off. Sorry Apple! This whole problem is brilliantly discussed by Charlie Brooker in &lt;a href="http://www.guardian.co.uk/commentisfree/story/0,,2006031,00.html"&gt;this Guardian article&lt;/a&gt;.&lt;br /&gt;Also check out the US versions of the same ads (same premise, different actors), they are quite funny too. The PC character looks a little bit more, shall we say, Gates-like...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-6338716897910649159?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/6338716897910649159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=6338716897910649159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6338716897910649159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6338716897910649159'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/02/pc-vs-mac.html' title='PC vs Mac'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-4660684940826656489</id><published>2007-02-15T14:59:00.000Z</published><updated>2007-02-15T15:04:12.522Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Politics Schmolitics</title><content type='html'>I tried the Politics test at &lt;a href="http://www.okcupid.com/politics"&gt;OKCupid&lt;/a&gt; - and here are my results. In their graphic mockup, it puts me right on top of Hilary Clinton, which is actually somewhere I wouldn't mind being...&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table style="border: 1px solid black;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;      &lt;span style="font-size:100%;"&gt;     You are a     &lt;/span&gt;&lt;center&gt; &lt;span style="font-size:100%;"&gt;   &lt;br /&gt;    &lt;span style="font-size:130%;"&gt;&lt;b&gt;Social Liberal&lt;/b&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span shmolor="a8a8a8"  style="font-size:100%;"&gt;(65% permissive)&lt;/span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/center&gt; &lt;span style="font-size:100%;"&gt;   &lt;br /&gt;    and an...     &lt;/span&gt;&lt;center&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;     &lt;span style="font-size:130%;"&gt;&lt;b&gt;Economic Liberal&lt;/b&gt;&lt;/span&gt;     &lt;br /&gt;    &lt;span shmolor="#a8a8a8"  style="font-size:100%;"&gt;(23% permissive)&lt;/span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/center&gt;  &lt;span style="font-size:100%;"&gt;   &lt;br /&gt;    You are best described as a:&lt;br /&gt;   &lt;br /&gt;&lt;span style="font-size:+2;"&gt;&lt;u&gt;&lt;center&gt;&lt;b&gt;Democrat&lt;/b&gt;&lt;/center&gt;&lt;/u&gt;&lt;/span&gt;     &lt;/span&gt;&lt;br /&gt;       &lt;table id="thetable" name="thetable" background="http://is1.okcupid.com/graphics/politics/chart_political.gif" border="0" cellpadding="0" cellspacing="0" height="375" width="375"&gt;        &lt;tbody&gt;&lt;tr height="268"&gt;         &lt;td width="225"&gt;&lt;!--this width sets social axis, center is 169--&gt;&lt;br /&gt;&lt;/td&gt;         &lt;td width="149"&gt;&lt;br /&gt;&lt;/td&gt;        &lt;/tr&gt;         &lt;tr height="106"&gt;&lt;!--this height number economic axis,        center is 206--&gt;&lt;td width="225"&gt;&lt;br /&gt;&lt;/td&gt;          &lt;td align="left" valign="top" width="149"&gt;&lt;!--this cellholds the image--&gt;&lt;img src="http://is1.okcupid.com/graphics/politics_you.gif" border="0" /&gt;&lt;/td&gt;        &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;       &lt;br /&gt;       &lt;table id="thetable" name="thetable" background="http://is1.okcupid.com/graphics/politics/chart_basic.jpg" border="0" cellpadding="0" cellspacing="0" height="375" width="375"&gt;        &lt;tbody&gt;&lt;tr height="268"&gt;         &lt;td width="225"&gt;&lt;!--this width sets social axis, center is 169--&gt;&lt;br /&gt;&lt;/td&gt;         &lt;td width="149"&gt;&lt;br /&gt;&lt;/td&gt;        &lt;/tr&gt;         &lt;tr height="106"&gt;&lt;!--this height number economic axis,        center is 206--&gt;&lt;td width="225"&gt;&lt;br /&gt;&lt;/td&gt;          &lt;td align="left" valign="top" width="149"&gt;&lt;!--this cellholds the image--&gt;&lt;img src="http://is1.okcupid.com/graphics/politics_you.gif" border="0" /&gt;&lt;/td&gt;        &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;       &lt;br /&gt;&lt;br /&gt;Link: &lt;a href="http://www.okcupid.com/politics"&gt;&lt;b&gt;The Politics Test&lt;/b&gt;&lt;/a&gt;  on &lt;a href="http://www.okcupid.com/"&gt;&lt;b&gt;Ok Cupid&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Also: &lt;a href="http://www.okcupid.com/online.dating.persona.test"&gt;The OkCupid Dating Persona Test&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-4660684940826656489?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/4660684940826656489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=4660684940826656489' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4660684940826656489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/4660684940826656489'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/02/politics-schmolitics.html' title='Politics Schmolitics'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-3505522707475163632</id><published>2007-02-11T16:51:00.000Z</published><updated>2007-02-11T17:19:55.501Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tunbridge wells'/><title type='text'>So Long Longplayer</title><content type='html'>&lt;a href="http://www.flickr.com/photos/56571359@N00/386738443/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/174/386738443_478146b335.jpg" alt="P1010057" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;So Longplayer, the old record shop in Grosvenor Road, Tunbridge Wells, has finally gone. A victim, presumably, of the gradual decline in high street record sales in favour of internet retailers and downloads. In its place is the scaffolding that Anke mentions in &lt;a href="http://anke.blogs.com/anke/2007/02/there_is_no_pla.html"&gt;his blog post&lt;/a&gt;. With its neighbour, Camden Classics, it used to be a nice place to escape from the standard-issue high street shops all around it. Longplayer with a great range of music and some surprising obscurities to be found, Camden Classics to get a range of classical music, some of it pretty cheaply...&lt;br /&gt;I used to go in both of them quite a lot, for a browse - although less and less over the years. Partly due to generally buying stuff from Amazon/iTunes, but mainly due to buying less and less music as I get older. I think my last purchase there was Daft Punk - Musique 1993-2005, the CD+DVD, which I was surprised to find there, but then the place is, or was, full of surprises.&lt;a href="http://www.amazon.co.uk/gp/product/B000EUMKT0?ie=UTF8&amp;tag=jeannot-21&amp;amp;linkCode=as2&amp;camp=1634&amp;amp;creative=6738&amp;creativeASIN=B000EUMKT0"&gt;&lt;img src="http://images.amazon.com/images/P/B000EUMKT0.02._AA_SCMZZZZZZZ_.jpg" border="0" align="left" /&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=jeannot-21&amp;amp;l=as2&amp;o=2&amp;amp;a=B000EUMKT0" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;&lt;/p&gt;&lt;p&gt;My heavy music-buying phase at Longplayer was I suppose the early nineties. We didn't live in Tunbridge Wells then, but visited people who do, and I used to buy stuff like The Orb, Aphex Twin, and other weird electronic stuff, which I still listen to, not to mention a whole load of utter crap that I no longer listen to!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/gp/product/B00000E5F7?ie=UTF8&amp;tag=jeannot-21&amp;amp;linkCode=as2&amp;camp=1634&amp;amp;creative=6738&amp;creativeASIN=B00000E5F7"&gt;&lt;img src="http://images.amazon.com/images/P/B00000E5F7.02._AA_SCMZZZZZZZ_.jpg" border="0"  style="float:right"/&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=jeannot-21&amp;amp;l=as2&amp;o=2&amp;amp;a=B00000E5F7" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1"/&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/gp/product/B000005RHR?ie=UTF8&amp;tag=jeannot-21&amp;amp;linkCode=as2&amp;camp=1634&amp;amp;creative=6738&amp;creativeASIN=B000005RHR"&gt;&lt;img src="http://images.amazon.com/images/P/B000005RHR.01._AA_SCMZZZZZZZ_.jpg" border="0" align="left"/&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=jeannot-21&amp;amp;l=as2&amp;o=2&amp;amp;a=B000005RHR" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br clear="all"/&gt;&lt;br /&gt;Do other people out there have fond memories of music purchased there? I know &lt;a href="http://bitchinkitchen.blogspot.com/"&gt;Bluebear&lt;/a&gt; does...&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/5025071-3505522707475163632?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/3505522707475163632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=3505522707475163632' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3505522707475163632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/3505522707475163632'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/02/so-long-longplayer.html' title='So Long Longplayer'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/174/386738443_478146b335_t.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-6627691453346698942</id><published>2007-02-01T14:51:00.000Z</published><updated>2007-02-01T14:59:36.171Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>memcached</title><content type='html'>&lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; seems well worth using for highly-dynamic webapps which do a lot of database access. There's a brilliant Ajax-based travel portal called &lt;a href="http://www.kayak.co.uk/"&gt;Kayak&lt;/a&gt; which uses it, for one. Also it looks like a good fit for things implemented using &lt;a href="http://java.sun.com/docs/books/jini/javaspaces/index.html"&gt;JavaSpaces&lt;/a&gt;...?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-6627691453346698942?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/6627691453346698942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=6627691453346698942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6627691453346698942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/6627691453346698942'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/02/memcached.html' title='memcached'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-8928798698291326770</id><published>2007-01-31T11:44:00.000Z</published><updated>2007-02-01T08:42:08.053Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Even wife doesn't read blog</title><content type='html'>The blogging habits of Tunbridge Wells resident Paul Milner were at the centre of a family argument last weekend. It transpired that not even his wife was familiar with Mr. Milner's recent blog posts.&lt;br /&gt;"I was gobsmacked" said Mr Milner.  "You might have thought that a blog would at least be read by the writer's  spouse. But no."&lt;br /&gt;The revelation came about due to a chance discussion on Sunday. An opinion held by Mr Milner and discussed on his blog was met with some surprise by his spouse. Amongst protestations of ignorance, the unsettling facts came to light: despite over 15 years of marriage, Mr Milner's blog had never actually been perused by his wife.&lt;br /&gt;"Isn't it part of the sacred vows of marriage to read your partner's weblog?" commented Mr Milner. "Well if not it should be. How else am I supposed to drop subtle hints about my birthday?" he added.&lt;br /&gt;Mr Milner plans to make a five foot high enlarged and laminated copy of future blog posts and affix them in front of his wife's mirror, where she is sure to see them almost immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-8928798698291326770?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/8928798698291326770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=8928798698291326770' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8928798698291326770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8928798698291326770'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/01/even-wife-doesnt-read-blog.html' title='Even wife doesn&apos;t read blog'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-8722345592423424337</id><published>2007-01-30T09:25:00.000Z</published><updated>2007-01-30T09:28:24.071Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Charles Web Debugger</title><content type='html'>&lt;a href="http://www.xk72.com/charles/index.php"&gt;This&lt;/a&gt; is very useful... lets you see what's going on between your web client and server - handy enough for investigating traditional HTTP request/response-type interactions, even better for AJAX where you've got data flitting back and forth the whole time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-8722345592423424337?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/8722345592423424337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=8722345592423424337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8722345592423424337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/8722345592423424337'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/01/charles-web-debugger.html' title='Charles Web Debugger'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-1888761801852755383</id><published>2007-01-19T12:04:00.001Z</published><updated>2007-01-19T12:26:04.129Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Boden catalogue</title><content type='html'>&lt;a href="http://www.flickr.com/photos/56571359@N00/362445278/" title="photo sharing"&gt;&lt;img src="http://farm1.static.flickr.com/144/362445278_b2f2d3c833_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0); width: 364px; height: 275px;" /&gt;&lt;/a&gt;&lt;br /&gt;Y'know, something worries me about this photo on page 102 of the &lt;a href="http://www.boden.co.uk/"&gt;Boden&lt;/a&gt; Spring 2007 catalogue. Can't quite figure out what it is...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-1888761801852755383?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/1888761801852755383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=1888761801852755383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1888761801852755383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/1888761801852755383'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/01/boden-catalogue.html' title='Boden catalogue'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/144/362445278_b2f2d3c833_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-347809480448118199</id><published>2007-01-17T11:19:00.000Z</published><updated>2007-01-17T14:45:55.096Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='france'/><title type='text'>Tour de France</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bbc.co.uk/kent/content/images/2007/01/15/map5_470x355.gif"&gt;&lt;img style="cursor: pointer; width: 372px; height: 280px;" src="http://www.bbc.co.uk/kent/content/images/2007/01/15/map5_470x355.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Tour de France route for Sunday 8th July is &lt;a href="http://www.bbc.co.uk/kent/content/articles/2007/01/15/sport_tour_de_france_2007_route_feature.shtml"&gt;now available&lt;/a&gt;. The riders will go through Southborough and Tunbridge Wells, then out towards Pembury. Should be interesting to see - perhaps a good vantage point would be just north of Soutborough Common, and watch them coming up that bastard of a hill from Tonbridge...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-347809480448118199?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/347809480448118199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=347809480448118199' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/347809480448118199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/347809480448118199'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2007/01/tour-de-france.html' title='Tour de France'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116533580535530161</id><published>2006-12-05T16:12:00.000Z</published><updated>2006-12-08T11:43:01.296Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='germany'/><title type='text'>Cultural Learnings</title><content type='html'>Spent last week in &lt;a href="http://www.erding.de/"&gt;Erding&lt;/a&gt;, Bavaria - where we used to live. Thanks Chris, Emily, Katina and Ellie for putting us up / putting up with us! Key cultural learnings are as follows:&lt;br /&gt;&lt;br /&gt;1. When making a Chinese stir-fry, the tofu and vegetables should be cut into sharp shapes, i.e. triangles. The peppers should be cut on the slant to give a wedge-shape, rather than the squared-off lumps that I tend to do. This is presumably important for the overall feng shui of the meal... Tofu is also better fried in plenty of oil for plenty of time: I have been chronically undercooking it. Must get some of that Teriyaki sauce as well, which when mixed up with garlic, ginger, etc. makes a much better flavour than just dousing it with soy sauce.&lt;br /&gt;&lt;br /&gt;2. If you find yourself tempted to have a drink at the pool bar at &lt;a href="http://www.therme-erding.de/"&gt;Therme Erding&lt;/a&gt;, don't order a half litre of Weissbier. Stick to something that combines better with swimming.&lt;br /&gt;&lt;br /&gt;3. The restaurant in the Schöner Turm is very nice, and they do an interesting mixture of Bavarian and Thai food (if you can imagine that), but they do have a tendency to close the kitchen early if you take 4 excitable young ladies who rampage through about 6 plates of bread, steal further supplies from surrounding tables, and pretend to be aliens by balancing knives on their foreheads.&lt;br /&gt;&lt;br /&gt;4. Gluehwein at the local Christmas market is now served in a cup shaped like a little boot. Not sure if this is progress or not. I tend to think not. But I definitely prefer the little Erding market to the enormously crowded one in Munich itself.&lt;br /&gt;&lt;br /&gt;5. If you pack your suitcase full of Lebkuchen, Weihnachtsschokolade and other goodies for the trip home, and then entrust it to the tender mercies of British Airways baggage handlers, don't expect them to remain uncrushed.&lt;br /&gt;&lt;br /&gt;6. Don't waste time vaguely pondering how nice it would be to get the hell out of South-East England for another few years in this pleasant corner of Europe...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116533580535530161?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116533580535530161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116533580535530161' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116533580535530161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116533580535530161'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/12/cultural-learnings.html' title='Cultural Learnings'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116379246804324252</id><published>2006-11-17T19:39:00.000Z</published><updated>2006-11-17T19:41:08.056Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Probably Poppy...</title><content type='html'>&lt;a href="http://www.flickr.com/photos/56571359@N00/299575700/" title="Probably Poppy... "&gt;&lt;img src="http://static.flickr.com/104/299575700_2c6ca9301d.jpg" width="368" height="500" alt="probably Poppy..." /&gt;&lt;/a&gt;&lt;br/&gt;by Judy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116379246804324252?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116379246804324252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116379246804324252' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116379246804324252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116379246804324252'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/11/probably-poppy.html' title='Probably Poppy...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116371546224534975</id><published>2006-11-16T21:51:00.000Z</published><updated>2006-11-16T22:25:56.613Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>Amazon Elastic Compute Cloud</title><content type='html'>Having signed up for an account a while back, I finally got around to trying &lt;a href="http://www.amazon.com/gp/browse.html?node=201590011"&gt;Amazon EC2&lt;/a&gt;. It's pretty cool. Once you've signed up for the service, you can create server instances which you can use for whatever you want - you create a server configuration or use a predefined one. The idea being you can quickly get and configure a Linux instance, with Apache, MySQL, whatever you want on it, and if you need more capacity, just start more instances of your server. The process of setting it up, as described in the &lt;a href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/"&gt;Getting Started Guide&lt;/a&gt; is quite intricate, but you control the whole thing yourself rather than having to have a back'n'forth with a hosting company. It involves:&lt;br /&gt;1. setting up an Amazon AWS account and signing up for Amazon S3 (Simple Storage Service) and the Elastic Compute Cloud (EC2)&lt;br /&gt;2. Downloading the command line tools to work with server instances&lt;br /&gt;3. install the tools, set some environment variables, and set up some security keys/certificates&lt;br /&gt;4. Choose a server image (AMI - Amazon Machine Image) - there is a "Getting Started" image which is basically Fedora Core 4 Linux with some basic software on it e.g. Apache&lt;br /&gt;5. Set up an RSA key to use with your image, and a few other bits of config e.g. to open the SSH and HTTP ports to the world&lt;br /&gt;6. Configure PuTTY to use the key if you're going to be SSHing to the image with PuTTY. This allows you to log into the machine as root with a key instead of a password.&lt;br /&gt;7. Start the image - it takes a few mins to start and then you can login as root and do what you like with it. There is a web page you can hit as well to check that Apache is up and running.&lt;br /&gt;8. Leave the server up or shut it down. Don't forget to shut it down though because your account is being charged for the time it's up.&lt;br /&gt;&lt;br /&gt;So there you go. Might be handy, if I ever get round to doing my proposed Amazon books/Google Maps mashup, provisionally entitled "Read The World"... So anyway, I created a server, fiddled around with it for a bit, maybe half an hour, and brought it back down again. Didn't do anything really - no database, no website traffic to speak of. Checked my Amazon AWS account afterwards, and I had clocked up a bill of $0.13. Hmm - could get expensive?? &lt;br /&gt;&lt;br /&gt;Costs:It's 10 cents per hour (or part hour) anyway to have an instance, plus 20 cents per GB of data transfer, plus VAT. So $2.40 to have a server up for a day, say $70 per month, plus your data transfer, plus tax. I suppose it's good for people who want to be able to very quickly increase/decrease their capacity...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116371546224534975?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116371546224534975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116371546224534975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116371546224534975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116371546224534975'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/11/amazon-elastic-compute-cloud.html' title='Amazon Elastic Compute Cloud'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116367047395286010</id><published>2006-11-16T08:57:00.000Z</published><updated>2006-11-27T11:53:28.440Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='weblogic'/><title type='text'>Weblogic notes</title><content type='html'>Notes to self! Here are some learnings from a recent project. When upgrading Weblogic, ensure that the following issues are all covered in order to avoid performance and/or compatibility problems. Next time, it would be a good idea to put all these items in a project plan checklist to make sure they are all ticked off... I would put the following in a list in big letters and ensure they are all covered:&lt;br /&gt;&lt;ol compact&gt;&lt;br /&gt;&lt;li&gt;JDK - check versions in use for compile/deploy. Upgrade to latest.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Startup params - verify your settings if migrating, they may be deprecated&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Clustering - run your test systems clustered to avoid surprises!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Security - beware of changed transaction handling&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Domain trust - set domain trust between your tiers&lt;/li&gt;&lt;br /&gt;&lt;li&gt;IIOP - switch it off if you don't actually need it&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SerialVersionUID - in case you are sharing objects between tiers running different WLS versions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Weblogic Console - is very different&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Everything else...&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. JDK:&lt;/span&gt; Which JDK is Weblogic using, and which JDK are your applications compiled against? We ran into problems with JDK5 release 4, related to garbage collection, which were apparently fixed in release 9 (see &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5089317"&gt;this bug report&lt;/a&gt;). Several versions were knocking around: I had jdk1.5.0_06 on my PC, my Weblogic installation had jdk1.5.0_04. It is apparently recommended to upgrade to jdk1.5.0_09 (currently) because of memory management issues in earlier version. So: check which versions are in use on the build machine and the deployment machine(s). There is also a note to include a startup parameter to avoid serialVersionUID problems: JAVA_OPTIONS=&lt;br /&gt;-Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Startup parameters:&lt;/span&gt; These have changed between WLS 6.1 and 9.1 - in some cases quite radically, e.g. certain memory settings have been removed/replaced. Make sure that you check which settings are in your startup script and replace them with the new settings if necessary. We found that we were using some out of date settings but didn't realize, because they were just ignored.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Clustering:&lt;/span&gt; if you're running a test system, it's a good idea to run that as a cluster. This way you can eliminate any clustering-related issues on your test system before you migrate it to production. We had initially tested on a non-clustered environment, which caused some last-minute WTF?-moments when we deployed on Production&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Security:&lt;/span&gt; Weblogic 9.1 has a different security model for handling database transactions and so on. So take careful note of the database drivers you are using (XA or non-XA, etc.) and use the appropriate settings. By default, in JDBC settings, "support global transactions" is on, but you may not need this, so check! For example, our web application is largely read-only: any database updates are done via adapters to external/legacy systems, so we don't really need to support transactions except in specific cases. So switch it off if you don't need it, or you will see a lot of scary console messages about "transaction downgraded to anonymous" or something like that, I can't remember the details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Set up server trust relationship:&lt;/span&gt; don't forget to set server trust between servers in your domain, otherwise any transactions etc. that you do try to run across tiers may fail. To do this, you need to set the domain trust credential/password to be the same across servers in the domain. See &lt;a href="http://e-docs.bea.com/wls/docs91/secmanage/domain.html"&gt;this page&lt;/a&gt; for discussion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. IIOP:&lt;/span&gt; IIOP is enabled (by default?) but if you're not using CORBA etc. directly from your Java applications you can possibly switch this off. We thought we were using IIOP but it turned out that our CMS (Broadvision) was putting some IIOP-related messages in our Weblogic console output but we didn't actually need to have the Weblogic IIOP support switched on, because Broadvision was handling it itself.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7. serialVersionUID:&lt;/span&gt; early on in the project, we realized we would still have to run certain applications in a Weblogic 8.1 environment, but that they shared some objects and RMI/EJB calls with the new Weblogic 9.1 environment. So we had to disable the version checking in various objects (mainly Transfer/Value objects, Exceptions) which might be serialized across the wire between these environments, by manually setting the serialVersionUID to 1. Which is fine normally but means you lose visibility if things really are incompatible...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;8. Weblogic Console:&lt;/span&gt; this has changed radically from 6.1 and even from 8.1. Best to familiarize - also we found that under Weblogic 9.1, especially in a clustered environment, the console can be very, very slow. I heard a rumour that this is improved in WLS 9.2 but don't know for sure. Definitely worthwhile scripting changes via the new scripting tool (WLST) if you don't want to be waiting for the web console pages to load...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;9. Everything else!&lt;/span&gt; The following items also came up and may be worth bearing in mind:&lt;br /&gt;- Weblogic 9.1 has by default an "auto-tuning" feature which is supposed to optimize thread use. This may not be ideal for your application profile: you can switch it off and go with manual thread settings, which is what you had to do in previous versions anyway. It's worth checking this sort of thing before you implement rather than being surprised by it!&lt;br /&gt;- Deployment descriptors: there is a tool to upgrade them to the correct version&lt;br /&gt;- JDBC drivers: we migrated from a Type 2 to a Type 4 driver...&lt;br /&gt;- JSPs: There is a utility/Ant task to precompile JSPs for the new version - worth running to check for compilation errors etc in advance of deployment&lt;br /&gt;- Tiles: if you are using Struts Tiles, some tags had to change e.g. adding a "flush" attribute here and there, and using getAsString methods instead of just gets...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116367047395286010?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116367047395286010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116367047395286010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116367047395286010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116367047395286010'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/11/weblogic-notes.html' title='Weblogic notes'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116317573459649779</id><published>2006-11-10T16:09:00.000Z</published><updated>2006-11-10T16:22:14.613Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Poppies</title><content type='html'>&lt;a href="http://www.flickr.com/photos/56571359@N00/293790640/" title="Photo Sharing"&gt;&lt;img src="http://static.flickr.com/116/293790640_e9126b8b57_m.jpg" width="240" height="180" alt="poppy" /&gt;&lt;/a&gt;&lt;br /&gt;That's our cat Poppy (whose birthday is November 11th), with a poppy.&lt;br /&gt;One of my great-grandfathers was killed in World War One, so, Private Ernest Hellewell, 335445, of the Royal Scots, this is for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116317573459649779?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116317573459649779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116317573459649779' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116317573459649779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116317573459649779'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/11/poppies.html' title='Poppies'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116185065570575727</id><published>2006-10-26T08:11:00.000Z</published><updated>2006-10-27T08:08:53.390Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Groovy Grails</title><content type='html'>See the Dev2Dev article mentioned below. My thinking at the moment is that if you already have quite an investment in the Java platform, it would be easier to bring in use of Groovy/Grails than to migrate to Ruby on Rails. Personally, this is a happier compromise than plumping hook, line and sinker for Ruby, which risks throwing out the baby with the bathwater. Sorry about the mixed metaphors. Why am I apologizing? Who the hell's going to be reading this other than myself?&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://dev2dev.bea.com/pub/a/2006/10/introduction-groovy-grails.html"&gt;An Introduction to Groovy and Grails&lt;/a&gt; by Harshad Oak -- Groovy is a scripting language that runs on Java VMs and Grails a Web development framework. Learn about Grails on Groovy and decide whether it is a compelling alternative to Ruby on Rails.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116185065570575727?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116185065570575727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116185065570575727' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116185065570575727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116185065570575727'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/10/groovy-grails.html' title='Groovy Grails'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116170049823878841</id><published>2006-10-24T14:24:00.000Z</published><updated>2006-10-24T14:34:58.260Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Java DocWeb</title><content type='html'>Found &lt;a href="http://blog.developpez.com/index.php?blog=40&amp;title=traduire_la_javadoc_en_ligne&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1"&gt;this&lt;/a&gt; post on &lt;a href="http://www.developpez.com/"&gt;Developpez.com&lt;/a&gt; - concerning James Gosling's initiative to allow online viewing and editing of the Java 6 (and 5) javadocs. Seems like a good idea: multilingual javadocs at your fingertips, with some community-edited content.&lt;br /&gt;Here's a translation of that post:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"James Gosling recently announced a new project called DOCWEB.&lt;br /&gt;This project will permit anyone to create online translations of the javadoc for Java SE6 and also Java EE 5.&lt;br /&gt;Personally I think this is an excellent idea.&lt;br /&gt;But it's a shame Sun didn't allow this 10 years ago.&lt;br /&gt;How to get involved?&lt;br /&gt;Go to this page:&lt;br /&gt;http://doc.java.sun.com/DocWeb/&lt;br /&gt;and choose a class of some sort.&lt;br /&gt;Check that the language is set to English, and choose Login.&lt;br /&gt;Enter a userid, password, and click on Need to register?&lt;br /&gt;Repeat your password, enter your email address and a confirmation number.&lt;br /&gt;You're now registered.&lt;br /&gt;Next, choose the class you'd like to translate, and choose the language (French) and then "Translate". This allows you to edit the class's javadoc online.&lt;br /&gt;Want an example of what this gives you? See the javadoc for ZipEntry. It has been partially translated. You can even vote for the translation, or propose a better one.&lt;br /&gt;Note that this is only a test:&lt;br /&gt;    "This is just an experiment,&lt;br /&gt;    expect the database to get trashed"&lt;br /&gt;Also note that James Gosling has made the source code for this project available to you under a GPL licence at:&lt;br /&gt;http://doc.java.sun.com/DocWeb/&lt;br /&gt;Vincent"&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116170049823878841?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116170049823878841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116170049823878841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116170049823878841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116170049823878841'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/10/java-docweb.html' title='Java DocWeb'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-116152237979608826</id><published>2006-10-22T13:00:00.000Z</published><updated>2006-10-25T15:23:07.816Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Conversion experience</title><content type='html'>I've never been much of a religious person until now. I tried to be a Christian but it somehow just didn't hang together for me. Tendencies towards atheism kept reasserting themselves - until recently. Fortunately for my eternal soul I have now been enlightened by &lt;a href="http://www.venganza.org/"&gt;The Church of the Flying Spaghetti Monster&lt;/a&gt;. This wonderful organization has helped me clearly to see the truth. Verily I have been touched by His Noodly Appendage. Anyone reading this blog, I hope it helps you on your path to enlightenment and true understanding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-116152237979608826?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/116152237979608826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=116152237979608826' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116152237979608826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/116152237979608826'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/10/conversion-experience.html' title='Conversion experience'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115953855104848050</id><published>2006-09-29T13:45:00.000Z</published><updated>2006-09-29T14:22:32.520Z</updated><title type='text'>Scaffolding isn't for Production</title><content type='html'>Rails is all very well, and you can build a CRUD application over a database in No Time Flat using the templating that Scaffolding gives you, but as &lt;a href="http://glu.ttono.us/articles/2006/08/30/guide-things-you-shouldnt-be-doing-in-rails"&gt;this post&lt;/a&gt; points out: &lt;blockquote&gt;Scaffolding isn't for production. Overcome your addiction. It shouldn't be modified to be more customizable. Developers should instead learn to write Rails code.&lt;/blockquote&gt;Which sounds like the Voice of Experience. But it leads me in an unexpected direction: I have no great desire to learn how to write proper Rails code. Using Rails make me just want to cobble things that seem to work and say Wow! that was quick! No. I want to write proper &lt;i&gt;Java&lt;/i&gt; code. And if that's the case, I may as well write things from scratch in Java, which gives me much more flexibility with plugging in functionality, scalability, etc. And is in general a language of great beauty and expressiveness - unlike Ruby source code which to be frank looks like the bastard offspring of a BASH script and a CASE tool...&lt;br /&gt;Let's face it, it's no great problem to write things properly in Java these days, there's so many things to help you do it, frameworks, IDEs, components... I think I'm going to have to take that "I &lt;font size="+1"&gt;&amp;hearts;&lt;/font&gt; Ruby on Rails" item off my blog menu - I've just fallen out of &lt;font size="+1"&gt;&amp;hearts;&lt;/font&gt; with it. I'm a Java bigot and I'm just gonna have to live with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115953855104848050?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115953855104848050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115953855104848050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115953855104848050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115953855104848050'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/09/scaffolding-isnt-for-production.html' title='Scaffolding isn&apos;t for Production'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115918741023108648</id><published>2006-09-25T12:29:00.000Z</published><updated>2006-10-08T02:36:16.490Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic'/><title type='text'>JMX Clients</title><content type='html'>I needed a JMX client this morning (I want to create a Hibernate SessionFactory using JMX rather than coding another singleton), so I started having a look to see what's out there, as I haven't looked at these sort of instrumentation interfaces for Weblogic at all - apart from the main Weblogic admin console, and just scratching the surface of the weblogic.Admin command-line tool. So what is out there? &lt;br /&gt;&lt;br /&gt;&lt;b&gt;jManage:&lt;/b&gt; Initially I found &lt;a href="http://www.jmanage.org/"&gt;jManage&lt;/a&gt;: I tried to install the webapp under Weblogic9.1 but couldn't get it to work for me - there is a command-line tool with it but haven't tried it yet.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EJTools JMX Browser:&lt;/b&gt; To avoid having to load a webapp into a container, with all the grief that can go with it, I tried to find a Swing-based JMX client that I could just run as a standalone app - found the &lt;a href="http://www.ejtools.org/applications/jmx.browser/"&gt;EJTools JMX Browser&lt;/a&gt; which looked promising but I see it hasn't been updated since 2003 and although it says it works with Weblogic 7, and although it seemed to get tantalisingly close, I can't get it to work with Weblogic 9.1.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sun tools:&lt;/b&gt; Sun appear to have some JMX tools - including a plugin for NetBeans, but since my fave environment is Eclipse, I am going to try &lt;a href="http://www.hta-bi.bfh.ch/Projects/ejbplug/"&gt;EJAM&lt;/a&gt; which I found via some Eclipse plugin portals. Downloaded it to my Eclipse directory, restarted Eclipse and you get a new perspective called "JMX Console. Open this, you see a JMX Server Tree, to which you can add servers. I have tried, but I get some sort of screwy error suggesting it can't add the libraries I specified. Back to the drawing board.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;XtremeJ:&lt;/b&gt; Next up, &lt;a href="http://www.xtremej.com/"&gt;XtremeJ&lt;/a&gt;, which is not open-source or free, but it is an Eclipse plugin, so will give it a go.&lt;br /&gt;You have to go thru a register to evaluate process, then added the downloaded ZIP to my Eclipse plugins directory (this was a guess).&lt;br /&gt;This gives you a new "Java Management" perspective, and the first thing you have to do is enter the serial number that XtremeJ sends you.&lt;br /&gt;Which I did. And it didn't work. Meh.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So in effect I haven't got anything working. Closest I've got so far is using the following JSR-77 parameters:&lt;br /&gt;Factory=weblogic.jndi.WLInitialContextFactory&lt;br /&gt;Packages=weblogic.jndi (dunno what this is for though...)&lt;br /&gt;URL=service:jmx:t3://localhost:7001/jndi/&lt;br /&gt;Context=weblogic.management.mbeanservers.domainruntime&lt;br /&gt;Principal/Credential=same as weblogic administrator account&lt;br /&gt;Need to copy wljmxclient.jar and copy weblogic.jar to where the program can see them...&lt;br /&gt;That's as far as I've got.&lt;br /&gt;&lt;br /&gt;Maybe the best hope is to use the built-in command-line tool (weblogic.Admin) which should allow me to CREATE managed beans, INVOKE methods on them, SET properties on them... etc... Try &lt;i&gt;java weblogic.Admin -username uuuu -password pppp weblogic help&lt;/i&gt;. Except, that the command line tool is deprecated as of WLS9 - you are now supposed to use the Weblogic Scripting tool...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115918741023108648?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115918741023108648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115918741023108648' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115918741023108648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115918741023108648'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/09/jmx-clients.html' title='JMX Clients'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115788034294921761</id><published>2006-09-10T09:22:00.000Z</published><updated>2006-09-10T09:25:42.960Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Wikimapia</title><content type='html'>&lt;a href="http://www.wikimapia.org/#y=51122489&amp;x=46692&amp;z=10&amp;l=0&amp;m=a"&gt;Wikimapia&lt;/a&gt; looks like an interesting project... sample map below&lt;br /&gt;&lt;iframe src=http://wikimapia.org/s/#y=44590467&amp;x=4790039&amp;z=5&amp;l=0&amp;m=a width=343 height=228 frameborder=0&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115788034294921761?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115788034294921761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115788034294921761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115788034294921761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115788034294921761'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/09/wikimapia.html' title='Wikimapia'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115773285423279748</id><published>2006-09-08T16:22:00.000Z</published><updated>2006-09-08T16:27:34.246Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tunbridge wells'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Self-referential...</title><content type='html'>In true po-mo tradition, I am taking this opportunity to write a blog post on the subject of a news article which refers to this blog! Robert Leslie of BBC Kent wrote &lt;a href="http://www.bbc.co.uk/kent/content/articles/2006/08/31/kent_blogging_feature.shtml"&gt;this&lt;/a&gt; feature on blogging, in which he refers to various blogs from round the area - including your very own Jeannot's Weblog...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115773285423279748?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115773285423279748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115773285423279748' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115773285423279748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115773285423279748'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/09/self-referential.html' title='Self-referential...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115494870879750131</id><published>2006-08-07T10:41:00.000Z</published><updated>2006-08-29T14:22:59.736Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Kids, eh?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jeannot.uklinux.net/uploaded_images/P1010053-761867.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;width:" src="http://www.jeannot.uklinux.net/uploaded_images/P1010053-752725.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well here we are back at home for a few days with the girls still down in Dorset visiting their Nana and Poppa. And what a change it makes to our relaxation levels! Observe the difference. The first picture (click &lt;a href="http://www.jeannot.uklinux.net/uploaded_images/P1010053-761867.JPG"&gt;here&lt;/a&gt; for the full size image) is a recent one of our life with the children around: the background soundtrack that you can't hear consists of the frenzied clanging of crockery and the bustle of neverending chores, overlaid with "More pizza!!!"  "Have you ironed my skirt yet??" "I want a fiver to go to Costcutters with!!" etc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jeannot.uklinux.net/uploaded_images/P1010056-724664.JPG"&gt;&lt;img style="margin: 10px; float: left; cursor: pointer;" src="http://www.jeannot.uklinux.net/uploaded_images/P1010056-720041.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The second picture (full size image &lt;a href="http://www.jeannot.uklinux.net/uploaded_images/P1010056-724664.JPG"&gt;here&lt;/a&gt;) is one taken today, as we sip a cocktail whilst nestled on soft cushions, reading books and pondering which 5-star restaurant to go to for lunch.... Aaaah!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115494870879750131?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115494870879750131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115494870879750131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115494870879750131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115494870879750131'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/08/kids-eh.html' title='Kids, eh?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115479355808314292</id><published>2006-08-05T15:33:00.000Z</published><updated>2006-08-05T15:59:18.176Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>More Rails notes... sort of...</title><content type='html'>&lt;a href="http://www.jeannot.uklinux.net/uploaded_images/P1010011-787954.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.jeannot.uklinux.net/uploaded_images/P1010011-781276.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;As I've been in Dorset this week, doing a bit of cycling and walking, and climbing over Purbeck stone stiles at &lt;a href="http://en.wikipedia.org/wiki/Dancing_Ledge"&gt;Dancing Ledge&lt;/a&gt; (see photo), I haven't been looking at Rails or indeed anything remotely computer-related.&lt;br /&gt;But today, I can't be bothered to set foot out of the house (that's the result of a week of unaccustomed exercise!) I thought I'd have a look at the Rails CMS known as &lt;a href="http://dev.radiantcms.org/"&gt;Radiant&lt;/a&gt;. So far I haven't done anything with it - just downloaded it - but on the face of it, it seems to do what I need to be a front-end to my planned webapp (which I still don't have a name for...). It's a lightweight CMS written with Ruby On Rails. You can get just a download of the app or you can download the source from their &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; server.&lt;br /&gt;It's funny how certain technologies go together... in the Java/J2EE world, you know you're going to find CVS and Eclipse, Jakarta and JBoss, SOA and ESB because they all kind of go together in that enterprise application mould. With Ruby On Rails, you just know that you'll find it closely associated with Subversion (the proposed successor to CVS), with blogging software, with tagging, with RSS, with Ajax. It's all just much more &lt;a href="http://en.wikipedia.org/wiki/Web2.0"&gt;Web 2.0&lt;/a&gt; these days, and the Java world is starting to look a bit ponderous and "&lt;a href="http://en.wikipedia.org/wiki/Enterprisey"&gt;enterprisey&lt;/a&gt;", as they say... Not that I'm planning to stop being a Java bigot! Java is still THE BEST programming language there is (let's face it, .NET was made to look Java-like!), and you can just tell that if you had a big complex project to do with Ruby and/or Rails, the lack of a formal package structure would leave you in a right mess in no time flat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115479355808314292?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115479355808314292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115479355808314292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115479355808314292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115479355808314292'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/08/more-rails-notes-sort-of.html' title='More Rails notes... sort of...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115408032535775885</id><published>2006-07-28T09:47:00.000Z</published><updated>2006-10-02T15:42:01.100Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Sophie has gone to the dark side</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/56571359@N00/200192987/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/57/200192987_8572beb008_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/56571359@N00/200192987/"&gt;Weirdos!&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/56571359@N00/"&gt;Paul Milner&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;Judging by her latest drawings....&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115408032535775885?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115408032535775885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115408032535775885' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115408032535775885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115408032535775885'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/07/sophie-has-gone-to-dark-side.html' title='Sophie has gone to the dark side'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115391248086244977</id><published>2006-07-26T11:10:00.001Z</published><updated>2006-09-27T00:23:42.973Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Ruby On Rails and Gem installing</title><content type='html'>I'm only just getting into &lt;a href="http://www.rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt; so this is just some notes on things that cause me problems!&lt;br /&gt;&lt;br /&gt;I've had trouble updating Rails to 1.1.4 - it looks like this is because I am behind a firewall here at work. I'm on WinXP.&lt;br /&gt;When I do "gem install --http-proxy {proxyURL} -v 1.1.4 rails" it would appear to start OK but then bail out.&lt;br /&gt;I didn't find out why... but anyway I moved on to try downloading the packages and installing them from local repository. It wasn't obvious how to do this: maybe there is documentation for it but I haven't found it.&lt;br /&gt;Finally figured out the following. To upgrade Rails to 1.1.4 locally:&lt;br /&gt;&lt;br /&gt;Get the gems and zips for the following packages from RubyForge, and put them in c:\ruby (in my case)&lt;br /&gt;(I assume you need both the zip and the gem):&lt;br /&gt;&lt;br /&gt;rails-1.1.4&lt;br /&gt;activesupport-1.3.1&lt;br /&gt;activerecord-1.14.3&lt;br /&gt;actionpack-1.12.3 (I could only find 1.12.1 listed on RubyForge, but I did find it via Google!)&lt;br /&gt;actionmailer-1.2.3&lt;br /&gt;actionwebservice-1.1.4 (again couldn't find it direct but via Google OK)&lt;br /&gt;&lt;br /&gt;Install all these in the right order by running "gem install -l -v &lt;version&gt; &lt;packageName&gt;.&lt;br /&gt;It will complain if you don't do the dependencies in the right order...&lt;br /&gt;&lt;br /&gt;Lastly install rails via "gem install -v 1.1.4 rails"&lt;br /&gt;Hopefully this time it will install OK and then you are sorted...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115391248086244977?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115391248086244977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115391248086244977' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115391248086244977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115391248086244977'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/07/ruby-on-rails-and-gem-installing_26.html' title='Ruby On Rails and Gem installing'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115329773920438909</id><published>2006-07-19T08:28:00.000Z</published><updated>2006-07-23T22:15:11.890Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='france'/><title type='text'>Brittany photoblog</title><content type='html'>&lt;a href="http://kerhiec.blogspot.com/2006/07/bridge-and-reflection-at-bon-repos.html"&gt;Bridge and reflection at Bon Repos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to the owner of &lt;a href="http://kerhiec.blogspot.com/"&gt;this&lt;/a&gt; blog for providing us almost daily with some nice photos of Brittany to look at.&lt;br /&gt;One day I'm going to actually do what I've been telling myself I'll do for years: move to France! But right now it's not exactly convenient, not without uprooting my kids who are in school in Tunbridge Wells and rather attached to their friends and socializing opportunities in town...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115329773920438909?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://kerhiec.blogspot.com/' title='Brittany photoblog'/><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115329773920438909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115329773920438909' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115329773920438909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115329773920438909'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/07/brittany-photoblog.html' title='Brittany photoblog'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-115106140735266531</id><published>2006-06-23T10:44:00.000Z</published><updated>2006-07-29T19:42:06.756Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tunbridge wells'/><title type='text'>Tunbridge Wells</title><content type='html'>I do like the &lt;a href="http://anke.blogs.com/"&gt;"Anke: Royal Tunbridge Wells"&lt;/a&gt; blog: great photos and interesting insights about our town. This optimistic blog is a regular reminder that, as English towns go, we have some wonderful heritage right on our doorsteps. Which is something that I do need now and again, as I tend to pick up on the negative aspects, for example the terrible traffic and car-centric town centre, often alluded to on the &lt;a href="http://disgusted.tw/"&gt;Disgusted.tw&lt;/a&gt; blog. It's the simmering tension in the town which really worries me though: I'm pretty sure it's something which is endemic to English culture, but it's certainly there even in leafy towns with no major problems.&lt;br /&gt;A couple of weeks ago, it was only about seven in the evening, I was coming out of High Brooms station, and could hear someone shouting and swearing somewhere nearby. Uh-oh, I thought. As I walked down the alley, I saw a very angry - and very muscular - man (he was with a woman) flinging a crate of cans of Stella Artois to the floor. He disappeared round the corner whilst the woman sheepishly started trying to gather up the cans. He then reappeared, bellowing "Oh that's really got me angry now! Now I really want to punch someone!" I had just about got level with him at this point, and was trying to negotiate me and my bike past him - oops, made eye contact for 0.5 seconds - and that was it: he shoved me into the fence with a "Get out of my f***ing way!" I did. But behind me, he had whirled round, and was shouting at my retreating back "Oh yeah? Wanna make something of it?". The woman was trying to calm him down. I fled, feeling guilty as hell: maybe I should be phoning the police or helping the woman he was with. But if it was - as it seemed - a domestic (isn't Stella Artois known as "Wife Beater"?), then I could well have made it worse.&lt;br /&gt;I scuttled round the corner with my bike and lurked there for a while, just in case. But I heard no further raised voices, and no one emerged. I cycled away, filled with distress. Why do people act like that? The couple involved didn't look like poverty-stricken junkies: they were fashionably dressed. They looked like normal twentysomething people. This is what I mean about the dark side of Tunbridge Wells: it's all very nice, but people seem tense the whole time. The town centre is horrible late evening, the atmosphere just seems to change into something scary: late into the night I can hear people shouting alcohol-fuelled sentiments around our area. The roads are worrying to drive on, everyone jealously guarding their bit of space: no wonder lots of people feel the need to purchase vast SUVs to clog up our narrow streets with.&lt;br /&gt;My wife says I'm projecting. Perhaps. I'm sure she's well sick of me going on about this sort of thing for the past few years! But I don't get this feeling when I visit towns in France, Germany or Switzerland. What's gone wrong with England?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-115106140735266531?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeannotsweblog.blogspot.com/feeds/115106140735266531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5025071&amp;postID=115106140735266531' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115106140735266531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/115106140735266531'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/06/tunbridge-wells.html' title='Tunbridge Wells'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-114917175424047225</id><published>2006-06-01T14:14:00.000Z</published><updated>2006-06-01T14:26:13.333Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Farmyard Noises</title><content type='html'>Those &lt;a href="http://www.bbc.co.uk/radio4/archers/"&gt;Archers&lt;/a&gt; are a noisy lot, aren't they? The characters in the popular BBC Radio 4 soap seem to find it incredibly important to make a lot of noise about what they are doing whilst they're talking to the other characters. Whenever &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_davidarcher.shtml"&gt;David&lt;/a&gt; is talking to &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_rutharcher.shtml"&gt;Ruth&lt;/a&gt;, whilst fixing some bit of combine harvester, he always makes a point of grunting like a rutting chimpanzee, punctuating each screw untightening with a series of little gasps and exhalations.&lt;br /&gt;&lt;br /&gt;If only that were all: the sounds of honest toil are entirely appropriate to lend the correct ambience to an agricultural community. However the audible backdrop of noises intended to illustrate the radio soap has surely gone a bit too far. Whenever a character is eating, do we really have to be constantly reminded of the fact? In &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_thebull.shtml"&gt;The Bull&lt;/a&gt; for example, it seems &lt;i&gt;de rigueur&lt;/i&gt; for a character, on being asked a question, to first take a huge bite of &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_jolenerogers.shtml"&gt;Jolene&lt;/a&gt;'s cheese sandwich before answering the question with his mouth full. Worse, he feels it essential to take a generous slurping swig of Shire's bitter before responding.&lt;br /&gt;&lt;br /&gt;Even the most effortless and commonplace actions of everyday life are accompanied by this phatic soundtrack. For example, take &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_alistairlloyd.shtml"&gt;a character&lt;/a&gt; engrossed in losing �100000 on an online poker website. He is usually heard to be humming and grunting along with his mouse clicks. But where it really puts me off my dinner (which, bearing in mind The Archer's customary transmission time of three minutes past seven in the evening, is a genuine problem), is when the subliminal audio-suggestions extend beyond the public realm into Ambridge's private quarters and boudoirs. Here, we are assured a lip-smackingly explicit panoply of slurps and gurgles to accompany any scene of domestic sensuality: the much-trailered cross-confessional kiss of &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_alanfranks.shtml"&gt;vicar&lt;/a&gt; and &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_ushagupta.shtml"&gt;Hindu solicitor&lt;/a&gt; was relayed via high-definition microphone across the ether and into the listener's speakers with pin-sharp fidelity. But there's plenty more than that: any Borsetshire babies who are wheeled or carried onto the scene are guaranteed to keep up a series of infantile squeaks and prattles. Sofa-based horseplay between the &lt;a href="http://www.bbc.co.uk/radio4/archers/whos_who/characters/who_adammacy.shtml"&gt;resident gay characters&lt;/a&gt; is always decorated with gruff ejaculations of manly enjoyment. Romantic scenes &lt;i&gt;&amp;agrave; deux&lt;/i&gt; are always accompanied by realistic silky sliding sounds suggesting the slow removal of nether garments. Quite fun in itself, but not sounds that you really want to associate with the leisure hours of Mike and Betty Tucker, for example. Especially not now, following her untimely demise.&lt;br /&gt;&lt;br /&gt;I can understand that this long-running BBC Radio soap wants and needs to compete with the more raunchy offerings of TV, but I can really do without this unrealistically plangent chorus of noises. They should just concentrate on having good dialogue. I would even be willing to accept more verbal cues if it meant ruling out the noises, e.g.:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"So David, have you thought about the problem with the animal feed?"&lt;br /&gt;"Well Bert, I'm just going to take a long, satisfying drink of beer before I answer your question." &lt;br /&gt;(Blissfully silent pause)&lt;br /&gt;"That was delicious. Now, about this silage..."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I really would prefer that to stuff like:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"So David, have you thought about the problem with the animal feed?"&lt;br /&gt;"Mmm, Bert, ulpp, ssssssllllluuuuuurrrrrrpppppp!!! Hmmph. BAAAAAAAAAAHHHHH!!!! Now about this silage..."&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-114917175424047225?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/114917175424047225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/114917175424047225'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/06/farmyard-noises.html' title='Farmyard Noises'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113809816270149760</id><published>2006-01-24T10:22:00.000Z</published><updated>2006-03-13T14:20:23.530Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>The BBC Radio 4 UK Theme</title><content type='html'>How long have I awaited this joyous moment? The insufferable "UK Theme" that is played on Radio 4 at 05:30 every morning is to be binned. I am so happy. That tedious dirge should've been dispensed with years ago. I can't find any news releases to this effect yet - I just read it in The Times this morning (24Jan06) - so I don't know the background, but Thank God!!&lt;br /&gt;Quite often, I get up early and set off for work. Normally I stick on Radio 4, where there might be a bit of world news or something in the run up to 05:30. I can handle this - a newsy and interesting start to the day. But then they would play this awful pastiche of supposedly traditional UK tunes, starting with the dated and just plain embarrassing "Rule Britannia", seguing into a listless "Early One Morning" and even more watery "Greensleeves". This would be followed in quick succession by pompous versions of "Men of Harlech" and "Scotland The Brave", before it sinks into a supposedly whimsical rendition of "What Shall We Do With A Drunken Sailor?". There are further tunes after this but usually I have lost the will to live by this point, and my auditory sense functions have all but shut down. When I hear this crap, I wonder why I got out of bed at all. The whole idea makes me utterly cringe: a musical theme which is supposed to bring together the diversity of the British Isles - a noble aim surely, but the execution is just so hackneyed, so paternalistic, so 'Fifties, so imbued with the discredited tinge of Empire, that I just want to grab any passing non-British person and just apologize to them for the tawdry sentimentalism and thoughtless kow-towing to tradition in which we wallow in this country. Good riddance to the BBC Radio 4 UK theme!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113809816270149760?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113809816270149760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113809816270149760'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/01/bbc-radio-4-uk-theme.html' title='The BBC Radio 4 UK Theme'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113629452793228611</id><published>2006-01-03T13:09:00.000Z</published><updated>2006-01-03T13:22:07.943Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Just as well I'm lazy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://images-eu.amazon.com/images/P/B00005B1N8.02._AA250_SCLZZZZZZZ_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://images-eu.amazon.com/images/P/B00005B1N8.02._AA250_SCLZZZZZZZ_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I'd had a few DVDs from Amazon lying around at home for most of December, not having got round to watching them. We got round to watching &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/B0007RUSGW"&gt;Sideways&lt;/a&gt; on Christmas Day - which is a nice film - but I had two other DVDs sitting there waiting: both of which are Chinese director Zhang Yimou films. I wasn't sure I was in the mood for more martial arts adventures, so I was getting to the point of just sending them back unviewed. However I never got round to taking them to the postbox: just as well I'm lazy. At a loose end yesterday evening, I bunged on &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/B00005B1N8"&gt;The Road Home&lt;/a&gt; - and me, Helen and Sophie (Judy was otherwise engaged looking for a tooth which had fallen out earlier that evening) were transfixed for 86 minutes, slack-jawed with admiration at this beautiful and touching film. Usually Helen is critical of my DVD choices, but on this occasion she has vouchsafed a modicum of appreciation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113629452793228611?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113629452793228611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113629452793228611'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2006/01/just-as-well-im-lazy.html' title='Just as well I&apos;m lazy'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113473188028025297</id><published>2005-12-16T11:17:00.000Z</published><updated>2005-12-16T12:41:20.863Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>XMLBeans</title><content type='html'>Once you've got an XSD for your data (or a DTD - you can convert a DTD to an XSD using XMLSpy or something), just run scomp (&lt;font face="fixed-width"&gt;scomp -out yourXsd.jar yourXsd.xsd&lt;/font&gt;) against it, which will give you a JAR containing all the XMLBean classes you need to do things with the XML from within some Java code! XMLBeans is just one way to do this - there are others - but this particular approach seems to be built into the Weblogic platform, so appears to be becoming a &lt;i&gt;de facto&lt;/i&gt; standard.&lt;br /&gt;&lt;br /&gt;Note that you seem to need the &lt;a href="https://sjsxp.dev.java.net/"&gt;Java Streaming API for XML&lt;/a&gt; - or at least my IDE is telling me that it needs the javax.xml.stream.* classes. This comes bundled with the XMLBeans download - the background project to this seems to be an early-release (at the moment) of a re-thought XML API for Java: the successor to SAX, maybe? Anyway you have to download and run an install class which invites you to Accept all sorts of Sun licencing - I didn't bother reading it. It all seems scarily Microsoft-ish, but moving swiftly on... anyway you don't need to download the early-release Sun stuff, as the jsr-173.jar is bundled with XMLBeans. Er, I'm repeating myself now. Well no ones' going to be reading this anyway, only me, so who cares?&lt;br /&gt;&lt;br /&gt;And whilst I'm on the subject. Or off the subject: I really have to get things organized as to where my JAR files get put. I must remember to copy them to the PROJECT itself, rather than referring to them in other directories, which may disappear/change in the future! At the moment, for this XMLBeans example, I'm referring to JARs all over the place, in other projects, on other drives! Well damn sure as mustard I am going to move/delete them at some point in the future, and then get confused as to why I suddenly get compile errors on another project! Aaaarhgggh!! I should've learnt by now!&lt;br /&gt;&lt;br /&gt;Now where was I? Ah, the JAR created by scomp. So what's in the JAR? Well what you seem to get is a whole bunch of interfaces in the default "noNamespace" package, and a whole bunch of concrete classes in the "noNamespace.impl" package. Presumably you can fix these using some option somewhere?&lt;br /&gt;&lt;br /&gt;It looks like, in your Java code, you just instantiate the objects that you need via the static inner factory classes which are provided in the interfaces. So the generic process for getting a document and doing things with it would be:&lt;br /&gt;&lt;br /&gt;1. say you are expecting to get an XML document back from a URL REST request - first build the URL and use some HTTP client do the stream handling &lt;br /&gt;2. pass the InputStream that contains the response to the appropriate XMLBean Document Factory class for the document that you are expecting, e.g.:&lt;br /&gt;   MyPresentationDocument myDoc = MyPresentationDocument.Factory.parse(inputStream);&lt;br /&gt;&lt;br /&gt;3. extract from that document (e.g. a "Presentation Document" - I wonder if this is the standard XMLBeans way of creating an object which allows you access to the documents inside the document!!) the embedded document which contains the data - actually I'm just guessing here - I'm reading thru some code a colleague has written so I'm not quite sure what XMLBeans gives you and what he has coded up himself. Must try it myself rather than relying on second-guessing!&lt;br /&gt;&lt;br /&gt;Once you're inside the XML document, you can use Cursors to muck around with the data. E.g. check out &lt;a href="http://wiki.apache.org/xmlbeans/XmlBeansTutorial/MixedContent"&gt;this&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;I know diddley squat about these cursors so far, I just mention it here as a prompt to get the relevant info about doing things with cursors from the &lt;a href="http://xmlbeans.apache.org/"&gt;XMLBeans&lt;/a&gt; site!&lt;br /&gt;&lt;br /&gt;Another off-the subject aside:&lt;br /&gt;To do the Http client stuff, I was going to use the Apache Commons HttpClient but hadn't figured out how to handle the fact that I am behind a proxy server here. It looks like you can do the following:&lt;br /&gt;   System.getProperties().put( "proxySet", "true" );&lt;br /&gt;   System.getProperties().put( "proxyHost", "your_proxy_hostname" );&lt;br /&gt;   System.getProperties().put( "proxyPort", "80" );&lt;br /&gt;and then simply call:&lt;br /&gt;   URL myURL=new URL("http://www.example.org/");&lt;br /&gt;   InputStream is = myURL.openStream();&lt;br /&gt;&lt;br /&gt;...Which might be handy in the future!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113473188028025297?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113473188028025297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113473188028025297'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/12/xmlbeans.html' title='XMLBeans'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113472940949879737</id><published>2005-12-16T10:22:00.000Z</published><updated>2005-12-16T10:36:49.513Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Bleak House</title><content type='html'>Am very sad. It's the last episode of &lt;a href="http://www.bbc.co.uk/drama/bleakhouse/"&gt;Bleak House&lt;/a&gt; on BBC1 this evening. Fourteen episodes down - all of which were totally brilliant - and one to go. I wonder What will the final &lt;i&gt;d&amp;eacute;nouement&lt;/i&gt; contain? I can't wait. The whole series has been a gripping rollercoaster of emotion, packed with fascinating characters. It's been done like a soap, in 30 minute episodes with cliffhangers at the end of each bit, and it really works. I'd tried to read the book on a number of occasions, but hadn't got very far: the dense Dickensian prose always defeated me after a few pages. I almost never pick up a book that's that thick. I gave up on Harry Potter when the &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0747561079"&gt;Order of the Phoenix&lt;/a&gt; came out: it looked far too enormous and made me wonder if they could do with a more ruthless editor. I did recently hear, however, that the Order of the Phoenix is packed with important twists and developments which are worthwhile getting into, so maybe I'll give it another go. Same with &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0141025263"&gt;Bleak House&lt;/a&gt;: on the basis of this brilliant TV adaptation, maybe I'll give the book another go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113472940949879737?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113472940949879737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113472940949879737'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/12/bleak-house.html' title='Bleak House'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113459033882056803</id><published>2005-12-14T19:20:00.000Z</published><updated>2005-12-14T19:58:58.833Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tunbridge wells'/><title type='text'>Progress?</title><content type='html'>I tend to be quite gloomy about England, and indeed the rest of the UK. It just seems to be full of unreliable crap, pushy marketing, cultural cringe and the dominance of the lowest-common-denominator. It's all like in &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0316729531/"&gt;that book&lt;/a&gt;.&lt;br /&gt;But I don't know. You get off days and better days, of course. Sometimes you get a feeling of hopefulness. My train journey back from work was tedious as usual - and now the winter timetables have just started it seems like, although the train times are supposedly exactly the same, something has subtly shifted and I don't seem to be able to make the good connection at Redhill any more - and that means a half-hour wait passive smoking on the platform and then getting a much busier train when it deigns to turn up, which gives me yet another tight connection at Tonbridge. In the hopes of improving my chances of making that connection, I position myself right at the front of the train from Redhill, near a seat which seems to be habitually occupied by some middle-aged tosser with a loud Walkman.&lt;br /&gt;So this evening, I'm worried about making it home on time because Helen's going out, and I stress about the train getting me to Tonbridge on time, and I sit there with the tsss-tsss-tsss-tsss coming from somewhere in the carriage. But - hooray! - the train arrives at Tonbridge with a good few minutes to make the Tunbridge Wells train on the other platform. I briskly hop off and up the stairs - only to find that my usual 18:05 to Tunbridge Wells has been CANCELLED!!!! WTF, Dude???? So I ask the guy on the platform, "Why's the 18:05 been cancelled?", expecting the usual shrug and feeble offhandedness usually adopted by the poor sod who often finds himself surrounded by legions of grumbling commuters. But he surprises me: says that there was a defective train, and that he (he personally!! Gasp!) is sorry about that, and that they're laying on an extra service at 18:15. How's that for customer service: as we corporate drones are always told in our "Putting The Customer First" brainwashings, what's important is to own the problem and apologize, that way your customer will be impressed and well-disposed towards you, even if there has been some  problem. So that notched up my mood a little: just 10 minutes late after all. Of course, the train didn't actually turn up for 20 minutes, but hey it's the thought that counts.&lt;br /&gt;Anyway where was I? Progress. So the incident with the railway guy was a sort of slight improvement on what I was expecting - it's like he actually did try to say something helpful. So that was alright.&lt;br /&gt;The other things during the day which had all coalesced into a slightly raised hopefulness was reading about how the government are - at last - starting to turn around years and years of car-centricity in urban planning policy. Years which have seen pedestrians fenced and channeled behind metal always to maintain the supreme goal: movement of cars. Things are starting to change, thank God. People are noticing that in continental Europe they have much better public spaces, where cars and pedestrians have to share space, and everyone feels the benefit. Loads of signs, warnings, lights, road markings, gates may be removed, and replaced with subtle ways of making cars slow down. Check out &lt;a href="http://www.livingstreets.org.uk/"&gt;Living Streets&lt;/a&gt;, and articles by people like &lt;a href="http://www.hamilton-baillie.co.uk/"&gt;Ben Hamilton-Baillie&lt;/a&gt;. Let's hope there will eventually be improvements along these lines. And of course things like the &lt;a href="http://www.wormworks.com/roadwitch/index.html"&gt;Roadwitch&lt;/a&gt; campaigns are a lot of fun and a necessary antidote to that sort of fat, lazy philistinism in this country that allows total morons to fling 3 tonnes of chrome and metal around towns at high speed and think they have a perfect right to do so. I don't think I'd ever have the bravery to do a Roadwitch - the mean-eyed bullies that tend to get violently defensive about their car space are not the sort of people I would like to encounter - but I admire those (e.g. in Oxford) who are doing so. &lt;br /&gt;The other slight hope-lifting thing I saw today was about a programme on BBC2 tonight, &lt;a href="http://www.bbc.co.uk/bbctwo/listings/programme.shtml?service_id=4224&amp;filename=20051214/20051214_2000_4224_63463_50"&gt;Natural World&lt;/a&gt;, which describes how British wildlife is improving now, after decades of decline during the years of unchecked intensive farming and bizarre subsidy policies which promoted quantity over quality. Thanks to the growth of organic farming and a more enlightened subsidy regime, we are starting to undo the damage caused by the mindless policies of the 50s, 60s and 70s.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113459033882056803?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113459033882056803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113459033882056803'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/12/progress.html' title='Progress?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113457264284087955</id><published>2005-12-14T15:00:00.000Z</published><updated>2005-12-14T15:04:02.850Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>Alexa websearch</title><content type='html'>&lt;a href="http://www.alexa.com/"&gt;Alexa&lt;/a&gt; has just released into beta its &lt;a href="http://www.alexa.com/"&gt;web search platform&lt;/a&gt; which allows users to define their own datasets from web-crawled data and then do mining on that data, and publish the results in formats that the users define. It's linked to &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;. I'm just starting out looking into this, because potentially it looks very important: providing a data mining interface to data that's out there on the web. Where Google finds pages and chucks out a list of results which contain your search strings, Alexa allows you to process the data on those pages in order to arrive at richer conclusions: more than just a list of search results. Perhaps a single number which is the result of processing a million pages. Perhaps a structured response which can be further used by some application, or which is of use to some research goal. Data Mining as a public pursuit as opposed to cloistered away in corporate data processing departments by capitalists hungry to push their wares at people and keep 'em coming back for more.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.alexa.com/"&gt;Alexa&lt;/a&gt; main page itself shows interesting things that are going on in cyberspace: like the "Movers and Shakers" section which shows sites which are experiencing a large change in activity. When I first hit the page on 14 December 2005, you can see straightaway that the &lt;a href="http://www.eurid.eu"&gt;EU Domain site&lt;/a&gt; has just launched and is getting a lot of traffic... you can then drill down to see &lt;a href="http://www.alexa.com/data/details/traffic_details?q=&amp;url=http://www.eurid.eu"&gt;more information&lt;/a&gt; about that particular bit of cyberspace.&lt;br /&gt;&lt;br /&gt;Well I've applied for a beta test ID for Alexa, just to see what happens. I have a vague idea that this might be the solution to my idea of matching up products (books, films, whatever) with geographic locations in interesting combinations (where the author lived, where the film is set) - but not in a "BUY MORE STUFF SO I GET RICH!" kind of way, of course! You fill out a form to get a beta ID and it says that "an account manager will contact you by email"... so we will see. I can imagine that they would expect some sort of good reason to give out an ID which is a bit more concrete than my own part-baked notion though...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113457264284087955?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113457264284087955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113457264284087955'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/12/alexa-websearch.html' title='Alexa websearch'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113386514571291742</id><published>2005-12-06T10:32:00.000Z</published><updated>2005-12-06T10:35:02.290Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Multilingual Web Applications</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/56571359@N00/70810049/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/34/70810049_461411b272_m.jpg" alt="" style="border: solid 0px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/56571359@N00/70810049/"&gt;multilingual&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/56571359@N00/"&gt;Paul Milner&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;The Holy Grail of web internationalization...&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113386514571291742?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113386514571291742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113386514571291742'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/12/multilingual-web-applications.html' title='Multilingual Web Applications'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113379641107643049</id><published>2005-12-05T15:22:00.000Z</published><updated>2005-12-05T15:26:51.086Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Uncyclopedia</title><content type='html'>&lt;a href="http://uncyclopedia.org/wiki/Main_Page"&gt;Uncyclopedia&lt;/a&gt; is very funny: these days, funnier than even &lt;a href="http://www.theonion.com/content/index"&gt;The Onion&lt;/a&gt; itself (gasp!)&lt;br /&gt;Try &lt;a href="http://uncyclopedia.org/wiki/You_have_two_cows"&gt;this page&lt;/a&gt; for a start.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113379641107643049?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113379641107643049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113379641107643049'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/12/uncyclopedia.html' title='Uncyclopedia'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113333833811164971</id><published>2005-11-30T08:00:00.000Z</published><updated>2005-11-30T08:13:49.550Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Flock Browser</title><content type='html'>Been having a play with this new &lt;a href="http://www.flock.com/"&gt;Flock&lt;/a&gt; browser which is supposed to be very good at integrating with RSS feeds and weblogs etc. It seems to be closely linked in with &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; and that allows you to create your own account with a public web page containing your favourite feeds. See mine &lt;a href="http://del.icio.us/pmilner"&gt;here&lt;/a&gt;. That's all quite fun, and it reminds me of the &lt;a href="http://www.start.com/"&gt;Start.com&lt;/a&gt; rich user interface which similarly allows you to create a sort of portal of RSS feeds.&lt;br /&gt;If you browse from within Flock, it's a one-button click to add a new feed to your own del.icio.us account and therefore to your portal page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113333833811164971?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113333833811164971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113333833811164971'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/flock-browser.html' title='Flock Browser'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113333760887420148</id><published>2005-11-30T07:50:00.000Z</published><updated>2005-11-30T08:00:08.883Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse Debugger</title><content type='html'>Am, as ever, pleasantly surprised by how easy Eclipse is to use. The Java debugger works fine, even when remotely connecting to a Weblogic instance. Like the IntelliJ IDEA debugger, it is nice and fast. Unlike the JBuilder one.&lt;br /&gt;I don't know if there's some cunning way round this (if anyone reads this and does know, please tell me!), but I can't find a way to tweak a return value in the debugger so that I can change the path the code takes.&lt;br /&gt;It's OK if there is (for example) a boolean return code variable which is predefined, because you can certainly change that.&lt;br /&gt;e.g. if you have&lt;br /&gt;    boolean rc = false;&lt;br /&gt;    rc = myObject.doSomething();&lt;br /&gt;    log.debug(new StringBuffer("doSomething() returned: ").append(rc));&lt;br /&gt;Then you can just change the rc after the method has been executed. But if you try to make a decision based on what comes back from the method, without having a separate variable for it, I don't know how to change it!&lt;br /&gt;e.g. if you have&lt;br /&gt;    if (!myObject.doSomething()) {&lt;br /&gt;        log.debug("It was false");&lt;br /&gt;    } else {&lt;br /&gt;        log.debug("It was true");&lt;br /&gt;    }&lt;br /&gt;then I can't think of a way to change it.&lt;br /&gt;Maybe that means it's good practice (or at least helps with debugging!) if you hold a return code (or truth value) somewhere in a variable. It would be good if I could figure out how to do it though - there's plenty of places where you would naturally want to use the second approach and not declare extra variables where you don't need them...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113333760887420148?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113333760887420148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113333760887420148'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/eclipse-debugger.html' title='Eclipse Debugger'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113299479600382575</id><published>2005-11-26T08:46:00.000Z</published><updated>2005-11-26T08:49:22.906Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Boden's computer says no</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/56571359@N00/67043231/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/30/67043231_699d378eb8_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/56571359@N00/67043231/"&gt;Boden's computer says no&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/56571359@N00/"&gt;Paul Milner&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;My cords have all got holes in, so I want some more, but - oh no! Boden has a server error. Being Boden, they like to inject some fun into the proceedings though, as you can see...&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113299479600382575?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113299479600382575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113299479600382575'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/bodens-computer-says-no.html' title='Boden&apos;s computer says no'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113275968380503706</id><published>2005-11-23T15:27:00.000Z</published><updated>2005-11-23T15:28:03.816Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Developer toolbar for Firefox</title><content type='html'>Here's a good toolbar, found this very useful...&lt;br /&gt;&lt;br /&gt;http://chrispederick.com/work/webdeveloper/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113275968380503706?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113275968380503706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113275968380503706'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/developer-toolbar-for-firefox.html' title='Developer toolbar for Firefox'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113273415603254577</id><published>2005-11-23T08:19:00.000Z</published><updated>2005-11-23T08:22:36.033Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='france'/><title type='text'>Alemannisch</title><content type='html'>Interesting what you find out there on the web: I'd never heard of Alemannisch - but there seems to be a whole language movement out there which is supporting the German dialects of Southern Germany, Switzerland, and neighbouring areas. See their own &lt;a href="http://als.wikipedia.org/wiki/Houptsyte"&gt;Alemannisch Wikipedia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113273415603254577?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113273415603254577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113273415603254577'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/alemannisch.html' title='Alemannisch'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113273365022520027</id><published>2005-11-23T07:43:00.000Z</published><updated>2005-11-23T08:31:00.440Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Humans v. Computers</title><content type='html'>Amazon's &lt;a href="http://www.mturk.com/"&gt;Mechanical Turk&lt;/a&gt; API - named after a fake 18th Century chess-playing robot - &lt;a href="http://www.amazon.com/gp/browse.html/ref=aws_gen_nl13amt/103-3815617-2009446?node=15879911"&gt;reportedly&lt;/a&gt; allows you to submit tasks from a piece of software to a real human being. You just call a method containing the "HIT" (Human Intelligence Task) you want fulfilling, and then at some point in the future an answer comes back. The caller can specify what sort of a human being should be used to fulfil the task. &lt;br /&gt;It's a fascinating idea: they call it "Artifical Artificial Intelligence" - i.e. it looks like you are sending a request to something artificial, but the fact that it looks artificial is artificial: it's actually human.&lt;br /&gt;This is quite like &lt;a href="http://answers.google.com/answers/"&gt;Google Answers&lt;/a&gt;, where you can pose a question to some remote expert and, for a fee, get back a reply, although the Amazon product (on an initial look) seems to be geared towards fulfilling tasks that any human could do. The example they give is that you pass a photo into a particular method (e.g. isHumanImage()), and the Mechanical Turk returns true or false depending on whether the photo contains an image of a person.&lt;br /&gt;I wonder where all this is going. I instantly picture an oppressed underclass, like something out of a Fritz Lang movie, lined up at desks fulfilling tasks sent to them by an anonymous internet robot, their exact performance monitored closely by whip-wielding capitalists who take a big cut of the fee...&lt;br /&gt;The other thing that occurs to me is that it raises the question of objectivity. If you send a photo of Adolf Hitler with the question "is this human?" then wouldn't there be a tendency for some human agents to respond "false"? Or if you sent the question "is this a country?" with the argument "Palestine": the answer might depend on the responder's political views. Only by being totally strict about how to interpret the question (e.g. "is this name on the list of countries or not?") could you avoid the tendency for humans to do slightly unpredictable things, but if you were doing that, why not just get a computer to answer the question anyway?&lt;br /&gt;Questions that rely on human interpretation of sense data (e.g. "is this a picture of a human face?") would probably get the objectively correct response, more reliably than just having software scan the given image, but it would be interesting to see how value judgements can be avoided. The &lt;a href="http://en.wikipedia.org/wiki/Main_Page"&gt;Wikipedia&lt;/a&gt; knows all about the dangers of articles surfacing on its site which are represented as "factual" but are actually "arguable": they have a system of flagging articles which are disputed.&lt;br /&gt;It'll be interesting to see how the semantic web (as it emerges) deals with validity and how truth can be represented as relative as well as the traditional computing concept of "Boolean" truth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113273365022520027?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113273365022520027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113273365022520027'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/humans-v-computers.html' title='Humans v. Computers'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113267208354361044</id><published>2005-11-22T15:08:00.000Z</published><updated>2005-11-22T15:08:03.570Z</updated><title type='text'>Scary Sweeties</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/56571359@N00/65863414/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/32/65863414_8f2b360b03_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/56571359@N00/65863414/"&gt;Scary Sweeties&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/56571359@N00/"&gt;Paul Milner&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;Mm mm. My colleague Jukka and his Finnish compatriots sure have some delicious comestibles. Take these, for example. Sour liqorice with a centre of pungent ammonia. Scrumptious.&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113267208354361044?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113267208354361044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113267208354361044'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/scary-sweeties.html' title='Scary Sweeties'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-113224341378424439</id><published>2005-11-17T15:59:00.000Z</published><updated>2005-11-17T16:03:33.796Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Diet</title><content type='html'>And so the pattern cycles round again: I really should have it all figured out by now, but I don't. I get my diet sorted out for a while: I cut out wheat, sweets, biscuits, all that bad stuff, and my whole system feels the benefit. But then something slips. Doughnuts appear at work. I eat one. Doesn't seem to be a problem. A colleague passes by: would I like a biscuit? Ooh, perhaps just the one. I get home. Helen's baked some new bread. I feel like I should sample a slice. And before I know it I am ravenously scoffing bread, cakes, sweets, chocolates, whatever presents itself, all over again. And then the inevitable physical symptoms settle back in: I don't feel properly awake, my face starts to feel dry and sore, I start to get the allergic reactions and sneezing fits again, the compulsion to snack takes over. I head for the snack machine at work and buy a shedload of choccie bars: Aeros, Marathons, whatever. That wraith-like being inside me demands to be fed!&lt;br /&gt;&lt;br /&gt;Like I say: I should know better by now. I can see the signs. I know what happens. And I know I can quit the foods that seem to bring on these compulsions, I've done it before. So I finally take my diet in hand and kill the wheat and sugar intake. After a few days, things are better: I don't feel so fat, I feel a bit more energy, the compulsions recede. I start to think "Yes, I've finally cracked it! I don't need the junk food anymore!" And so it proves for a few more days. But then I'm back to where I began this entry: a solitary doughnut and I'm back on the roundabout again!&lt;br /&gt;&lt;br /&gt;Compulsive eating seems to be a real problem for me, especially when I remind myself that it's nothing I can't (in theory) control. It's like a heroin addict saying that s/he is just a passive agent, powerless to countermand the diktats of the drug. It's not my fault, guv, it's the drugs, they're doing it to me. It's just a way of avoiding personal responsibility. Likewise - for me - the compulsive eating. I am effectively choosing to allow my diet to get out of hand and into an unhealthy state.&lt;br /&gt;&lt;br /&gt;So that's where I am right now. I have spotted the cycle repeating, as I enter the phase of increasing junk-consumption. I want to nip it in the bud, but the naughty inner voice which is saying "OK, kick the habit, but just have one last bar of chocolate first...". &lt;br /&gt;&lt;br /&gt;I guess this is how addicted smokers reason. I used to smoke a bit, just as a social prop, but I never felt addicted to nicotine. However with wheaty/sugary foods, I am an ADDICT. I need some Twelve-Step-Programme or something: there is an organization called &lt;a href="http://www.oa.org/index.htm"&gt;Overeaters Anonymous&lt;/a&gt;, I even went to one of their meetings. It's a full-on quasi-religious support network: talk of relying on your "Higher Power" (God, whatever your concept of that is) to help you with your powerlessness in the face of the compulsions, a ritualistic meeting framework (each contribution is preceded by the intro "My name is Billy Bunter (or whoever), and I am a compulsive overeater." And the response "Hi, Billy". Not sure I could get on with that. That approach has clearly worked for a lot of people, alcoholics, drug addicts, but I'm not sure I can take the cultish organization and the need to accept the evangelical assertion that the Twelve-Step programme is The Only Way to cure you. Maybe it is, and I am doomed forever to repeat my eating patterns until I recognize that, but I'm not there yet.&lt;br /&gt;&lt;br /&gt;So there we are. Those are the thoughts at the moment. Time to end the cycle! (It sounds SO easy when I just say it like that!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-113224341378424439?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113224341378424439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/113224341378424439'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/11/diet.html' title='Diet'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112919752429334564</id><published>2005-10-13T09:43:00.000Z</published><updated>2005-10-13T10:46:17.103Z</updated><title type='text'>Water's Edge Hotel</title><content type='html'>Looking for a location in Cardiff this morning, for some reason a place I stayed when I was about nine came to mind. I think it was called the "Water's Edge Hotel", near Barry in Wales. We were about to go on away on the ship my father was working on at the time, the MV Geesthaven, which worked the Caribbean route out of Barry. But we had to stay at this hotel for a couple of days because the ship wasn't ready to go.&lt;br /&gt;I seem to remember it was a modern, blocky hotel, in a quiet seaside neighbourhood, with a stony beach and a pitch-&amp;-putt. That was way back in 1974. Time has not been kind to the place: I think the area wanted to make itself into a seaside resort-type place, but now it looks very overshadowed by Cardiff airport. I googled it and came up with the following:&lt;br /&gt;&lt;a href="http://www.jeannot.uklinux.net/uploaded_images/weh-730647.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://www.jeannot.uklinux.net/uploaded_images/weh-728194.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;It looks a bit sad, doesn't it? It's now been totally vandalised and recently demolished.&lt;br /&gt;Full-size photo is &lt;a href="http://www.barrywales.co.uk/showimage.asp?ID=927"&gt;here&lt;/a&gt;. &lt;br clear="all"/&gt;So why do I feel nostalgic about a sixties hotel block??&lt;p/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112919752429334564?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112919752429334564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112919752429334564'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/waters-edge-hotel.html' title='Water&apos;s Edge Hotel'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112905077619012477</id><published>2005-10-11T17:09:00.000Z</published><updated>2005-10-12T09:32:54.426Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Mambo Admin Interface (again!)</title><content type='html'>I think I've at last stumbled across the solution for the Mambo admin login problem, on &lt;a href="http://forum.mamboserver.com/printthread.php?t=19651&amp;page=6&amp;pp=10"&gt;this&lt;/a&gt; forum page.&lt;br /&gt;&lt;br /&gt;It seems to be working better for me now anyway.&lt;br /&gt;It involves adding an extra line in the includes/mambo.php script. In my case, it had to be &lt;br /&gt;session_save_path("/homeb/s2/www/jeannot.uklinux.net/tmp");&lt;br /&gt;I assume that's right anyway... i.e. the full path of my web space - gotta remember to change this if I move host or upgrade Mambo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112905077619012477?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112905077619012477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112905077619012477'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/mambo-admin-interface-again.html' title='Mambo Admin Interface (again!)'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112902359011368894</id><published>2005-10-11T09:39:00.000Z</published><updated>2005-10-11T09:39:50.116Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>This isn't just crap, this is M&amp;S crap</title><content type='html'>Most annoying ads recently have got to be the ones for Marks &amp; Spencer food. Variations on the following theme: gastroporn close-up of moist, dripping comestibles, with sultry voiceover telling you that this isn't just any old vegetable, this is the plumpest, dewiest, moonlight-harvested-est M&amp;S vegetable. It reeks of snobbery: it's saying very clearly that if you buy stuff from any other supermarket, you are getting downmarket crap (which, OK, you probably are), but if you buy from M&amp;S, you are getting perfection. The sort of perfection that requires describing in rich tones of luxury and privilege. The sort of perfection that the M&amp;S target market demand. You wouldn't want to give your dinner party guests anything less would you? Imagine it! The guests are swooshing up the gravel drive in their gleaming new SUVs. You are in the kitchen scraping off some dirty vegetables, or struggling with a bog-standard lump of meat. No! For this, you don't just need food, you need M&amp;S food.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112902359011368894?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112902359011368894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112902359011368894'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/this-isnt-just-crap-this-is-ms-crap.html' title='This isn&apos;t just crap, this is M&amp;S crap'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112895800213279981</id><published>2005-10-10T15:22:00.000Z</published><updated>2005-10-10T17:29:00.683Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Ronnie Barker RIP</title><content type='html'>Fave memory of him?&lt;br /&gt;Probably &lt;a href="http://www.imdb.com/title/tt0281872/"&gt;Futtock's End&lt;/a&gt;. When I first saw it when I was - what? nine? - I thought it was the most hilarious thing imaginable. Rhubarb, rhubarb.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112895800213279981?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112895800213279981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112895800213279981'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/ronnie-barker-rip.html' title='Ronnie Barker RIP'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112895774618420195</id><published>2005-10-10T15:21:00.000Z</published><updated>2005-10-10T17:30:13.113Z</updated><title type='text'>Pakistan Earthquake</title><content type='html'>A terrible event...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112895774618420195?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.bbc.co.uk/1/hi/world/south_asia/4325784.stm' title='Pakistan Earthquake'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112895774618420195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112895774618420195'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/pakistan-earthquake.html' title='Pakistan Earthquake'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112895766804387819</id><published>2005-10-10T15:18:00.000Z</published><updated>2005-10-10T15:21:08.046Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Mambo Admin Interface</title><content type='html'>I kept running into problems with trying to navigate the admin interface - it would keep presenting me with the login screen again. There are various posts on the Mambo boards about this, and it seems to be down to either: &lt;br /&gt;1. PHP config, &lt;br /&gt;2. Apache config, &lt;br /&gt;3. browser config &lt;br /&gt;or 4. something else.&lt;br /&gt;&lt;br /&gt;Which narrows it right down.&lt;br /&gt;Anyway, when I use Firefox to browse the admin site, it seems to happen a hell of a lot less than with IE!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112895766804387819?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112895766804387819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112895766804387819'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/mambo-admin-interface.html' title='Mambo Admin Interface'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112860638988906605</id><published>2005-10-06T13:44:00.000Z</published><updated>2005-10-06T13:49:59.090Z</updated><title type='text'>Enterprise Architect</title><content type='html'>Wot I've Found Out About Enterprise Architect: Some Notes - to be continued...&lt;br /&gt;&lt;br /&gt;The root view in the project browser is called "Views". All the different specific views (Logical, Component, Deployment, Use Case) hang off this. Could this be related to the suggestions in this document: &lt;br /&gt;&lt;a href="http://www.phruby.com/publications/OOPSLA98_TechNote.pdf "&gt;http://www.phruby.com/publications/OOPSLA98_TechNote.pdf &lt;/a&gt;&lt;br /&gt;which also refers to this document: &lt;br /&gt;&lt;a href="http://www.phruby.com/publications/Uml_Mulhouse_Springer.pdf"&gt;http://www.phruby.com/publications/Uml_Mulhouse_Springer.pdf&lt;/a&gt;This seems to contain a discussion of a UML repository in terms of its &lt;br /&gt;"views" (Analysis, Use Case, Logical, etc.) and the "levels" (System, Architectural, Class, Procedural) thereof.&lt;br /&gt;&lt;br /&gt;So if you create a new object which is going to sit in your architecture, it makes sense to create an object hierarchy within Views, doesn't it? We'll see... Well, in fact, there doesn't seem to be an option to create a package within Views - so that can't be the right way to do it! Whereas, within a specific view (e.g. Component View), you CAN create a package (rightclick -&gt; "New Package..."). Of all those views it looks like the place you're meant to create a package hierarchy is in the "Logical View". The help file says that this is: "The class model and domain model view".&lt;br /&gt;&lt;br /&gt;So, within Logical View, I create a package: com.jeannot.test. Note that it just creates a single package with that (dot-separated) name. To create a full hierarchy you have to create nested packages one at a time, e.g. "com", "jeannot", etc. I assume this is how it works: I think when I tried to import packages from pre-existing Java code, it did create the package hierarchy for me. I can't remember exactly.&lt;br /&gt;&lt;br /&gt;Anyway, having created a package hierarchy, you can create classes to put in the hierarchy. So much for classes. If you have a class in the Logical View, you can create a class diagram and sure enough you can drop your classes onto it. What happens when you try to use it in other views? For example, I create a Sequence Diagram in the Dynamic View: when I drop classes from the Logical Model into it - it works OK! Fine then.&lt;br /&gt;&lt;br /&gt;I still don't quite like the way it puts a package prefix in the class name box. e.g. my class com.jeannot.test.TestClass1 appears in the Class Diagram as "test::TestClass1". Maybe it's just supposed to give you a hint where it's &lt;br /&gt;come from, without having a possibly wide string giving the fully-qualified name. Still, I don't like it. In the Options dialog, under "Diagram", there is a checkbox option to "Disable fully scoped object names", which does appear to suppress this package name display. Hurrah.&lt;br /&gt;&lt;br /&gt;Something else I just noticed. When you start drawing dependencies, sequences between classes, they get set up in the class definitions themselves (see the Link tab of the Class dialog). If you then delete that class from a diagram, the link ON THE DIAGRAM disappears, but it's still there in the underlying class. So that if you put that class back on the diagram, the link reappears. You can delete it from the class, of course, in which case it won't reappear, until you set one up or draw one again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112860638988906605?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112860638988906605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112860638988906605'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/10/enterprise-architect.html' title='Enterprise Architect'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112806655536401560</id><published>2005-09-30T07:46:00.000Z</published><updated>2005-09-30T07:49:15.376Z</updated><title type='text'>Steve Jobs' Stanford Speech</title><content type='html'>This is probably destined to be an oft-quoted speech. I found a version &lt;a href="http://www.boloji.com/society/071.htm"&gt;here&lt;/a&gt;. I have pasted it here anyway, I don't know if it's an official version or not.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Steve Jobs&lt;br /&gt;Stanford Commencement Address&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;Steve Jobs delivered his commencement address to Stanford University Graduates. The address was very inspiring and thought provoking. It a glimpse of the Ups and Downs and the troubles, one has to face in life. It is very important for the young people who graduate from a University, become conceited and boastful that there is no one who can equal them and that they have something special which others do not possess. They are not able to grasp that Life is a vast field of action in which a graduate is only a co-sharer and a partner. They are not able to understand that in this arena, every partner has equal rights and responsibilities. The secret of success lies somewhere else. The creator has sent every person into this world with unlimited possibilities. Steve Jobs� life is an excellent example of this point of view. After hearing him one should not feel disappointed on failures but face them with courage, following one�s own inner voice and continue the dictates from there. &lt;br /&gt;&lt;br /&gt;STEVE JOBS: Thank you. I�m honored to be with you today for your commencement from one of the finest universities in the world. Truth be told, I never graduated from college and this is the closest I�ve ever gotten to a college graduation. &lt;br /&gt;&lt;br /&gt;Today I want to tell you three stories from my life. That�s it. No big deal. Just three stories. The first story is about connecting the dots. I dropped out of Reed College after the first six months but then stayed around as a drop-in for another eighteen months or so before I really quit. So why did I drop out? It started before I was born. My biological mother was a young unwed graduate student, and she decided to put me up for adoption. She felt very strongly that I should be adopted by college graduates, so everything was all set for me to be adopted at birth by a lawyer and his wife, except that when I popped out, they decided at the last minute that they really wanted a girl. So my parents, who were on a waiting list, got a call in the middle of the night asking, �We�ve got an unexpected baby boy. Do you want him?� They said, �Of course.� My biological mother found out later that my mother had never graduated from college and that my father had never graduated from high school. She refused to sign the final adoption papers. She only relented a few months later when my parents promised that I would go to college. This was the start in my life. And seventeen years later, I did go to college, but I naively chose a college that was almost as expensive as Stanford, and all of my working class parents� savings were being spent on my college tuition. After six months, I couldn�t see the value in it. I had no idea what I wanted to do with my life, and no idea of how college was going to help me figure it out, and here I was, spending all the money my parents had saved their entire life. So I decided to drop out and trust that it would all work out okay. It was pretty scary at that time, but looking back, it was one of the best decisions I ever made. The minute I dropped out, I could stop taking the required classes that didn�t interest me and begin dropping in on the ones that looked far more interesting. &lt;br /&gt;&lt;br /&gt;It wasn�t all romantic. I didn�t have a dorm room so I slept on the floor in friends� rooms. I returned Coke bottles for the five-cent deposits to buy food with, and I would walk the seven miles across town every Sunday night to get one good meal a week at the Hari Krishna temple. I loved it. And much of what I stumbled into by following my curiosity and intuition turned out to be priceless later on. Let me give you one example. Reed College at that time offered perhaps the best calligraphy instruction in the country. Throughout the campus every poster, every label on every drawer was beautifully hand-calligraphed. Because I had dropped out and didn�t have to take the normal classes, I decided to take a calligraphy class to learn how to do this. I learned about serif and sans serif typefaces, about varying the amount of space between different letter combinations, about what makes great typography great. It was beautiful, historical, artistically subtle in a way that science can�t capture, and I found it fascinating. None of this had even a hope of any practical application in my life. But ten years later when we were designing the first Macintosh computer, it all came back to me, and we designed it all into the Mac. It was the first computer with beautiful typography. If I had never dropped in on that single course in college, the Mac would have never had multiple typefaces or proportionally spaced fonts, and since Windows just copied the Mac, it�s likely that no personal computer would have them. &lt;br /&gt;&lt;br /&gt;If I had never dropped out, I would have never dropped in on that calligraphy class and personal computers might not have the wonderful typography that they do. Of course it was impossible to connect the dots looking forward when I was in college, but it was very, very clear looking backwards ten years later. Again, you can�t connect the dots looking forward. You can only connect them looking backwards, so you have to trust that the dots will somehow connect in your future. You have to trust in something�your gut, destiny, life, karma, whatever�because believing that the dots will connect down the road will give you the confidence to follow your heart, even when it leads you off the well-worn path, and that will make all the difference. &lt;br /&gt;&lt;br /&gt;My second story is about love and loss. I was lucky. I found what I loved to do early in life. Woz and I started Apple in my parents� garage when I was twenty. We worked hard, and in ten years, Apple had grown from just the two of us in a garage into a two billion dollar company with over four thousand employees. We�d just released our finest creation, the Macintosh, a year earlier, and I�d just turned thirty, and then I got fired. How can you get fired from a company you started? Well, as Apple grew we hired someone, who I thought was very talented, to run the company with me, and for the first year or so, things went well. But then our visions of the future began to diverge and eventually we had a falling out. When we did, our board of directors sided with him, and so at thirty, I was out, and very publicly out. What had been the focus of my entire adult life was gone, and it was devastating. I really didn�t know what to do for a few months. I felt that I had let the previous generation of entrepreneurs down, that I had dropped the baton as it was being passed to me. I met with David Packard and Bob Noyce and tried to apologize for screwing up so badly. I was a very public failure and I even thought about running away from the Valley. But something slowly began to dawn on me. I still loved what I did. The turn of events at Apple had not changed that one bit. I�d been rejected but I was still in love. And so I decided to start over. &lt;br /&gt;&lt;br /&gt;I didn�t see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again, less sure about everything. It freed me to enter one of the most creative periods in my life. During the next five years I started a company named NeXT, another company named Pixar and fell in love with an amazing woman who would become my wife. Pixar went on to create the world�s first computer-animated feature film, �Toy Story,� and is now the most successful animation studio in the world. &lt;br /&gt;&lt;br /&gt;In a remarkable turn of events, Apple bought NeXT and I returned to Apple and the technology we developed at NeXT is at the heart of Apple�s current renaissance, and Lorene and I have a wonderful family together.&lt;br /&gt;&lt;br /&gt;I�m pretty sure none of this would have happened if I hadn�t been fired from Apple. It was awful tasting medicine but I guess the patient needed it. Sometimes life�s going to hit you in the head with a brick. Don�t lose faith. I�m convinced that the only thing that kept me going was that I loved what I did. You�ve got to find what you love, and that is as true for work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work, and the only way to do great work is to love what you do. If you haven�t found it yet, keep looking, and don�t settle. As with all matters of the heart, you�ll know when you find it, and like any great relationship it just gets better and better as the years roll on. So keep looking. Don�t settle. &lt;br /&gt;&lt;br /&gt;My third story is about death. When I was seventeen I read a quote that went something like �If you live each day as if it was your last, someday you�ll most certainly be right.� It made an impression on me, and since then, for the past thirty-three years, I have looked in the mirror every morning and asked myself, �If today were the last day of my life, would I want to do what I am about to do today?� And whenever the answer has been �no� for too many days in a row, I know I need to change something. Remembering that I�ll be dead soon is the most important I�ve ever encountered to help me make the big choices in life, because almost everything�all external expectations, all pride, all fear of embarrassment or failure�these things just fall away in the face of death, leaving only what is truly important. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart. &lt;br /&gt;&lt;br /&gt;About a year ago, I was diagnosed with cancer. I had a scan at seven-thirty in the morning and it clearly showed a tumor on my pancreas. I didn�t even know what a pancreas was. The doctors told me this was almost certainly a type of cancer that is incurable, and that I should expect to live no longer than three-to-six months. My doctor advised me to go home and get my affairs in order, which is doctors� code for prepare to die. It means to try and tell your kids everything you thought you�d have the next ten years to tell them, in just a few months. It means to make sure that everything is buttoned up so that it will be as easy as possible for your family. It means to say your good-byes. &lt;br /&gt;&lt;br /&gt;I lived with that diagnosis all day. Later that evening I had a biopsy where they stuck an endoscope down by throat, through my stomach and into my intestines, put a needle into my pancreas and got a few cells from the tumor. I was sedated but my wife, who was there, told me that when they viewed the cells under a microscope, the doctor started crying, because it turned out to be a very rare form of pancreatic cancer that is curable with surgery. I had the surgery and, thankfully, I am fine now.&lt;br /&gt;&lt;br /&gt;This was the closest I�ve been to facing death, and I hope it�s the closest I get for a few more decades. Having lived through it, I can now say this to you with a bit more certainty than when death was a useful but purely intellectual concept. No one wants to die, even people who want to go to heaven, don�t want to die to get there, and yet, death is the destination we all share. No one has ever escaped it. And that is as it should be, because death is very likely the single best invention of life. It�s life�s change agent, it clear out the old to make way for the new. Right now, the new is you. But someday not too long from now, you will gradually become the old and be cleared away. Sorry to be so dramatic, but it�s quite true. Your time is limited, so don�t waste it living someone else�s life. Don�t be trapped by dogma which is living with the results of other people�s thinking. Don�t let the noise of others� opinions drowned out your own inner voice, and most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.&lt;br /&gt;&lt;br /&gt;When I was young, there was an amazing publication called The Whole Earth Catalogue, which was one of the bibles of my generation. It was created by a fellow named Stuart Brand not far from here in Menlo Park, and he brought it to life with his poetic touch. This was in the last �60s, before personal computers and desktop publishing, so it was all made with typewriters, scissors and Polaroid cameras. It was sort of like Google in paperback form thirty-five years before Google came along. It was idealistic, overflowing with neat tools and great notions. Stuart and his team put out several issues of The Whole Earth Catalogue, and then when it had run its course, they put out a final issue. It was the mid-1970s and I was your age. On the back cover of their final issue was a photograph of an early morning country road, the kind you might find yourself hitchhiking on if you were so adventurous. Beneath it were the words �Stay hungry, stay foolish.� It was their farewell message as they signed off. �Stay hungry, stay foolish.� And I have always wished that for myself, and now, as you graduate to begin anew, I wish that for you. Stay hungry, stay foolish. Thank you all, very much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112806655536401560?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112806655536401560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112806655536401560'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/09/steve-jobs-stanford-speech.html' title='Steve Jobs&apos; Stanford Speech'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112798388385172885</id><published>2005-09-29T08:39:00.000Z</published><updated>2005-09-29T10:40:33.150Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>MediaWiki</title><content type='html'>I'm still to-ing and fro-ing about CMSes. On the one hand I wanted something lightweight and easy to use, and I wanted something Java-y (since I'm a &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; bigot), so &lt;a href="http://www.magnolia.info/"&gt;Magnolia&lt;/a&gt; is good but you need to deploy in a J2EE container, which I might not want to when it comes to actually paying for hosting, so then you go back to &lt;a href="http://www.onlamp.com/"&gt;LAMP&lt;/a&gt; solutions, but &lt;a href="http://www.mamboserver.com/"&gt;Mambo&lt;/a&gt;, although excellent in so many ways, and with such a big following, just seems a bit ponderous and feature-bloated to be worthwhile for the stripped-down site I have in mind. And also I keep running into problems with the admin interface requiring logins the whole time, that I never (bothered) getting to the bottom of.&lt;br /&gt;So why not go for a Wiki solution? And if going for a wiki, go for the big one, the one that powers the &lt;a href="http://www.wikipedia.org/"&gt;Wikipedia&lt;/a&gt; itself: &lt;a href="http://www.mediawiki.org/"&gt;MediaWiki&lt;/a&gt;.&lt;br /&gt;So I did. Download the tar.gz, drop the extract into my PHP-enabled Apache directory, run the config utility, (having ironed out the old-password problem in my MySQL installation, which I've run into before but had forgotten about), and there it is. Really pretty easy. &lt;br /&gt;Now to have a play with it... or alternatively do some real work. Which is it to be?... Hmmmm............&lt;br /&gt;&lt;br /&gt;Later:&lt;br /&gt;Did I say "Really pretty easy" above? I think I did. Spoke too soon. I got the Main Page up in very short time, then spent the rest of the morning scratching my head over why some other wiki-generated pages weren't appearing. I was getting just "blank pages". The Apache access.log would tell me that a page had been served, but I could see items in the error.log saying "Filename is not valid". I thought it might be because of a colon in the URLs that MediaWiki generates (I am running Apache on Windows), but couldn't figure it. The help site says I should use mod_rewrite, which I thought I did, but got increasingly confused, started tweaking Apache settings, PHP settings, MediaWiki settings until I got into a right old you know what. Bleh. Almost binned the whole idea in desperation.&lt;br /&gt;Finally resorted to changing my browser to use HTTP 1.0 instead of 1.1 "just to see what would happen" and to my surprise I started seeing a whole bunch of compressed-looking text, and some PHP error messages at the bottom, saying that it couldn't find my php/sessiondata directory. First I'd heard of that, but I suppose it makes sense that MediaWiki will use session facilities... I created the sessiondata directory in c:\php and it seems to be working OK now. Reverted the browser HTTP settings to default - have left the Apache settings as they are, so I don't know if that will turn round and bite me again sometime... but I've done enough for now. I need a cuppa tea. I shouldn't even be doing this anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112798388385172885?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112798388385172885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112798388385172885'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/09/mediawiki.html' title='MediaWiki'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-112204195005509811</id><published>2005-07-22T14:18:00.000Z</published><updated>2005-07-22T14:19:10.063Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Daisy CMS</title><content type='html'>The &lt;a href="http://cocoondev.org/daisy"&gt;Daisy&lt;/a&gt; open-source CMS seems to have come out of nowhere and really gathered some momentum over the last year. I hadn't got around to playing with it until today, but finally I got sick of little strangenesses in Lenya that I couldn't get my head around, and thought it was time for a new tack.&lt;br /&gt;So. Daisy comes in a huge tar.gz with everything bundled up and more JARs than you can shake a stick at. I went for version 1.2, as for some reasons my attempts to download 1.3 went all wibbly. So I may need to upgrade at some point but for now this'll do me. Extracted, and started reading the (reasonably clear) instructions at http://cocoondev.org/daisydocs-1_2/docs/13.html .&lt;br /&gt;To run Daisy, you need to have several things running in the background. MySQL, for a start. Then you have to start a JMS server (OpenJMS is bundled with Daisy), repository server, and the Wiki server which is actually running in a servlet container - Jetty is the bundled one, I haven't looked into running it under Weblogic, Tomcat, or anything...&lt;br /&gt;I guess the whole install process took an hour, on Windows XP, with surprisingly little head-scratching. There are some typos and unclarities in the install script but it all came out in the wash. And once all the servers were running you get a nice test website to play with. The UI is based round a Wiki, within which you update the content, and a read-only view of that Wiki is yer website.&lt;br /&gt;Quite impressed, so far! Navigating round the Admin UI is easy and clear, and I haven't hit the strange exceptions that I always seemed to run into with Lenya. Not that I'm complaining about Lenya, I think I just don't understand it enough.&lt;br /&gt;Like Lenya, Daisy is based on the &lt;a href="http://cocoon.apache.org/"&gt;Cocoon&lt;/a&gt; framework so in terms of XML-centricity, it's pretty good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-112204195005509811?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112204195005509811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/112204195005509811'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/07/daisy-cms.html' title='Daisy CMS'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-111986770522679965</id><published>2005-06-27T10:21:00.000Z</published><updated>2005-06-27T10:21:45.233Z</updated><title type='text'>RAID: A Quick Summary</title><content type='html'>RAID levels: what do they mean? There are thousands of words on the subject, so here's a quick summary.&lt;br /&gt;&lt;br/&gt;RAID0: Just disk striping. No real redundancy here, just an array of disk which are striped (at a defined size) so that files are spread out across the disks in the array. Low cost, but not for important data - needs to be backed up though...&lt;br /&gt;&lt;br/&gt;RAID1: Mirroring. Data is duplicated on 2 different drives in the array. Provides some fault tolerance.&lt;br /&gt;&lt;br/&gt;RAID2: Weird one. Does bit-level striping. Not used these days.&lt;br /&gt;&lt;br/&gt;RAID3: Does byte-level striping with dedicated parity. Dedicated Parity is where a calculation is done on the data and stored on a dedicated parity disk so that the original data can be rebuilt if something goes wrong. Used for large files, multimedia, etc.&lt;br /&gt;&lt;br/&gt;RAID4: Block-level striping with dedicated parity. Like RAID3, but not commonly used.&lt;br /&gt;&lt;br/&gt;RAID5: Very popular choice. Block-level striping with distributed parity. Both data and parity is distributed across all the drives in the array. Removes bottleneck of a dedicated parity disk. Probably best overall choice unless the environment is write-heavy.&lt;br /&gt;&lt;br/&gt;RAID6: as RAID5, but dual distributed parity. This means that two sets of parity info are calculated - adds extra fault-tolerance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-111986770522679965?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/111986770522679965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/111986770522679965'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/06/raid-quick-summary.html' title='RAID: A Quick Summary'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-111659712070150066</id><published>2005-05-20T13:48:00.000Z</published><updated>2005-05-20T13:52:00.706Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>My Current Most Loathed Marketing Terms</title><content type='html'>"Share of Wallet" - what the hell does that mean? How much people spend at a given business? OK - so maybe it's supposed to be angled towards some sort of discretionary idea where people consciously/unconsciously dedicate funds that they have available to certain businesses... But really, this is bullshit.&lt;br /&gt;&lt;br /&gt;"Webinar" - ooh, aren't I clever? I took the word "web" and merged it with the word "seminar" to refer to some sort of online video-y chit-chatty sort of thing. A more ungainly portmanteau I can barely imagine. May it fall into disuse again as soon as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-111659712070150066?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/111659712070150066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/111659712070150066'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/05/my-current-most-loathed-marketing.html' title='My Current Most Loathed Marketing Terms'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5025071.post-111452117253906231</id><published>2005-04-26T13:07:00.000Z</published><updated>2005-05-07T14:08:16.363Z</updated><title type='text'>The SOAP vs. REST Debate</title><content type='html'>I'd never even heard of this issue until my colleague opposite mentioned it. Apparently SOAP isn't the only way to go with regard to web services.&lt;br /&gt;REST (Representational State Transfer) can be a simpler alternative for web services, at least those which don't have a fantastically detailed structure which can realistically only be managed using XML schemas. In REST, rather than using POSTing XML documents back and forth, just use URIs and the HTTP GET method, and put the parametes in the URI using the well-known ?param=value&amp;param2=value&amp;etc... style.&lt;br /&gt;Amazon web services offer the alternatives of using SOAP or REST to interact with them. In the case of REST you send an HTTP request with some parameters and get an XML document back. This could well be easier if you are using something like PHP for your business logic. However with Java/J2EE it's pretty easy to build Java classes directly from WSDL which use SOAP under the covers, and you just instantiate the classes and thereby interact with the service as though it were a local Java class.&lt;br /&gt; &lt;br /&gt;I found a nice, simple discussion of the debate &lt;a href="http://www.devx.com/DevX/Article/8155"&gt;here&lt;/a&gt;.&lt;br /&gt;Well - you learn something every day...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5025071-111452117253906231?l=jeannotsweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/111452117253906231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5025071/posts/default/111452117253906231'/><link rel='alternate' type='text/html' href='http://jeannotsweblog.blogspot.com/2005/04/soap-vs-rest-debate.html' title='The SOAP vs. REST Debate'/><author><name>Paul</name><uri>http://www.blogger.com/profile/15497743686988777553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
