<?xml version="1.0" encoding="UTF-8"?>
<!-- name="generator" content="blojsom v3.2" -->
<rdf:RDF xmlns:wfw="http://wellformedweb.org/CommentAPI/"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns="http://purl.org/rss/1.0/">

	<channel rdf:about="http://www.xclu.com/blojsom/blog/default">
		<title>Xclu.com Java Blog</title>
		<link>http://www.xclu.com/blojsom/blog/default/</link>
		<description>Java Programming Notes</description>
		<dc:publisher>Justin Sher</dc:publisher>
		<dc:creator>blog@xclu.com</dc:creator>
		<dc:date>2007-12-26T01:23:46-08:00</dc:date>
		<dc:language>en</dc:language>

        <items>
        <rdf:Seq>
                                <rdf:li rdf:resource="http://www.xclu.com/blojsom/blog/default/2007/12/26/I-Tried-Grails" />
                                <rdf:li rdf:resource="http://www.xclu.com/blojsom/blog/default/2007/09/23/Adding-Selenium-Support-To-Appfuse" />
                                <rdf:li rdf:resource="http://www.xclu.com/blojsom/blog/default/2007/05/14/Swing-NetBeans-development-impressions" />
                                <rdf:li rdf:resource="http://www.xclu.com/blojsom/blog/default/2007/05/12/Blojsom-Jetty-Postgres" />
                </rdf:Seq>
        </items>
    </channel>

            <item rdf:about="http://www.xclu.com/blojsom/blog/default/2007/12/26/I-Tried-Grails">
	    <title>I Tried Grails!</title>
	    <link>http://www.xclu.com/blojsom/blog/default/2007/12/26/I-Tried-Grails</link>
        <description>&lt;p&gt;I finally tried &lt;a href=&quot;http://www.grails.org&quot; title=&quot;Grails&quot;&gt;Grails&lt;/a&gt;.&amp;nbsp; The Groovy based knock off of Ruby on Rails.&amp;nbsp; I had earlier started reading &amp;quot;&lt;a href=&quot;http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FPractical-JRuby-Rails-Web-Projects%2Fdp%2F1590598814%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1198660093%26sr%3D8-1&amp;amp;tag=xclu-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325&quot; title=&quot;JRuby On Rails : Web 2.0 Projects&quot;&gt; JRuby on Rails : Web 2.0 Projects&amp;quot;&lt;/a&gt; but just felt that Ruby was too different from Java to get excited about.&amp;nbsp; I felt like Grails fit in much more seamlessly into the Java ecosystem than JRuby and I didn&amp;#39;t feel like I was missing out on the neater features of JRuby.&amp;nbsp; More importantly, having trusty old Spring and Hibernate right there if I needed them was certainly reassuring.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;I started out by first by reading &amp;quot;&lt;a href=&quot;http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FGetting-Started-Grails-Jason-Rudolph%2Fdp%2F143030782X%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1198660177%26sr%3D1-1&amp;amp;tag=xclu-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325&quot; title=&quot;Getting Started With Grails&quot;&gt;Getting Started With Grails&lt;/a&gt;&amp;quot;.&amp;nbsp; After I completed this book I jumped in and wrote a variation of an application I wrote earlier in Tapestry 4 which is a simple application that asks a bunch of categorized yes/no questions and calculates the yes answers in each category and saves them to a database which is retrievable later.&amp;nbsp; IMHO, I felt doing the project in Tapestry 4 did not have any advantages for a small project like this.&amp;nbsp; Here&amp;#39;s some metrics:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Tapestry 4 Java Code Lines : 575&lt;/p&gt;&lt;p&gt;Grails Code Lines: 255&lt;/p&gt;&lt;p&gt;Grails Code Lines Excluding Auto Generated Configs and tests: 86 (Wow!)&amp;nbsp;&lt;/p&gt;&lt;p&gt;Things you don&amp;#39;t need to deal with in a basic Grails app that you do with Tapestry 4 :Ant build file, Hibernate Config, Tapestry Application Descriptor, Component Specification (jwc), any additional libs except for the database jar.&lt;/p&gt;&lt;p&gt;&amp;nbsp;I have to level some criticisms at Grails though.&amp;nbsp; First, it tends to give some strange error messages when the environment isn&amp;#39;t configured just right or you do something wrong.&amp;nbsp; Also, I had some trouble figuring out where to put stuff if I wanted it to be on the classpath. &amp;nbsp; Lastly the IDE integration is weaker than pure Java so autocomplete was mostly a manual process not assisted by the IDE.&amp;nbsp; Being able to quickly re-load and see changes compensates for this. &lt;/p&gt;&lt;p&gt;One more note.&amp;nbsp; As a Java developer I am a little prejudiced against loosely typed languages but Grails alleviates my fears by allowing me to easily interface with regular Java components&amp;nbsp; via Spring.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;All in All, I think Grails is the next big thing in Java development.&amp;nbsp; I have completed major projects professionally in Tapestry, Struts, and JSF and I feel like Grails just blows them all out of the water right now, especially for smaller projects.&amp;nbsp; I am going to try to use Grails on a much larger project to see how it works in that context.&amp;nbsp; The backend of my larger project is all in Java/Spring and uses some pretty tricky Hibernate stuff but I think that Grails will be great as a quick and agile web tier framework. &lt;/p&gt;
