<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Wormholes, FitNesse and the return of SetUp and TearDown links</title>
    <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Wormholes, FitNesse and the return of SetUp and TearDown links</title>
      <description>&lt;p&gt;Recently, I was working on adding back a feature to &lt;a href="http://fitnesse.org"&gt;FitNesse&lt;/a&gt; that had been removed, links at the bottom of each page to add a setup or teardown page to the current page. After racking my brain and spending time in git with file histories, I had discovered a point in time where the feature was there and the next commit where it was gone. It was not obvious to me what had changed to break the feature until I talked with Bob Martin (much of this has to do with my lack of experience using git). He mentioned a change in the handling of importing header and footer pages (related to my problem) and sure enough, when I took a look in the debugger, I found out that the information I needed to reintroduce the feature had essentially be removed as a result of a bug fix.&lt;/p&gt;


	&lt;p&gt;This was, apparently, not a heavily used feature. In fact, I had not used it much until I recently started working on &lt;a href="http://schuchert.wikispaces.com/FitNesse.Tutorials"&gt;tutorials for FitNesse&lt;/a&gt;. And given the release criterion for FitNesse, removal of the feature did not break anything (no acceptance tests nor unit tests).&lt;/p&gt;


	&lt;p&gt;Anyway, the point at which the information was available that I needed and the point where I needed to use the information were may steps away from each other both in the call stack as well as the instance hierarchy (think composite pattern). I did not want to significantly change the method call hierarchy so I instead decided to hand-roll the wormhole pattern as it manifests itself in AspectJ (and not the wormhole anti-pattern).&lt;/p&gt;


	&lt;p&gt;For background on AspectJ and &lt;span class="caps"&gt;AOP&lt;/span&gt; in general, have a look at &lt;a href="http://schuchert.wikispaces.com/AspectJ+Self+Study"&gt;these self-study tutorials&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;The wormhole pattern is well-documented in &lt;a href-"http://www.amazon.com/AspectJ-Action-Practical-Aspect-Oriented-Programming/dp/1930110936/ref=sr_1_1?ie=UTF8&amp;#38;s=books&amp;#38;qid=1239907707&amp;#38;sr=8-1"&gt;AspectJ In Action&lt;/a&gt;. It consists of two point cuts that combine two different, separated, parts of the system. It grabs information available at (in this case) the entry point to the system and makes that information available deeper in the system without passing the parameter directly. That&amp;#8217;s where the name comes from, the pattern bridges information across to unconnected points via the wormhole. It is my favorite patter name (not favorite pattern, just name).&lt;/p&gt;


	&lt;p&gt;AspectJ happens to store certain runtime information in thread local storage and the wormhole pattern exploits this fact. &lt;a href="http://schuchert.wikispaces.com/ThreadLocal+Context+Initialization"&gt;Here&amp;#8217;s another example that&amp;#8217;s close to the wormhole pattern.&lt;/a&gt; This is actually a common technique. If you&amp;#8217;ve read up on the recommendations on using Hibernate in a &lt;span class="caps"&gt;JSE&lt;/span&gt; environment either in &amp;#8220;Hibernate in Action&amp;#8221; or the more recent &lt;a href="http://www.amazon.com/Java-Persistence-Hibernate-Christian-Bauer/dp/1932394885/ref=sr_1_2?ie=UTF8&amp;#38;s=books&amp;#38;qid=1239907948&amp;#38;sr=1-2"&gt;Javer Persistence with Hibernate&lt;/a&gt;, one recommendation is to pass around sessions and such in thread local variables. Under the covers, &lt;span class="caps"&gt;JEE&lt;/span&gt; containers do the same thing.&lt;/p&gt;


	&lt;p&gt;Even though this is a &amp;#8220;common&amp;#8221; technique, I&amp;#8217;m not a huge fan of using thread-locals.
