<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Articles published in category SeemoreJ | implements Elegance { // Elwyn Malethan's Blog</title>
  <link rel="alternate" type="application/html" href="http://www.malethan.com/all.html" />
  <link rel="self" type="application/atom+xml" href="http://www.malethan.com/all.xml" />
  <subtitle>Mostly technical articles involving (hopefully) elegant problem solving using Java and/or Ruby</subtitle>
  <updated>2009-07-06T20:00:00Z</updated>
  <dc:creator>Elwyn Malethan</dc:creator>
  <dc:date>2009-07-06T20:00:00Z</dc:date>
  <entry>
    <title>Publishing in multiple Formats using SeemoreJ</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/publishing_in_multiple_formats_using_seemorej.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-07-06T20:00:00Z</updated>
    <published>2009-07-06T20:00:00Z</published>
    <summary type="html">&lt;p&gt;I&amp;#8216;ve been really busy lately and have been neglecting my website and a bunch of other stuff besides. So this post is going to be brief.&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/breif_history.jpg" alt="" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;em&gt;... quite a lot more brief than that.&lt;/em&gt;&lt;/p&gt;

	&lt;h2&gt;Formats made easy using SeemoreJ&lt;/h2&gt;

	&lt;p&gt;&lt;em&gt;You could also say, Rails-style.&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;In this post I&amp;#8216;m going to be talking about how &lt;a href="http://www.malethan.com/article/seemorej.html" title=""&gt;SeemoreJ&lt;/a&gt; deals with deciding what format to present a resource in and how easy it is to display the same resource in multiple different formats.&lt;/p&gt;

	&lt;p&gt;The need for this was driven by my desire to provide a new feed for the articles on my website. That was straight forward and I just implemented a special case, which just spat out some &lt;span class="caps"&gt;XML&lt;/span&gt; and didn&amp;#8216;t forward on to a &lt;span class="caps"&gt;JSP&lt;/span&gt; view. This resulted in the following code for the &lt;strong&gt;list&lt;/strong&gt; action.&lt;/p&gt;

BlogController.java &lt;em&gt;(before)&lt;/em&gt;
&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;package&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;blog&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;app&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;BlogController&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ArticlePager&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;BeforeFilter&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;include&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;home&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;byCategory&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;byMonth&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;})&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;createPager&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pager&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ArticlePager&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setResultsPerPage&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;try&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setCurrentPageNumber&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Integer&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;valueOf&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;request&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getParameter&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;catch&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;NumberFormatException&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setCurrentPageNumber&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;setAttribute&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;pager&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;AfterFilter&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;include&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;home&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;byCategory&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;byMonth&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;})&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;initialisePager&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;try&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;initialise&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;catch&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Exception&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;error&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Pager&amp;nbsp;failed&amp;nbsp;to&amp;nbsp;initialise&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;list&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;html&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;equalsIgnoreCase&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;request&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getParameter&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;FORMAT&lt;/span&gt;&lt;span class="java_separator"&gt;)))&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;setAttribute&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sectionTitle&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;All&amp;nbsp;Articles&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;try&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Syndicate&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;syndicate&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Syndicate&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;RequestUtil&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getAppURL&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;request&lt;/span&gt;&lt;span class="java_separator"&gt;()));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;syndicate&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;syndicateBlog&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;atom_1.0&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;response&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getWriter&lt;/span&gt;&lt;span class="java_separator"&gt;());&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;renderNothing&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;catch&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;IOException&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;error&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Couldn't&amp;nbsp;produce&amp;nbsp;ATOM&amp;nbsp;feed&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;renderView&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;404&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;em&gt;A quick note on the &lt;code&gt;BeforeFilter&lt;/code&gt; and &lt;code&gt;AfterFilter&lt;/code&gt; annotated methods. These are a SeemoreJ feature that allow any arbitrary method to be invoked before and after any action. There'll be more on this in future posts.&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;Anyway, back to the subject at hand. The code above does the job but is not elegant. It did not please me to write it and it does not please me to look at it. It worked well enough and so this was the code for my site for a few months despite the fact that it did not really sit comfortably with me.&lt;/p&gt;

	&lt;h3&gt;A better solution&lt;/h3&gt;

	&lt;p&gt;I recently added SeemoreJ to &lt;a href="https://www.ohloh.net/p/seemorej" title=""&gt;ohloh&lt;/a&gt;. &lt;em&gt;I'm not really sure what ohloh is&lt;/em&gt;  or whether its going to be useful to me yet, or whether it has or will gain the critical mass of users to become a success. However, one of the features on there was to provide a news feed specifically for a project. So I figured I could just publish all the posts in the &lt;a href="http://www.malethan.com/category/SeemoreJ.html" title=""&gt;SeemoreJ&lt;/a&gt; category.&lt;/p&gt;

	&lt;p&gt;&lt;em&gt;This article is in danger of becoming something far more verbose and &amp;ndash; crucially &amp;ndash; not at all brief. So I'll cut to the chase.&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;I have added a feature to SeemoreJ that allows easy customisation of what format to deliver a resource in. Navigate to &lt;a href="http://www.malethan.com/all.html" title=""&gt;http://www.malethan.com/all.html&lt;/a&gt;, you get a HTML. However, navigate to &lt;a href="http://www.malethan.com/all.atom" title=""&gt;http://www.malethan.com/all.atom&lt;/a&gt;, you get &lt;span class="caps"&gt;XML&lt;/span&gt;. Atom &lt;span class="caps"&gt;XML&lt;/span&gt; to be precise.&lt;/p&gt;

	&lt;p&gt;This is achieved by having the view JSPs named in such a way that allows SeemoreJ to determine what format they represent. So I have a &lt;span class="caps"&gt;JSP&lt;/span&gt; called &lt;strong&gt;list.html.jsp&lt;/strong&gt; for HTML and &lt;strong&gt;list.atom.jsp&lt;/strong&gt; for Atom XML. Fans of &lt;a href="http://rubyonrails.org/" title=""&gt;Rails&lt;/a&gt; reading this will be familiar with the convention.&lt;/p&gt;

	&lt;p&gt;First, lets have a look at the relevant code in my controller class now. &lt;strong&gt;List&lt;/strong&gt; is now a one&amp;ndash;liner, specifying the title for the page/feed only.&lt;/p&gt;

