<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>A fool on the hill</title>
	<atom:link href="http://nidget.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nidget.wordpress.com</link>
	<description>sees the world spinning &#039;round</description>
	<lastBuildDate>Fri, 08 Mar 2013 06:28:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='nidget.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>A fool on the hill</title>
		<link>http://nidget.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://nidget.wordpress.com/osd.xml" title="A fool on the hill" />
	<atom:link rel='hub' href='http://nidget.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Create registry file (.reg) equivalent to the RegSvr32 command</title>
		<link>http://nidget.wordpress.com/2012/08/01/create-registry-file-reg-equivalent-to-the-regsvr32-command/</link>
		<comments>http://nidget.wordpress.com/2012/08/01/create-registry-file-reg-equivalent-to-the-regsvr32-command/#comments</comments>
		<pubDate>Wed, 01 Aug 2012 15:23:20 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[activex]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[dll components]]></category>
		<category><![CDATA[ole]]></category>
		<category><![CDATA[reg]]></category>
		<category><![CDATA[regcap]]></category>
		<category><![CDATA[registry]]></category>
		<category><![CDATA[regsvr32]]></category>
		<category><![CDATA[shell extensions]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=563</guid>
		<description><![CDATA[If you have already programmed a bit in OLE/ActiveX/Shell extensions/etc. in the Microsoft world, you already know the RegSvr32 command used to register/unregister these dll components. The regsvr32.exe command only calls the DllRegisterServer entry point, i.e. a method with that &#8230; <a href="http://nidget.wordpress.com/2012/08/01/create-registry-file-reg-equivalent-to-the-regsvr32-command/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=563&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://nidget.files.wordpress.com/2012/08/fix-registry-errors.jpg"><img src="http://nidget.files.wordpress.com/2012/08/fix-registry-errors.jpg?w=150&#038;h=150" alt="" title="Registry" width="150" height="150" class="alignleft size-thumbnail wp-image-592" /></a>If you have already programmed a bit in OLE/ActiveX/Shell extensions/etc. in the Microsoft world, you already know the RegSvr32 command used to register/unregister these dll components. The regsvr32.exe command only calls the DllRegisterServer entry point, i.e. a method with that name located in the DLL. Typically, but not limited to, this method creates keys (nodes and leaves) in order to register the component inside the Windows registry.</p>
<p>Now, let&#8217;s say you have an ActiveX component and you want to see the keys it would create when self-registering, but for some reason you don&#8217;t want to actually install it on your computer. Visual Studio has a tool that is extremely convenient for this. It is called Registry Capture (regcap.exe). You can launch it on your dll component in order to generate a reg file containing the registry keys:</p>
<p><code>regcap /O output_file.reg activex.dll</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/563/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/563/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=563&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2012/08/01/create-registry-file-reg-equivalent-to-the-regsvr32-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2012/08/fix-registry-errors.jpg?w=150" medium="image">
			<media:title type="html">Registry</media:title>
		</media:content>
	</item>
		<item>
		<title>Workaround the Grub installation issue in Debian Wheezy</title>
		<link>http://nidget.wordpress.com/2012/04/10/workaround-the-grub-installation-issue-in-debian-wheezy/</link>
		<comments>http://nidget.wordpress.com/2012/04/10/workaround-the-grub-installation-issue-in-debian-wheezy/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 09:08:12 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[grub2]]></category>
		<category><![CDATA[wheezy]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=513</guid>
		<description><![CDATA[The current testing version of Debian, aka Wheezy, contains a rather annoying bug that prevents the installation of Grub, the multi-OS bootstrapper of Linux. Although this bug will be corrected at some point in the possibly near future, it is &#8230; <a href="http://nidget.wordpress.com/2012/04/10/workaround-the-grub-installation-issue-in-debian-wheezy/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=513&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://nidget.files.wordpress.com/2012/04/debian-logo-500x383.jpg"><img src="http://nidget.files.wordpress.com/2012/04/debian-logo-500x383.jpg?w=150&#038;h=114" alt="Debian logo" title="debian-logo-500x383" width="150" height="114" class="alignleft size-thumbnail wp-image-560" /></a>The current testing version of Debian, aka Wheezy, contains a rather annoying <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=654695" title="Debian-installer fails to configure grub-installer" target="_blank">bug</a> that prevents the installation of Grub, the multi-OS bootstrapper of Linux. Although this bug will be corrected at some point in the possibly near future, it is already present for a few months, making life harder for the fresh installations. The traditional workaround in order to install Debian Testing is to install a stable version (Squeeze) and then modify your mirrors to upgrade it to a testing version. In this way Grub will be installed correctly. However, if you have encountered the Grub issue, this means you have already completed your install from a broken edition (if you encounter the issue but you haven&#8217;t completed the install yet, just finish it in a clean way without a bootloader, and then continue reading here). So, maybe you don&#8217;t want to download a new ISO image, burn a new DVD or write a new USB key with it, and then restart the installation process from scratch. The other solution is then to keep the installation that you have just done and to setup the installation of Grub from the stable mirrors. It&#8217;s quite straightforward once you know how to do this.</p>
<p>First you need to boot your fresh installation. In order to do this, you can use any valid Debian bootable media, like for example the media you have used to do your installation. In the boot menu, you should select <em>&#8216;Advanced Options&#8217;</em> and then the <em>&#8216;Rescue Mode&#8217;</em>. This will launch a recovery shell as root user (be careful). In the following screens, select the root partition where Debian is installed in order to mount it (<em>mountpoint /</em>).</p>
<p>The first thing to do now is to make sure the network is started and accessible. You can try a <em>&#8216;<strong>ping debian.org</strong>&#8216;</em>.</p>
<p>Next, use <em>vi</em> to modify the <em><strong>/etc/apt/sources.list</strong></em> file. Make sure the installation media (CD, DVD, USB, etc.) is commented out and replace <em>&#8216;wheezy&#8217;</em> by <em>&#8216;squeeze&#8217;</em> in the lines where the networked mirrors are specified (lines starting with <em>deb</em> and <em>deb-src</em> followed by a URL, do not modify the ones that contain the URL for the security patches). Save, quit the editor and update <em>aptitude</em> in order to apply the changes: <em>&#8216;<strong>aptitude update</strong>&#8216;</em>. Now you can download the <em>grub-pc</em> package from the Squeeze mirrors: <em>&#8216;<strong>aptitude install grub-pc</strong>&#8216;</em>. During the install process, you will be asked the partition where you want to get it installed. When this is finished, run <em>&#8216;<strong>update-grub</strong>&#8216;</em> in order to be sure the configuration files are correctly generated. This last step is probably not necessary, but let&#8217;s play it on the safe way just in case.</p>
<p>Now, you can remove your bootable media and cleanly reboot the computer: <em>&#8216;<strong>shutdown now -r</strong>&#8216;</em>. It should restart fine.</p>
<p>The next thing to do, as root, is to modify back the <em><strong>/etc/apt/sources.list</strong></em> file with <em>&#8216;wheezy&#8217;</em> instead of <em>&#8216;squeeze&#8217;</em> and launch again the command <em>&#8216;<strong>aptitude update</strong>&#8216;</em> to apply the change.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/513/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=513&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2012/04/10/workaround-the-grub-installation-issue-in-debian-wheezy/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2012/04/debian-logo-500x383.jpg?w=150" medium="image">
			<media:title type="html">debian-logo-500x383</media:title>
		</media:content>
	</item>
		<item>
		<title>How to &#8220;OSGIfy&#8221; an Oracle jdbc driver with Spring Roo</title>
		<link>http://nidget.wordpress.com/2011/07/21/how-to-osgify-an-oracle-jdbc-driver-with-spring-roo/</link>
		<comments>http://nidget.wordpress.com/2011/07/21/how-to-osgify-an-oracle-jdbc-driver-with-spring-roo/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 11:31:46 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OSGI]]></category>
		<category><![CDATA[Reverse Engineer]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Spring Roo]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=454</guid>
		<description><![CDATA[If you want to use Spring Roo to reverse engineer an existing Oracle database, you need to bundle the Oracle driver in an OSGI format (this is not required if you want to use Spring Roo with Oracle in a &#8230; <a href="http://nidget.wordpress.com/2011/07/21/how-to-osgify-an-oracle-jdbc-driver-with-spring-roo/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=454&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://nidget.files.wordpress.com/2011/07/kangaroos.jpg"><img src="http://nidget.files.wordpress.com/2011/07/kangaroos.jpg?w=150&#038;h=112" alt="" title="Kangaroos" width="150" height="112" class="alignleft size-thumbnail wp-image-507" /></a>If you want to use Spring Roo to reverse engineer an existing Oracle database, you need to bundle the Oracle driver in an OSGI format (this is not required if you want to use Spring Roo with Oracle in a top down approach). For copyrights reasons, the OSGI driver for Oracle is not furnished by Spring Roo. And Oracle doesn&#8217;t provide it either: I have checked on their &#8220;Metalink&#8221; support website. So, you&#8217;ll need to create it yourself. But, as many Spring Roo beginners have certainly already noticed thus far, this is not always an easy task.</p>
<p>I introduce here a recipe that has been tested with the Oracle jdbc driver 11.2.0.2 and with Spring Roo 1.1.4 and 1.1.5. It is susceptible to work with other versions too, however I can&#8217;t offer any guarantee of result (anyway I&#8217;m convinced you&#8217;re an adventurer and, as such, you don&#8217;t need guarantees <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). I&#8217;m also purposely verbose in the explanation of the process in order to give more chances to make it reproducible with other versions.</p>
<p>1. Download the driver from <a title="Oracle website" href="http://www.oracle.com/" target="_blank">Oracle</a>.</p>
<p>2. Install the driver in your local maven repository.</p>
<p style="padding-left:30px;">Maven command:<br />
<code>mvn install:install-file -Dfile=<em>filename.jar</em> -DgroupId=<em>groupid</em> -DartifactId=<em>artifactId</em> -Dversion=<em>version</em> -Dpackaging=jar</code></p>
<p style="padding-left:30px;">Example:<br />
<code>mvn install:install-file -Dfile=ojdbc5-11.2.0.2.jar -DgroupId=com.oracle -DartifactId=ojdbc5 -Dversion=11.2.0.2 -Dpackaging=jar</code></p>
<p>3. Create a new folder and &#8220;cd&#8221; into it. I use &#8220;C:\eclipse_workspaces\roo\osgi\&#8221; below.</p>
<p>4. Launch the Roo shell.</p>
<p>5. Create an addon wrapper for your jar. The addon wrapper command will create a maven project (pom.xml) that will be used to transform your normal driver into an OSGI driver.</p>
<p>Make sure the parameters match with the ones used to install the driver in your local maven repository (step 2).</p>
<p style="padding-left:30px;">Roo command:<br />
<code>addon create wrapper --topLevelPackage com.oracle.roo.JDBC --groupId <em>groupid</em> --artifactId <em>artifactId</em> --version <em>version</em> --vendorName Oracle --licenseUrl <a href="http://www.oracle.com" rel="nofollow">http://www.oracle.com</a></code></p>
<p style="padding-left:30px;">Example:<br />
<code>addon create wrapper --topLevelPackage com.oracle.roo.JDBC --groupId com.oracle --artifactId ojdbc5 --version 11.2.0.2 --vendorName Oracle --licenseUrl <a href="http://www.oracle.com" rel="nofollow">http://www.oracle.com</a></code></p>
<p>6. Quit the Roo shell and launch the maven goal <code>mvn bundle:bundle</code>. This command will generate the OSGI version of the driver under the target directory. Alternatively if you don&#8217;t want to quit the roo shell, you can also execute: <code>perform command --mavenCommand bundle:bundle</code></p>
<p>7. Install the OSGI driver in Spring Roo. Run one of the following equivalent commands in the roo shell:</p>
<p style="padding-left:30px;"><code>osgi install --url <em>file:///C:\eclipse_workspaces\roo\osgi\target\com.oracle.roo.jdbc..jar</em></code></p>
<p style="padding-left:30px;">or</p>
<p style="padding-left:30px;"><code>osgi start--url <em>file:///C:\eclipse_workspaces\roo\osgi\target\com.oracle.roo.jdbc..jar</em></code></p>
<p style="padding-left:30px;">Example:<br />
<code>osgi install --url file:///C:\eclipse_workspaces\roo\osgi\target\com.oracle.roo.jdbc.ojdbc5-11.2.0.2.0001.jar</code></p>
<p>On successful completion, the command will return a Bundle ID that corresponds to the location of the OSGI file in the &#8220;Apache Felix&#8221; OSGI repository embedded by Spring Roo.</p>
<p><span style="color:#ff0000;">This is not the end yet, as you&#8217;ll probably get a strange error message when using it. So, please, keep on reading&#8230;</span></p>
<p>8. Try this new driver with Roo on an existing Oracle database:</p>
<p style="padding-left:30px;"><code>database reverse engineer --shema <em>xxx</em></code></p>
<p>If you get an error message of the style &#8220;Unresolved contraint in bundle com.springsource.oracle.jdbc&#8221;, that means your OSGI bundle has a dependency on another bundle:</p>
<p style="padding-left:30px;">Example 1:</p>
<p><code>
<p style="padding-left:30px;">[com.springsource.oracle.jdbc [66]] FrameworkEvent ERROR<br />
org.apache.felix.log.LogException: org.osgi.framework.BundleException: Unresolved constraint in bundle com.springsource.oracle.jdb<br />
c [66]: Unable to resolve 66.0: missing requirement [66.0] package; (&amp;(package=javax.resource)(version&gt;=1.5.0)(!(version&gt;=2.0.0)))<br />
at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3409)<br />
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1594)<br />
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:904)<br />
[... cont.]</code></p>
<p>In this first case, the bundle has an unsatisfied dependency on javax.resource</p>
<p style="padding-left:30px;">Example 2:</p>
<p><code>
<p style="padding-left:30px;">[com.oracle.roo.jdbc.ojdbc5 [66]] FrameworkEvent ERROR<br />
org.apache.felix.log.LogException: org.osgi.framework.BundleException: Unresolved constraint in bundle com.oracle.roo.jdbc.ojdbc5<br />
[66]: Unable to resolve 66.0: missing requirement [66.0] package; (package=com.sun.security.auth.module)<br />
at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3409)<br />
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1594)<br />
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:904)<br />
[... cont.]</code></p>
<p>In this second case, the bundle has an unsatisfied dependency on com.sun.security.auth.module</p>
<p>9. Go to the <a href="http://ebr.springsource.com/" title="SpringSource EBR" target="_blank">SpringSource Enterprise Bundle Repository</a> website and search for your missing dependencies. Input the full package name of the missing dependency to do the search (in our example &#8220;javax.resource&#8221; and &#8220;com.sun.security.auth.module&#8221;; the second won&#8217;t give any result so keep on reading).</p>
<p>10. If you find the dependency, download it and install it as an OSGI bundle in Spring Roo (see 7). If you don&#8217;t find it, try to remove the dependency from the Imports entries in the Manifest: most of the times the Manifest generated from the &#8220;addon create wrapper&#8221; command is too verbose. It is the aggregated result of the inspection of the import statements and method signatures in all the classes of the provided jar that needs to be OSGIfied.</p>
<p>11. Remove the faulty OSGI driver from the Felix repository:<br />
- Use &#8220;osgi ps&#8221; to retrieve the ID of the OSGI bundle to remove.<br />
- Use &#8220;osgi headers&#8221; to get the Bundle-SymbolicName of the corresponding OSGI bundle. Probably &#8220;com.oracle.roo.jdbc.ojdbc5&#8243; or &#8220;com.oracle.roo.jdbc.ojdbc6&#8243;.<br />
- Use &#8220;osgi uninstall &#8211;bundleSymbolicName com.oracle.roo.jdbc.ojdbc<em>x</em>&#8220;</p>
<p>Atfer removing the faulty OSGI driver, repeat steps 7, 8, 9, 10 and 11 until it works.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/454/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/454/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=454&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/07/21/how-to-osgify-an-oracle-jdbc-driver-with-spring-roo/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2011/07/kangaroos.jpg?w=150" medium="image">
			<media:title type="html">Kangaroos</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows: find the location of the executables</title>
		<link>http://nidget.wordpress.com/2011/06/21/windows-find-the-location-of-the-executables/</link>
		<comments>http://nidget.wordpress.com/2011/06/21/windows-find-the-location-of-the-executables/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 09:20:08 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[Command]]></category>
		<category><![CDATA[Locations]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[which]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=431</guid>
		<description><![CDATA[After having answered this question for Linux/Unix, I have encountered the same need for Windows. This is what I have found. Since Windows Server 2003 (including Vista and Windows 7), you can use the &#8220;where&#8221; command. Before Windows Server 2003 &#8230; <a href="http://nidget.wordpress.com/2011/06/21/windows-find-the-location-of-the-executables/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=431&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://nidget.files.wordpress.com/2011/06/gates.jpg"><img src="http://nidget.files.wordpress.com/2011/06/gates-e1308648302471.jpg?w=150&#038;h=110" alt="" title="gates" width="150" height="110" class="alignleft size-thumbnail wp-image-449" /></a></p>
<p>After having answered this question for <a href="http://blog.nidget.org/2011/05/03/linux-find-the-location-of-the-executables/" title="Linux: find the location of the executables">Linux/Unix</a>, I have encountered the same need for Windows. This is what I have found.</p>
<p>Since Windows Server 2003 (including Vista and Windows 7), you can use the &#8220;where&#8221; command. Before Windows Server 2003 and since Win 98, this command can be installed via the various &#8220;Windows Resource Kit&#8221; packages.</p>
<p>If you have the excellent, albeit sometimes <a href="http://technet.microsoft.com/en-us/library/ee176949.aspx" title="Running Windows Powershell Scripts">complex</a>, Windows Powershell installed on your computer, you can also execute the &#8220;get-command&#8221; or its shorter &#8220;gcm&#8221; alias.</p>
<p>My colleague, Christian Baumann (<a href="http://www.twitter.com/chrissbaumann" title="Christian Baumann on Twitter">@chrissbaumann</a>), pointed me to a third option: it exists a native port of some GNU utilities to Windows, and it includes the &#8220;which&#8221; command: <a href="http://unxutils.sourceforge.net" title="GNU Tools Win32">http://unxutils.sourceforge.net</a>. However, the project doesn&#8217;t seem to be alive after 2003 and some commands in the package have issues, so while it&#8217;s a perfectly valid solution, in particular for Windows 2000/XP, I would caution a little bit its usage.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/431/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/431/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=431&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/06/21/windows-find-the-location-of-the-executables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2011/06/gates-e1308648302471.jpg?w=150" medium="image">
			<media:title type="html">gates</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Integration</title>
		<link>http://nidget.wordpress.com/2011/06/16/continuous-integration/</link>
		<comments>http://nidget.wordpress.com/2011/06/16/continuous-integration/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 14:18:11 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Build Industrialization]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Mylyn]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Sonar]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=423</guid>
		<description><![CDATA[Continuous Integration<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=423&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<div style="width:425px;" id="__ss_8327404"> <strong><a href="http://www.slideshare.net/jplandrain/continuous-integration-8327404" title="Continuous Integration">Continuous Integration</a></strong> <iframe src='http://www.slideshare.net/slideshow/embed_code/8327404' width='425' height='348' scrolling='no'></iframe>
<div style="padding:5px 0 12px;"></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/423/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=423&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/06/16/continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>
	</item>
		<item>
		<title>Linux: find the location of the executables</title>
		<link>http://nidget.wordpress.com/2011/05/03/linux-find-the-location-of-the-executables/</link>
		<comments>http://nidget.wordpress.com/2011/05/03/linux-find-the-location-of-the-executables/#comments</comments>
		<pubDate>Tue, 03 May 2011 11:33:02 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[Command]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Locations]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[whereis]]></category>
		<category><![CDATA[which]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=390</guid>
		<description><![CDATA[How to locate the binary, source and/or man page files for a command? $ whereis command &#8216;whereis&#8217; has some options you can specify in order to limit the places to look at, or the type of files (binary, source, man &#8230; <a href="http://nidget.wordpress.com/2011/05/03/linux-find-the-location-of-the-executables/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=390&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.crystalxp.net/galerie/fr.id.4800-usual-tux-g2.html"><img src="http://nidget.files.wordpress.com/2011/05/tux_usual_suspects.jpg?w=150&#038;h=120" alt="" title="tux_usual_suspects" width="150" height="120" class="alignleft size-thumbnail wp-image-402" /></a></p>
<ul>
<li><strong>How to locate the binary, source and/or man page files for a command?</strong></li>
</ul>
<ul>$ whereis <em>command</em></ul>
<p>&#8216;whereis&#8217; has some options you can specify in order to limit the places to look at, or the type of files (binary, source, man page file, &#8230;etc).</p>
<p>The &#8216;whereis&#8217; command returns all the places where the command can be found, looking into typical Unix locations. But, more frequently, you are just interested in finding where the commands you type on the command line are located on the filesystem, according to the $PATH variable.</p>
<ul>
<li><strong>How to show the path of a command?</strong></li>
</ul>
<ul>$ which <em>command</em></ul>
<p>Without parameter, it stops on the first command found in the path. If you want to list all the locations of the command in the path, you can call it with the -a option.</p>
<p>I encourage you to browse the man pages if you want a detailed description of these commands.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/390/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=390&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/05/03/linux-find-the-location-of-the-executables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2011/05/tux_usual_suspects.jpg?w=150" medium="image">
			<media:title type="html">tux_usual_suspects</media:title>
		</media:content>
	</item>
		<item>
		<title>Maven: check what it really executes</title>
		<link>http://nidget.wordpress.com/2011/04/12/maven-check-what-it-really-executes/</link>
		<comments>http://nidget.wordpress.com/2011/04/12/maven-check-what-it-really-executes/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 09:09:33 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=378</guid>
		<description><![CDATA[&#160; &#160; &#160; How to aggregate your pom? Sometimes, the need arises to debug a pom file and then you want to have a clear idea of what Maven really executes. This command shows your pom file after the inheritance, profiles and &#8230; <a href="http://nidget.wordpress.com/2011/04/12/maven-check-what-it-really-executes/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=378&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://nidget.files.wordpress.com/2011/04/maven_mug1.jpg"><img src="http://nidget.files.wordpress.com/2011/04/maven_mug1.jpg?w=640" alt="" title="Maven Mug"   class="alignleft size-full wp-image-409" /></a>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ul>
<li><strong>How to aggregate your pom?</strong></li>
</ul>
<p>Sometimes, the need arises to debug a pom file and then you want to have a clear idea of what Maven really executes. This command shows your pom file after the inheritance, profiles and variable substitutions have been applied.</p>
<ul>mvn help:effective-pom</ul>
<ul>
<li><strong>How to aggregate your settings?</strong></li>
</ul>
<p>There is a similar command for the <em>settings.xml </em>file.</p>
<ul>mvn help:effective-settings</ul>
<ul>
<li><strong>How to list the profiles that are activated?</strong></li>
</ul>
<ul>mvn help:active-profiles</ul>
<ul>This command is particularly useful to check the profiles activated by default, when using the -P option, when using an environment variable, or any combination of these like in the following example:</ul>
<ul>mvn -D<em>env_variable=value</em> help:active-profiles -P <em>profileToActivate</em></ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/378/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/378/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=378&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/04/12/maven-check-what-it-really-executes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2011/04/maven_mug1.jpg" medium="image">
			<media:title type="html">Maven Mug</media:title>
		</media:content>
	</item>
		<item>
		<title>The Destructive Programming Manifesto</title>
		<link>http://nidget.wordpress.com/2011/04/07/the-destructive-programming-manifesto/</link>
		<comments>http://nidget.wordpress.com/2011/04/07/the-destructive-programming-manifesto/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 14:44:08 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Humor, irony and sarcasm]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[manifesto]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=348</guid>
		<description><![CDATA[    This is a repost of the original text in case it would disappear from Pen.io The Destructive Programming Manifesto We are programmers. We strive to write good code. We acknowledge that efficient code is often locally unclear. We &#8230; <a href="http://nidget.wordpress.com/2011/04/07/the-destructive-programming-manifesto/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=348&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://nidget.files.wordpress.com/2011/04/manifesto3.gif"><img class="alignleft size-thumbnail wp-image-368" title="manifesto" src="http://nidget.files.wordpress.com/2011/04/manifesto3.gif?w=150&#038;h=133" alt="" width="150" height="133" /></a></p>
<p><em> </em></p>
<p><em> </em></p>
<p><em>This is a repost of the <a href="http://dpm.pen.io/">original text</a> in case it would disappear from <a href="http://www.pen.io">Pen.io</a></em></p>
<h1 style="text-align:center;">The Destructive Programming Manifesto</h1>
<h4 style="text-align:left;"><strong>We are programmers. We strive to write good code.</strong><br />
<strong>We acknowledge that efficient code is often locally unclear.</strong><br />
<strong>We cannot stand writing more comments than code to document our hacks. We would rather not have to fix code we wrote ages ago.</strong><br />
<strong>We are sick of trying to decipher code others wrote.</strong></h4>
<p style="text-align:left;"><em>Hence, this is how we work: </em><br />
<strong>We write code as small self-contained blocks with well-defined interfaces.</strong><br />
<strong>Sometimes, we use software techniques to enforce them.</strong><br />
<strong>When a block is inefficient or behaves incorrectly, we do not read its code.</strong><br />
<strong>We re-implement it. Because it&#8217;s faster. And because it gives us fewer headaches.</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/348/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=348&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/04/07/the-destructive-programming-manifesto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2011/04/manifesto3.gif?w=150" medium="image">
			<media:title type="html">manifesto</media:title>
		</media:content>
	</item>
		<item>
		<title>Maven: sources and javadoc (&#8230;where available)</title>
		<link>http://nidget.wordpress.com/2011/03/04/maven-sources-and-javadoc-where-available/</link>
		<comments>http://nidget.wordpress.com/2011/03/04/maven-sources-and-javadoc-where-available/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 16:30:10 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Tips and tricks]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=321</guid>
		<description><![CDATA[&#160; &#160; &#160; How to display the dependencies in your project as a list? mvn dependency:resolve How to display the dependencies in your project as a tree? mvn dependency:tree How to download the source code for the dependencies in your pom? &#8230; <a href="http://nidget.wordpress.com/2011/03/04/maven-sources-and-javadoc-where-available/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=321&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://mavenuniversity.com/index.php?main_page=product_info&amp;cPath=6_8&amp;products_id=20"><img class="alignleft size-thumbnail wp-image-335" title="Maven Mug" src="http://nidget.files.wordpress.com/2011/03/maven_mug_black.jpg?w=150&#038;h=150" alt="Maven Mug" width="150" height="150" /></a>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ul>
<li><strong>How to display the dependencies in your project as a list?<br />
</strong></li>
<p>mvn dependency:resolve</p>
<li><strong>How to display the dependencies in your project as a tree?<br />
</strong></li>
<p>mvn dependency:tree</p>
<li><strong>How to download the source code for the dependencies in your pom?<br />
</strong></li>
<p>mvn dependency:sources</p>
<li><strong>How to download the javadoc for the dependencies in your pom?<br />
</strong></li>
<p>mvn dependency:resolve -Dclassifier=javadoc -Dtype=jar</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/321/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/321/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=321&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/03/04/maven-sources-and-javadoc-where-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2011/03/maven_mug_black.jpg?w=150" medium="image">
			<media:title type="html">Maven Mug</media:title>
		</media:content>
	</item>
		<item>
		<title>Book: ActiveMQ In Action</title>
		<link>http://nidget.wordpress.com/2011/01/25/book-activemq-in-action/</link>
		<comments>http://nidget.wordpress.com/2011/01/25/book-activemq-in-action/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 17:17:15 +0000</pubDate>
		<dc:creator>nidget</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[ActiveMQ]]></category>
		<category><![CDATA[Bosanac]]></category>
		<category><![CDATA[Davies]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[Manning]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[Snyder]]></category>

		<guid isPermaLink="false">http://nidget.wordpress.com/?p=24</guid>
		<description><![CDATA[I am, for many years, an active reader of the Manning serie called &#8220;in Action&#8220;. I probably bought half of the collection in printed edition. Not only because I&#8217;m pretty convinced some of them will become collectors (for example, the first version of &#8220;Struts in Action&#8221; for which I also &#8230; <a href="http://nidget.wordpress.com/2011/01/25/book-activemq-in-action/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=24&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><span style="color:#808080;"><a href="http://nidget.files.wordpress.com/2010/10/activemq_in_action_cover.jpg"><img class="size-full wp-image-38 alignleft" title="ActiveMQ In Action Book Cover" src="http://nidget.files.wordpress.com/2010/10/snyder_cover150.jpg?w=640" alt="Book Cover of ActiveMQ In Action"   /></a>I am, for many years, an active reader of the <a title="Manning website" href="http://www.manning.com/" target="_blank">Manning</a> serie called &#8220;<em>in Action</em>&#8220;. I probably bought half of the collection in printed edition. Not only because I&#8217;m pretty convinced some of them will become collectors (for example, the first version of &#8220;Struts in Action&#8221; for which I also own the accompanying T-Shirt) <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> , but also because I really enjoy the style of the collection and the way the chapters are structured. However, don&#8217;t believe I&#8217;m writing this review with a biaised opinion, because I have also been disappointed occasionally by some offsprings of the Manning family.</span></p>
<p>Please, note this review is based on one of the latests MEAP -Manning Early Access Program- edition offered in order to allow the avid readers to access the content of the book while it is being edited. This version should however be very similar to the printed edition.</p>
<p>Before we dive into the real content, let me introduce the authors. The book is written by three different persons, what in my opinion seems to be the maximum number of authors in order to ensure a consistent quality. However, in the case of &#8220;<em>ActiveMQ In Action</em>&#8220;, the CVs are pretty amazing:</p>
<ul>
<li>Bruce Snyder is perhaps the most famous one of the three (at least I knew his name before reading his book <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). To name just a few things, he&#8217;s a member of the <a title="Apache Software Foundation" href="http://www.apache.org/" target="_blank">Apache Software Foundation</a> and he works for <a title="SpringSource" href="http://www.springsource.com/" target="_blank">SpringSource</a> as Senior Engineer. He is also one of the developers for ActiveMQ. Additionally, he has already coauthored a few books: &#8220;<em>Maven, the definitive guide</em>&#8220;, &#8220;<em>Beginning Spring framework 2</em>&#8221; and &#8221;<em>Professional Apache Geronimo</em>&#8220;; and he has participated in the Expert Groups for JSR 243 &#8220;<em>JDO 2.0</em>&#8220;, JSR 221 &#8220;<em>JDBC 4.0</em>&#8221; and JSR 291 &#8220;<em>Dynamic Component Support for Java SE</em>&#8220;.</li>
<li>Dejan Bosanac is a Senior Software Engineer at <a title="FuseSource" href="http://fusesource.com/" target="_blank">FuseSource</a>, a <a title="Progress Software company" href="http://www.progress.com/" target="_blank">Progress Software</a> company. He is an active committer on ActiveMQ, the author of &#8220;<em>Scripting in Java: Languages, Frameworks, and Patterns</em>&#8221; and he has also participated in the Expert Group for JSR 223 &#8221;<em>Scripting for the Java Platform</em>&#8220;.</li>
<li>Rob Davies is Chief Technology Officer at FuseSource. He is a founder of the Apache ActiveMQ, <a title="Apache ServiceMix" href="http://servicemix.apache.org/" target="_blank">ServiceMix</a> (Open Source ESB) and <a title="Apache Camel" href="http://camel.apache.org/" target="_blank">Camel</a> projects. He has more than twenty years of experience in project management, software design and development with banking and telecom companies.</li>
</ul>
<p>Now about the book! It is divided into four sections:</p>
<p>1. An introduction to Messaging and ActiveMQ that starts with a quick but very concrete overview of the subject (in the typical &#8220;<em>In Action</em>&#8221; style), and continues with a detailed explanation of the concepts of Message Oriented Middleware and JMS in order to lay down the necessary background knowledge.</p>
<p style="padding-left:30px;">The first chapter is a clear and concise quick start guide to ActiveMQ. It gives a high level picture of the subject, detailing the concepts of asynchronicity and of loose coupling and citing straightforward cases of usage. Then, it explains how to download, install and start it and how to run one of the examples provided with the MOM. I like the brevity of this chapter and how it goes directly to the subject: you can get a running ActiveMQ server in less than five minutes, at least if you already know a little bit about ANT. If you don’t know ANT, don’t worry: it’s not very difficult and basically you’ll just have to install it. This is probably the ultimate test to identify if you should be reading the book or not ;-)</p>
<p style="padding-left:30px;">I remember I was feeling a bit disappointed when reading this chapter because I was expecting a JMS version of &#8220;Hello World&#8221; right at the start, and instead it was &#8220;just&#8221; the execution of a prebuilt example. But I&#8217;m too much used to the &#8220;<em>In Action</em>&#8221; books and browsing the second chapter I have realized that was coming soon.</p>
<p style="padding-left:30px;">The second chapter is a tutorial about JMS. It&#8217;s there just in case you have never used JMS before, or you haven&#8217;t used it for a long time. It&#8217;s a good refresher on the subject because it explains really a lot in just a few pages. However, don&#8217;t expect to find all in details: this is a book about ActiveMQ, not a book about JMS. You&#8217;ll find an explanation of the base principles (the types of jms messages, the jms domains: queueing and publish/subscribe), a description of the java classes and interfaces in the JMS specification, and an example of a simple application (the long awaited &#8220;hello world&#8221;) for each type of JMS domain. You won&#8217;t be a JMS expert after reading this chapter, but you will have all the ingredients in your hands to start using it and eventually become one.</p>
<p style="padding-left:30px;">The third chapter, that also closes the first section of the book, lays down the two example applications that will be used to introduce the many features of ActiveMQ through the rest of the book. These two examples are classical choices that are correctly balanced in difficulty and in openess to change; in order to be able to adapt to many usage scenarios. They are presented with sufficient details, including the download and installation of Maven, how to launch them and an extract of the expected results.</p>
<p style="padding-left:30px;">In this first section, I just regret not finding a quick comparison of ActiveMQ to a few other open-source solutions (RabbitMQ, OpenMQ, HornetQ&#8230;), or even non open-source ones (WebsphereMQ, SonicMQ, MuleMQ&#8230;). However I can understand this would have been a very difficult exercise. So maybe getting an overview of the features that make ActiveMQ a better choice in the crowd of JMS solutions would have been really nice instead. Next edition?</p>
<p>2. The second section dives you directly into the bowels of the beast with the exposition of the most important aspects of the MOM server: the connectors, the security and the options for the storage of messages.</p>
<p style="padding-left:30px;">The fourth chapter is about the configuration of the connectors, both the transport connectors used by the clients in order to connect to the message brokers, and the network connectors used in order to interconnect the broker servers. This chapter starts first with a presentation of the unified format of URLs used by ActiveMQ in order to configure and to reference the different types of connector. Then, after a brief overview of all the connectors, it goes into more details explaining for each one the pros and cons, when you should consider using it, and how to set it up (with a reference to the detailed documentation for the more advanced settings). This rather lengthy chapter is organized more like a reference material. I suggest, as the authors do, that you skip few subsections and come back when you actually need it. Just make sure you understand at least one example of connector in each category: transport and network.</p>
<p style="padding-left:30px;">Chapters 5 and 6 are very important for a good mastering of the subject.  With chapter 5, you really start to understand the power of ActiveMQ because it talks about the storage systems (for persistent and non-persistent messages), details the differences for queues and topics and exposes deeply the four different storage systems that you can use with ActiveMQ. It then focuses on the caching strategies that you can deploy in order to speed up the retrieval of messages.</p>
<p style="padding-left:30px;">Chapter 6 is about securing the destinations using simple or JAAS mechanisms (for authentication and authorization) going into the details of implementing JAAS login modules. Then it elaborates on message level authorization, on building a plugin in order to implement custom authentication and authorization, and on integration of ActiveMQ with certificates based security. This closes the second section.</p>
<p>3. The third section is more about the integration of ActiveMQ into you own environment.</p>
<p style="padding-left:30px;">Chapter 7 focuses on the integration in Java and Spring environments, explaining with great details the different strategies for embedding the broker in your Java applications and the various configuration options that are offered when you use it with Spring. This chapter is really polished, because it also includes the development of clients using Spring and it talks about the important topic of implementing the request-reply mechanisms using JMS.</p>
<p style="padding-left:30px;">Chapter 8 shows, with an example application, how to integrate with different servlet containers or application servers. It is demonstrated using Tomcat, Jetty, JBoss and Apache Geronimo. I regret there is not more examples with other application servers like Glassfish or Weblogic, but I suspect the goal of the authors was more to show the mechanism in details with various types of platform so you can help yourself after by searching a bit on the web if necessary. This would make sense because this chapter is probably going to be outdated very fast.</p>
<p style="padding-left:30px;">The next chapter is about the usage of ActiveMQ from other languages. The scripting languages are detailed first, with the usage of the STOMP protocol for Ruby, Python, PHP and Perl; .NET/C# and C++ are detailed next. Then the chapter cleverly elaborates on SOA and RESTful access to the broker for WebServices, and also on the access using Ajax.</p>
<p>4. The last section concerns the advanced usage of the broker in your entreprise. I won&#8217;t develop further here because of the diversity and complexity of the topics covered. But -to name just a few subjects- this section covers clustering, scaling and load balancing, high availability, network and storage topologies, multicasting, logging, monitoring and statistics, administration of the broker, usage of wildcard and multiple destinations, system notifications and the virtual messaging, &#8230;the list continues and it is really long.</p>
<h1>Conclusion</h1>
<p>The overall writing quality is excellent. The text is very comprehensive. This is an important point for me as I am not a native english speaker and I don&#8217;t always manage to find a lot of time to read. I could however spot a few (actually, very few) typos, but nothing serious. The style is direct and concise and the subject is treated very seriously. Though I would have appreciated to find a few funny quotes, because I feel they help to relax a bit while reading and so help to memorize better. But this is more of a personal taste, maybe not shared with everyone who could rather see this as a distraction.</p>
<p>In conclusion, a must read book for anyone interested into the subject.</p>
<div id="_mcePaste" class="mcePaste" style="position:absolute;width:1px;height:1px;overflow:hidden;top:0;left:-10000px;">﻿</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nidget.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nidget.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nidget.wordpress.com&#038;blog=16939319&#038;post=24&#038;subd=nidget&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nidget.wordpress.com/2011/01/25/book-activemq-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de2d71f8d5953f5fe17277e93b2c3276?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nidget</media:title>
		</media:content>

		<media:content url="http://nidget.files.wordpress.com/2010/10/snyder_cover150.jpg" medium="image">
			<media:title type="html">ActiveMQ In Action Book Cover</media:title>
		</media:content>
	</item>
	</channel>
</rss>