1. They are thread-specific global variables.
1. You better be sure there&amp;#8217;s no threading between the two points.
In this case, the threading has already happened. Once a FitNesse responder gets a hold of an &lt;span class="caps"&gt;HTTP&lt;/span&gt; request, the remaining processing is in a single thread.&lt;/p&gt;


	&lt;p&gt;On the other hand, if I did not use thread local storage, the change required to get information I needed would have either require changing one of the objects already in the parameters being passed (very ugly) or changing method signatures all over the place (somewhat less ugly but a stronger violation of &lt;span class="caps"&gt;LSP&lt;/span&gt;). So in this case, I think thread local variables are the least ugly of the available options.&lt;/p&gt;


	&lt;p&gt;(As a side note, that&amp;#8217;s my definition of design: Select the solution that sucks the least.)&lt;/p&gt;


	&lt;p&gt;If you&amp;#8217;re like me, you don&amp;#8217;t use thread locals very often. I wanted to make sure that the thread local information would get properly cleaned up and I wanted to hide all of the magic in one place, so I created a simple class called ThreadLocalUtil. I used &lt;span class="caps"&gt;TDD&lt;/span&gt; to create the class and when I though I was done, I wanted to make sure that I had written the clear() method correctly. I knew that for a single thread the clear() method worked as expected, but I wanted to make sure it did not affect other threads.&lt;/p&gt;


So my problem was I needed 2 threads and I wanted a particular ordering of events:
	&lt;ul&gt;
	&lt;li&gt;T1: Store value in thread-local storage.&lt;/li&gt;
		&lt;li&gt;T2: Clear its local storage.&lt;/li&gt;
		&lt;li&gt;T1: Read its local storage, value stored should still be available.&lt;/li&gt;
	&lt;/ul&gt;


This really isn&amp;#8217;t a hard test to write other than the ordering of events. To make that work, I used latches and I had the threads manually single each other. Here&amp;#8217;s the test:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_java "&gt;package fitnesse.threadlocal;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

import java.util.concurrent.CountDownLatch;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ThreadLocalUtilTest {
  private String valueFound;

  // snip - several other tests removed to focus on this test

  CountDownLatch t1Latch = new CountDownLatch(1);
  CountDownLatch t2Latch = new CountDownLatch(1);

  class T1 implements Runnable {
    public void run() {
      try {
        ThreadLocalUtil.setValue(&amp;quot;t1&amp;quot;, &amp;quot;value&amp;quot;);
        t2Latch.countDown();
        Thread.yield();
        t1Latch.await();
        valueFound = ThreadLocalUtil.getValue(&amp;quot;t1&amp;quot;);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  class T2 implements Runnable {
    public void run() {
      try {
        t2Latch.await();
        ThreadLocalUtil.clear();
        t1Latch.countDown();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  @Test
  public void assertThatClearInOneThreadDoesNotMessUpAnotherThread()
      throws InterruptedException {
    Thread t1 = new Thread(new T1());
    Thread t2 = new Thread(new T2());
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    assertEquals(&amp;quot;value&amp;quot;, valueFound);
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This example illustrates using the java.util.concurrent.CountDownLatch class to signal between threads.&lt;/p&gt;


&lt;b&gt;Main Test Method&lt;/b&gt;
	&lt;ul&gt;
	&lt;li&gt;Creates two threads and start them.&lt;/li&gt;
		&lt;li&gt;Wait for both threads to complete.&lt;/li&gt;
	&lt;/ul&gt;


&lt;b&gt;T1.run(), T2.run()&lt;/b&gt;
	&lt;ul&gt;
	&lt;li&gt;If T2 starts running before T1, no problem it waits on the countdown latch.&lt;/li&gt;
		&lt;li&gt;When T1 starts, it stores a value in a thread local using the util class.&lt;/li&gt;
		&lt;li&gt;T1 then counts down, releasing T2.&lt;/li&gt;
		&lt;li&gt;T1 then yields, it is done until its countdown latch is signaled.&lt;/li&gt;
		&lt;li&gt;T1 waits for a signal.&lt;/li&gt;
		&lt;li&gt;T2 is released from its countdown latch.&lt;/li&gt;
		&lt;li&gt;T2 sends clear to the thread local util class (there&amp;#8217;s a test that verifies clear() works as named in a single thread.&lt;/li&gt;
		&lt;li&gt;T2 then signals T1 to continue by calling its countdown latch.&lt;/li&gt;
		&lt;li&gt;T2 completes at some point later.&lt;/li&gt;
		&lt;li&gt;T1 starts running again, grabs the value out of thread local storage and puts it in the valueFound.&lt;/li&gt;
		&lt;li&gt;T1 completes.&lt;/li&gt;
	&lt;/ul&gt;


&lt;b&gt;Main Test Method&lt;/b&gt;
	&lt;ul&gt;
	&lt;li&gt;The completion of T1 and T2 make the join methods called in the original test method to return, whereupon the test can complete.&lt;/li&gt;
		&lt;li&gt;Verifies that the variable valueFound, set in T1.run, stores the expected result.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;This kind of hand-rolled synchronization is certainly error prone. This is where having a second pair of eyes can really help. However, this seemed to verify that the clear method as written worked in multiple threads as expected.&lt;/p&gt;


	&lt;p&gt;If you&amp;#8217;re interested in seeing the ThreadLocalUtil class or ThreadLocalUtilTest class, grab a copy of &lt;a href="http://github.com/unclebob/fitnesse/tree/master"&gt;FitNesse from github&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 16 Apr 2009 13:33:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4ae69f4d-d669-4834-adf7-6317dbe8f8bc</guid>
      <author>Brett Schuchert</author>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links</link>
      <category>Schuchert's Scattered Synapses </category>
      <category>multi</category>
      <category>threading</category>
      <category>Unit</category>
      <category>test</category>
      <category>non</category>
      <category>blocking</category>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by iPhone contacts backup</title>
      <description>&lt;p&gt;It is really a good example that most of the programmer should think about this. If we want to do much better for the code. I should understand it. right? You are very good at this and show us good coding idea.&lt;/p&gt;</description>
      <pubDate>Sun, 15 Jan 2012 01:56:59 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:3ea68d8e-a758-4e93-aa85-b909c0e51d92</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-197909</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by find cell number </title>
      <description>&lt;p&gt;While most people could tell you the highest mountain in the world is Mount Everest and the longest river in the world is the Nile, not many people know much about the biggest lakes around the world.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://hemorrhoidstreatmentcure.com" rel="nofollow"&gt;hemorrhoid removal at home&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 21 Dec 2011 05:42:43 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:aa48c0e0-bdd5-4112-a190-5d7a37ea061a</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-190195</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by  &lt;a href="http://www.wingsjshoes.com/adidasangrybirdsshoes-c34.html"&gt;Adidas Angry Birds&lt;/a&gt;</title>
      <description>&lt;p&gt;And finally found under&lt;/p&gt;</description>
      <pubDate>Fri, 16 Dec 2011 03:29:53 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:2469cf43-ac7d-4ccd-a844-e637f95d9525</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-187926</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by ghd</title>
      <description>&lt;p&gt;Yes, in general, I think there is too much club football on TV. Sepp Blatter&lt;/p&gt;</description>
      <pubDate>Sun, 30 Oct 2011 22:28:45 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e6997f57-9234-4576-bfe2-9b9c115e9cfe</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-165910</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by Tips For Bowling</title>
      <description>&lt;p&gt;Yes, in general, I think there is too much club football on TV.
Sepp Blatter&lt;/p&gt;</description>
      <pubDate>Thu, 20 Oct 2011 13:24:06 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:41273c60-68cc-44f3-b2e5-840f463cca36</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-160235</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by beats by dre store</title>
      <description>&lt;p&gt;y friends strongly. iPad ePub Transfer for Mac is a Professional transfer that can transfer the ePub books onto your iPad on Ma&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;high quality headphones&lt;/a&gt;
&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;new design headphones&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 03:39:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:464292fe-9523-42e3-bb1d-e54fdc618b40</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-131695</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by Authentic Nike Jordan Shoes</title>
      <description>&lt;p&gt;e, very &lt;b&gt;&lt;a href="http://www.jordanzone.net/" rel="nofollow"&gt;Jordan 6 rings&lt;/a&gt;&lt;/b&gt; sorry. City Board of Education  &lt;b&gt;&lt;a href="http://www.jordanzone.net/" rel="nofollow"&gt;Jordan V&lt;/a&gt;&lt;/b&gt; learned &lt;b&gt;&lt;a href="http://www.jordanzone.net/" rel="nofollow"&gt;Air Jordan 9&lt;/a&gt;&lt;/b&gt; that the policy requiring students to military training is only popular &lt;b&gt;&lt;a href="http://www.jordanzone.net/" rel="nofollow"&gt;Jordan V&lt;/a&gt;&lt;/b&gt; in &lt;b&gt;&lt;a href="http://www.jordanzone.net/" rel="nofollow"&gt;Jordan Spizike&lt;/a&gt;&lt;/b&gt; high school, junior high school stage not required. There are some schools &amp;#8230;&lt;/p&gt;</description>
      <pubDate>Sat, 13 Aug 2011 04:21:39 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2824c2a8-89b5-409e-ae88-dc2aead9aead</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-127834</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by christian louboutin</title>
      <description>&lt;p&gt;&lt;a href="http://www.us-christianlouboutin.com/" rel="nofollow"&gt;http://www.us-christianlouboutin.com/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 23 May 2011 22:32:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:031a28fc-0408-4477-b283-054382923af7</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-103149</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by shoes christian louboutin</title>
      <description>&lt;p&gt;Fuck Sam Goody, Fuck FYE, PEace the FUCK OUT&lt;/p&gt;</description>
      <pubDate>Wed, 18 May 2011 23:37:28 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:32f02828-47dd-4900-b02f-a310946dcfa7</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-101559</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by christian louboutin</title>
      <description>&lt;p&gt;good produces!&lt;/p&gt;</description>
      <pubDate>Thu, 12 May 2011 21:47:51 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:819d2226-d6df-4937-bf4a-437b9ffbcbc8</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-98952</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by okey oyunu oyna </title>
      <description>&lt;p&gt;thanks
internette g&#246;r&#252;nt&#252;l&#252; olarak &lt;a href="http://www.okeyoyunu-oyna.com" rel="nofollow"&gt;okey oyunu oyna&lt;/a&gt;, ger&#231;ek kisilerle tanis,
 turnuva heyecanini yasa.&lt;/p&gt;</description>
      <pubDate>Thu, 28 Apr 2011 12:25:57 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1344949a-316e-4004-8776-1b2d4fb14f2e</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-92730</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by christian louboutin sales</title>
      <description>&lt;p&gt;Thank you! _&lt;/p&gt;</description>
      <pubDate>Mon, 18 Apr 2011 02:46:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0a6714c4-110c-40d4-b5ff-79a66d197e74</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-86434</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by chanel handbags for sale</title>
      <description>&lt;p&gt;sobbing.
how long has it been since i read a hikago doujin? one of dragonfly&amp;#8217;s scanlations too.&lt;/p&gt;</description>
      <pubDate>Mon, 18 Apr 2011 02:45:10 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:703946c7-97c1-4554-ac3c-b34a1291e36f</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-86428</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by mac cosmetics</title>
      <description>&lt;p&gt;Thanks for sharing~ 
I&amp;#8217;ve been obsessed with Hikaru no Go doujinshi recently and I came across your site. It was wonderful &amp;gt;&lt;em&gt;_&lt;/em&gt;&amp;lt;&lt;/p&gt;</description>
      <pubDate>Mon, 18 Apr 2011 02:43:58 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:16712b7b-55ce-4985-b508-d6fe2966159f</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-86426</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by Sheen Crow</title>
      <description>&lt;p&gt;This is an awesome article. Thanks for this. &lt;a href="http://www.kirkeyroofing.com/" rel="nofollow"&gt;roofing englewood&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 13 Apr 2011 01:18:42 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:51059fce-8268-4cba-b4d5-a0195ac6c3ab</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-83703</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by RolexReplica</title>
      <description>&lt;p&gt;It is advisable to own custom made Rolex Replicas to put on about any situation, be it unconventional as well as official. You might have reproduction watches, shopping watches several additional products.&lt;/p&gt;</description>
      <pubDate>Thu, 24 Mar 2011 02:54:03 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:36de53da-c2cf-45b0-939d-623a994dcf6c</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-75085</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by Polo Ralph Lauren</title>
      <description>&lt;p&gt;Podcast and TV Show from ipad to mac freely.&lt;/p&gt;</description>
      <pubDate>Thu, 24 Mar 2011 02:53:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4722f58a-0430-4cee-bea3-ac1c22c98c29</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-75084</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by ray ban</title>
      <description>&lt;p&gt;&lt;a href="http://www.raybanonsale.uk.com/" rel="nofollow"&gt;Ray Ban&lt;/a&gt; also has been a brand respected by the great numbers of sunglass wearers worldwide. The &lt;a href="http://www.raybanonsale.uk.com/" rel="nofollow"&gt;brand is extremely efficient for superior quality and design. Ray Ban UK &lt;/a&gt;has long been very trustworthy for its responsibility in the world. The&lt;a href="http://www.raybanonsale.uk.com/" rel="nofollow"&gt;designers of Ray Ban sunglasses&lt;/a&gt; take advantage of three different materials to make distinct designs- metal, plastic&lt;a href="http://www.raybanonsale.uk.com/" rel="nofollow"&gt; and titanium. Titanium frames by Ray Ban Sale &lt;/a&gt;became extremely famous due to their unique properties. These frames are hypo allergic, corrosion-resistant and nickel-free. These a href=&amp;#8221;&lt;a href="http://www.raybanonsale.uk.com/" rel="nofollow"&gt;http://www.raybanonsale.uk.com/&lt;/a&gt;&amp;#8221;&amp;gt;frames are versatile and best for any kind of environment and weather, whether it&amp;#8217;s hot, humid, cold or dry.&lt;/p&gt;</description>
      <pubDate>Sat, 19 Mar 2011 04:37:26 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c4d0acc7-1af8-4c51-b878-d319814f79a3</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-73906</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by iPad ePub Transfer for Mac</title>
      <description>&lt;p&gt;I really like this essay. Thank you for writing it so seriously.  I want to recommend it for my friends strongly. iPad ePub Transfer for Mac is a Professional transfer that can transfer the ePub books onto your iPad on Mac and export the iPad ePub to Mac local folder.&lt;/p&gt;</description>
      <pubDate>Wed, 02 Mar 2011 07:21:29 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f4f85207-ac60-46a0-b394-f8d90dcaa71e</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-68391</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by iPhone SMS to Mac Backup</title>
      <description>&lt;p&gt;Would you like to banckup iphone SMS to mac, macBook, macbookPro as .txt files? Now a software iphone SMS to Mac Backup can help you to realize it.&lt;/p&gt;</description>
      <pubDate>Wed, 02 Mar 2011 07:14:46 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c5f24e2a-dcc7-4391-aebf-20a3281babf2</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-68378</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by iPad to Mac Transfer</title>
      <description>&lt;p&gt;iPad to Mac Transfer can help you transfer music, movie, photo, ePub, PDF, Audiobook, Podcast and TV Show from ipad to mac freely.&lt;/p&gt;</description>
      <pubDate>Mon, 28 Feb 2011 03:10:06 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:19107c68-de10-4386-9034-c411e79a6bb7</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-67348</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by moncler</title>
      <description>&lt;p&gt;thanks for &lt;a href="http://www.monclerjacketsk2.com/" rel="nofollow"&gt;Moncler Jackets&lt;/a&gt; || &lt;a href="http://www.christianlouboutinysluk.com/" rel="nofollow"&gt;Christian louboutin UK&lt;/a&gt; || &lt;a href="http://www.monclerjacketsparka.com/" rel="nofollow"&gt;Moncler coats&lt;/a&gt; || &lt;a href="http://www.christianlouboutin120.com/" rel="nofollow"&gt;Christian louboutin shoes&lt;/a&gt; || &lt;a href="http://www.christianlouboutin-new.com/" rel="nofollow"&gt;Christian louboutin pumps&lt;/a&gt; your post!&lt;/p&gt;</description>
      <pubDate>Thu, 06 Jan 2011 09:20:18 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:882e9bfd-3b0a-419b-a567-44943a680a1e</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-54842</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by http://www.whiteiphone4transformer.com</title>
      <description>&lt;p&gt;If I got a chance, i will prefer buying the &lt;b&gt;iphone 4 white&lt;/b&gt; but not the iphone 4 Black. Who can tell me where is the white&lt;a href="http://www.whiteiphone4transformer.com" rel="nofollow"&gt; iphone 4 available&lt;/a&gt;? I would really want to take one.&lt;/p&gt;</description>
      <pubDate>Thu, 23 Dec 2010 21:09:41 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c2bc8b0f-252d-4877-905d-cd03f5554153</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-51584</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by pandora </title>
      <description>&lt;p&gt;An important feature about buying on the web is you&amp;#8217;re able to see everything the actual provides, whereby a store it is usually challenging type even so his or her products to locate the right thing. Moms really like products which are unforgettable. Attempt to found your mother using a surprise that may be personal, as a possible example a diamond ring applying their brand engraved within it. Gold bands lead to excellent items given that they immortalize your currentbrand in precious metal. A new gold pendant and also a pendant creates a great gifts on your mommy, as well as products which can be most often ignored .&lt;/p&gt;</description>
      <pubDate>Sat, 11 Dec 2010 01:33:54 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:78c1514a-5470-42cc-9f89-24f531d9cc3c</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-48169</link>
    </item>
    <item>
      <title>"Wormholes, FitNesse and the return of SetUp and TearDown links" by Pandora </title>
      <description>&lt;p&gt;It is my favorite patter name (not favorite pattern, just name).&lt;/p&gt;</description>
      <pubDate>Thu, 02 Dec 2010 02:17:33 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ca68c30f-35c3-44d4-9653-95cff964f3e2</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/16/wormholes-fitnesse-and-the-return-of-setup-and-teardown-links#comment-45251</link>
    </item>
  </channel>
</rss>