</description>
	    <dc:date>2007-12-26T01:23:46-08:00</dc:date>
	                                <wfw:comment>http://www.xclu.com/blojsom/commentapi/default/Java/2007/12/26/I-Tried-Grails</wfw:comment>
            <wfw:commentRss>http://www.xclu.com/blojsom/blog/default/2007/12/26/I-Tried-Grails?page=comments&amp;flavor=rss2</wfw:commentRss>
            </item>
            <item rdf:about="http://www.xclu.com/blojsom/blog/default/2007/09/23/Adding-Selenium-Support-To-Appfuse">
	    <title>Adding Selenium Support To Appfuse</title>
	    <link>http://www.xclu.com/blojsom/blog/default/2007/09/23/Adding-Selenium-Support-To-Appfuse</link>
        <description>&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href=&quot;http://www.openqa.org&quot; title=&quot;Selenium&quot;&gt;Selenium&lt;/a&gt; is a very nice browser control/automated testing system.&amp;nbsp; I wanted to integrate it into my &lt;a href=&quot;http://www.appfuse.org&quot; title=&quot;Appfuse&quot;&gt;Appfuse&lt;/a&gt; project so I could use it to do functional testing in lieu of Canoo, which i feel is less capable.&amp;nbsp; Selenium RC (remote Control) is particularly useful because it lets one automate web testing from inside of Java and hence inside of Junit.&amp;nbsp; Here&amp;#39;s how I did it.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Step 1 - Download Selenium&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Go to &lt;a href=&quot;http://www.openqa.org/selenium-rc/download.action&quot; title=&quot;http://www.openqa.org/selenium-rc/download.action&quot;&gt;http://www.openqa.org/selenium-rc/download.action&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;and download the selenium 0.9.2 release&lt;br /&gt;&lt;br /&gt;Unpacked the file in &lt;/p&gt;&lt;p&gt;lib/ &lt;/p&gt;&lt;p&gt;underneath your Appfuse root directory.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now the files are in &lt;br /&gt;&lt;/p&gt;&lt;p&gt;lib/selenium-remote-control-0.9.2&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Step 2 - Setup Library and Paths&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;edit /lib/lib.properties and add the follwoing:&lt;/p&gt;&lt;p&gt;    # &lt;br /&gt; # Selenium RC - http://www.openqa.org/ &lt;br /&gt; # selenium.version=0.9.2 &lt;br /&gt; selenium.dir=${lib.dir}/selenium-remote-control-${selenium.version}/ &lt;br /&gt; selenium-client.jar=${selenium.dir}/selenium-java-client-driver-${selenium.version}/selenium-java-client-driver.jar&lt;br /&gt; selenium-server.jar=${selenium.dir}/selenium-server-${selenium.version}/selenium-server.jar  &lt;/p&gt;&lt;p&gt;&amp;nbsp;In properties.xml setup the selenium build and test environment&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Selenium Compile Classpath --&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path id=&amp;quot;selenium.compile.classpath&amp;quot;&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path refid=&amp;quot;web.compile.classpath&amp;quot;/&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pathelement location=&amp;quot;${selenium-client.jar}&amp;quot;/&amp;gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pathelement location=&amp;quot;${selenium-server.jar}&amp;quot;/&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/path&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path id=&amp;quot;selenium.test.classpath&amp;quot;&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;path refid=&amp;quot;web.test.classpath&amp;quot;/&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pathelement location=&amp;quot;${selenium-client.jar}&amp;quot;/&amp;gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pathelement location=&amp;quot;${selenium-server.jar}&amp;quot;/&amp;gt; &amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;lt;/path&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;Step 3 - Setup Source Directories and add a Test &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Make two source directories&lt;/p&gt;&lt;p&gt;&amp;nbsp;test/selenium&lt;/p&gt;&lt;p&gt;and&lt;/p&gt;&lt;p&gt;&amp;nbsp;src/selenium&lt;/p&gt;&lt;p&gt;Put your tests in test/selenium&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;An example Selenium test:&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;package appfuse.selenium;&lt;br /&gt;&lt;br /&gt;import org.openqa.selenium.server.SeleniumServer;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.thoughtworks.selenium.DefaultSelenium;&lt;br /&gt;import com.thoughtworks.selenium.Selenium;&lt;br /&gt;&lt;br /&gt;public class SeleniumTest extends TestCase {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Selenium selenium;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUp() throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String url = &amp;quot;http://localhost:8080/appfuse&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium = new DefaultSelenium(&amp;quot;localhost&amp;quot;, SeleniumServer.getDefaultPort(), &amp;quot;*firefox&amp;quot;, url);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.start();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void tearDown() throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.stop();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void testLocal() throws Throwable {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.open(&amp;quot;http://localhost:8080/appfuse&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.waitForPageToLoad(&amp;quot;30000&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assertTrue(selenium.getTitle().equals(&amp;quot;Login | AppFuse&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt; &lt;strong&gt;Step 5 - Setup proper build targets &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In build.xml add the following tasks to support running selenium tests:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;lt;!-- Start Selenium Test Server --&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;target name=&amp;quot;start-selenium-server&amp;quot; depends=&amp;quot;init&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;java fork=&amp;quot;true&amp;quot; spawn=&amp;quot;true&amp;quot; classname=&amp;quot;org.openqa.selenium.server.SeleniumServer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;classpath refid=&amp;quot;web.compile.classpath&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/java&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;!-- Compile Selenium Modules --&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;target name=&amp;quot;compile-selenium&amp;quot; depends=&amp;quot;package-service,stage-web&amp;quot; description=&amp;quot;Compile web module&amp;quot;&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;compile module=&amp;quot;selenium&amp;quot;/&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/target&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;lt;!-- Use cargo to startup app server and run selenium tests against them --&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;target name=&amp;quot;test-selenium&amp;quot; if=&amp;quot;tomcat.home&amp;quot; depends=&amp;quot;war,check-debug,start-selenium-server,compile-selenium&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; description=&amp;quot;Runs Canoo WebTests using Cargo&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;taskdef resource=&amp;quot;cargo.tasks&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;classpath&amp;gt;&lt;br /&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;lt;fileset dir=&amp;quot;${cargo.dir}&amp;quot; includes=&amp;quot;*.jar&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/classpath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/taskdef&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;echo&amp;gt;running canoo tests at:&lt;br /&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; http://${tomcat.server}:${http.port}/${webapp.name}&amp;lt;/echo&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;if&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;isset property=&amp;quot;tomcat5&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;then&amp;gt;&amp;lt;property name=&amp;quot;cargoId&amp;quot; value=&amp;quot;tomcat5x&amp;quot;/&amp;gt;&amp;lt;/then&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;else&amp;gt;&amp;lt;property name=&amp;quot;cargoId&amp;quot; value=&amp;quot;tomcat4x&amp;quot;/&amp;gt;&amp;lt;/else&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/if&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;echo message=&amp;quot;Starting ${cargoId}...&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cargo containerId=&amp;quot;${cargoId}&amp;quot; id=&amp;quot;${cargoId}&amp;quot; home=&amp;quot;${tomcat.home}&amp;quot; action=&amp;quot;start&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output=&amp;quot;${test.dir}/cargo.log&amp;quot; wait=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configuration home=&amp;quot;${test.dir}/${cargoId}&amp;quot;&amp;gt;&lt;br /&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;lt;property name=&amp;quot;cargo.logging&amp;quot; value=&amp;quot;high&amp;quot;/&amp;gt;&lt;br /&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;lt;property name=&amp;quot;cargo.servlet.port&amp;quot; value=&amp;quot;${http.port}&amp;quot;/&amp;gt;&lt;br /&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;lt;!--&amp;lt;property name=&amp;quot;cargo.jvmargs&amp;quot; value=&amp;quot;${run.brainReboot.test.debugargline}&amp;quot;/&amp;gt;--&amp;gt;&lt;br /&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;lt;deployable type=&amp;quot;war&amp;quot; file=&amp;quot;${webapp.dist}/${webapp.war}&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cargo&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;test-module module=&amp;quot;selenium&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cargo refid=&amp;quot;${cargoId}&amp;quot; action=&amp;quot;stop&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6 - Run Tests &lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Now run&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;ant test-selenium ; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;and you will see tomcat startup and the selenium Firefox instance pop open and try and complete any tests you&amp;#39;ve setup. &lt;/p&gt;
