<?xml version="1.0" ?>
<?xml-stylesheet href="" type="text/css"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
         xmlns:rss="http://purl.org/rss/1.0/"
         xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <rss:channel rdf:about="http://mostmedia.com/blogs">

        <rss:title>Blogs</rss:title>
        <rss:link>http://mostmedia.com/blogs</rss:link>

        <rss:description>Some thoughts about the trade</rss:description>
        

        <rss:image rdf:resource="http://mostmedia.com/logo.png"/>

        <sy:updatePeriod>daily</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>

        <rss:items>
            <rdf:Seq>
                
                <rdf:li rdf:resource="http://mostmedia.com/blogs/archive/2009/01/08/faster-cheaper-crappier"/>
                
                
                <rdf:li rdf:resource="http://mostmedia.com/blogs/archive/2007/12/07/web-ui-best-practices"/>
                
                
                <rdf:li rdf:resource="http://mostmedia.com/blogs/archive/2007/11/19/rails-slow"/>
                
                
                <rdf:li rdf:resource="http://mostmedia.com/blogs/archive/2006/08/03/java-development-stack-acronymony"/>
                
            </rdf:Seq>
        </rss:items>
    </rss:channel>

    <rss:image rdf:about="http://mostmedia.com/logo.png">
        <rss:title>Blogs</rss:title>
        <rss:link>http://mostmedia.com/blogs</rss:link>
        <rss:url>http://mostmedia.com/logo.png</rss:url>
    </rss:image>

    

    <rss:item rdf:about="http://mostmedia.com/blogs/archive/2009/01/08/faster-cheaper-crappier">

        <rss:title>Faster, Cheaper, Crappier</rss:title>

        <rss:link>http://mostmedia.com/blogs/archive/2009/01/08/faster-cheaper-crappier</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
