<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Stephan Schwab - SpringFramework category</title>
  <link>http://www.stephan-schwab.com/categories/Frameworks/spring/</link>
  <description>Software Technology Consultant</description>
  <language>en</language>
  <copyright>Stephan Schwab</copyright>
  <lastBuildDate>Tue, 28 Oct 2008 21:32:43 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Starting to love EJB3 Hibernate Annotations</title>
    <link>http://www.stephan-schwab.com/2007/03/08/1173410671927.html</link>
    
      
        <description>
          &lt;p&gt;As our current project allows for some experimentation and adoption of recent technologies, we spent today with EJB3 Hibernate Annotations to get away from the XML configuration one used to create with Hibernate before.&lt;/p&gt;

&lt;p&gt;The annotations need to be placed in the same compilation unit as the entity class lives in. The result is that these POJOs now are no longer POJOs in a very tight sense. That has been &lt;a href=&#034;http://www.theserverside.com/discussions/thread.tss?thread_id=42447&#034;&gt;criticized&lt;/a&gt; as polluting the codebase with ORM specific annotations. That&#039;s certainly right, but one does not replace one ORM tool for another very often and going with the EJB3 Java Persistence annotation one can replace ORM tools, as Hibernate is just one implementation of that API. So I wouldn&#039;t fear too much. After all those classes that become entity classes are meant to be stored into a database and somewhere I have to put the mapping. Doing so in Java code instead of an external XML file appears to be clearer and more appealing to a developer.&lt;/p&gt;

&lt;p&gt;Here is something we learned today.&lt;/p&gt;

&lt;p&gt;Let&#039;s define a persistent entity class called &lt;code&gt;Issue&lt;/code&gt;.&lt;/p&gt;

