<?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/"
	>

<channel>
	<title>lstierneyltd &#187; spring</title>
	<atom:link href="http://lstierneyltd.com/blog/tag/spring/feed/" rel="self" type="application/rss+xml" />
	<link>http://lstierneyltd.com/blog</link>
	<description>Yet another development blog</description>
	<lastBuildDate>Wed, 13 Jul 2011 12:55:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Unit Testing Validation in Annotation Based Validating Spring Beans</title>
		<link>http://lstierneyltd.com/blog/development/examples/spring-examples/unit-testing-validation-in-annotation-based-validating-spring-beans/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/spring-examples/unit-testing-validation-in-annotation-based-validating-spring-beans/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 08:57:07 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=245</guid>
		<description><![CDATA[Motivation I added validation, via annotations, to a Spring &#8220;Model&#8221; bean. I needed someway to Unit Test this validation, without running the container and without initialising the Spring context. The bean (simplified) The Unit Test More It actually took me a few hours to work the above test out (simple as it is). If I [...]]]></description>
			<content:encoded><![CDATA[<h3>Motivation</h3>
<p>I added validation, via annotations, to a Spring &#8220;Model&#8221; bean. I needed someway to Unit Test this validation, <em>without</em> running the container and <em>without</em> initialising the Spring context.</p>
<h3>The bean (simplified)</h3>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public final class ProductModel {

    @NotNull
    @Size(max=100)
    @Pattern(regexp=&quot;[^\n^\t^\r]+&quot;, message=&quot;Long Name must not contain New Lines, Carriage Returns or Tabs&quot;)
    private String longName;

    @Size(max=20)
    private String shortName;

    // rest snipped for brevity
}
</pre>
<h3>The Unit Test</h3>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import java.util.Set;

import javax.validation.ConstraintViolation;

import junit.framework.Assert;

import org.hibernate.validator.HibernateValidator;
import org.junit.Before;
import org.junit.Test;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

public class Temp {
    private LocalValidatorFactoryBean localValidatorFactory;

    @Before
    public void setup() {
        localValidatorFactory = new LocalValidatorFactoryBean();
        localValidatorFactory.setProviderClass(HibernateValidator.class);
        localValidatorFactory.afterPropertiesSet();
    }
    @Test
    public void testLongNameWithInvalidCharCausesValidationError() {
        final ProductModel productModel = new ProductModel();
        productModel.setLongName(&quot;A long name with\t a Tab character&quot;);
    	Set&lt;ConstraintViolation&lt;ProductModel&gt;&gt; constraintViolations = localValidatorFactory.validate(productModel);
    	Assert.assertTrue(&quot;Expected validation error not found&quot;, constraintViolations.size() == 1);
    }
}
</pre>
<h3>More</h3>
<p>It actually took me a few hours to work the above test out (simple as it is). If I hadn&#8217;t stumbled upon <a href="https://src.springsource.org/svn/spring-framework/trunk/org.springframework.context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java">these Spring Unit Tests</a>, I might never have got it.</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/spring-examples/unit-testing-validation-in-annotation-based-validating-spring-beans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC URI Template Example</title>
		<link>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-uri-template-example/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-uri-template-example/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 14:04:25 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=241</guid>
		<description><![CDATA[Background So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration. As I was trawling through the source code I noticed &#8220;some wierd&#8221; syntax: &#8220;/{xxxx}&#8221; (which of course I had to look up!). Most of the following is based upon the excellent Spring Documentation. [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration. As I was trawling through the source code I noticed &#8220;some wierd&#8221; syntax: &#8220;/{xxxx}&#8221; (which of course I had to look up!).</p>
<p>Most of the following is based upon the excellent <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib" target="_blank">Spring Documentation</a>. I&#8217;ve lifted and rewritten the parts I require to serve as a condensed &#8220;aide-mémoire&#8221;.</p>
<h3>Description</h3>
<p>A URI Template is a URI-like string, containing one or more variable names. When you substitute values for these variables, the template becomes a URI.<br />
<code><span id="more-241"></span></code><br />
For example, the URI Template</p>
<pre>http://foo.bar.com/products/{productName}</pre>
<p>contains the variable &#8220;productName&#8221;. If we assign the variable the value &#8220;widgetA&#8221;, the URI Template yields:</p>
<pre>http://foo.bar.com/products/widgetA</pre>
<h3>Example</h3>
<pre class="brush: java; title: ; notranslate">
@Controller
public class ProductController {
    @RequestMapping(value=&quot;/products/{productName}, method = RequestMethod.GET)
    public String getProductDetails(@PathVariable(&quot;productName&quot;) String productName, Model model) {
        Product product = this.productService.getProduct(productName);
        model.addAttribute(&quot;productDetails&quot;, product);
        return &quot;productDetailPage&quot;;
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-uri-template-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC 3 @ModelAttribute Annotation Example</title>
		<link>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-3-modelattribute-annotation-example/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-3-modelattribute-annotation-example/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 10:53:01 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=236</guid>
		<description><![CDATA[Background So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@ModelAttribute&#8221; annotation (which of course I had to look up!). If the above background seems familiar that&#8217;s because it&#8217;s the same [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@ModelAttribute&#8221; annotation (which of course I had to look up!).</p>
<p>If the above background seems familiar that&#8217;s because it&#8217;s the same as for a previous Spring Annotation post I made (ed: this is in danger of turning into a mini-series)</p>
<h3>Description</h3>
<p>Most of the following is based upon the excellent <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib" target="_blank">Spring Documentation</a>. I&#8217;ve simply lifted and rewritten the parts I require to serve as an &#8220;aide-mémoire&#8221;.</p>
<p>The @ModelAttribute annotation serves two purposes depending on how it is used:</p>
<p><code><span id="more-236"></span></code></p>
<h4>At Method level</h4>
<p>Use @ModelAttribute at the method level to <em>provide reference data for the model</em>. @ModelAttribute annotated methods are executed before the chosen @RequestMapping annotated handler method. They effectively pre-populate the implicit model with specific attributes, often loaded from a database. Such an attribute can then already be accessed through @ModelAttribute annotated handler method parameters in the chosen handler method, potentially with binding and validation applied to it.</p>
<p>In other words; a method annotated with @ModelAttribute will populate the specified &#8220;key&#8221; in the model. This happens BEFORE the @RequestMapping</p>
<h4>At Method Parameter level</h4>
<p>When you place @ModelAttribute on a method parameter, @ModelAttribute maps a model attribute to the specific, annotated method parameter. This is how the controller gets a reference to the object holding the data entered in the form.</p>
<h3>Examples</h3>
<h4>Method Level</h4>
<pre class="brush: java; title: ; notranslate">
@Controller
public class MyController {
    @ModelAttribute(&quot;productsList&quot;)
    public Collection&lt;Product&gt; populateProducts() {
        return this.productsService.getProducts();
    }
    // @RequestMapping etc omitted for brevity
}
</pre>
<p>So, in the above example, &#8220;productsList&#8221; in the Model is populated before the the @RequestMapping is performed.</p>
<h4>Method parameter level</h4>
<pre class="brush: java; title: ; notranslate">
@Controller
public class MyController {
    @RequestMapping(method = RequestMethod.POST)
    public String processSubmit(@ModelAttribute(&quot;product&quot;) Product myProduct, BindingResult result, SessionStatus status) {

        new ProductValidator().validate(myProduct, result);
        if (result.hasErrors()) {
            return &quot;productForm&quot;;
        }
        else {
            this.productsService.saveProduct(myProduct);
            status.setComplete();
            return &quot;productSaved&quot;;
        }
    }
}
</pre>
<p>In the above example &#8220;myProduct&#8221; is populated with the corresponding value from the Model.</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-3-modelattribute-annotation-example/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Spring MVC 3.x @PathVariable Annotation Example</title>
		<link>http://lstierneyltd.com/blog/development/spring-mvc-3-x-pathvariable-annotation-example/</link>
		<comments>http://lstierneyltd.com/blog/development/spring-mvc-3-x-pathvariable-annotation-example/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 13:41:09 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Examples]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=228</guid>
		<description><![CDATA[Background So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@PathVariable&#8221; annotation (which of course I had to look up!). Example Imagine you&#8217;d like to create a controller that would allow [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@PathVariable&#8221; annotation (which of course I had to look up!).</p>
<h3>Example</h3>
<p>Imagine you&#8217;d like to create a controller that would allow users to see view products by using a URL such as http://foo.bar.com/productDetails/someProduct</p>
<pre>
e.g.

http://foo.bar.com/productDetails/widgetA - display details for widgetA
http://foo.bar.com/productDetails/widgetB - display details for widgetB
</pre>
<p>The @PathVariable annotation makes this easy&#8230;</p>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;

@Controller
public class ShowProductController {

    @RequestMapping(&quot;/productDetails/{productName}&quot;) // Handle any request of the form &quot;/productDetails/XXXXX&quot;
    public String showProduct(Model model, @PathVariable(&quot;productName&quot;) String productName) {
        model.addAttribute(&quot;productName&quot;, productName);
        return &quot;showProduct&quot;; // viewname
    }
}
</pre>
<h3>What just happened?</h3>
<p>Note the {productName} in the @RequestMapping &#8211; this is the path variable. The @PathVariable annotation on the next line captures the value and binds it to the method argument</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/spring-mvc-3-x-pathvariable-annotation-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access a Spring Bean from within a Servlet</title>
		<link>http://lstierneyltd.com/blog/development/tips/access-a-spring-bean-from-within-a-servlet/</link>
		<comments>http://lstierneyltd.com/blog/development/tips/access-a-spring-bean-from-within-a-servlet/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 11:03:38 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[quick tips]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=196</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<pre class="brush: java; title: ; notranslate">
ApplicationContext context =
    WebApplicationContextUtils.getWebApplicationContext(getServletContext());
MyService service = (MyService) context.getBean(&quot;serviceBeanName&quot;);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/tips/access-a-spring-bean-from-within-a-servlet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit Testing Spring apps with @RunWith(SpringJUnit4ClassRunner.class)</title>
		<link>http://lstierneyltd.com/blog/development/examples/unit-testing-spring-apps-with-runwithspringjunit4classrunner-class/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/unit-testing-spring-apps-with-runwithspringjunit4classrunner-class/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 11:13:15 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Examples]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=153</guid>
		<description><![CDATA[The Problem I love Spring, who doesn&#8217;t? One thing however that I found, until recently, a bit awkward was Unit Testing objects which were constructed and initiated via the Spring context and injected into other objects that consumed them. I have seen and used many and varied &#8220;bespoke&#8221; ways to do this, none of which [...]]]></description>
			<content:encoded><![CDATA[<h4>The Problem</h4>
<p>I love <a href="http://www.springsource.org/" target="_blank">Spring</a>, who doesn&#8217;t?</p>
<p>One thing however that I found, until recently, a bit awkward was Unit Testing objects which were constructed and initiated via the Spring context and injected into other objects that consumed them. I have seen and used many and varied &#8220;bespoke&#8221; ways to do this, none of which I found satisfying.</p>
<p>This was until a <a href="http://andrew.montheheids.com" target="_blank">collegue</a> introduced me to the wonder that is <a href="http://static.springsource.org/spring/docs/2.5.x/reference/testing.html" target="_blank">SpringJUnit4ClassRunner</a>. I know, I know, I should have been aware of this ages ago but as they say on millionaire &#8220;it&#8217;s easy if you know the answer&#8221;!<br />
<code><span id="more-153"></span></code></p>
<h4>Solution</h4>
<p>A few lines of code speaks more than a thousand words from me&#8230;&#8230;</p>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={&quot;daos.xml&quot;})
public final class DaoTests {

    @Autowired
    private MyDao dao;

    @Test
    public void testLoadTitle() throws Exception {
        String result = dao.doSomething();
        assertNotNull(result);
    }
}
</pre>
<h4>Whats going on?</h4>
<p><strong><em>@RunWith(SpringJUnit4ClassRunner.class)</em></strong><br />
Quoting the docs: &#8220;SpringJUnit4ClassRunner is a custom extension of JUnit4ClassRunner which provides functionality of the Spring TestContext Framework to standard JUnit 4.4+ tests by means of the TestContextManager and associated support classes and annotations.&#8221;</p>
<p>Basically this means that tests are going to be able to get hold of instantiated beans as defined in the Spring context files (see below).</p>
<p><strong><em>@ContextConfiguration(locations={&#8220;daos.xml&#8221;})</em></strong><br />
This is telling the test where to get the context files containing the bean definitions. Note that if you do not provide any arguments to the annotation then a default will be looked for.</p>
<p>For example: If your class is named foo.bar.DaoTests, the context loader will attempt to load your application context from &#8220;classpath:/foo/bar/DaoTests-context.xml&#8221;.</p>
<p><strong><em>@Autowired</em></strong><br />
This will autowire BY TYPE, beans found in the context. Alternatively you could use @Resource to inject the dependencies by NAME (useful if several beans are of the same type)</p>
<h4>Conclusion</h4>
<p>Now it&#8217;s simply the case of adding a few annotations and a few imports to be able easily write tests which use Spring beans. All in all, a very unobtrusive (and fast) process.</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/unit-testing-spring-apps-with-runwithspringjunit4classrunner-class/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Use Quartz to schedule tasks in Spring</title>
		<link>http://lstierneyltd.com/blog/development/use-quartz-to-schedule-tasks-in-spring/</link>
		<comments>http://lstierneyltd.com/blog/development/use-quartz-to-schedule-tasks-in-spring/#comments</comments>
		<pubDate>Fri, 07 May 2010 16:47:56 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[How to's]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[quartz]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=87</guid>
		<description><![CDATA[Quartz is a full-featured, open source job scheduling service that can be integrated with, or used along side virtually any Java EE or Java SE application. In this simple example (notionally checking Twitter for updates) we integrate it with Spring. Spring Config &#60;bean name="checkTwitterForUpdates" class="org.springframework.scheduling.quartz.JobDetailBean"&#62; &#60;property name="jobClass" value="test.twitterReader" /&#62; &#60;/bean&#62; &#60;bean id="cronTwitterUpdateCheckTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean"&#62; &#60;property name="jobDetail" [...]]]></description>
			<content:encoded><![CDATA[<p>Quartz is a full-featured, open source job scheduling service that can be integrated with, or used along side virtually any Java EE or Java SE application.</p>
<p>In this simple example (notionally checking Twitter for updates) we integrate it with Spring.<br />
<code><span id="more-87"></span></code></p>
<h4>Spring Config</h4>
<pre>
&lt;bean name="checkTwitterForUpdates"
  class="org.springframework.scheduling.quartz.JobDetailBean"&gt;

       &lt;property name="jobClass" value="test.twitterReader" /&gt;
&lt;/bean&gt;

&lt;bean id="cronTwitterUpdateCheckTriggerBean"
  class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;

       &lt;property name="jobDetail" ref="checkTwitterForUpdates" /&gt;
       &lt;!-- Run every day at noon --&gt;
       &lt;property name="cronExpression" value="0 0 12 * * ?" /&gt;
&lt;/bean&gt;

&lt;bean id="scheduler"
  class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;

       &lt;property name="triggers"&gt;
           &lt;list&gt;
               &lt;ref bean="cronTwitterUpdateCheckTriggerBean" /&gt;
           &lt;/list&gt;
       &lt;/property&gt;
&lt;/bean&gt;
</pre>
<p>You may just want to call a method on an existing object (perhaps a business object). We can use MethodInvokingJobDetailFactoryBean to do just this:</p>
<p> Often you just need to invoke a method on a specific object. Using the MethodInvokingJobDetailFactoryBean you can do exactly this:</p>
<pre>
&lt;bean id="jobDetail"
  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;
    &lt;property name="targetObject" ref="someBusinessObject"/&gt;
    &lt;property name="targetMethod" value="someMethod"/&gt;
&lt;/bean&gt;
</pre>
<h4>Java</h4>
<pre>
package twitter;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class twitterReader extends QuartzJobBean {
    protected void executeInternal(JobExecutionContext ctx)
      throws JobExecutionException {

      // Like whatever.......
    }
}
</pre>
<h4>Libraries</h4>
<p>You can get get Quartz <a href="http://www.quartz-scheduler.org/">here</a></p>
<p>You may also need:<br />
<a href="http://www.slf4j.org/">Simple Logging Facade for Java (SLF4J)</a> and</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/use-quartz-to-schedule-tasks-in-spring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