&lt;p&gt;I've noticed many people on the web bemoaning the lack of development tools for SharePoint.&lt;/p&gt;
&lt;p&gt;I say embrace the crappiness.&amp;nbsp; The SharePoint value proposition, for my clients anyway, is that they can get highly functional software for a fraction of the cost of developing from scratch.&amp;nbsp; By fraction, I mean fraction, 10-15% of what it would cost to create something from scratch.&lt;/p&gt;

          ]]>
        </content:encoded>        

        <dc:date>2009-01-08T16:24:08-05:00</dc:date>

        <dc:modified>2009-01-08T16:24:08-05:00</dc:modified>

        <dc:creator></dc:creator>

        

        
            <dc:subject>agile</dc:subject>
        
        
            <dc:subject>SharePoint</dc:subject>
        
        
            <dc:subject>web development</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://mostmedia.com/blogs/archive/2007/12/07/web-ui-best-practices">

        <rss:title>Clients without Code!</rss:title>

        <rss:link>http://mostmedia.com/blogs/archive/2007/12/07/web-ui-best-practices</rss:link>       

        <rss:description>Web UI best practices, to the extent that practice makes perfect.</rss:description>

        <content:encoded>
          <![CDATA[
          
&lt;p&gt;How many times has someone slaved over a web page with complex server side code embedded in it.&amp;nbsp; This page is passed over to a front end engineer. Next day you update your project from the repository and suddenly all the server side code is broken.&lt;/p&gt;
&lt;p&gt;How many times does a simple change in presentation require getting a hold of the server side engineer to make the change even though it's trivial.&lt;/p&gt;
&lt;p&gt;The problem is our primary artifact, the web page, consists of markup/code from three domains.&amp;nbsp; The html/csss markup that governs presentation, javascript code that can govern both client side interaction and server communication, and server side markup/code like jsp/asp/rhtml/velocity/freemarker.&lt;/p&gt;
&lt;p&gt;Often this mix results in the most modern and up to date spaghetti code where it is difficult to determine what is happening and where (especially as an app evolves over time).  Plus you have pages that won't
render outside of a complex test environment, resulting in some of your team members flying blind when making changes.&lt;/p&gt;
&lt;p&gt;After some initial resistance, a front end guy I work with recently&amp;nbsp; picked up &lt;a title="external-link" href="http://velocity.apache.org/"&gt;velocity templating&lt;/a&gt;.&amp;nbsp; But I think this was an exceptional situation.&amp;nbsp; To expect that he also pick up enough&amp;nbsp; jsp, struts, tapestry,rhtml, etc., etc, etc. to render a model or at least not to &amp;amp;%@#-up my server side code, is neither reasonable or desirable (though it would make my life infinitely better on legacy projects). Carlos, are you listening?&lt;/p&gt;
&lt;p&gt;To counter these tendencies, I've been moving towards a style of web development which aims at a clean separation of concerns
between tiers/technologies/ and project roles. I call it "&lt;strong&gt;No code at all in the client!&lt;/strong&gt;"&lt;/p&gt;
&lt;p&gt;In this approach, the web tier contains nothing but html and css. The Wicket framework is a good example of this way of doing things.&amp;nbsp; Here is the markup for a complex ajax page with lots of linked form elements:&lt;/p&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" &amp;gt;
&amp;lt;wicket:panel&amp;gt;
&amp;lt;p&amp;gt;Grant Access&amp;lt;/p&amp;gt;
&amp;lt;form wicket:id="accessForm" &amp;gt;
Select Department;&amp;lt;select wicket:id="selectedDepartment"&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;br/&amp;gt;
Select name:&amp;lt;select wicket:id="selectedUser"&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;input type="submit" value="Add" wicket:id="ajax-button"/&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;p&amp;gt; The following accounts have been granted access to work on your behalf for your projects:&amp;lt;/p&amp;gt;
&amp;lt;form wicket:id="grantedForm" &amp;gt;
&amp;lt;select wicket:id="grantedUsers"/&amp;gt;
&amp;lt;input type="submit" value="Remove" wicket:id="ajax-button"/&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;p&amp;gt;The following users have requested access to your account's projects, pending your approval. 
Select whether to approve each account.&amp;lt;/p&amp;gt;
&amp;lt;form wicket:id="requestedForm" &amp;gt;
&amp;lt;select wicket:id="requestedUsers"/&amp;gt;
&amp;lt;input type="submit" value="Approve Accces" wicket:id="approve"/&amp;gt;
&amp;lt;input type="submit" value="Deny Accces" wicket:id="deny"/&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/wicket:panel&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;This page will render properly in any browser. Css styles&amp;nbsp; be applied to it, and additional javascript functionality added,&amp;nbsp; without any risk of breaking the server side interaction. The complete form functionality is specified server side, taken care of in java.&amp;nbsp; Here's an example of adding a dropdown list to a form that updates the contents of another dropdown via AJAX when its selection changes:&lt;/p&gt;
&lt;pre&gt;departmentList.add(new AjaxFormComponentUpdatingBehavior("onchange") {
&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; protected void aonUpdate(AjaxRequestTarget target) {&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; target.addComponent(UIHelpers.resetDropDown(userList, 
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; userManager.fetchForDepartment ( (Department)departmentList.getModel().getObject())));&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;/pre&gt;
&lt;p&gt;A more radical version of this approach is to generate all the output server side and display it on the client via embedded script tags (like in this example from the R2J feed from CNET:&lt;/p&gt;
&lt;pre&gt;&lt;a title="external-link" href="http://i.i.com.com/cnwk.1d/html/export/r2j/News-19.html"&gt;&amp;lt;script src='http://i.i.com.com/cnwk.1d/html/export/r2j/News-19.html'&amp;gt;&amp;lt;/script&amp;gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;If you follow the link, you'll notice that it returns a javascript snippet that renders an rss feed in html. Here's a part of it:&amp;nbsp;&lt;/p&gt;
&lt;pre id="line1"&gt;document.write('&amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"r2j-feed"&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"r2j-title"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;span class="start-tag"&gt;a&lt;/span&gt;&lt;span class="attribute-name"&gt; href&lt;/span&gt;=&lt;span class="attribute-value"&gt;"http://www.news.com/&amp;amp;tag=r2j"&lt;/span&gt;&amp;gt;CNET News.com&amp;lt;/&lt;span class="end-tag"&gt;a&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span class="end-tag"&gt;div&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"r2j-tdesc"&lt;/span&gt;&amp;gt;Tech news and business reports by CNET News.com. &lt;br /&gt;Focused on information technology, core topics include computers, hardware, &lt;br /&gt;software, networking, and Internet media.&amp;lt;/&lt;span class="end-tag"&gt;div&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;span class="start-tag"&gt;div&lt;/span&gt;&lt;span class="attribute-name"&gt; id&lt;/span&gt;=&lt;span class="attribute-value"&gt;"r2j-head"&lt;/span&gt;&amp;gt;...');&lt;/pre&gt;
&lt;p&gt;The HTML developer can style the emitted content and there's almost no danger at all of breaking the&amp;nbsp; client-server interaction.&amp;nbsp; The web page can be deployed on any web server (no need for Tomcat, Rails, or whatever) and it can get its dynamic data from any other server on the internet without the need to worry about cross-site scripting issues. Richer interactivity can be gotten by passing JSON messages back and forth with javascript.&amp;nbsp; I've been increasingly using this style of development for clients with minimal IT expertise and infrastructure. If &amp;nbsp; A full featured featured web app can be deployed on a $10 a month Go-Daddy account with the back end provided by one of my hosted servers or one in the EC2 cloud.&lt;/p&gt;

          ]]>
        </content:encoded>        

        <dc:date>2007-12-07T13:22:42-05:00</dc:date>

        <dc:modified>2007-12-07T23:35:08-05:00</dc:modified>

        <dc:creator></dc:creator>

        

        
            <dc:subject>java-development</dc:subject>
        
        
            <dc:subject>web development</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://mostmedia.com/blogs/archive/2007/11/19/rails-slow">

        <rss:title>Rails Slow</rss:title>

        <rss:link>http://mostmedia.com/blogs/archive/2007/11/19/rails-slow</rss:link>       

        <rss:description>Processor cycles are cheap, developer cycles are dear.  Until you run the unit tests.</rss:description>

        <content:encoded>
          <![CDATA[
          
&lt;p&gt;Love Ruby!&lt;/p&gt;
&lt;p&gt;It's a little bit scary not being to lean on the compiler for things parameter type checking, but the Rubyistas assure me I'll get used to it. Being used to writing a lot of unit tests helps.&lt;/p&gt;
&lt;p&gt;So I start my first Rails app.&amp;nbsp; Loving Ruby! Happy to use the equals operator instead of endless getters and setters. Happy to use duck typing instead of extracting another interface when I want to treat things polymorphically. A little sad to have to learn yet another markup language for the HTML templates.&lt;/p&gt;
&lt;p&gt;So I write some tests and I write some code (sometimes I do it the other way around).&lt;/p&gt;
&lt;p&gt;Lo, as soon as I require '/../test_helper' and run my rake task, the testing harness takes nearly a full minute to initialize. This happens every time! In contrast, I have an asp.net app with 200 tests, half of which, regenerate the database schema between runs. Everything&amp;nbsp; runs in well under a minute.&lt;/p&gt;
&lt;p&gt;I've only see a few posts on the internet complaining about the Rails test fixtures. Using a statically typed language I'm used to running my unit test suite after almost every change to my code.&amp;nbsp; With Ruby I only want to do this more often.&amp;nbsp; A friend says that he likes Rails because it makes him do all the things he wouldn't do as a Perl hacker, separate concerns, write tests. Can it be that most&amp;nbsp; Rails developers don't actually run their tests?&lt;/p&gt;
&lt;p&gt;I found myself writing tests (designing my software) so as to avoid requiring&amp;nbsp;  '/../test_helper'.&amp;nbsp; This doesn't seem good. What the language and Rails gave, the pokeyness of the test harness took away.&lt;/p&gt;
&lt;p&gt;I see that there are ways around this: &lt;a title="external-link" href="http://blog.jayfields.com/2006/06/ruby-on-rails-unit-tests.html"&gt;http://blog.jayfields.com/2006/06/ruby-on-rails-unit-tests.html&lt;/a&gt;. But us this something an average Rails developer will do?&amp;nbsp; And eventually you are going to write tests that hit against the database, whether you call them unit tests or not.&lt;/p&gt;
&lt;p&gt;It seems like a deal breaker to me, but no one else seems to have noticed.&lt;/p&gt;

          ]]>
        </content:encoded>        

        <dc:date>2007-11-19T00:38:48-05:00</dc:date>

        <dc:modified>2007-12-06T17:31:53-05:00</dc:modified>

        <dc:creator></dc:creator>

        

        
            <dc:subject>Ruby</dc:subject>
        
        
            <dc:subject>web development</dc:subject>
        
        
            <dc:subject>Rails</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://mostmedia.com/blogs/archive/2006/08/03/java-development-stack-acronymony">

        <rss:title>Java Development Stack Acronymony</rss:title>

        <rss:link>http://mostmedia.com/blogs/archive/2006/08/03/java-development-stack-acronymony</rss:link>       

        <rss:description>The buzz has it that Java is old hat for web development, that'll it'll soon be eclipsed by LAMP stack or more likely Ruby on Rails. Yet for the kind of applications I'm often called on to deliver, something on which a pure-play internet start-up might run its business, I find myself turning to Java more and more. </rss:description>

        <content:encoded>
          <![CDATA[
          &lt;p&gt;Maybe the problem is the embarrassment of riches.  You can choose between a half  dozen open source and proprietary frameworks for most everything a typical application needs to do: object relational mapping, creating web pages, consuming web services, templating.  There's so much code out there that if you're writing a lot of your own, you're probably doing something wrong.  But it certainly makes it difficult to come up with an acronym.  In this post I'm going to describe a Java development stack that I think as productive as anything  out there.  As for an acronym, I'll probably proppose a algorithm for constructing them, but will leave the any serious acronym development work as an exercise the to the reader.&lt;br /&gt;  &lt;/p&gt;
&lt;p&gt; Spring and Hibernate have become truly indispensable to me in my development practice, enabling me to deliver ever more significant applications faster and with less and less effort. It seems like I'm in touch with the zeitgeist on this. I see scores of web-sites, blogs, and books touting "better, faster, lighter" Java.  I even use them for my .net projects and there's more and more interest in spring and hibernate within that community as well.&lt;/p&gt;
&lt;h3 class="Subheading"&gt;Spring&lt;/h3&gt;
&lt;p&gt;At first I was skeptical about Spring. Inversion of
control, composition, and declarative programming  are things every
competent developer eventually discovers as they enable you to write
easily testable and extensible systems with a minimum of fuss. I guess
I was jealous of my secret sauce (you can read about some of my reservations on
the &lt;a href="http://forum.springframework.net/showthread.php?t=130" target="_blank"&gt;spring.net discussion list&lt;/a&gt;. However, in the last year I've been
compelled by the excellent Hibernate and JDBC templates, easy to use annotation based transaction support, aspect
oriented programming features, and now the ability to do asynchronous messaging. I can scarcely imagine creating a java application without it.&lt;/p&gt;
&lt;h3 class="Subheading"&gt;Hibernate&lt;/h3&gt; 
&lt;p&gt;When circumstances allow,  I'll choose Hibernate for object relational mapping.  Hibernate just does its job well, especially with
release 3  and the ability to directly annotate domain
classes instead of creating xml mapping files. I needed little
prompting to give up both entity beans and  my home-grown persistence
layer.  Of course where there's no need to back a significant domain model with a relational database, Hibernate drops out of the equation as do any of the other java mapping tools I could have picked.  Still, applications are so commonly backed by a database that an ORM component has to be considered as a core part of any java development stack. I think Hibernate has reached a tipping point in terms of popularity, to where it's the de facto standard for java ORM; much in the same was as Struts has been the standard for the web tier.&lt;/p&gt;
&lt;h3 class="Subheading"&gt;ActiveMQ&lt;/h3&gt;
&lt;p&gt;Most significant applications can benefit from a dose of asynchronicity. Nothing makes separation of concerns easier to implement on the back end. In addition  to ensuring a reliable connection to external systems, JMS functions as an application service bus which, combined with the sort of &lt;a href="http://www.javaworld.com/javaworld/jw-04-2005/jw-0411-spring.html" target="_blank"&gt;workflows you can create with Spring&lt;/a&gt;, gives you the hooks you need to easily evolve an application over time.&lt;/p&gt;&lt;p&gt;There are many propprietary JMS implementations, but ActiveMQ is fast, free and supports clustering, peer networks, discovery, TCP, SSL, multicast, persistence, and XA transactions. It also integrates with scripting languages and crosses the .net divide via Open Wire.&lt;br /&gt;&lt;/p&gt;&lt;h3 class="Subheading"&gt;Tomcat&lt;/h3&gt;
&lt;p&gt;Until recently I'd almost always recommend a full-blown J2EE server to
my clients for two reasons.  None of the open source JMS
implementations seemed truly ready for prime time, so you'd use one
that came with a proprietary server like WebSphere, WebLogic, or
Oracle. Or you'd use JBoss.  Plus it always seemed to me that message
driven beans seemed like the most elegant wrapper
around JMS (and the only part of the J2EE spec that seemed worth
holding onto for my purposes).  With the maturation of ActiveMQ and Spring 2.0 providing a nice
wrapper around JMS we can eliminate the J2EE container for the vast majority of applications.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Why not use Tomcat? It's ubiquitous
and free and perfornance is very good in the latest versions.  If you
don't like Tomcat, try Jetty.&lt;br /&gt;&lt;/p&gt;

&lt;h3 class="Subheading"&gt;Wicket?&lt;/h3&gt;
&lt;p&gt;This brings me to a crucial point. I develop primarily
apps with a web gui, and if there's' one thing that's been horribly broken in the
Java space, it's the web tier. I've dealt with the situation two ways.
When I can, I run away from it and concentrate on server side coding
where java seems to give me super powers.  Still, as often as not, I'll 
inherit Struts application whose owners seem surprised when the only
answer I can give them to an interminably long list of new features is "You
can't get there from here, at least not easily."  Even when I get to select
the web tier technology I haven't found anything with the same power
and elegance Spring and Hibernate provide me in their respective
domains. &lt;/p&gt;
&lt;p&gt;Things may have changed. A few weeks ago I stumbled on a development framework called &lt;a href="http://wicket.sourceforge.net/index.html" target="_blank"&gt;Wicket&lt;/a&gt;.  The hype sounded good. Wicket is "&lt;i&gt;designed to handle one problem well: enabling component-oriented, programmatic manipulation of markup.&lt;/i&gt;" It has built in support for AJAX controls and building JSR-168 portlets. The mailing lists are very active and it's becoming an Apache incubator project.&lt;br /&gt; &lt;/p&gt;
&lt;p&gt;As a test I decided to port the web tier of a user preferences engine   I've created from Struts-JSP to Wicket.  The results were very encouraging. Its approach seems to be a cross between asp.net (with its code behind pages) and swing. Lines of code went from 1166 for the struts version to 409.  What code there was in the Wicket version was more straight forward (primarily because it took a lot of work to translate the map backed forms I used in struts to the the data structures used by the engine).  Here's an example of the code that renders a one of n multiple choice question as a group of  radio buttons and that process the input:&lt;/p&gt;
&lt;pre&gt;public class OneOfNPanel extends Panel {&lt;br /&gt;    &lt;br /&gt;    public OneOfNPanel(String arg0,QuestionnaireItem myData) {&lt;br /&gt;        super(arg0);&lt;br /&gt;        add(new FeedbackPanel("feedback"));&lt;br /&gt;        add(new Label("q.question", myData.getContents()));&lt;br /&gt;        add (new ResponseForm("form",myData));&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    private class ResponseForm extends Form&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        @SpringBean protected  QuestionaireFacade2 myManager;&lt;br /&gt;        protected  QuestionnaireItem myQuestion;&lt;br /&gt;        protected List&amp;lt;QuestionnaireAnswer&amp;gt; data;&lt;br /&gt;        private QuestionnaireResponseItem mySelection;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;        public  ResponseForm(final String componentName,QuestionnaireItem anItem )&lt;br /&gt;        {&lt;br /&gt;            super(componentName);&lt;br /&gt;            data = anItem.getAnswers();&lt;br /&gt;            myQuestion = anItem;&lt;br /&gt;    &lt;br /&gt;            mySelection = new QuestionnaireResponseItem();&lt;br /&gt;            List&amp;lt;QuestionnaireResponseItem&amp;gt; state = myManager.get(anItem.getId());&lt;br /&gt;            if (!state.isEmpty())&lt;br /&gt;                mySelection = state.get(0);&lt;br /&gt;                &lt;br /&gt;            mySelection.setQuestionId(anItem.getId());&lt;br /&gt;            RadioGroup myGroup = new RadioGroup("group",new PropertyModel(mySelection,"responseId"));&lt;br /&gt;            add(myGroup);&lt;br /&gt;            myGroup.add(new ListView("list", data)&lt;br /&gt;                {&lt;br /&gt;                    protected void populateItem( ListItem item)&lt;br /&gt;                    {&lt;br /&gt;                        QuestionnaireAnswer anItem= (QuestionnaireAnswer)item.getModelObject();&lt;br /&gt;                        item.add(new Label("name", anItem.getName()));&lt;br /&gt;                        item.add(new Radio("check", new Model(anItem.getId())));&lt;br /&gt;                    }&lt;br /&gt;                    });&lt;br /&gt;                &lt;br /&gt;        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;            public  void onSubmit()&lt;br /&gt;            {&lt;br /&gt;                List&amp;lt;QuestionnaireResponseItem&amp;gt; questionAnwers = new ArrayList&amp;lt;QuestionnaireResponseItem&amp;gt;();&lt;br /&gt;                if (mySelection.getResponseId() != null)&lt;br /&gt;                    questionAnwers.add(mySelection);&lt;br /&gt;    &lt;br /&gt;                myManager.update(questionAnwers );&lt;br /&gt;                &lt;br /&gt;            }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;You have to be careful reading Wicket code,  it leads you to make liberal use of anonymous inner classes (one of the ways it cuts down on the proliferation of artifacts in frameworks like Struts). In any case, I think my port was a pretty realistic exercise of the framework and I'm pretty stoked (and I'm not even a swing programmer).  Next time I get to choose the presentation layer for a web app, I think I'll add Wicket to the stack.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I'm not saying the java stack is always the best solution. For simple CRUD applications backed by a database, whose schema I control Ruby on Rails seems ubeatable.  In many situations I recommend eschewing a traditional database entirely. Zope/Plone works well for portal sites and uses the Zope object oriented data store. You can easily spin out new out new content types and get ui screens, persistence, workflows, permissions, etc for free.  In a MS shop Sharepoint provides similar advantages. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;But for significant applications, with a rich domain model, complex and variable workflows, complex integration requirements, and a need to evolve, Spring-Hibernate-ActiveMQ seem like an unbeatable base.  If you're building a web then pile Wicket and Tomcat on top. Do whatever else needs doing by selecting from the incredible variety of Java libraries: for templating you can't go wrong with Velocity or FreeMarker, for XSLT try Xalan or Saxon. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;So I might call an application built with Spring, Hibernate, ActiveMQ, Wicket, and running on Tomcat a SWATH application.  But if I subsitute JettyI get WAIJS and so on. It seems impossible to get a handle on a stable acronym. All I can think of is to form the first or last "syllable" of our acronym from the Spring, Hibernate, ActiveMQ troika.  So SHA or ASH, then to optionally pile additional letters on the front or the back &lt;i&gt;pro re nata&lt;/i&gt;.&lt;br /&gt;&lt;/p&gt;
          ]]>
        </content:encoded>        

        <dc:date>2006-08-15T11:00:00-05:00</dc:date>

        <dc:modified>2006-08-19T15:19:52-05:00</dc:modified>

        <dc:creator>rmoskal</dc:creator>

        

        
            <dc:subject>java-development</dc:subject>
        

    </rss:item>

    

</rdf:RDF>