</description>
	    <dc:date>2007-09-23T21:02:58-07:00</dc:date>
	                                <wfw:comment>http://www.xclu.com/blojsom/commentapi/default/Java/2007/09/23/Adding-Selenium-Support-To-Appfuse</wfw:comment>
            <wfw:commentRss>http://www.xclu.com/blojsom/blog/default/2007/09/23/Adding-Selenium-Support-To-Appfuse?page=comments&amp;flavor=rss2</wfw:commentRss>
            </item>
            <item rdf:about="http://www.xclu.com/blojsom/blog/default/2007/05/14/Swing-NetBeans-development-impressions">
	    <title>Swing/NetBeans development impressions</title>
	    <link>http://www.xclu.com/blojsom/blog/default/2007/05/14/Swing-NetBeans-development-impressions</link>
        <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I&amp;#39;ve never been a big desktop app developer.&amp;nbsp; I had heard from a number of people at JavaOne that Swing had become much easier to work with lately.&amp;nbsp; I had a friend who wanted me to port a simple C# desktop app to Java so I immediately jumped in to get a feel for desktop app programming again.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; I had heard from a number of people that the &lt;a href=&quot;http://www.netbeans.org&quot;&gt;Netbeans&lt;/a&gt; &lt;a href=&quot;http://www.netbeans.org/kb/trails/matisse.html&quot;&gt;Matisse&lt;/a&gt; swing builder was a really good tool.  I was not disappointed at all.  I was able to whip up a quick copy of the application UI I was porting in Matisse and get it functioning and doing things rather quickly. &lt;/p&gt; &lt;p&gt; NetBeans as an IDE could use a bit of work though.  Some things I found that weren&amp;#39;t so great: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Quick fix support is much more primitive than in Eclipse.&lt;/li&gt; &lt;li&gt;The recompilation and error hilighting is not as fast as Eclipse.&lt;/li&gt; &lt;li&gt;Sometimes auto-complete would fail mysteriously.&lt;/li&gt; &lt;li&gt;The debugger doesn&amp;#39;t let you change your code while your program is running.&lt;/li&gt; &lt;/ul&gt; On the other hand there were some things I liked about NetBeans: &lt;ul&gt; &lt;li&gt;Matisse is a great tool for making Swing apps.&lt;/li&gt; &lt;li&gt;I didn&amp;#39;t have to download any plug-ins to get started.&lt;/li&gt; &lt;li&gt;The XML editor is pretty decent.&lt;/li&gt; &lt;li&gt;The build system is built in and a no brainer.  You don&amp;#39;t have to hack your own.&lt;/li&gt; &lt;li&gt;Performance and stability were better in NetBeans.&lt;/li&gt; &lt;li&gt;No need for perspective switching.&lt;/li&gt; &lt;/ul&gt; Overall it seems that Eclipse is a little Frankensteinish at times with so many plug-ins all trying to work together.&amp;nbsp; On the other hand, the base Eclipse Java Development Platform is exceptional.&amp;nbsp; I&amp;#39;m going to have to stick with Eclipse for now.&amp;nbsp;&amp;nbsp; 