&lt;pre class=&#034;codeSample&#034;&gt;@Entity
@Table(name=&#034;issue&#034;)
@NamedQueries( { @NamedQuery(name = &#034;findIssueById&#034;, query = &#034;from Issue i where i.id = ?&#034;) })
public class Issue implements IdentifiableObject {

  @Id @GeneratedValue
  private long id ;

[...]
}&lt;/pre&gt;

&lt;p&gt;This entity will be persisted into the table &lt;code&gt;issue&lt;/code&gt; and you see that it has an id field. Other fields are omitted for clarity. Further we define a named query &lt;code&gt;findIssueById&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In a generic DAO class using Spring&#039;s Hibernate template we create a method &lt;code&gt;findById&lt;/code&gt; as follows.&lt;/p&gt;

&lt;pre class=&#034;codeSample&#034;&gt;public Object findById(String query, long id) {
  List list = getHibernateTemplate().findByNamedQuery(query, id);
  if (list.isEmpty())
    return null ;
  else
    return list.get(0) ;
}&lt;/pre&gt;

&lt;p&gt;Elsewhere in the application we can the find any entity by calling findById passing in the name of the named query and of course the query criteria id.&lt;/p&gt;

&lt;pre class=&#034;codeSample&#034;&gt;Issue issueRead = (Issue) repository.findById(&#034;findIssueById&#034;, someId) ;&lt;/pre&gt;

&lt;p&gt;In your Spring application context configure your session factory using the &lt;code&gt;AnnotationSessionFactoryBean&lt;/code&gt;.&lt;/p&gt;

&lt;pre class=&#034;codeSample&#034;&gt;&amp;lt;bean id=&#034;mySessionFactory&#034; class=&#034;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean&#034;&amp;gt;
  &amp;lt;property name=&#034;dataSource&#034; ref=&#034;myDataSource&#034;/&amp;gt;
  &amp;lt;property name=&#034;hibernateProperties&#034;&amp;gt;
    &amp;lt;props&amp;gt;
      &amp;lt;prop key=&#034;hibernate.dialect&#034;&amp;gt;org.hibernate.dialect.HSQLDialect&amp;lt;/prop&amp;gt;
      [...]
    &amp;lt;/props&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property name=&#034;annotatedClasses&#034;&amp;gt;
    &amp;lt;list&amp;gt;
      &amp;lt;value&amp;gt;net.caimito.savila.Issue&amp;lt;/value&amp;gt;
    &amp;lt;/list&amp;gt;
  &amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;


&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2007/03/08/1173410671927.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2007/03/08/1173410671927.html&#034;
    dc:title=&#034;Starting to love EJB3 Hibernate Annotations&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1173410671927&amp;token=6993867599865084048&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>Java</category>
    
    <category>SpringFramework</category>
    
    <category>Experience</category>
    
    <category>Caimito</category>
    
    <category>Hibernate</category>
    
    <comments>http://www.stephan-schwab.com/2007/03/08/1173410671927.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2007/03/08/1173410671927.html</guid>
    <pubDate>Fri, 09 Mar 2007 03:24:31 GMT</pubDate>
  </item>
  
  <item>
    <title>Checking a bean&#039;s health</title>
    <link>http://www.stephan-schwab.com/2007/01/30/1170134573874.html</link>
    
      
        <description>
          &lt;p&gt;Sometimes the little details get overlooked. While I&#039;m working on my book about &lt;a href=&#034;http://www.acegisecurity.org&#034;&gt;Acegi Security&lt;/a&gt; I read a lot of its source code and that&#039;s always a refreshing learning experience. In fact I&#039;d like to recommend anyone to take advantage of open source and take it literally: read the source. It educates and stimulates.&lt;/p&gt;

&lt;p&gt;What did I find? Nothing big, but still something I had overlooked in a past project when I wanted to make sure that beans that were vital to the system have been properly initialized. In Spring there is the &lt;code&gt;InitializingBean&lt;/code&gt; interface, which defines the &lt;code&gt;afterPropertiesSet()&lt;/code&gt; method. Spring will call this method on all beans implementing this interface after it has set the bean&#039;s properties.&lt;/p&gt;

&lt;p&gt;Now you can use Spring&#039;s &lt;code&gt;Assert&lt;/code&gt; class to perform checks and have an exception thrown, if something is wrong. It&#039;s all built-in and free.&lt;/p&gt;

&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2007/01/30/1170134573874.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2007/01/30/1170134573874.html&#034;
    dc:title=&#034;Checking a bean&#039;s health&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1170134573874&amp;token=1662379037134051953&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>SpringFramework</category>
    
    <comments>http://www.stephan-schwab.com/2007/01/30/1170134573874.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2007/01/30/1170134573874.html</guid>
    <pubDate>Tue, 30 Jan 2007 05:22:53 GMT</pubDate>
  </item>
  
  <item>
    <title>[TSE] Meeting Requirements through Acceptance and Stress Testing</title>
    <link>http://www.stephan-schwab.com/2006/12/10/1165759065686.html</link>
    
      
        <description>
          &lt;p&gt;My fellow German developer Eberhard Wolff is speaking this morning about acceptance and stress testing to meet requirements.&lt;/p&gt;

&lt;p&gt;As an introduction he&#039;s wrapping up what Spring provides in the org.springframework.test package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acceptance Tests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now we are getting into Acceptance Tests. You use them to find errors in the implementation of business requirements or use cases. One can see them as formalized requirements. Unfortunately many times they are done manually and after the whole system has been developed. &lt;a href=&#034;http://fitnesse.org/&#034;&gt;Fit/FitNesse&lt;/a&gt; is a tool for acceptance tests. The customer and the developer should write the acceptance tests together - so does XP say. Fit/FitNesse uses HTML as input format. Test data and expected results are provided as HTML tables. You need to write a simple class as a wrapper for business logic, which can be injected using @Configurable. This class is then used to pass data into the test and check the results.&lt;/p&gt;

&lt;p&gt;Eberhard is working on a general &lt;a href=&#034;https://spring-fitnesse.dev.java.net/&#034;&gt;Fit Exporter for Spring&lt;/a&gt;. It&#039;s currently Alpha code.&lt;/p&gt;

&lt;p&gt;The SpringActionFixture can be used to test actions that are usually performed in a GUI. You specify input data and actions - e.g. press add button - and then look for results. In the HTML input file you use the expression &#034;press&#034; to call a method. So the UI stuff is left out, but the method that normally be called by the UI is now being called by FitNesse.&lt;/p&gt;

&lt;p&gt;One question from the audience is whether you can run Fit/Fitnesse as part of a Maven build. As it&#039;s a command line tool that should be no problem.&lt;/p&gt;

&lt;p&gt;Fit uses HTML &lt;strong&gt;files&lt;/strong&gt; as input. Fitnesse uses Wiki pages. Triggered by a question from the audience Eberhard opinions that probably Word documents that get exported to HTML are the best solution to get business people to provide test data and rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Tests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#034;http://jakarta.apache.org/jmeter/&#034;&gt;JMeter&lt;/a&gt; is a good tool to performance test web based applications. JMeter creates a large number of requests, but how do you measure the performance in the whole system. You want to measure each part of the system. Using a regular profiler for Java would not be sufficient for the purpose of performance tests, because it only focuses on the Java code itself. &lt;a href=&#034;http://jamonapi.sourceforge.net/&#034;&gt;JAMon&lt;/a&gt; is a monitoring framework, which offers a Spring interceptor. For web application you configure a filter in web.xml. The JAMon filter measures HTTP request/response. JAMon profiles method calls using AOP. JAMon can be used as well to profile other parts of the system by simply declaring other AOP aspects, e.g. you could use it to profile SQL queries.&lt;/p&gt;

&lt;p&gt;One could use JAMon &lt;em&gt;even in production&lt;/em&gt; as the overhead is very little. It can use exiting Pointcuts and Spring AOP proxies. &lt;/p&gt;


&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2006/12/10/1165759065686.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2006/12/10/1165759065686.html&#034;
    dc:title=&#034;[TSE] Meeting Requirements through Acceptance and Stress Testing&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1165759065686&amp;token=-3436354542006160367&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>SpringFramework</category>
    
    <category>TDD</category>
    
    <comments>http://www.stephan-schwab.com/2006/12/10/1165759065686.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2006/12/10/1165759065686.html</guid>
    <pubDate>Sun, 10 Dec 2006 13:57:45 GMT</pubDate>
  </item>
  
  <item>
    <title>[TSE] System Integration Testing with Spring</title>
    <link>http://www.stephan-schwab.com/2006/12/09/1165682594369.html</link>
    
      
        <description>
          &lt;p&gt;Fixing defects at a late stage in a project is more costly and causes more pain than doing it as early as possible.&lt;/p&gt;

&lt;p&gt;Testable code is good code. Testing is essential to agile processes. AOP helps to isolate concerns. Infrastructure can be left out of the business logic and hence makes testing the business logic easier or - in some cases - possible.&lt;/p&gt;

&lt;p&gt;Developers should take ownership of unit and integration tests and not rely on a QA function. A QA function is still needed, but developers should start testing while writing code. Many developers don&#039;t test the UI, which is bad. &lt;a href=&#034;http://jwebunit.sourceforge.net/&#034;&gt;JWebUnit&lt;/a&gt; can help with that for web applications.&lt;/p&gt;

&lt;p&gt;Rod stresses the importance of performance assurance and regression testing. &lt;a href=&#034;http://grinder.sourceforge.net/&#034;&gt;The Grinder&lt;/a&gt; is a free tool for load testing.&lt;/p&gt;

&lt;p&gt;Unit testing. Don&#039;t use Spring in a unit test. Do use mocks or stubs. Unit tests should run extremely fast. With mock objects you can create expectations. See &lt;a href=&#034;http://www.easymock.org/&#034;&gt;Easymock&lt;/a&gt; or &lt;a href=&#034;http://www.mockobjects.com/&#034;&gt;Mockobjects&lt;/a&gt;. Mock objects are great for service layer objects and domain objects and to test what happens in the event of a failure. A few things that make testing hard: static methods, final classes. You can&#039;t test in isolation: configuration, JDBC code or O/M mapping and how classes work together.&lt;/p&gt;

&lt;p&gt;Artifacts to test: service layer, domain objects, special cases such as aspects, web tier code, code containing SQL or other queries and code interacting with J2EE APIs. Non-Java code like stored procedures or triggers, database schema and views. O/R mappings, Spring configuration, JSPs and other view technologies. With Velocity you can test the without being tied to a container.&lt;/p&gt;

&lt;p&gt;In-Container testing with tools like Cactus is not the answer.&lt;/p&gt;

&lt;p&gt;Spring helps with the org.springframework.test package available in spring-mock.jar since Spring 1.1.1. Provides Spring context loading and caching, transaction management and - of course - dependency injection.&lt;/p&gt;

&lt;p&gt;Put things like the datasource and transaction manager declaration in configuration files of their own so you can use different ones for testing and production use.&lt;/p&gt;

&lt;p&gt;If you are on Java5 use AbstractAnnotationAwareTransactionalTests for tests.&lt;/p&gt;

&lt;p&gt;Use the JDBCTemplate exposed by the abstract classes to verify that the O/RM tool did what it&#039;s supposed to do.&lt;/p&gt;

&lt;p&gt;Test lazy loading with endTransaction()&lt;/p&gt;

&lt;p&gt;startNewTransaction() to test attach/detach in an ORM tool (merge() or saveOrUpdate()). Test locking strategies.&lt;/p&gt;

&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2006/12/09/1165682594369.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2006/12/09/1165682594369.html&#034;
    dc:title=&#034;[TSE] System Integration Testing with Spring&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1165682594369&amp;token=4896474251604115934&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>SpringFramework</category>
    
    <comments>http://www.stephan-schwab.com/2006/12/09/1165682594369.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2006/12/09/1165682594369.html</guid>
    <pubDate>Sat, 09 Dec 2006 16:43:14 GMT</pubDate>
  </item>
  
  <item>
    <title>[TSE] The Art of Domain Modeling</title>
    <link>http://www.stephan-schwab.com/2006/12/08/1165605818357.html</link>
    
      
        <description>
          &lt;p&gt;Now at the beginning of the afternoon it&#039;s Keith Donald&#039;s second talk about Domain Driven Design at The Spring Experience.&lt;/p&gt;

&lt;p&gt;Effective modeling is about creating a knowledge rich model with everything &lt;strong&gt;relevant&lt;/strong&gt; to the problem being solved. In order to achieve this one has to develop a common language so that everybody involved has a chance to stay on the same page. It&#039;s about brainstorming and experimenting using tools such as unit tests and the IDE. The idea is to write code very early, but for the time being leave questions of the infrastructure out.&lt;/p&gt;

&lt;p&gt;Domain experts and developers need to work together. Only I believe that most domain experts don&#039;t have the time to follow that approach. So in the end it will be about showing a simplistic prototype to them. Something that appears to be working, although underneath there is no functionality that can really be put into production. I see a few questions here.&lt;/p&gt;

&lt;p&gt;Once you understand enough of the domain problem, write some code. Focus on behavior, avoid all infrastructure. Then get some feedback from users. Again I see some questions here. The idea is certainly a good one, but will the users accept being shown something that is purely a simulation? Some non-technical people tend to expect real working software dealing with real data at an early stage. So here will be certainly some need to explain things to them.&lt;/p&gt;



&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2006/12/08/1165605818357.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2006/12/08/1165605818357.html&#034;
    dc:title=&#034;[TSE] The Art of Domain Modeling&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1165605818357&amp;token=6053906804375360503&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>SpringFramework</category>
    
    <comments>http://www.stephan-schwab.com/2006/12/08/1165605818357.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2006/12/08/1165605818357.html</guid>
    <pubDate>Fri, 08 Dec 2006 19:23:38 GMT</pubDate>
  </item>
  
  <item>
    <title>[TSE] The Building Blocks of Domain Driven Design</title>
    <link>http://www.stephan-schwab.com/2006/12/08/1165593898810.html</link>
    
      
        <description>
          &lt;p&gt;Keith Donald&#039;s talk at The Spring Experience has started. Right now he&#039;s summarizing what &lt;a href=&#034;/2006/12/08/1165587482609.html&#034;&gt;Eric&lt;/a&gt; told us before.&lt;/p&gt;

&lt;p&gt;A domain model does not capture every aspect of the real world. Instead it&#039;s a simplistic view of the world to serve a purpose. Discoveries during the implementation feed back into the model design.&lt;/p&gt;

&lt;p&gt;Isolate the domain by using a layered architecture. Do not mix UI, database, external services and business objects all together. The very same isolation allows unit testing and Spring helps in the wiring of the units.&lt;/p&gt;

&lt;p&gt;Keith shows a diagram with the user interface on top of the application and the application on top of the domain and everything on top of the infrastructure. The application layer delegates tasks to the domain layer for complex solutions.&lt;/p&gt;

&lt;p&gt;The domain layer represents business rules and states.&lt;/p&gt;

&lt;p&gt;The infrastructure layer interacts with the database, constructs UI widgets and deal with everything technical.&lt;/p&gt;

&lt;p&gt;The domain layer is to isolate the domain objects from other functions in the system to avoid mixing technical and domain concepts. One should bind the model the implementation early. Implement the behavior of the application within the domain model classes without thinking about the technical infrastructure. The resulting artifact is a unit test.&lt;/p&gt;

&lt;p&gt;In the beginning map domain entities literally to Java objects. Some of these mappings may be wrong in the end and you will need to refactor, but it&#039;s a start. Then start writing unit tests using those classes. Keith is now showing actual code of unit tests for his reward dining example.&lt;/p&gt;

&lt;p&gt;Organize domain behaviors into coarse-grain, high-level user operations. Make user operations part of the application layer. Unit tests in the domain layer are a good place to look for application layer use-cases. The application layer encapsulates complex domain layer objects and rules and allows for freedom in the implementation. After defining the boundaries of the application layer focus on streamlining the domain model implementation.&lt;/p&gt;

&lt;p&gt;Streamline associations between model objects. If you don&#039;t understand why an association is needed, avoid it. Association create coupling, which is generally to be avoided. Impose a traversal direction on associations.&lt;/p&gt;

&lt;p&gt;Entities, value objects and services. Often entities are persisted to a database. Entities maintain their identity that never changes. Entities may be used by other applications and need to be tracked. They have a life cycle and the model needs to define what it means to be the same thing. String entity objects down to the most intrinsic characteristics and only add required behavior and attributes needed for that behavior. For everything else add associated objects.&lt;/p&gt;

&lt;p&gt;Value objects are identified by their attributes and often they are interchangeable and transient. Value objects can be shared and are good candidates for immutability. They reduce bugs by avoiding invariants.&lt;/p&gt;

&lt;p&gt;Services are activities or actions, not a thing. A service is something that makes it happen and is stateless. Services should be thin coordinators and one should resist the urge to develop fat services that attempt to solve the problem all on their own. Look for natural opportunities to encapsulate behavior in services that doesn&#039;t make sense within Entities or Value Objects. The main responsibility of a service is to orchestrate things, to coordinate. It delegates to entities to do the work.&lt;/p&gt;

&lt;p&gt;The creation of Entities should be done using factories and repositories that restore an entity object from a persistent form. Services control and coordinate the life cycle of entities.&lt;/p&gt;

&lt;p&gt;Someone asked whether a repository isn&#039;t a service. Keith answers is that a repository is a DAO service, but with a very simple job. It doesn&#039;t coordinate work and therefore it wouldn&#039;t be justified to call it a service.&lt;/p&gt;

&lt;p&gt;Make sure that your factories and repositories return fully initialized objects to their callers.&lt;/p&gt;


&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2006/12/08/1165593898810.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2006/12/08/1165593898810.html&#034;
    dc:title=&#034;[TSE] The Building Blocks of Domain Driven Design&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1165593898810&amp;token=8633968590441734685&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>SpringFramework</category>
    
    <category>TDD</category>
    
    <comments>http://www.stephan-schwab.com/2006/12/08/1165593898810.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2006/12/08/1165593898810.html</guid>
    <pubDate>Fri, 08 Dec 2006 16:04:58 GMT</pubDate>
  </item>
  
  </channel>
</rss>