BlogController.java &lt;em&gt;(after)&lt;/em&gt;
&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;package&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;blog&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;app&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;BlogController&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;list&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;setAttribute&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sectionTitle&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;All&amp;nbsp;Articles&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;To deliver any resource with Atom I just need to create an appropriately named &lt;span class="caps"&gt;JSP&lt;/span&gt; and let it deliver the content. So I have the following view &lt;span class="caps"&gt;JSP&lt;/span&gt; for my Atom feed&amp;#8230;&lt;/p&gt;

list.atom.jsp
&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;page&amp;nbsp;contentType&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;text/atom+xml;charset=UTF-8&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;language&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;java&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;page&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;com.malethan.blog.RequestUtil&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;page&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;com.malethan.blog.feed.Syndicate&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;page&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;com.malethan.blog.models.ArticlePager&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;title&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;request&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getAttribute&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sectionTitle&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;&amp;nbsp;|&amp;nbsp;implements&amp;nbsp;Elegance&amp;nbsp;{&amp;nbsp;//&amp;nbsp;Elwyn&amp;nbsp;Malethan's&amp;nbsp;Blog&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ArticlePager&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;pager&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;ArticlePager&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;request&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getAttribute&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;pager&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Syndicate&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;syndicate&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Syndicate&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;RequestUtil&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getAppURL&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;request&lt;/span&gt;&lt;span class="java_separator"&gt;));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;syndicate&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;syndicateArticles&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;atom_1.0&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;response&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getWriter&lt;/span&gt;&lt;span class="java_separator"&gt;(),&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getResults&lt;/span&gt;&lt;span class="java_separator"&gt;(),&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;title&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;... and this for the &lt;span class="caps"&gt;HTML &lt;/span&gt;&amp;#8230;&lt;/p&gt;

list.html.jsp
&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;page&amp;nbsp;contentType&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;text/html;charset=UTF-8&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;language&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;java&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;include&amp;nbsp;file&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;/WEB-INF/common/taglibs.jsp&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;html&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;head&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;title&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;include&amp;nbsp;file&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;/WEB-INF/app/blog/_title.jsp&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;title&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;head&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;body&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;div&amp;nbsp;id&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;wide&amp;quot;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;c&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;test&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;${empty(pager.results)}&amp;quot;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;p&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_type"&gt;Your&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;selection&amp;nbsp;has&amp;nbsp;resulted&amp;nbsp;in&amp;nbsp;a&amp;nbsp;page&amp;nbsp;with&amp;nbsp;no&amp;nbsp;articles&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Perhaps&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;you&amp;nbsp;would&amp;nbsp;like&amp;nbsp;to&amp;nbsp;look&amp;nbsp;at&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;/all.html&amp;quot;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;all&amp;nbsp;of&amp;nbsp;them&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;a&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;p&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;c&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;c&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;test&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;${!empty(pager.results)}&amp;quot;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;c&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;set&amp;nbsp;var&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;blogPosts&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;value&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;${pager.results}&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;pager&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;pages&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;${pager}&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="java_plain"&gt;@&amp;nbsp;include&amp;nbsp;file&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;_list.jsp&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;pager&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;pages&amp;nbsp;pager&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;${pager}&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;c&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;div&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;body&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_operator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="java_plain"&gt;html&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;So, as only somewhat briefly described, I can now syndicate &lt;a href="http://www.malethan.com/category/SeemoreJ.atom" title=""&gt;SeemoreJ&lt;/a&gt; posts alone to ohloh. It also means that all the other categories and the archive is similarly published.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-07-06T20:00:00Z</dc:date>
  </entry>
  <entry>
    <title>Introducing SeemoreJ: Part #2 CRUD</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/introducing_seemorej2.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-04-30T17:00:00Z</updated>
    <published>2009-04-30T17:00:00Z</published>
    <summary type="html">&lt;p&gt;&lt;img src="/uploads/images/seemorej_105.png" alt="" /&gt; In my &lt;a href="http://www.malethan.com/article/introducing_seemorej1.html" title=""&gt;last post about&lt;/a&gt; &lt;a href="http://www.malethan.com/article/seemorej.html" title=""&gt;SeemoreJ&lt;/a&gt; I gave an account of how one might bootstrap a new web project using the &lt;strong&gt;seemorej&amp;ndash;example&amp;ndash;archetype&lt;/strong&gt;. In this post I&amp;#8216;ll introduce how quick and easy it is to get a scaffolded &lt;acronym title="Create Read Update Delete"&gt;CRUD&lt;/acronym&gt; application up and running.&lt;/p&gt;

	&lt;p&gt;I&amp;#8216;ll do this by stepping through the creation of the &lt;code&gt;Person&lt;/code&gt; POJO (so pervasive in tutorials and demos), with &lt;a href="http://www.hibernate.org/" title=""&gt;Hibernate&lt;/a&gt;/JPA annotations as an example of a persistent model and &amp;ndash; in the process we&amp;#8216;ll cover the default configuration of database interaction.&lt;/p&gt;

	&lt;h2&gt;The model&lt;/h2&gt;

	&lt;p&gt;Create a package called &lt;code&gt;com.mycompany.model&lt;/code&gt; and add this class there.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;package&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;mycompany&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;model&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;org&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;hibernate&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;validator&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;NotEmpty&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;org&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;hibernate&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;validator&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Email&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;javax&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;persistence&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_operator"&gt;*&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;java&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;io&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Serializable&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;java&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;util&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Date&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;@&lt;/span&gt;&lt;span class="java_type"&gt;Entity&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Person&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;implements&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Serializable&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Long&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;id&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;firstName&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;lastName&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Date&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;dateOfBirth&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;emailAddress&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;Id&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;GeneratedValue&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;strategy&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;GenerationType&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;AUTO&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Long&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getId&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;id&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setId&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Long&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;id&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;id&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;id&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;NotEmpty&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getFirstName&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;firstName&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setFirstName&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;firstName&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;firstName&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;firstName&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;NotEmpty&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getLastName&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;lastName&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setLastName&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;lastName&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;lastName&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;lastName&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;Temporal&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;TemporalType&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;DATE&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Date&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getDateOfBirth&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;dateOfBirth&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setDateOfBirth&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Date&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;dateOfBirth&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;dateOfBirth&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;dateOfBirth&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;NotEmpty&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;Email&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getEmailAddress&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;emailAddress&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setEmailAddress&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;emailAddress&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;emailAddress&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;emailAddress&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;There&amp;#8216;s a lot of annotation in this &lt;span class="caps"&gt;POJO&lt;/span&gt;. Some for &lt;span class="caps"&gt;JPA&lt;/span&gt; persistence and some for &lt;a href="http://www.hibernate.org/hib_docs/validator/reference/en/html_single/" title=""&gt;Hibernate Validator&lt;/a&gt;, which the Hibernate specific SeemoreJ package uses as the validation framework. We&amp;#8216;ll see shortly what these validation annotations do for us.&lt;/p&gt;

	&lt;h2&gt;Persistence&lt;/h2&gt;

	&lt;h3&gt;Mapping&lt;/h3&gt;

	&lt;p&gt;Add this line to &lt;code&gt;hibernate.cfg.xml&lt;/code&gt; within the &lt;code&gt;session-factory&lt;/code&gt; element.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;mapping&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;class&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;=&lt;/span&gt;&lt;span class="xml_attribute_value"&gt;&amp;quot;com.mycompany.model.Person&amp;quot;&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;h3&gt;Database connection&lt;/h3&gt;

	&lt;p&gt;Now to configure the database connection. I&amp;#8216;m assuming you have MySQL installed and that this is what you&amp;#8216;re going to use. Find the following section in the &lt;span class="caps"&gt;POM &lt;/span&gt;(pom.xml) and change the values to something appropriate.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_comment"&gt;&amp;lt;!--&amp;nbsp;...&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;properties&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_comment"&gt;&amp;lt;!--&amp;nbsp;...&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;hibernate.dialect&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;org.hibernate.dialect.MySQL5InnoDBDialect&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;hibernate.dialect&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.groupId&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;mysql&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.groupId&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.artifactId&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;mysql-connector-java&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.artifactId&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.version&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;5.0.5&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.version&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.driverClassName&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;com.mysql.jdbc.Driver&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.driverClassName&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.url&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;jdbc:mysql://localhost/myapp?createDatabaseIfNotExist=true&amp;amp;amp;amp;useUnicode=true&amp;amp;amp;amp;characterEncoding=utf-8&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.url&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.username&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.username&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.password&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;jdbc.password&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml_tag_name"&gt;properties&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_comment"&gt;&amp;lt;!--&amp;nbsp;...&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;h2&gt;&lt;span class="caps"&gt;CRUD &lt;/span&gt;Scaffold&lt;/h2&gt;

	&lt;p&gt;Add the following class to the &lt;code&gt;com.mycompany.app&lt;/code&gt;. Whilst this is a great deal more verbose than it would be in Rails, this is all you need to have CRUD functionality for a Hibernate mapped class. It certainly beats implementing each action required. My intention is replace this &lt;em&gt;implementation inheritance&lt;/em&gt; with some sort of configuration, probably annotation. This would make the resulting controller classes &lt;a href="http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html" title=""&gt;more flexible and nicer to use&lt;/a&gt;.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;package&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;mycompany&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;app&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;seemorej&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;hibernate&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;crud&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;CrudControllerHibernate&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;mycompany&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;model&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Person&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;PeopleController&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;CrudControllerHibernate&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_type"&gt;Person&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Long&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;PeopleController&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;super&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Person&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Long&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Now start Jetty up using &lt;code&gt;mvn jetty:run-exploded&lt;/code&gt;. If you&amp;#8216;re running it for the first time you&amp;#8216;ll have to wait for all the dependencies to download. Once it&amp;#8216;s up and running got to http://localhost:8080/people/list.html&lt;/p&gt;

	&lt;p&gt;What you&amp;#8216;ll see is a rudimentary, fairly ugly &amp;ndash; if I&amp;#8216;m honest &amp;ndash; &lt;span class="caps"&gt;CRUD&lt;/span&gt; application. On my To&amp;ndash;do list is to make it more attractive and &amp;ndash; through configuration &amp;ndash; provide some customisation. Also, I&amp;#8216;d like to support one&amp;ndash;to&amp;ndash;many, many&amp;ndash;to&amp;ndash;many and many&amp;ndash;to&amp;ndash;one relationships.&lt;/p&gt;

	&lt;p&gt;In my next post about SeemoreJ I&amp;#8216;ll be talking about action &lt;em&gt;filters&lt;/em&gt; and how they&amp;#8216;re implemented in SeemoreJ.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-04-30T17:00:00Z</dc:date>
  </entry>
  <entry>
    <title>Introducing SeemoreJ: Part #1 Hello World</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/introducing_seemorej1.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-04-21T23:00:00Z</updated>
    <published>2009-04-21T23:00:00Z</published>
    <summary type="html">&lt;p&gt;&lt;img src="/uploads/images/seemorej_105.png" alt="" /&gt; I've been mentioning &lt;a href="http://www.malethan.com/article/seemorej.html" title=""&gt;SeemoreJ&lt;/a&gt; in passing for a while in my posts on here. I've mentioned that it is a &lt;strong&gt;yet another Java web framework&lt;/strong&gt; and that it is inspired by my experiences working with &lt;a href="http://rubyonrails.org/" title=""&gt;Ruby on Rails&lt;/a&gt; and &lt;a href="http://merbivore.com/" title=""&gt;Merb&lt;/a&gt; (soon to be one and the same thing). Also, there&amp;#8216;s a link at the bottom of every page. So I think it&amp;#8216;s high time I stopped faffing. It&amp;#8216;s in a pretty reasonable state now so I think it&amp;#8216;s time to release it as an open&amp;ndash;source project.&lt;/p&gt;

	&lt;p&gt;I hasten to add at this point that I am in no way under the illusion that SeemoreJ will become popular or attract (m)any users. I developed it because of my frustration with the verbose and heavyweight frameworks that were already available. I wanted to bring some of the simplicity and expressiveness that I experienced working with Ruby into my Java development.&lt;/p&gt;

	&lt;p&gt;Essentially, SeemoreJ allows me write web applications quickly, efficiently and pleasurably. That&amp;#8216;s my only motivation. If others find it useful or draw inspiration from it as well, that&amp;#8216;s a bonus.&lt;/p&gt;

	&lt;h1&gt;Getting started&lt;/h1&gt;

	&lt;p&gt;I think that one of the big facilitators in the uptake of rails is the &lt;strong&gt;easy bootstrapping&lt;/strong&gt; of your fist project, &lt;a href="http://rubyonrails.org/download" title=""&gt;this page&lt;/a&gt; makes it look friendly. So this section is going to be inspired by that page. &lt;em&gt;Well... without all the pretty graphics...&lt;/em&gt;&lt;/p&gt;

	&lt;h2&gt;Java&lt;/h2&gt;

	&lt;p&gt;I&amp;#8216;ve been using &lt;a href="http://java.sun.com/javase/downloads/index.jsp" title=""&gt;Java 6&lt;/a&gt; for my work. SeemoreJ will probably work with &lt;a href="http://java.sun.com/javase/downloads/index_jdk5.jsp" title=""&gt;Java 5&lt;/a&gt; just as well. Follow those links and follow the instructions for your platform.&lt;/p&gt;

	&lt;p&gt;Alternatively, if you have &lt;a href="http://www.ubuntu.com/" title=""&gt;Ubuntu&lt;/a&gt;, like me, the following whould do the trick.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;~$&amp;nbsp;sudo&amp;nbsp;apt-get&amp;nbsp;install&amp;nbsp;sun-java6-jdk&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;h2&gt;Maven&lt;/h2&gt;

	&lt;p&gt;&lt;a href="http://maven.apache.org/" title=""&gt;Maven&lt;/a&gt; is a build management tool (like Make and Rake), which I think will completely replace Ant as the build tool of choice for most Java developers. &lt;a href="http://maven.apache.org/download.html" title=""&gt;Get the latest version here&lt;/a&gt; then follow the installation instructions for your platform. Alternatively, if your using Ubuntu, just type&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;~$&amp;nbsp;sudo&amp;nbsp;apt-get&amp;nbsp;install&amp;nbsp;maven2&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Then check Maven is installed by running &lt;code&gt;mvn -v&lt;/code&gt;. You should see something like this.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;~$&amp;nbsp;mvn&amp;nbsp;-v&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;Maven&amp;nbsp;version:&amp;nbsp;2.0.8&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;Java&amp;nbsp;version:&amp;nbsp;1.6.0_06&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;OS&amp;nbsp;name:&amp;nbsp;&amp;quot;linux&amp;quot;&amp;nbsp;version:&amp;nbsp;&amp;quot;2.6.18-xenu&amp;quot;&amp;nbsp;arch:&amp;nbsp;&amp;quot;i386&amp;quot;&amp;nbsp;Family:&amp;nbsp;&amp;quot;unix&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;h2&gt;Starter application (or archetype)&lt;/h2&gt;

	&lt;p&gt;This is the Maven equivalent of running &lt;code&gt;rails my_app&lt;/code&gt;. It&amp;#8216;s a little more verbose but we&amp;#8216;ll only ever have to do it once per project.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;~$&amp;nbsp;mvn&amp;nbsp;archetype:generate&amp;nbsp;-DarchetypeCatalog=http://maven.malethan.com/repo/archetype-catalog.xml&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Select &lt;code&gt;seemorej-example-archetype&lt;/code&gt; from the list, this will probably be number &lt;strong&gt;1&lt;/strong&gt;, since I have no other archetypes there at the time of writing. Select a suitable &lt;code&gt;groupId&lt;/code&gt; &lt;em&gt;(e.g. com.mycompany)&lt;/em&gt; &lt;code&gt;artifactId&lt;/code&gt; &lt;em&gt;(e.g. myapp)&lt;/em&gt; and accept the defaults for the rest.&lt;/p&gt;

	&lt;p&gt;Now change into the project directory and type the following.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;~/myproject$&amp;nbsp;mvn&amp;nbsp;jetty:run-exploded&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Then visit http://localhost:8080/index.html&lt;/p&gt;

	&lt;p&gt;&lt;em&gt;Voila!&lt;/em&gt; You now have a running SeemoreJ application. Now let&amp;#8216;s have a look around the application source.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;|--&amp;nbsp;pom.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;`--&amp;nbsp;src&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;main&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;java&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;com&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;mycompany&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;HelloController.java&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;resources&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;hibernate.cfg.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;hibernate.properties&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;log4j.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;webapp&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;WEB-INF&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;app&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;default&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;default.jsp&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;hello&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;world.jsp&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;common&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;_flash.jsp&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;taglibs.jsp&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;decorators&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;application.jsp&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;decorators.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;urlrewrite.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;web.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|--&amp;nbsp;javascripts&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;prototype.js&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;stylesheets&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;application.css&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;production&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;resources&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`--&amp;nbsp;hibernate.properties&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;In my next post on the subject I&amp;#8216;ll show you how to set up a simple &lt;span class="caps"&gt;CRUD&lt;/span&gt; application, based on a Hibernate &lt;span class="caps"&gt;POJO&lt;/span&gt;. Also, at some point or other I&amp;#8216;ll create a project on Google Code, just in case anybody is interested in the source.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-04-21T23:00:00Z</dc:date>
  </entry>
  <entry>
    <title>SeemoreJ</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/seemorej.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2008-11-18T18:22:49Z</updated>
    <published>2008-11-18T18:22:49Z</published>
    <summary type="html">&lt;p&gt;&lt;img src="/uploads/images/seemorej_105.png" alt="" /&gt; SeemoreJ is a lightweight MVC2 framework that I have developed as a pet project. This site runs on SeemoreJ, amongst other things. "Another one!?" I can imagine some people exclaiming. SeemoreJ is different, honest! I've developed a lot of apps using &lt;a href="http://struts.apache.org/" title=""&gt;Struts&lt;/a&gt; 1 &amp;#38; 2 and I&amp;#8216;ve dabbled in some other Java-based &lt;span class="caps"&gt;MVC2&lt;/span&gt; frameworks. They all have one thing in common. They&amp;#8216;re all terribly verbose and somewhat obese.&lt;/p&gt;

	&lt;p&gt;SeemoreJ is open&amp;ndash;source and freely available under the &lt;a href="http://www.gnu.org/copyleft/lesser.html" title=""&gt;LGPL&lt;/a&gt; on &lt;a href="http://code.google.com/p/seemorej/" title=""&gt;Google Code&lt;/a&gt;.&lt;/p&gt;

	&lt;h2&gt;Verbose? Obese?&lt;/h2&gt;

	&lt;p&gt;The one thing that strikes me with the majority of the popular Java web-frameworks is how much effort one has to go just to say &amp;#8220;Hello World!&amp;#8221;. The number of files that need creating because of how few assumptions are made is a real hindrance to a quick bootstrapping of a new project, Even one as simple as &lt;em&gt;Hello World&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;I have also developed a number of apps using &lt;a href="http://www.rubyonrails.org/" title=""&gt;Rails&lt;/a&gt; and &lt;a href="http://www.merbivore.com/" title=""&gt;Merb&lt;/a&gt;. I have my issues with both of these but the one thing they are good at is allowing a developer to concisely and quickly build web applications. This is because that while these two frameworks aren&amp;#8216;t limited in their configurability (well, ActiveRecord is useless for legacy data and Rails more or less requires that you use it) they do make a lot of sensible assumptions that allow a developer to just get on with things. That is my main motivation in developing SeemoreJ.&lt;/p&gt;

	&lt;p&gt;I initially implemented &lt;a href="http://seemore.sourceforge.net/" title=""&gt;Seemore in PHP&lt;/a&gt; just as an experiment, but quickly rediscovered why I hated developing in PHP (I had a job as a PHP developer for 2 years) so I ported it to Java. I've got a lot to do before it can be considered anywhere near a viable alternative to the current crop of MVC2 frameworks. I'm currently working on a simple annotation-based validation framework (I'm currently using &lt;a href="http://www.hibernate.org/412.html" title=""&gt;Hibernate Validator&lt;/a&gt; for this) and &lt;em&gt;automagic&lt;/em&gt; request to bean population, which will lead on to a &lt;a href="http://mr.hamptoncatlin.com/" title=""&gt;make_resourceful&lt;/a&gt;-style autoCRUD and scaffolding. When I think it is worthy of public view I&amp;#8216;ll make it available for feedback and the critique of my peers.&lt;/p&gt;

	&lt;p&gt;As a quick illustration of how concise SeemoreJ allows one to be when developing web applications, below is an extract from the controller class for basic &lt;acronym title="Create, Read, Update and Delete"&gt;CRUD&lt;/acronym&gt; functionality.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;package&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;blog&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;app&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;seemorej&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_operator"&gt;*&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;static&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;seemorej&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;HttpMethod&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_operator"&gt;*&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;static&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;seemorej&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;SeemoreJ&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;request&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;static&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;seemorej&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;SeemoreJ&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;response&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;&amp;lt;p&amp;gt;Controller&amp;nbsp;for&amp;nbsp;the&amp;nbsp;website&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;BlogController&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//-----------------------------------------------------------------------&amp;nbsp;Filters&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;BeforeFilter&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;loadPageArtifacts&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;BeforeFilter&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;include&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;new&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;clearSesssion&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//-----------------------------------------------------------------------&amp;nbsp;Actions&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;list&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;show&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;edit&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;Accepts&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;method&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;POST&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;delete&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;Accepts&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;method&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;POST&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;update&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/span&gt;&lt;span class="java_type"&gt;Accepts&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;method&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;POST&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;create&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;/*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;A controller is usually a &lt;span class="caps"&gt;POJO&lt;/span&gt; where each action is a public method. By default, a &lt;span class="caps"&gt;JSP&lt;/span&gt; view of the same name will be looked for to render for the action.&lt;/p&gt;

	&lt;p&gt;Common tasks that need to run before and after actions are configured using Annotations &lt;code&gt;BeforeFilter&lt;/code&gt; and &lt;code&gt;AfterFilter&lt;/code&gt; respectively.&lt;/p&gt;

	&lt;p&gt;An &lt;code&gt;Accepts&lt;/code&gt; annotation can be used to limit the &lt;span class="caps"&gt;HTTP&lt;/span&gt; method allowed for a given action.&lt;/p&gt;

	&lt;p&gt;When I have some time I&amp;#8216;ll give a more comprehensive account of what SeemoreJ is and how it works.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2008-11-18T18:22:49Z</dc:date>
  </entry>
</feed>