</description>
	    <dc:date>2007-05-14T22:39:05-07:00</dc:date>
	                                <wfw:comment>http://www.xclu.com/blojsom/commentapi/default/Java/2007/05/14/Swing-NetBeans-development-impressions</wfw:comment>
            <wfw:commentRss>http://www.xclu.com/blojsom/blog/default/2007/05/14/Swing-NetBeans-development-impressions?page=comments&amp;flavor=rss2</wfw:commentRss>
            </item>
            <item rdf:about="http://www.xclu.com/blojsom/blog/default/2007/05/12/Blojsom-Jetty-Postgres">
	    <title>Blojsom + Jetty + Postgres</title>
	    <link>http://www.xclu.com/blojsom/blog/default/2007/05/12/Blojsom-Jetty-Postgres</link>
        <description>&lt;p&gt;Blojsom is a great java based blogging webapp that I got up and running today.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s my guide as to how to set it up: &lt;/p&gt;  &lt;h4&gt;Setting up Blojsom 3.2 on Postgres/Jetty&lt;/h4&gt; &lt;ul&gt; &lt;li&gt; Download Blojsom Quickstar Bundle &lt;p&gt; http://sourceforge.net/project/showfiles.php?group_id=72754&amp;amp;package_id=125988 &lt;/p&gt; &lt;/li&gt; &lt;li&gt; Download Jetty 6 &lt;p&gt; http://dist.codehaus.org/jetty/jetty-6.1.3.zip &lt;/p&gt; &lt;/li&gt; &lt;li&gt; If Postgresql has not been installed you can get it from: &lt;p&gt; http://www.postgresql.org/ &lt;/p&gt; &lt;p&gt;  if you are on Debian or Ubuntu simply run &lt;/p&gt;  apt-get install postgresql  &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Now on to the install&lt;/h5&gt;  &lt;ul&gt; &lt;li&gt; from your home directory - assuming your site is called xclu.com:  &lt;pre&gt;mkdir xclu.com &lt;br /&gt;&lt;br /&gt;unzip jetty-6.1.3.zip&lt;br /&gt;&lt;br /&gt;declare -x JETTY_HOME=~/xclu.com/jetty-6.1.3/&lt;br /&gt;&lt;br /&gt;cd $JETTY_HOME&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; Get the appropriate Postgresql driver from  &lt;/p&gt; &lt;p&gt; http://jdbc.postgresql.org/download.html &lt;/p&gt;  &lt;p&gt; to get your version  &lt;/p&gt;   psql --version   &lt;p&gt; copy it to $JETTY_HOME/lib/ext/ &lt;/p&gt;  &lt;pre&gt;cd webapps&lt;br /&gt;&lt;br /&gt;mkdir blojsom&lt;br /&gt;&lt;br /&gt;cd blojsom&lt;br /&gt;&lt;br /&gt;jar -xvf ~/xclu.com/blojsom.war&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; edit $JETTY_HOME/webapps/blojsom/WEB-INF/classes/blojsom-helper-beans-include.xml  &lt;/p&gt; &lt;p&gt; Replace the datasource with an appropriate postgresql configuration.  You probably want to use a better password than &amp;#39;blojsom&amp;#39;.: &lt;/p&gt;  &lt;pre&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean id=&amp;quot;dataSource&amp;quot; class=&amp;quot;org.apache.commons.dbcp.BasicDataSource&amp;quot; destroy-method=&amp;quot;close&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;driverClassName&amp;quot; value=&amp;quot;org.postgresql.Driver&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;url&amp;quot; value=&amp;quot;jdbc:postgresql://localhost/blojsom&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;username&amp;quot; value=&amp;quot;blojsom&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;password&amp;quot; value=&amp;quot;blojsom&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; Modify the dialect &lt;/p&gt;&lt;p&gt;  &amp;lt;prop key=&amp;quot;hibernate.dialect&amp;quot;&amp;gt;org.hibernate.dialect.PostgreSQLDialect&amp;lt;/prop&amp;gt;  &lt;/p&gt; &lt;p&gt; Edit $JETTY_HOME/webapps/blojsom/WEB-INF/classes/blojsom.xml &lt;/p&gt; &lt;p&gt; Modify the dbloader &lt;/p&gt;  &lt;pre&gt;&lt;br /&gt;&amp;lt;bean id=&amp;quot;dbloader&amp;quot; class=&amp;quot;org.blojsom.util.database.DatabaseLoader&amp;quot; init-method=&amp;quot;init&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;sessionFactory&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;ref bean=&amp;quot;hibernateSessionFactory&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;dbScript&amp;quot; value=&amp;quot;/WEB-INF/classes/blojsom-full-initial-data-postgresql.sql&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;upgrading&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;servletConfig&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;ref bean=&amp;quot;servletConfigFactoryBean&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;detectBlojsomSQL&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;value&amp;gt;select relname from pg_stat_user_tables where relname = &amp;#39;blog&amp;#39;;&amp;lt;/value&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;    &lt;p&gt;  Create the blojsom database (may need to be done as postgres user account if you haven&amp;#39;t created a postgres superuser account for yourself) &lt;/p&gt;  createuser blojsom  &lt;p&gt; Answer no to whether the user should be allowed to create databases or other users &lt;/p&gt;  &lt;pre&gt;createdb -O blojsom blojsom&lt;br /&gt;&lt;br /&gt;psql blojsom&lt;br /&gt;blojsom=# alter user blojsom with password &amp;#39;blojsom&amp;#39;;&lt;br /&gt;blojsom=# \q&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; To allow local acess to your database edit pg_hba.conf and add the following line right underneath the IPv4 comment. &lt;/p&gt;  &lt;pre&gt;# All IPv4 connections from localhost&lt;br /&gt;host    blojsom     blojsom     127.0.0.1         255.255.255.255   md5&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; Restart postgresql &lt;/p&gt; &lt;p&gt; Test the configuration &lt;/p&gt;   psql -h 127.0.0.1 -U blojsom -W blojsom  &lt;p&gt; login with password &amp;quot;blojsom&amp;quot; &lt;/p&gt; &lt;p&gt; You should get the follow prompt &lt;/p&gt;  blojsom=&amp;gt;   &lt;p&gt; exit the psql client &lt;/p&gt;  blojsom=&amp;gt; \q   &lt;p&gt; Set the hostname and port in $JETTY_HOME/etc/jetty.xml properly &lt;/p&gt;  &lt;pre&gt;    &amp;lt;Call name=&amp;quot;addConnector&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;Arg&amp;gt;&lt;br /&gt;          &amp;lt;New class=&amp;quot;org.mortbay.jetty.nio.SelectChannelConnector&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;port&amp;quot;&amp;gt;&amp;lt;SystemProperty name=&amp;quot;jetty.port&amp;quot; default=&amp;quot;8080&amp;quot;/&amp;gt;&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;maxIdleTime&amp;quot;&amp;gt;30000&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;host&amp;quot;&amp;gt;www.xclu.com&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;Acceptors&amp;quot;&amp;gt;1&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;statsOn&amp;quot;&amp;gt;false&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;confidentialPort&amp;quot;&amp;gt;8443&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;lowResourcesConnections&amp;quot;&amp;gt;1000&amp;lt;/Set&amp;gt;&lt;br /&gt;            &amp;lt;Set name=&amp;quot;lowResourcesMaxIdleTime&amp;quot;&amp;gt;500&amp;lt;/Set&amp;gt;&lt;br /&gt;          &amp;lt;/New&amp;gt;&lt;br /&gt;      &amp;lt;/Arg&amp;gt;&lt;br /&gt;    &amp;lt;/Call&amp;gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt; Replace localhost:8080 with whatever your actual hostname is.  In this case my hostname is &amp;#39;www.xclu.com&amp;#39; &lt;/p&gt;  &lt;p&gt; Change the jetty sql scripts so they initialize the database with the right hostname &lt;/p&gt;  &lt;pre&gt;perl -pi -e &amp;#39;s/localhost:8080/www.xclu.com/g&amp;#39; $JETTY_HOME/webapps/blojsom/WEB-INF/classes/*.sql&lt;br /&gt;&lt;/pre&gt;   &lt;p&gt; Run Jetty! &lt;/p&gt; &lt;p&gt;  &lt;pre&gt;cd $JETTY_HOME&lt;br /&gt;./bin/jetty.sh start&lt;br /&gt;&lt;/pre&gt;  &lt;/p&gt;  &lt;p&gt; Now go to    &lt;/p&gt;&lt;ul&gt; &lt;li&gt; You may now access your blog at http://your-blojsom-install-site/blojsom/blog/default/&lt;/li&gt; &lt;li&gt; You may access the administration console at http://your-blojsom-install-site/blojsom/blog/default/?flavor=admin&lt;/li&gt; &lt;li&gt; The default user and password is default/default. Be sure to change the password immediately after logging in. You can change this under Weblog Settings | Users.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
</description>
	    <dc:date>2007-05-12T23:51:33-07:00</dc:date>
	                                <wfw:comment>http://www.xclu.com/blojsom/commentapi/default/Java/2007/05/12/Blojsom-Jetty-Postgres</wfw:comment>
            <wfw:commentRss>http://www.xclu.com/blojsom/blog/default/2007/05/12/Blojsom-Jetty-Postgres?page=comments&amp;flavor=rss2</wfw:commentRss>
            </item>
    
</rdf:RDF>
