<?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-4143096558756086604</id><updated>2011-07-29T01:28:51.664-07:00</updated><category term='Netbeans'/><category term='JRebel'/><category term='SwiftMQ'/><title type='text'>CTO Speak</title><subtitle type='html'>Infrequent - but hopefully useful and/or interesting - musings on a range of technical issues.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ctospeak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4143096558756086604/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ctospeak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andy Barlow</name><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>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4143096558756086604.post-6123023732686465557</id><published>2010-01-29T01:30:00.001-08:00</published><updated>2010-01-29T01:30:40.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SwiftMQ'/><category scheme='http://www.blogger.com/atom/ns#' term='JRebel'/><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>Instant deployment and debugging of SwiftMQ with JRebel</title><content type='html'>&lt;object height="525" id="scPlayer" width="840"&gt; &lt;param name="movie" value="http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/mp4h264player.swf"&gt;&lt;/param&gt;&lt;param name="quality" value="high"&gt;&lt;/param&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt;&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/FirstFrame.jpg&amp;amp;containerwidth=840&amp;amp;containerheight=525&amp;amp;content=http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/SwiftMQ%20and%20JRebel%20-%20a%20winning%20combination.mp4"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="scale" value="showall"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;param name="base" value="http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/"&gt;&lt;/param&gt;&amp;nbsp; &lt;embed src="http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/mp4h264player.swf" quality="high" bgcolor="#FFFFFF" width="840" height="525" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/FirstFrame.jpg&amp;amp;containerwidth=840&amp;amp;containerheight=525&amp;amp;content=http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/SwiftMQ%20and%20JRebel%20-%20a%20winning%20combination.mp4" allowFullScreen="true" base="http://content.screencast.com/users/andybarlow/folders/Camtasia/media/d48c5852-7736-4b8a-8d38-145f26b2d912/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4143096558756086604-6123023732686465557?l=ctospeak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctospeak.blogspot.com/feeds/6123023732686465557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctospeak.blogspot.com/2010/01/instant-deployment-and-debugging-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4143096558756086604/posts/default/6123023732686465557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4143096558756086604/posts/default/6123023732686465557'/><link rel='alternate' type='text/html' href='http://ctospeak.blogspot.com/2010/01/instant-deployment-and-debugging-of.html' title='Instant deployment and debugging of SwiftMQ with JRebel'/><author><name>Andy Barlow</name><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-4143096558756086604.post-8159480427546394916</id><published>2010-01-27T07:56:00.000-08:00</published><updated>2010-01-28T02:33:20.340-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SwiftMQ'/><category scheme='http://www.blogger.com/atom/ns#' term='JRebel'/><title type='text'>Debugging in SwiftMQ</title><content type='html'>&lt;span style="font-family: Helvetica;"&gt;Debugging your first Swiftlet or JMS application within the SwiftMQ environment can be quite a challenge.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;For that reason the company behind SwiftMQ, IIT Software, developed the &lt;a href="http://www.swiftmq.com/products/router/swiftlets/sys_trace/index.html"&gt;Trace Swiftlet&lt;/a&gt;&amp;nbsp;for tracing and providing "&lt;i&gt;detailed information about internal processing of Swiftlets&lt;/i&gt;".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;The idea is to sprinkle your code liberally with tracing code such as:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #d9ead3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if (ctx.traceSpace.enabled) {&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #d9ead3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctx.traceSpace.trace(PREDICATE, debuginfo);&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #d9ead3;"&gt;&lt;span style="font-family: Helvetica;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;and observe the trace output to track processing and variable values.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;The reason debugging from within your favourite IDE is "impossible" is that SwiftMQ has a built-in hot deployment feature that prevents you connecting via a remote debugger.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;So for months that's exactly how I'd debug SwiftMQ applications: make some changes, build and wait for SwiftMQ hot deployment cycle to kick in and deploy the changes, then observe the trace output to check for expected behaviour.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;But recently I discovered JRebel (formerly JavaRebel) and I thought I'd revisit the "Debugging in SwiftMQ" problem.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;And the result is I've changed my debugging ways for good! Here's how:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;First, grab yourself a 30-day evaluation copy (I can guarantee it won't be long before you buy a full licence!) of JRebel from the ZeroTurnaround website at &lt;a href="http://www.zeroturnaround.com/jrebel/"&gt;http://www.zeroturnaround.com/jrebel/&lt;/a&gt; and install it on your development machine. For the sake of this tutorial, we'll assume that the SwiftMQ Router you are developing against is on the same machine, but since we're going to debug using a remote connection (even on the local machine) it should work equally well regardless of the location of your SwiftMQ Router.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;In order to debug directly from within the Java IDE of your choice (Netbeans, Eclipse and IntelliJ are all well supported), you should also install the appropriate IDE plugin, see &lt;a href="http://www.zeroturnaround.com/reference-manual/"&gt;http://www.zeroturnaround.com/reference-manual/&lt;/a&gt; for specific instructions.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Now, using your favorite text editor change the start script for the SwiftMQ Router and add the following Java command flags:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #d9ead3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-noverify -javaagent:/Applications/ZeroTurnaround/JRebel/jrebel.jar&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;to enable the JRebel classloader to take precedence over SwiftMQ's hot deployment mechanism; and&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="background-color: #d9ead3;"&gt;-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8888,suspend=n&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;to enable remote debugging.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;In my environment, my &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;smqr1&lt;/span&gt;&amp;nbsp; shell script reads:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="background-color: #d9ead3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;java &lt;b&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;-noverify -javaagent:/Applications/ZeroTurnaround/JRebel/jrebel.jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8888,suspend=&lt;span style="color: black;"&gt;n&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;-server -Xmx512m -cp ../../jars/swiftmq.jar:../../jars/jndi.jar:../../jars/jms.jar:../../jars/jsse.jar:../../jars/jnet.jar:../../jars/jcert.jar:../../jars/dom4j-full.jar:../../jars/jta-spec1_0_1.jar com.swiftmq.Router ../../config/router1/routerconfig.xml&lt;/span&gt;&lt;br style="background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;with the required additional JVM flags &lt;b&gt;bolded&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Note the &lt;b&gt;suspend=n&lt;/b&gt; flag which determines whether the JVM application waits for a debugger to attach before starting. We'll set it to start without an attached debugger to begin with: more on this setting later.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;So far we've installed JRebel on our development machine, together with the JRebel plugin for our favourite editor, and we've changed the SwiftMQ startup script to enable the JRebel classloader and allow us to connect with a remote debugger.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;We're now ready to do some serious debugging!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Start your favourite IDE and load the SwiftMQ project you are working on. Again I'm going to make an assumption, in this case that you have some sort of working Swiftlet or JMS application that you are able to deploy to the SwiftMQ environment. You can read the SwiftMQ website to find out how to create a Swiftlet or JMS application, so that is outside the scope of this article.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;In order for JRebel to work its magic, it needs to be "told" what to do and that requires a simple XML file called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rebel.xml&lt;/span&gt; in the root of the JAR file you want to debug.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="font-family: Helvetica;"&gt;In the example below, I am working in Netbeans 6.7.1 on a Swiftlet called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sdx-router &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Helvetica;"&gt;with the compiled classes being placed in the directory highlighted in &lt;b&gt;bold&lt;/b&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6XLbKsy4D1I/S2Fd_HPkNEI/AAAAAAAAAFA/2RwtVYeaIdk/s1600-h/rebelxml.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://4.bp.blogspot.com/_6XLbKsy4D1I/S2Fd_HPkNEI/AAAAAAAAAFA/2RwtVYeaIdk/s640/rebelxml.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="font-family: Helvetica;"&gt;By adding a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dir&lt;/span&gt; node in &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rebel.xml&lt;/span&gt; and setting the name to the location of my IDE's compiler output I am telling JRebel where it should look for classes to load whenever they are updated, for example when I make a change in the IDE and compile a Java class.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="font-family: Helvetica;"&gt;The partial screen grab below shows the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rebel.xml&lt;/span&gt; file sitting in the root directory (default package) of the source tree of the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sdx-router&lt;/span&gt; Netbeans project:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6XLbKsy4D1I/S2FgRhLRMSI/AAAAAAAAAFI/dIrWjwfbLBk/s1600-h/rebel.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="http://3.bp.blogspot.com/_6XLbKsy4D1I/S2FgRhLRMSI/AAAAAAAAAFI/dIrWjwfbLBk/s320/rebel.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;At this stage, if you have not already deployed your Swiftlet or JMS application for the first time, you must do so now so that the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rebel.xml&lt;/span&gt; file is deployed into the SwiftMQ environment in the root of the Swiftlet JAR.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt; Once this initial deployment (which will use SwiftMQ's standard hot-deployment mechanism) has taken place, any subsequent changes you make in your IDE will be deployed by JRebel's classloader within fractions of a second of them being compiled!&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Even if you're not in a heavy debugging mode this is a huge improvement on the standard edit-build-SwiftMQ hot deploy cycle which can take a matter of minutes each time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Onto debugging...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;span style="font-family: Helvetica;"&gt;Earlier in this article we added some JVM flags to enable remote debugging using Java's standard debugging: if you've ever tried this with SwiftMQ before, you will have been disappointed as SwiftMQ's hot deployment mechanism makes it impossible to connect a remote debugger.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;But with JRebel's classloader taking precedence, and with the JRebel plugin installed in your favourite IDE you are ready to go!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;In Netbeans, simply attach your debugger by choosing &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Debug-&amp;gt;Attach Debugger&lt;/span&gt; and the following screen will be shown:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6XLbKsy4D1I/S2FiBWGbVrI/AAAAAAAAAFQ/g-DWNvLElEk/s1600-h/debugger.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_6XLbKsy4D1I/S2FiBWGbVrI/AAAAAAAAAFQ/g-DWNvLElEk/s400/debugger.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;The default settings are just fine if you are debugging against your development machine on port 8888. If you are working against another machine, or on another port, you should change the entries appropriately.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Click OK and within a few seconds the debugger connects to the running SwiftMQ Router and you are debugging.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Within your IDE you can now make changes to and compile a single class and JRebel's classloader will allow you to bypass the SwiftMQ hot deployment process, loading the new class directly into memory and allowing you to debug through it instantly, just as you would a standard Java application.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;Even when you're in the middle of a debugging session you can make a change in a class as the Swiftlet is running, compile the single class and the next time the changed class is invoked the debugger kicks in - very impressive indeed!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Remember the &lt;b&gt;suspend=n&lt;/b&gt; flag?&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Whilst that setting is fine if you are debugging a MessageProcessor, what if you want to debug parts of your Swiftlet which run only at startup, for example the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;startup&lt;/span&gt; method?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;Simple. Just change the flag to &lt;/span&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;b&gt;suspend=y&amp;nbsp;&lt;/b&gt;and SwiftMQ will "wait" for you to attach your IDE's debugger before launching - you can debug any part of your Swiftlet or JMS application as easily as a standard Java application!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;In my next article, I'll post a video of SwiftMQ and JRebel in action - stay posted.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4143096558756086604-8159480427546394916?l=ctospeak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctospeak.blogspot.com/feeds/8159480427546394916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctospeak.blogspot.com/2010/01/debugging-in-swiftmq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4143096558756086604/posts/default/8159480427546394916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4143096558756086604/posts/default/8159480427546394916'/><link rel='alternate' type='text/html' href='http://ctospeak.blogspot.com/2010/01/debugging-in-swiftmq.html' title='Debugging in SwiftMQ'/><author><name>Andy Barlow</name><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/_6XLbKsy4D1I/S2Fd_HPkNEI/AAAAAAAAAFA/2RwtVYeaIdk/s72-c/rebelxml.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
