<?xml version="1.0" encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="https://raibledesigns.com/roller-ui/styles/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" 
      xmlns:app="http://www.w3.org/2007/app"
      xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">

    <title type="html">Search for [lucene] in weblog rd</title>
    <subtitle type="html">Search results for [lucene] within weblog Raible Designs</subtitle>
    <id>https://raibledesigns.com/rd/feed/entries/atom?q=lucene</id>

    <link rel="self" type="application/atom+xml" 
        href="https://raibledesigns.com/rd/feed/entries/atom?q=lucene" />

    <link rel="alternate" type="text/html" 
        href="https://raibledesigns.com/rd/search?q=lucene" />

    <link rel="search" type="application/opensearchdescription+xml" 
        href="https://raibledesigns.com/roller-services/opensearch/rd" />
    <opensearch:Query role="request" searchTerms="lucene" startPage="1" />

    <link rel="first" type="application/atom+xml" href="https://raibledesigns.com/rd/feed/entries/atom?q=lucene" />
    <updated>2026-08-04T22:37:45-06:00</updated>
    <generator uri="http://roller.apache.org" version="5.0.3 (1388864191739:dave)">Apache Roller</generator>

        <entry>
        <id>https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of</id>
        <title type="html">[OSCON 2008] Web Frameworks of the Future: Flex, GWT, Grails and Rails</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of"/>
        <published>2008-07-23T16:25:23-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon08" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Below is the presentation I&apos;m &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/speaker/6444&quot;&gt;delivering at OSCON&lt;/a&gt; today. Unfortunately, I had to remove slides on GWT and Flex to fit w/in the 45 minute time limit. I hope to expand this presentation in the future, as well as continue to develop the side project I&apos;m working on using these technologies.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=webframeworksofthefutureflexgwtrailsandgrails-1216842992390310-9&quot;/&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;//static.slideshare.net/swf/ssplayer2.swf?doc=webframeworksofthefutureflexgwtrailsandgrails-1216842992390310-9&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div style=&quot;font-size: .9em; text-align: center&quot;&gt;
&lt;a href=&quot;http://www.slideshare.net/mraible/web-frameworks-of-the-future-flex-gwt-grail-and-rails-525747?src=embed&quot; title=&quot;View Web Frameworks of the Future: Flex, GWT, Grail, and Rails on SlideShare&quot;&gt;view on slideshare&lt;/a&gt; | 
&lt;a href=&quot;http://www.slideshare.net/mraible/web-frameworks-of-the-future-flex-gwt-grail-and-rails-525747/download&quot;&gt;download&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/integrating_compass_2_0_into</id>
        <title type="html">Integrating Compass 2.0 into AppFuse</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/integrating_compass_2_0_into"/>
        <published>2008-05-22T21:24:47-06:00</published>
        <updated>2014-05-08T19:47:26-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="displaytag" scheme="http://roller.apache.org/ns/tags/" />
        <category term="compass" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://appfuse.org&quot;&gt;&lt;img src=&quot;//appfuse.dev.java.net/images/icon.gif&quot; class=&quot;picture&quot; style=&quot;border: 0&quot;&gt;&lt;/a&gt;
Last week, Chris Barham showed us an example of &lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_displaytag_external_sorting_and&quot;&gt;how to implement external sorting and paging with AppFuse + DisplayTag&lt;/a&gt;. This week, he&apos;s at it again with a tutorial titled &lt;a href=&quot;http://code.google.com/p/pagingappfuse/wiki/CompassSearching&quot;&gt;Searching in AppFuse 2.0.2 with Compass 2.0 and Lucene 2.3.2&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
From a &lt;a href=&quot;http://www.nabble.com/Appfuse-searching-with-Compass-2.0-(Lucene)-td17368089s2369.html&quot;&gt;message&lt;/a&gt; he sent to the mailing list:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
I&apos;ve extended the previous DisplayTag external sorting and paging project to implement full search capability across the domain objects by using Compass 2.0 - &lt;a href=&quot;http://www.compass-project.org&quot;&gt;http://www.compass-project.org&lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;
Although there are a number of tutorials around for Compass and AppFuse, I thought I&apos;d update as Compass has just gone to version 2.0 and has new features, (annotations etc).
&lt;br/&gt;&lt;br/&gt;
Search results in the example are displayed in plain HTML with Compass&apos; own paging feature, and also using DisplayTag with its paging external feature, (both on the same search results page in the example).
&lt;br/&gt;&lt;br/&gt;
Code is in a branch off the original project called branches/search - check it out with:
&lt;br/&gt;&lt;br/&gt;
&lt;em&gt;svn checkout http://pagingappfuse.googlecode.com/svn/branches/search/ appfusecompass&lt;/em&gt;
&lt;br/&gt;&lt;br/&gt;
Instructions on how to implement Compass are here:&lt;br/&gt;
&lt;a href=&quot;http://code.google.com/p/pagingappfuse/wiki/CompassSearching&quot;&gt;http://code.google.com/p/pagingappfuse/wiki/CompassSearching&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
Cheers,&lt;br/&gt;
Chris
&lt;/p&gt;
&lt;p&gt;Again, great work Chris! We really appreciate your contributions.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/migrating_a_rails_app_to</id>
        <title type="html">Migrating a Rails app to Grails</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/migrating_a_rails_app_to"/>
        <published>2008-01-22T09:37:49-07:00</published>
        <updated>2008-01-22T16:37:49-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">There&apos;s an interesting trend I&apos;ve seen happening at companies over the last year. More and more, they&apos;re experimenting with Rails and/or Grails for both prototyping and real applications. I think this is an excellent use for these frameworks as they both are very productive. The reasons for their productivity is simple: &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=35538&quot;&gt;zero turnaround&lt;/a&gt; and less code.&lt;/p&gt;
&lt;p&gt;For a Java-based company that&apos;s built their bread and butter applications on Java and been successful with it, both frameworks can be disruptive. Bread and butter applications tend to be large and somewhat difficult to maintain. In my experience, the biggest maintenance headache is &lt;em&gt;not&lt;/em&gt; writing code or fixing bugs, it&apos;s the turnaround time required to make changes, run tests and build the application to test in your browser. Since Rails and Grails eliminate the turnaround, it&apos;s only natural for developers at companies with a lengthy build process to love their increased productivity.
&lt;/p&gt;
&lt;p&gt;Over the next couple weeks, I&apos;m going to do some experimenting with porting a Rails application to Grails. Why? Because I think companies are going to have a difficult time choosing between these two frameworks for rapid prototyping and (possible) production deployments. While both frameworks are great for prototyping, the last thing most developers want to do is throw away the prototype and develop it with something else. They want to continue to enhance the prototype and eventually put it into production. With Rails and Grails (and many others), it&apos;s possible to build the real application in a matter of weeks, so why shouldn&apos;t it be put into production?&lt;/p&gt;
&lt;p&gt;For most Java-based companies, putting a Rails application into production is unfamiliar territory. However, a Grails application is just a WAR, so they can continue to use all the Java infrastructure they know and love. So for companies with an established, tuned and successful JVM infrastructure, does it really make sense to use Rails over Grails? The only thing I can think of is language reasons - there&apos;s a lot of Ruby fanatics out there.&lt;/p&gt;
&lt;p&gt;So again, the purpose of my experiment is simple: to see if a Grails app can do everything a Rails app can. As for language features and &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=48180&quot;&gt;scalability&lt;/a&gt;, I&apos;m not really concerned with that right now. I&apos;m not looking to prove that either framework should be used for all web applications - just certain types.&lt;/p&gt;
&lt;p&gt;
Has anyone out there ported a Rails application to Grails? If so, are there any gotchas I should watch out for?
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I realize that Rails can be deployed on the JVM with JRuby. However, I think many companies have existing Java-based tools (logging, JMX, Spring backends, etc.) that more easily integrate with Grails than Rails. I could be wrong.&lt;/p&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/introduction_to_grails_with_scott</id>
        <title type="html">Introduction to Grails with Scott Davis at the Colorado Software Summit</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/introduction_to_grails_with_scott"/>
        <published>2007-10-25T19:03:42-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="groovy" scheme="http://roller.apache.org/ns/tags/" />
        <category term="softwaresummit" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://grails.org&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/grails-logo-20070903.jpg&quot; alt=&quot;Grails&quot; width=&quot;280&quot; height=&quot;84&quot; class=&quot;picture&quot; style=&quot;border: 0&quot;/&gt;&lt;/a&gt;
According to Scott, today&apos;s Java-based web frameworks are partial solutions at best. They&apos;re only solving one piece of the puzzle - you still need to manage persistence, deployment, etc. &lt;em&gt;all by yourself&lt;/em&gt;.
&lt;/p&gt;&lt;p&gt;
We&apos;re moving into a new era of web frameworks. The expectation now is a full-stack solution. Grails is a fully integrated modern Java web application in a box. It contains Spring, Hibernate, Quartz, Log4J, Jetty, HSQL, JUnit and Ant. You&apos;re not limited to using Jetty, you can type &quot;grails war&quot; and create a WAR that you can deploy to any application server. In a single zip/tar, you get the whole thing - including the database and servlet container. You get a lot of good default for free, but you&apos;re not limited to those defaults.
&lt;/p&gt;&lt;p&gt;
What does &quot;modern&quot; in a framework mean? It means it uses Convention over Configuration - Grails autowires components together based on naming conventions. Struts 1.x uses Configuration over Configuration - the more XML the better. 
&lt;/p&gt;&lt;p&gt;
The Wisdom of Crowds - why are the many smarter than the few? What is the wisdom of crowds when it comes to web frameworks. &lt;strong&gt;Struts&lt;/strong&gt; is the wisdom of crowds when it comes to web frameworks. It&apos;s based on sound principles (MVC) and was written by Craig McClanahan. He was the architect of &quot;Catalina&quot; Tomcat 4 and wrote Struts shortly thereafter. David Geary was contributor #2 to Struts. It has a proven track record and has a 60%-70% market share. Struts must be the perfect framework - especially since it has such a great pedigree.
&lt;/p&gt;&lt;p&gt;
So what&apos;s wrong with Struts? 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&apos;s 7 years old&lt;/li&gt;
&lt;li&gt;It&apos;s verbose and overly complex (reflective of the EJB 2.x era)&lt;/li&gt;
&lt;li&gt;Splintered community: Craig moved on to JSF -&gt; created Shale, then the WebWork merger&lt;/li&gt;
&lt;li&gt;While Struts 1.x was an unqualified success, Struts 2.x can&apos;t seem to build that critical mass - it can&apos;t seem to reach The Tipping Point like Struts 1.x did&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Recipe for a Tipping Point: Contagiousness / viral, tiny &quot;tweaks&quot; to a proven model can yield big, disproportionate effects, the rise is not &quot;slow and steady&quot; - the effect is dramatic and immediate.
&lt;/p&gt;&lt;p&gt;
Ruby on Rails won the hype award. It&apos;s largely worth the hype, but it&apos;s not revolutionary - it&apos;s &lt;em&gt;evolutionary&lt;/em&gt;. It has tiny tweaks to the proven MVC-driven approach: Convention over Configuration, Scaffolding and Unified Technology Stack. 
&lt;/p&gt;&lt;p&gt;
The one thing that Rails is lacking is Java support. Grails, on the other hand, offers the same experience using known, proven Java solutions.
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
Rails =&gt; &quot;replacement&quot;&lt;/li&gt;
&lt;li&gt;Grails =&gt; &quot;upgrade&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Scott drank the Rails Kool-Aid for a while and enjoyed it, but found it difficult to switch from Ruby in the morning to Java in the afternoon. With Grails, he doesn&apos;t have to do as much context switching, as well as all the Java libraries are available - the ones you know and love.
&lt;/p&gt;&lt;p&gt;
You can drop groovy.jar into your classpath and write Groovy code. One nice thing about Groovy is you can rename your existing .java files to .groovy and they&apos;ll work just fine. Included Ajax support: Script.aculo.us and Protoype as well as YUI. YUI is battle-tested since it&apos;s used by Yahoo and very well documented.  You can use &quot;grails install-dojo&quot; to install the Dojo toolkit. Grails has a wealth of plugins available at &lt;a href=&quot;http://grails.org/plugins&quot;&gt;http://grails.org/plugins&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;
Now we&apos;re going to crack our nuckles and build some code - slides are over.

&lt;pre&gt;
 grails create-app conference
 cd conference
 grails create-domain-class Speaker (add some fields)
 grails generate-all Speaker
 grails run-app
&lt;/pre&gt;
&lt;p&gt;The impressive things about this set of commands is I was able to 1) download Grails and 2) run all these commands at the same time that Scott did. I was definitely impressed (I knew I would be).

Auto-scaffolding - you can get the same thing as &quot;generate-all&quot;, but it generates controllers and views at runtime &lt;em&gt;in-memory&lt;/em&gt;. All you need to do is create a domain object (i.e. Talk) and then create a TalkController that has the following line in it:
&lt;/p&gt;
&lt;pre&gt;
def scaffold = Talk
&lt;/pre&gt;
&lt;p&gt;As a test, I tried this at the same time that Scott did and got the following error. It looks like Grails/Jetty isn&apos;t smart enough to pick up new classes as they&apos;re added. 
&lt;/p&gt;
&lt;pre&gt;
[263102] commons.DefaultGrailsApplication Class not found attempting to load class Talk
java.lang.ClassNotFoundException: Talk
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
&lt;/pre&gt;
&lt;p&gt;Grails comes with a number of environments. &lt;strong&gt;Dev&lt;/strong&gt; (the default) auto-reloads changes to Controllers, Views and even the Model (this is helpful for rapid development). &lt;strong&gt;Prod&lt;/strong&gt; loads all items statically for maximum performance. To change the environments - you can change DataSource.groovy.
&lt;/p&gt;
&lt;p&gt;For some reason, adding/removing some properties on my Talk object and my application hasn&apos;t been the same since. Now when I try to access my TalkController, I see the following stack trace:
&lt;/p&gt;
&lt;pre&gt;
org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: difficulty of: Talk; nested exception is org.hibernate.QueryException: could not resolve property: difficulty of: Talk
	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:640)
	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:342)
	at org.codehaus.groovy.grails.scaffolding.DefaultScaffoldDomain.list(DefaultScaffoldDomain.java:112)
&lt;/pre&gt;
&lt;p&gt;I asked Scott about this error and he proved that removing properties from domain objects should work. I told him restarting Jetty didn&apos;t fix the problem and he suggested dropping the &quot;Talk&quot; table and letting Grails re-create it. Unfortunately, I have no idea where this database is, so that&apos;s difficult to do. Doh - now I realize what was causing the problem. Before I dropped the &quot;difficulty&quot; property, I had clicked on the column and that property was still referenced in the URL. When I&apos;d refresh the browser, the stack trace occurred. I don&apos;t know if I&apos;d consider this a bug or not.
&lt;/p&gt;
&lt;p&gt;
dbCreate = hibernate.hbm2ddl.auto is used. When in development &lt;strong&gt;create-drop&lt;/strong&gt; is used. In production and test environments, it uses &lt;strong&gt;update&lt;/strong&gt; and saves the data between restarts.
&lt;/p&gt;
&lt;p&gt;
You can turn off Hibernate&apos;s automatic schema alteration by commenting out &quot;dbCreate&quot; line in DataSource.groovy. 
&lt;/p&gt;
&lt;p&gt;To run your application in Tomcat instead of Jetty, you can run &quot;grails war&quot; and copy the WAR to Tomcat. The WAR is created with the production environment by default, so you may need to pass in arguments or set environment variables if you want the WAR created in dev mode.
&lt;/p&gt;
&lt;p&gt;At this point, my battery died. Scott continued to cover how to order form elements (when using scaffolding) with &quot;static constraints&quot; and how to add validation rules. It was an excellent presentation and Grails definitely looks like a really cool web framework. The best part is I learned most of what you need to know to use it - in an hour!
&lt;/p&gt;
&lt;p&gt;
I might have to try Grails soon - I love the concept of &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=47213&quot;&gt;Life above the Service Tier&lt;/a&gt; and Grails would work nicely for serving up &lt;a href=&quot;http://grails.codehaus.org/REST+plugin&quot;&gt;REST&lt;/a&gt;. I think YUI, GWT-Ext and Flex are probably the best frameworks for developing a SOFEA client. The question is - when using YUI, how do you download all pages in the application at once?</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/choosing_a_jvm_web_framework1</id>
        <title type="html">Choosing a JVM Web Framework: Stories Wanted</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/choosing_a_jvm_web_framework1"/>
        <published>2007-08-22T12:02:58-06:00</published>
        <updated>2007-08-22T18:03:56-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">My &lt;a href=&quot;http://raibledesigns.com/rd/entry/choosing_a_jvm_web_framework&quot;&gt;last post&lt;/a&gt; on choosing a web framework got quite a few comments. Some seemed to like the application categorization technique as a means to narrow the choices. However, others seemed to disagree. So if application categorization is not a good methodology for narrowing the choices, what is?&lt;/p&gt;
&lt;p&gt;I think one of the best ways to figure out a good methodology is to find out what people have done to choose their web framework. I&apos;m looking for stories from developers who have evaluated 2-3+ frameworks for a project. I&apos;d like to come up with 3-5 stories as part of my talk to highlight how some teams have chosen their web framework. What were your important criteria? What made you choose the one you did? Was it a tight race between a few of them? Did industry buzz or application categorization play a part in your decision?&lt;/p&gt;
&lt;p&gt;Please send any stories you&apos;d like to share to &lt;a href=&quot;mailto:matt@raibledesigns.com?subject=How we chose our JVM Web Framework&quot;&gt;matt@raibledesigns.com&lt;/a&gt;. Of course, you can also post your story in the comments - but an e-mail gives it a bit more validity. If you&apos;d like to share your company name, that&apos;d be great, but it&apos;s by no means required. I haven&apos;t decided if I&apos;m going to prevent all cases as anonymous companies or not. If you do send a story, I&apos;ll make sure and ask your permission before I share any of your personal/company information. &lt;em&gt;Thanks!&lt;/em&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/ant_vs_maven</id>
        <title type="html">Ant vs. Maven</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/ant_vs_maven"/>
        <published>2007-04-16T11:26:13-06:00</published>
        <updated>2007-04-16T17:27:10-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="ant" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">I found a good post from Steve Loughran on &lt;a href=&quot;http://www.1060.org/blogxter/entry?publicid=9EE3794599F42C4E1D9BF2F2FE655180&quot;&gt;what&apos;s wrong with Maven&apos;s repositories&lt;/a&gt;. I agree with most of his points, but would like to point out &lt;a href=&quot;http://mvnrepository.com/&quot;&gt;mvnrepository.com&lt;/a&gt;. This site seems to provide good XML Feeds for what&apos;s been uploaded to Maven&apos;s Central Repository. If you&apos;re using Maven, you should probably subscribe to its &lt;a href=&quot;http://mvnrepository.com/feeds/atom.xml&quot;&gt;Atom Feed&lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;
In related news, Timothy M. O&apos;Brien has an entry about &lt;a href=&quot;http://www.oreillynet.com/onjava/blog/2007/04/upcoming_book_ant_in_action_1.html&quot;&gt;Steve&apos;s upcoming book: Ant in Action&lt;/a&gt;. This book is the 2nd edition of &lt;a href=&quot;http://www.manning.com/hatcher/&quot;&gt;Java Development with Ant&lt;/a&gt;. I have a hard time believing Erik Hatcher is helping Steve write Ant in Action - AFAIK, he&apos;s off in Rails-land enjoying himself. Regardless, I&apos;m sure Ant in Action will be an excellent book. Java Development with Ant is one of my favorite technical books of all time and is largely responsible for inspiring me to write &lt;a href=&quot;http://appfuse.org&quot;&gt;AppFuse&lt;/a&gt;. I read JDwA way back in October 2002 and used a lot of its code to develop AppFuse 1.x&apos;s Ant-based build system.&lt;br/&gt;&lt;br/&gt;
Like Tim, I still like Ant. However, AppFuse 2.x uses Maven 2 and most of the projects I work on these days use Maven 2. It may surprise some folks, but I actually like Maven 2 (not Maven 1). Sure it has issues, but after a year of using it in anger, I know how to solve most of its quirks. AppFuse 2.x users will benefit from this greatly and I&apos;m thinking of changing its tagline to &quot;We make Maven work.&quot; &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
One of the most interesting things about moving to Maven is we were easily able to make AppFuse more like a framework than a project starter kit.  We &lt;em&gt;thought&lt;/em&gt; this is what most folks wanted - especially the ability to upgrade a project to the latest version of AppFuse. While &lt;em&gt;some&lt;/em&gt; folks wanted this, it seems like &lt;em&gt;most&lt;/em&gt; folks liked the full-source version that was a pain-in-the-ass to upgrade. I don&apos;t blame them. On the project I&apos;m on, I&apos;ll likely be converting to a full-source version before the project is over. That&apos;s why &lt;a href=&quot;http://issues.appfuse.org/browse/APF-675&quot;&gt;APF-675&lt;/a&gt; exists. I doubt we&apos;ll make it happen for the 2.0 final release, but it &lt;em&gt;is&lt;/em&gt; on our radar of things to do shortly after. With any luck, we&apos;ll create a way to migrate projects using embedded AppFuse to full-source AppFuse.
&lt;br/&gt;&lt;br/&gt;
I&apos;d also like to point out something ironic. With AppFuse 1.x, there were a &lt;em&gt;lot&lt;/em&gt; of folks that advocated we move to Maven. Their primary reasoning - the Ant build scripts were too long and complicated. How about a good ol&apos; lines of XML comparison for those folks:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;Lines of Ant-related XML in AppFuse 1.x: 1655&lt;/li&gt;
&lt;li&gt;Lines of Maven-related XML in AppFuse 2.x: 2847&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oh wait, that&apos;s not a fair comparison. The above number is for AppFuse in SVN, which end users won&apos;t deal with. A new project created with AppFuse 2.x will likely have a pom.xml with 634 lines. That&apos;s about 1/3 of the amount needed for Ant in AppFuse 1.x. Maven hasn&apos;t exactly gotten us away from XML hell though. How about a LOC count for archetypes vs. installers:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;Lines of Ant-related XML for AppFuse 1.x framework installers: 2786&lt;/li&gt;
&lt;li&gt;Lines of Maven-related XML for AppFuse 2.x archetypes (including archetype&apos;s pom.xml files): Too much to count. Creating archetypes is &lt;em&gt;waayyyy&lt;/em&gt; too complicated IMO. Basic archetypes seem to be around 740 lines (pom.xml for archetype project, archetype.xml and archetype&apos;s pom.xml), modular archetypes are around 870. 740 x 4 + 870 x 4 = 6440. I&apos;m guessing the full-source archetypes will add another 5000 lines of XML. Ugh.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This XML-for-archetypes comparison might be unfair as well. With 1.x, you could only create a webapp, with 2.x, you can create a modular application and chop off the web-portion if you so choose.&lt;/p&gt;
&lt;p&gt;
Of course, the real benefits of moving to Maven are elsewhere. We&apos;ve seen quite an uptick on the mailing list in the last few months. There&apos;s &lt;a href=&quot;http://candy4appfuse.sf.net&quot;&gt;tools cropping up&lt;/a&gt; and I&apos;ve gotten quite a few inquiries about training (yes, I do have a 3-day course on Spring, Hibernate, Ajax, Maven and AppFuse). To me, AppFuse 2.x seems more complicated than 1.x, but it seems the community thinks otherwise. Judging from the increased amount of developer activity on the project, developers seem more interested in a Maven-based system too. Then again, we are &lt;em&gt;making Maven work!&lt;/em&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/open_source_cms_evaluation_part</id>
        <title type="html">Open Source CMS Evaluation - Part I: Installation</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/open_source_cms_evaluation_part"/>
        <published>2005-09-23T17:39:04-06:00</published>
        <updated>2007-02-10T20:07:57-07:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <content type="html">Today I began my journey in evaluating Open Source CMS applications.  The motivation for this adventure can be found in my post titled &quot;&lt;a href=&quot;http://raibledesigns.com/page/rd?anchor=building_a_website_with_an&quot;&gt;Building a website with an Open Source CMS&lt;/a&gt;&quot;.  Basically, I&apos;d like to find a good solution to build small-to-medium size websites.  I want full-control over the design and features, and it shouldn&apos;t be too hard to configure, install or administer.  I received many suggestions on my initial post, and thanks to these comments, I&apos;m considering the following CMS solutions:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alfresco.org/&quot;&gt;Alfresco&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cocoondev.org/daisy/&quot;&gt;Daisy&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.magnolia.info/en/magnolia.html&quot;&gt;Magnolia&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bricolage.cc&quot;&gt;Bricolage&lt;/a&gt; (Perl)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cromoteca.com/meshcms/&quot;&gt;MeshCMS&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://atleap.dev.java.net/&quot;&gt;AtLeap&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joomla.org/&quot;&gt;Mambo/Joomla&lt;/a&gt; (PHP)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/&quot;&gt;Drupal&lt;/a&gt; (PHP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The reason &lt;a href=&quot;http://www.opencms.org/opencms/en/&quot;&gt;OpenCms&lt;/a&gt; didn&apos;t make this list is because of Tim Howland&apos;s &lt;a href=&quot;http://www.watchdogsystems.com/opencms/opencms/demos/index.jsp&quot;&gt;first demo&lt;/a&gt; (he left the link in a comment).  As soon as he dropped into a shell, I gave up.  I also tried OpenCMS a couple of years ago and couldn&apos;t get it to work.  I still have a bad taste in my mouth from that experience.
&lt;br /&gt;&lt;br /&gt;Of this list, I was able to eliminate 3 options quite quickly: Bricolage, MeshCMS and AtLeap.  Bricolage b/c their site was down for &lt;em&gt;days&lt;/em&gt; when I first started looking at CMSs.  In addition, it&apos;s written in Perl - of which I&apos;ve never written a single line - and I don&apos;t feel like I&apos;d be well suited to customize a Perl product.  As for MeshCMS and AtLeap, both of these were eliminated b/c of the lack of mailing list traffic. This represents a small community IMO and I&apos;d hate to start using a product that&apos;s not well supported or well documented.  This is unfortunate b/c I could probably customize these products easier than the rest.  Nevertheless, it&apos;s my &lt;em&gt;customers&lt;/em&gt; that are important, not me.
&lt;br /&gt;&lt;br /&gt;
This leaves me with three Java solutions (Alfresco, Daisy, Magnolia) and two PHP solutions (Joomla, Drupal).  I&apos;m not too keen on including Alfresco b/c I&apos;ve never heard of it, but readers of my last post recommended it, as well as my colleague &lt;a href=&quot;http://bill.dudney.net/roller/page/bill/Weblog&quot;&gt;Bill Dudney&lt;/a&gt; (another friend who forgot how to blog).  At first glance, there are a couple of major differences between the Java and PHP solutions.  The Java ones definitely take the cake on download size:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;Daisy 1.3.1: 59 MB&lt;/li&gt;
&lt;li&gt;Magnolia 2.1: 13.4 MB&lt;/li&gt;
&lt;li&gt;Alfresco 0.6 (with Tomcat): 30.3 MB&lt;/li&gt;
&lt;li&gt;Joomla 1.0.1: 1.7 MB&lt;/li&gt;
&lt;li&gt;Drupal 4.6.3: 447 KB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, large downloads is the nature of Java applications - but it&apos;s interesting to see the wide discrepancy b/c the 3 Java options listed here.  In addition, it&apos;s a little disappointing that I can&apos;t download Alfresco standalone - why does it *&lt;a href=&quot;http://www.alfresco.org/download.html&quot;&gt;have&lt;/a&gt;* to come with Tomcat or JBoss? Looking through the Tomcat directories and files - there doesn&apos;t seem to be any Alfresco-specific settings or files.  Why can&apos;t I just download the WAR?&lt;br /&gt;&lt;br /&gt;
My goal in this session was to install these different CMSs and see which were the easiest to install - as well as which had the features I need to continue evaluated them.  What I found was that &lt;strong&gt;Daisy is out of the running&lt;/strong&gt;.  This is primarily because it&apos;s a &lt;em&gt;wiki&lt;/em&gt;, not a CMS. No wonder the JSPWiki guy was impressed with Daisy a few weeks back.  Furthermore, the &lt;a href=&quot;http://cocoondev.org/daisydocs-1_3/13.html&quot;&gt;number of things you have to do&lt;/a&gt; to get Daisy installed is &lt;em&gt;very&lt;/em&gt; long.  
&lt;br /&gt;&lt;br /&gt;
Magnolia, on the other hand, was &lt;em&gt;very&lt;/em&gt; easy to install.  Drop two WAR files into Tomcat and 10 minutes later you have a CMS.  Yeah, that&apos;s a little scary - it took &lt;em&gt;10 minutes&lt;/em&gt; (647740 ms to be exact) to startup Tomcat after installing Magnolia.  While I appreciate the easy installation, I&apos;m still interested to see what kind of data store Magnolia is using.  Is it using an embedded database or what?  I didn&apos;t have time to look, but rather played around with the admin console a bit.  I was &lt;em&gt;very&lt;/em&gt; impressed with the admin console - even though I didn&apos;t figure out how to edit the homepage.  It appears to be using Ajax everywhere. Right-clicking to edit a page even brings up an application menu (rather than a browser menu).  Magnolia is impressive at first glance and will be included in Part II of my evaluation.
&lt;br /&gt;&lt;br /&gt;
Alfresco, with a 0.6 release, was almost off my radar.  The version number makes it seem like a very immature product - and the fact that it requires JDK 5 makes it seem even more immature.  Upon startup, it spit out a number of errors - but they seem to be well documented in its &quot;README_tomcat_linux.txt&quot; file.  I used OS X and despite the errors - everything appeared to be working OK.  However, when I pulled up http://localhost:8080/alfresco, I immediately understood why Bill likes it.  It looks like it&apos;s using JSF, and I&apos;m willing to bet it&apos;s using &lt;a href=&quot;http://myfaces.apache.org&quot;&gt;MyFaces&lt;/a&gt; (he&apos;s a committer on the project). The disappointing thing I noticed after pulling up the initial page is that it&apos;s a login page.  I&apos;d expect to see a &lt;em&gt;reader view&lt;/em&gt; initially rather than an &lt;em&gt;admin view&lt;/em&gt;. After logging in, the interface seems very nice and easy to work with.  However, after 30 seconds of clicking on stuff, I can&apos;t figure out how to get the reader view to show up - so I give up.  I&apos;m going to let this CMS graduate to Part II, but only because I didn&apos;t spend much time with it - and also because the UI looks quite polished.
&lt;br /&gt;&lt;br /&gt;
I installed and played around with Daisy, Magnolia and Alfresco all in a 3-hour period today.  First of all, I&apos;d like to give props to all the authors of these OS projects as each was installable according to its instructions and I didn&apos;t have to google for a single setting.  I installed Joomla and Drupal last week - both in under 10 minutes.  Joomla was definitely more impressive - mainly because it&apos;s &lt;a href=&quot;http://demo.joomla.org/&quot;&gt;default homepage&lt;/a&gt; (note: this can change every hour) looks pretty cool. Drupal, on the other hand, is a bit more &lt;em&gt;plain jane&lt;/em&gt;.  This is not a bad thing necessarily - as it might be easier to design with a clean slate rather than remove-features, then-design.  I did have to install PHP4 on my Mac to run both of these packages, but &lt;a href=&quot;http://serverlogistics.com/downloads.php&quot;&gt;Server Logistics&lt;/a&gt; made that super easy.  I also tried to install Joomla 1.0 on my Windows box (which has Apache 4.0.7 and PHP 4.3.3 from &lt;a href=&quot;http://openlogic.com/page.php?pname=software/overview&quot;&gt;BlueGlue&lt;/a&gt;), but it failed halfway through the install with errors that my user/pass for the database were wrong. Not a big deal, but frustrating since it works fine on the Mac (and yes, the user/pass I&apos;m using are correct).
&lt;br /&gt;&lt;br /&gt; 
Watch this space.  Part II will address customizing each CMS to use an already-created theme, as well as playing around with each&apos;s features.  I&apos;d prefer a package that has built-in support for multi-author blogs - so that might make Magnolia and Alfresco look bad.  However, I&apos;m not going to hold it against them since I&apos;m a &lt;a href=&quot;http://www.rollerweblogger.org/page/project&quot;&gt;Roller&lt;/a&gt; fan and committer.  I don&apos;t mind using a 2nd application for blogging - especially if the built-in package is less than full-featured.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Conclusion:&lt;/strong&gt; Alfresco, Magnolia, Joomla and Drupal are the easiest open source CMS applications to install (of the ones I looked at). Daisy was easy to install according to its instructions (of which there were many), but it&apos;s more of a Wiki than a CMS.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Update on Saturday at 1:00 p.m.&lt;/strong&gt; - Based on reader&apos;s feedback to this post, I went ahead and installed three more: &lt;a href=&quot;http://plone.org/&quot;&gt;Plone&lt;/a&gt;, &lt;a href=&quot;http://ez.no&quot;&gt;eZ publish&lt;/a&gt; (gotta love the domain name) and &lt;a href=&quot;http://www.opencms.org&quot;&gt;OpenCMS&lt;/a&gt;.  All the previous CMS applications I installed on OS X, and I installed these 3 on Windows XP. I installed OpenCMS first, and while the setup was easy, it took &lt;em&gt;18 minutes&lt;/em&gt; to finish its importing of data.  My Windows machine is easily 2x as fast as my PowerBook, so my guess is this would&apos;ve been quite painful on the ol&apos; Mac.  Regardless, it&apos;s a one time wait-fee, so I can&apos;t really ding them for that.  I played around with the Admin UI for about 5 minutes and found it &lt;em&gt;extremely&lt;/em&gt; easy to use - as well as intuitive.  I dig how you can view the content and edit it very easily.  I never had to read any documentation to figure out how to work this system.&lt;br /&gt;&lt;br /&gt;
Next up was eZ publish.  It took a bit of fiddling to get the installation to work.  I had PHP 4.3.3 installed with Apache 2.0.47, and I upgraded to PHP 4.4 before trying anything.  While setting up eZ publish, it told me it didn&apos;t work with 4.4, so I backed down to 4.3.3, after which it told me I needed &lt;em&gt;at least&lt;/em&gt; 4.3.4.  Thankfully, PHP is easy to install and upgrade on Windows and I got it all working fairly quickly.  Of the three (and all the CMS&apos;s in fact), eZ publish has the nicest installer.  The whole application and process gave me the feeling that it was the product I was looking for.  It&apos;s designed to help you setup a website, and allows you to choose templates, features, etc. along the way.  At the end, it stalls for a couple minutes - probably b/c it&apos;s creating everything and populating the database.  The first thing I didn&apos;t like was the URLs (/index.php/feature). I wonder if that can be changed to be more path-based?  Having an extension followed by additional slashes just doesn&apos;t seem right to me.  From there, I logged in as an administrator and started playing around with things a bit.  The Weblog feature seems very inadequate and doesn&apos;t even seem to support RSS.  In addition, I couldn&apos;t figure out how to edit any of the templates in my browser.  But the worst part was the admin UI was &lt;em&gt;sssllloooowwww&lt;/em&gt;.  It could have been b/c I had other stuff running, but I don&apos;t think so.  eZ publish seems like a good system to recommend to friends who want quick and easy websites, but I don&apos;t think it&apos;s one for me.
&lt;br /&gt;&lt;br /&gt;
The last CMS I installed was Plone.  It was easy to install on Windows, but only b/c it has an all-in-one installer.  I found it a bit strange that it doesn&apos;t install in a web server, but rather contains everything as part of the package.  This includes Python, its own web server, and its own database (I&apos;m assuming).  It&apos;s an easy install, but I like the idea of installing a CMS into an existing web server rather than having a CMS with an embedded web server.  The admin UI is simple enough to use, but it&apos;s very boxy and seems like it would be difficult to customize into a corporate or small business website.  Please let me know if you feel this to be untrue (pointing to existing &lt;em&gt;nice-looking&lt;/em&gt; installations would help).  I didn&apos;t like the fact that it highlights &lt;em&gt;members&lt;/em&gt; quite prominently, but that can probably be fixed with some good template-tweaking.  The most disappointing thing I found was that I was unable to edit &quot;skins&quot; within the admin console.  You have to download a separate package, customize it yourself, and then install it.  What a pain, especially since I&apos;d really like to be able to 1) modify template, 2) save and 3) view - just like this site allows me to do.  For this reason, as well as the embedded server feature, I&apos;m going to have to pass on Plone as well. 
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Conclusion 2:&lt;/strong&gt; Alfresco, Magnolia, Joomla, Drupal and OpenCMS are the CMS applications I will continue to evaluate this weekend.  I have to make a decision by Monday morning so I can start building a site with it.  If any of these CMS&apos;es don&apos;t allow me to customize its templates from a browser, please let me know so I can take it off my list.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Update on Sunday at 9:30 a.m.&lt;/strong&gt; - I&apos;m going to drop Alfresco and add MeshCMS for &lt;a href=&quot;http://raibledesigns.com/comments/rd/sunsets/open_source_cms_evaluation_part#comment21&quot;&gt;reasons stated here&lt;/a&gt;.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/building_a_website_with_an</id>
        <title type="html">Building a website with an Open Source CMS</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/building_a_website_with_an"/>
        <published>2005-09-12T11:48:14-06:00</published>
        <updated>2007-02-10T20:07:57-07:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <content type="html">I think the open source community has done an excellent job of figuring out how to create frameworks for developing web applications.  But what about &lt;em&gt;websites&lt;/em&gt;.  You know, the web presence that every company wants - for minimal cost.  For most companies, it&apos;s nothing more than 5-10 pages that tells a bit about the company, show some management folks and tells you how to get to their offices.&lt;br /&gt;&lt;br /&gt;
I&apos;ve developed many websites over the years, many that were static, but more that were dynamic. The unfortunate thing about all of them is they required someone technical to update them.  Often, the client had to contact me if they wanted anything new on the site.  I&apos;ve often thought there was a better solution - and I think I&apos;m at a point where I know what customers want, and I know how to provide it.  The solution is a Content Management Solution (CMS). One of the biggest problems with static websites is they&apos;re not dynamic enough.  A CMS can alleviate this problem by reducing the bottleneck that a traditional &quot;webmaster&quot; creates.
&lt;br /&gt;&lt;br /&gt;
In my mind, there are a couple of things that make a good CMS: 1) it&apos;s open source (to minimize costs to the client) and 2) it&apos;s easy to customize.  On the customization front, my demands are a bit more rigorous - mainly because I know what many folks want in a website.  Here are my main criteria for a good open source CMS  - when it&apos;s used to power a regular ol&apos; client-updateable website:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;strong&gt;Design customization:&lt;/strong&gt; I should be able to customize all the (X)HTML that&apos;s generated using one or two files (like SiteMesh allows). It should be possible to change the look and feel of *everything* by modifying some CSS.  It should also be possible to use Mike Stenhouse&apos;s &lt;a href=&quot;http://www.contentwithstyle.co.uk/Articles/17/a-css-framework&quot;&gt;CSS Framework&lt;/a&gt; to simplify layout choices for clients. Ideally, a web designer or regular ol&apos; HTML person could do the customization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static-looking URLs:&lt;/strong&gt; The site should look like a static site.  The URLs should be all lowercase and end with .html.  It should be possible to modify all the URLs to look as if all pages are static.  Apache&apos;s mod_rewrite and the URL Rewrite Filter are great tools for making this happen, but it&apos;d be nice if the administration of the application allowed for setting these rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It shouldn&apos;t look like a CMS:&lt;/strong&gt; No login links, no registration links, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ability to easily add dynamic content:&lt;/strong&gt; It should be easy to add dynamic content - such as RSS Feed headlines to pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Menu Customization:&lt;/strong&gt; In the application, it should be possible to create menus (both main and local navigation) and configure a page to highlight a menu when a particular page is shown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versioning of pages:&lt;/strong&gt; In case someone messes something up, it should be easy enough to revert back to a previous version.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy to use:&lt;/strong&gt; It should be possible to train a marketing person (with little technical knowledge) how to use the system in 10-15 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For technical companies (such as &lt;a href=&quot;http://virtuas.com&quot;&gt;Virtuas&lt;/a&gt;), there are a few additional requirements I&apos;d like to see:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;strong&gt;Articles with syntax highlighting:&lt;/strong&gt; It should be easy to publish articles with code that&apos;s colorized.  The &lt;a href=&quot;http://www.java2html.de/&quot;&gt;Java2HtmlPlugin for JSPWiki&lt;/a&gt; is a good example of this.  I currently don&apos;t know of any for XHTML, XML or scripting languages like Ruby or Python.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Upload:&lt;/strong&gt; For uploading white papers and other technical publications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So I&apos;ve started looking at open source CMS&apos;s that fill my requirements.  Last weekend, I wrote a solution that fills all of these requirements using SiteMesh, JSPWiki, CSS Framework, Acegi Security and the URL Rewrite Filter. It only took me about 6 hours to complete, but after completing it - I started wondering if I really wanted to start another open source project and maintain it.  The answer is no, I don&apos;t want to create something new - I want to use something that&apos;s already out there.  However, since I do have something that satisfies all my requirements, I will use it if I can&apos;t tweak an existing OS CMS enough.
&lt;br /&gt;&lt;br /&gt;
Here are a list of CMS&apos;s that I&apos;ll be looking at in the next week or so.  If you&apos;re associated with any of these projects, please leave a comment and let me know how many of my requirements you satisfy.&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://cocoondev.org/daisy/&quot;&gt;Daisy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.magnolia.info/en/magnolia.html&quot;&gt;Magnolia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bricolage.cc&quot;&gt;Bricolage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://phpwebsite.appstate.edu&quot;&gt;phpWebsite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joomla.org/&quot;&gt;Mambo/Joomla&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I&apos;m a bit hesitant on Daisy b/c it requires XSLT knowledge for design customization. Magnolia has long URLs and doesn&apos;t appear like a static site - and the PHP ones often have .php in their URLs.  It should be an interesting investigation to see if these (seemingly) heavyweight solutions can solve a few simple requirements.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/integrating_lucene_with_hibernate</id>
        <title type="html">Integrating Lucene with Hibernate</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/integrating_lucene_with_hibernate"/>
        <published>2005-08-17T22:19:09-06:00</published>
        <updated>2007-02-10T20:07:57-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">The &lt;a href=&quot;http://jroller.com/page/wireframe?entry=simple_hibernate_search_engine&quot;&gt;code_poet&lt;/a&gt; has an interesting post on using a Hibernate interceptor to index objects for Lucene searching.  I&apos;ve been thinking about integrating Lucene into AppFuse (or at least providing a tutorial) for quite some time.  Hopefully this post will serve as a starting point when I do.  I wonder how much the Lucene code can be simplified by the Spring support in the &lt;a href=&quot;https://springmodules.dev.java.net/&quot;&gt;Spring Modules&lt;/a&gt; project?</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/oscon_wednesday_morning</id>
        <title type="html">[OSCON] Wednesday Morning</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/oscon_wednesday_morning"/>
        <published>2005-08-03T11:15:08-06:00</published>
        <updated>2007-02-10T20:07:57-07:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <content type="html">I got a good night&apos;s sleep last night so I&apos;d be fresh and ready for the &lt;em&gt;&lt;a href=&quot;http://conferences.oreillynet.com/cs/os2005/view/e_sess/6831&quot;&gt;Smackdown&lt;/a&gt;&lt;/em&gt; today.
    Matthew Porter, Scott Delap and I visited &lt;a href=&quot;http://www.jivesoftware.com/&quot;&gt;Jive
    Software&apos;s&lt;/a&gt; offices last night and had a great time sipping suds in their
    beautiful downtown office. 
&lt;br /&gt;&lt;br /&gt;
My AppFuse tutorial yesterday was well-received by a packed room of developers.  Rather than writing code the whole time and doing a measly 30-slides, I added a bit more meat about Spring, Hibernate and testing. Most of audience was unfamiliar with Spring, so this seemed like the right thing to do.  
Of course, this led to more talking and less coding, but most of the folks I talked to were nevertheless very happy with the tutorial.  If you&apos;d like, you can &lt;a href=&quot;http://appfuse.dev.java.net/TDDWithAppFuse.pdf&quot;&gt;download my presentation&lt;/a&gt; from the event.
&lt;br /&gt;&lt;br /&gt;
Thanks to &lt;a href=&quot;http://www.robharrop.com/blojsom/blog/&quot;&gt;Rob Harrop&lt;/a&gt; and &lt;a href=&quot;http://www.jroller.com/page/buggybean&quot;&gt;Thomas Risberg&lt;/a&gt; for both letting me know about the lack of Spring experience, as well as sitting in on my session.  It was pretty cool having these guys in the room, as well as SiteMesh/jMock inventor &lt;a href=&quot;http://joe.truemesh.com/blog/&quot;&gt;Joe Walnes&lt;/a&gt;. Without these guys, many of the cool features in AppFuse would not be possible.
&lt;/p&gt;
&lt;p&gt;Now I&apos;m sitting in the beginning Keynote session at OSCON, where they&apos;ve announced
    they have a record 2000 attendees this year. In addition, it looks like OSCON
    is in Portland for the long run - this is the 3rd year it&apos;s been in Portland.
    Rather than moving to a new city like they used to, they&apos;ve decided to stay
    b/c conference attendees like it so much. &lt;/p&gt;
&lt;p&gt;The &amp;quot;unofficial&amp;quot; tagline of the conference is &lt;em&gt;fun.&lt;/em&gt; Open
    source is fun and exciting - both to develop and use. This is in stark contrast
    to closed source software that tries to stay stable and boring, with no surprises. &lt;/p&gt;
&lt;p&gt;When O&apos;Reilly&apos;s &lt;a href=&quot;http://codezoo.com&quot;&gt;CodeZoo&lt;/a&gt; launched, it only
    listed Java open source projects. As of today, they&apos;ve added 
    &lt;a href=&quot;http://python.codezoo.com&quot;&gt;python.codezoo.com&lt;/a&gt; and &lt;a href=&quot;http://ruby.codezoo.com&quot;&gt;ruby.codezoo.com&lt;/a&gt;, in addition to &lt;a href=&quot;http://java.codezoo.com&quot;&gt;java.codezoo.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim O&apos;Reilly &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O&apos;Reilly is not just book publisher or conference producer - but also a company
    that looks to the future and tries to figure out what&apos;s next. To highlight
    this vision, they&apos;ve created &lt;a href=&quot;http://radar.oreilly.com/&quot;&gt;O&apos;Reilly
    Radar&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We&apos;re currently going through &amp;quot;The Open Source Paradigm Shift&amp;quot;. Integration
    of commodity components has led to a new model where value gets captured.
    Rather than being at the software level, it&apos;s at the services level.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Questions for Open Source Advocates&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;Will &amp;quot;web 2.0&amp;quot; be an open system? What do &amp;quot;open services&amp;quot; look like?&lt;/li&gt;
    &lt;li&gt;Data as the &amp;quot;Intel Inside&amp;quot; - will we end up needing a Free Data Foundation
            in 2010?&lt;/li&gt;
    &lt;li&gt;How does the paradigm shift change our business models and development
        practices?&lt;/li&gt;
    &lt;li&gt;Who shoujld we be watching and learning from? &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Things on O&apos;Reilly&apos;s Radar&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;&lt;strong&gt;Ruby on Rails:&lt;/strong&gt; new platform and new language. May well be the Perl of
        Web 2.0.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;GreaseMonkey:&lt;/strong&gt;  a Firefox extension that alters websites to fit your
        view. A website is traditionally closed. GreaseMonkey &amp;quot;opens up&amp;quot; a website
        and rewrites it for the user.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;HousingMaps.com:&lt;/strong&gt; leveraging Google Maps and existing data from a
        bunch of different webservices to build a better website.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Ajax:&lt;/strong&gt; html, javascript and css. The &amp;quot;css&amp;quot; tag on del.icio.us has gone
        down as the &amp;quot;ajax&amp;quot; tag has gone up.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Findory:&lt;/strong&gt; Uses the articles you like in blogs and news, and finds similar
        articles. Similar to Amazon&apos;s recommendation system. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Internet Telephony:&lt;/strong&gt; Asterisk in particular. Skype and Broadvoice. Broadvoice
        is pushing BYOD (Bring Your Own Device). &lt;/li&gt;
    &lt;li&gt; &lt;strong&gt;HomeBrew&lt;/strong&gt;: similar to Tivo.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Firefox&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Opening up hardware&lt;/strong&gt;, not just software - i.e. Car PC Hacks, Smart Home
        Hacks. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more, go to the Visualizing Technology Trends on Thursday afternoon.
        For the first time, the computer book market has stabilized. This is
        a good sign that the computer industry is about to start rebounding.
        As far as the book market goes, it&apos;s market share and growth - Java still
        leads the pack by a pretty wide margin. A large reason of this is due
        to Open Source Java. &lt;a href=&quot;http://www.simplyhired.com/&quot;&gt;SimplyHired.com&lt;/a&gt; spiders
        7.9M jobs on 755 different job boards. General books on Linux are up,
        especially non-RedHat distros. Books on RedHat have decreased significantly.        &lt;/p&gt;
&lt;p&gt;This is an interesting conference to be at when you&apos;re a Java developer.
            For the most part, everyone seems to be Perl fans, followed by Python,
            and a few Ruby guys. Most of these developers are very vocal about
    the fact that they don&apos;t like Java. Then again, Java is the leader in many
            areas - and it&apos;s the &lt;em&gt;open source way&lt;/em&gt; to hate the guy on
            top.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kim Polese, SpikeSource&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Building on the Architecture of Participation. A transformation from Do It
    Yourself (DIY) to Do It Together (DIT). Thanks to the architecture of participation,
    open source has achieved World Domination - as evident by governments mandating
    it and IBM pouring billions into it. &lt;/p&gt;
&lt;p&gt;The architecture is characterized by:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;Commoditization of software&lt;/li&gt;
    &lt;li&gt;Network-enabled
                        collaboration&lt;/li&gt;
    &lt;li&gt;Software customizability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In Phase I, we built and we built with. Open source had DIY origins. Now we&apos;re
    in Phase II, where increasingly the action is out in the &lt;em&gt;long tail&lt;/em&gt;.
    Countless new building materials are piling up on the long tail. Now it&apos;s
    possible to build just about anything with anything. IT shops are building
    a phenomenal set of DIY &amp;quot;packages&amp;quot; that combine components from both ends
    of the curve.&lt;/p&gt;
&lt;p&gt;The two problems with this:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;&lt;strong&gt;Velocity mismatch: &lt;/strong&gt;all components are on different release schedules.
        Linux, Apache, MySQL - all on a different release schedule. In addition,
        the ones on the other side (Lucene, Struts, Mambo) are on a different
        cycle.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Dependencies:&lt;/strong&gt; When one version of one product changes
        - what happens to all the dependencies?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To solve these problems, companies are developing formalized proceses like
    review boards, support centers, OSS incubation centers, testing groups and
    they&apos;re certifiying / defining stacks internally. Most of
    this work is laborius and not related to the core competency of the business. &lt;/p&gt;
&lt;p&gt;What&apos;s next? Phase III - IT becomes core. They do this by offloading critical
    but non-strategic work to independent service companies. DIY evolves into
    DIT with the help of independent service companies. Of course, this is all
    leading up to the fact that SpikeSource provides these services. It&apos;s funny
    that as soon as Kim said &amp;quot;SpikeSource&amp;quot; - all the presentation screens in
    the room quit working (not on purpose). A minute later they&apos;re back. This
    goes to show that marketing is not liked by the Open Source Gods. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;quot;Testing is the single biggest refactoring shift in sofware.&amp;quot; - J.P. Rangaswami,
    CIO, DrKW. &lt;/p&gt;
&lt;p&gt;We need testing on a massive skale. For this reason, Murugan Pal
        and Ray Lane started SpikeSource. They saw the next phase is testing
    open source software so we can scale testing, together. Solve velocity mismatch
        and dependency problems with rapid per-defect patch management and dynamic
        stack configuration. &lt;/p&gt;
&lt;p&gt;Testing has always been the software&apos;s ugly stepchild.
        We need to scale open source testing the way we scaled open source development.
        Some perspective: Microsoft has a 1:1 ratio of developers to QA Engineers.
    There&apos;s no Microsoft for open source software, nor should there be. To solve
    testing on a massive scale, you need participation &lt;em&gt;plus&lt;/em&gt; automation.
    For models of how both scale, think eBay, Google and Amazon. Their best assets
        were their customers that supplied data that made their services more
    useful. &lt;/p&gt;
&lt;p&gt;Testing is just one service among many. The Linux distros and middleware core
    building blocks have been there for awhile. Now we have applications and
    service companies as well. Who benefits when we have abundant integrated,
    tested, validated automatically patched stacks? IT and ISVs shift high-value
    development resources to customer-faces - differentiating features and services.
    In addition, many other groups benefit and higher quality software gets developed. &lt;/p&gt;
&lt;p&gt;Testing will do for open source what it did for chip design a generation earlier.
    Testing is what catapulted the chip industry forward in the 80s. The new
    testing tools moved VLSI foward. Countless new IC-powered products were made
    possible and at much faster development speeds. Solving the testing problem
    can&apos;t be done by one company alone. &amp;quot;Come Test with Us...&amp;quot;&lt;/p&gt;
&lt;p&gt;After Kim, another speaker (Andrew from &lt;a href=&quot;http://www.osdl.org/&quot;&gt;OSDL&lt;/a&gt;)
    began his talk. He talked in a monotone and lacked a presentation. The room
    quickly began to leak people, me being one of them.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/jug_central_and_bpel</id>
        <title type="html">[DJUG] JUG Central and BPEL</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/jug_central_and_bpel"/>
        <published>2005-02-10T07:05:39-07:00</published>
        <updated>2007-02-10T20:07:56-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">Last night, I attended Denver&apos;s JUG meeting.  Below are my notes from the event.
&lt;br /&gt;&lt;br /&gt;
I&apos;m at DJUG listening to Christian and Kris (from &lt;a href=&quot;http://adigio.com/&quot;&gt;Adigio&lt;/a&gt;)
    talk about their experience with using Spring, WebWork, Hibernate, Lucene
    and SiteMesh to develop &lt;a href=&quot;http://www.jugcentral.com/jug_find.jsp&quot;&gt;JUG
    Central&lt;/a&gt; (I wonder if they knew
    &lt;a href=&quot;http://www.jadcentral.com/jugcentral/&quot;&gt;this name and concept already
    exists&lt;/a&gt;?). JSPs are for the view and MySQL powers
    the data. This presentation is designed to explain a bit about each framework,
    and also tips/tricks and pitfalls they experienced when developing the site.
    They started working on the application in August of last year and deployed
    it into production in December. &lt;/p&gt;
&lt;p&gt;Christian said they weren&apos;t going to go into the &lt;em&gt;how &lt;/em&gt;for each framework,
    but Kris has had quite a few slides on SiteMesh so far. I don&apos;t blame him
    - it&apos;s a great tool and only a handful of folks (of about 50-60) have heard
    of it. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SiteMesh Pitfalls: &lt;/strong&gt;Poor integration with Velocity and some
    other frameworks. BTW, if you&apos;re using Tapestry - &lt;a href=&quot;http://www.blogscene.org/erik&quot;&gt;Erik
    Hatcher &lt;/a&gt;recently
    created a JIRA patch with a &lt;a href=&quot;http://jira.opensymphony.com/browse/SIM-165&quot;&gt;Tapestry
    Decorator&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now Kris is talking about WebWork and since he&apos;s a &lt;em&gt;framework
        junkie&lt;/em&gt;, apparently
    this is going to be the largest part of the presentation. I think one of
        the nicest parts of WebWork is its auto-type conversion. The only other
        frameworks I&apos;ve seen that have this is are JSF and Tapestry. For those
        that like WebWork and don&apos;t like JSF - you might find it disturbing that
        the WebWork actions (and their tests) in AppFuse are &lt;em&gt;very&lt;/em&gt; similar to
        the JSF managed beans. I would take it as a compliment if I were a WebWork
        developer.&lt;/p&gt;
&lt;p&gt;One nice thing about XWork&apos;s action configuration is you can specify a &amp;quot;method&amp;quot;
    parameter for a particular action. Struts recently added this with its &lt;code&gt;&lt;a href=&quot;http://struts.apache.org/api/org/apache/struts/actions/MappingDispatchAction.html&quot;&gt;MappingDispatchAction&lt;/a&gt;&lt;/code&gt;.
    I&apos;m using this on my current project and it works quite well. Kris really
    likes WebWork&apos;s front-page controller pattern - where you use the &amp;lt;ww:action&amp;gt;
    tag to execute the action when the page is loaded. Personally, I don&apos;t have
    a problem with going through actions to get to my view templates. Kris finished
    up his WebWork piece with a plug for AppFuse (thanks!) and WebWork in Action.
    Congrats to all the authors - wonder if it&apos;ll be published before &lt;a href=&quot;http://www.sourcebeat.com/TitleAction.do?id=6&quot;&gt;WebWork
    Live&lt;/a&gt;? &lt;/p&gt;
&lt;p&gt;Now Christian is talking about Hibernate and its mapping files - and how you
    can generate your database schema from them - or generate your mapping files
    from a database. They used XDoclet to generate the mapping files in this
    particular project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hibernate Pitfalls: &lt;/strong&gt;Think about lazy-loading early. Problems
    arise when you try to share Hibernate-managed objects across (Hibernate)
    sessions transparently. Christian mentions that Spring&apos;s &lt;a href=&quot;http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/OpenSessionInViewFilter.html&quot;&gt;&lt;code&gt;OpenSessionInViewFilter&lt;/code&gt;&lt;/a&gt;    is a nice way to solve the problem. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hibernate Tips:&lt;/strong&gt; Spring simplifies using Hibernate and makes
    declarative transactions easy. Read &lt;a href=&quot;http://www.manning.com/bauer/&quot;&gt;Hibernate
    in Action&lt;/a&gt; before starting
    development. Plan to spend some time learning how to express your data model
    with Hibernate relationships (one-to-one, one-to-many, many-to-many, etc.).&lt;/p&gt;
&lt;p&gt;Christian is now talking about Spring and how it works. After thinking and
    writing about Spring so much in the last year, I&apos;ll just skip over regurgitating
    this part. ;-) His main recommendation: use real injection instead of &lt;code&gt;appContext.getBean(&amp;quot;beanName&amp;quot;)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Other tools used: Lucene for searching and POI for indexing Word, Excel and
    PowerPoint files. Velocity used for templating e-mail messages. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Service-oriented Architecture (SOA) with Business Process Execution
        Language (BPEL)&lt;br /&gt;
        &lt;/strong&gt;Presented by Kevin Geminiuc and Owen Newnan from &lt;a href=&quot;http://policy-studies.com/&quot;&gt;Policy Studies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This point of this presentation is to communicate what it&apos;s like to implement
    BPEL in a J2EE Container. BPEL is a layer on top of web services. BPEL is
    a programming language that you can use to program business processes. Allows
    you to divorce your business process from being human-centric to being document-centric.
    At Policy Studies, they&apos;re using iLog JRules rules engine and Oracle&apos;s BPEL
    implementation. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Benefits:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Process Visiblity&lt;/li&gt;
    &lt;li&gt;Process Agility&lt;/li&gt;
    &lt;li&gt;Powerful Language&lt;/li&gt;
    &lt;li&gt;Open&lt;/li&gt;
    &lt;li&gt;Backed by &amp;quot;the Big Boys&amp;quot; (BEA, Microsoft, IBM) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;History: &lt;/strong&gt;Formerly knows as BPEL4WS, WSBPEL. Open standards
    based. Orchestrates web services with SOA.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where we are today: &lt;/strong&gt;Emerging technology (prepare to bang
    your head against the wall). .NET and Java products exist, as well as J2EE
    container integration.&lt;/p&gt;
&lt;table width=&quot;600&quot; class=&quot;comparison&quot;&gt;
    &lt;tr&gt;
        &lt;th&gt;BPEL is:&lt;/th&gt;
        &lt;th&gt;BPEL is not:&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td style=&quot;vertical-align: top&quot;&gt;&lt;ul&gt;
            &lt;li&gt;A programming language for business processes&lt;/li&gt;
            &lt;li&gt;A language for specifying e-business transactions&lt;/li&gt;
            &lt;li&gt;XML-based layer atop WSDL&lt;/li&gt;
            &lt;li&gt;A declarative and procedural language &lt;/li&gt;
        &lt;/ul&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: top&quot;&gt;&lt;ul&gt;
            &lt;li&gt;Designed for human workflow&lt;/li&gt;
            &lt;li&gt;A JSR spec (&lt;a href=&quot;http://www.jcp.org/en/jsr/detail?id=207&quot;&gt;207&lt;/a&gt; and &lt;a href=&quot;http://www.jcp.org/en/jsr/detail?id=208&quot;&gt;208&lt;/a&gt; are related though)&lt;/li&gt;
            &lt;li&gt;Mature Technology&lt;/li&gt;
            &lt;li&gt;Your typical web services application
                    &lt;ul&gt;
                        &lt;li&gt;asynchrony as well as synchrony&lt;/li&gt;
                        &lt;li&gt;callbacks&lt;/li&gt;
                        &lt;li&gt;composite synchronous services&lt;/li&gt;
                    &lt;/ul&gt;
            &lt;/li&gt;
        &lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;BPEL &amp;amp; WS Standards: &lt;/strong&gt;BPEL, XPath, WSDL, WS-Addressing,
    SOAP, XML-Schema, WSIF (Axis), TBD (WS-ReliableMessaging and JSRs 207/208).
    Note that since BPEL depends on web services (which is not a truly reliable
    service). Because of this, there are some proprietary extensions
    available.&lt;/p&gt;
&lt;p&gt;At this point, I became bored with the presentation and quit taking notes.
    While the speakers had good intentions with their knowledge sharing, their
    delivery needed some work. The code walkthrough and demos were presented
    with a monotonous and unexcited tone, and a handful of folks left during
    this part. In summary, BPEL looks like a good way to orchestrate your various
    business processes. It allows you to call web services, EJBs and whatnot
    simply by defining their locations and methods in XML. &lt;/p&gt;
&lt;p&gt;In his demo, Kevin
        used Oracle&apos;s BPEL Designer, which is an &lt;a href=&quot;http://www.oracle.com/technology/products/ias/bpel/index.html&quot;&gt;Eclipse
        plugin&lt;/a&gt; that has
        a nice drag-n-drop editor for managing your BPEL XML files. He also used
        Oracle&apos;s &lt;a href=&quot;http://www.oracle.com/technology/products/ias/bpel/index.html&quot;&gt;BPEL
        Process Manager&lt;/a&gt;, which seemed to be a lot like Jetspeed - you just

        drop in the .ear and then deploy your processes to it. The only bad part
        about the Process Manager is it&apos;s administration/deployment interface
        only runs in IE. &lt;/p&gt;
&lt;p&gt;If you&apos;re using BPEL in your projects, I&apos;d be interested to hear the tools
    you&apos;re using. As far as open-source BPEL process engines, they mentioned
    &lt;a href=&quot;http://www.smartcomps.org/twister/&quot;&gt;Twister&lt;/a&gt; and &lt;a href=&quot;http://www.activebpel.org/&quot;&gt;ActiveBPEL&lt;/a&gt;.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/denver_s_no_fluff_just1</id>
        <title type="html">Denver&apos;s No Fluff Just Stuff starts today</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/denver_s_no_fluff_just1"/>
        <published>2004-11-12T09:11:55-07:00</published>
        <updated>2007-02-10T20:07:56-07:00</updated> 
        <category term="/Java/NFJS" label="NFJS" />
        <content type="html">It&apos;s time for another NFJS conference.  I &lt;a href=&quot;http://raibledesigns.com/page/rd/20040521#denver_s_no_fluff_just&quot;&gt;attended&lt;/a&gt; the one in June and had an awesome experience.  I doubt I&apos;ll cover it as much as I did last time, that&apos;s just a lot of work - not to mention my cell phone&apos;s data bill was $300!  As I look through the sessions, I&apos;m noticing that it&apos;s a great thing to attend 2 of these conferences - b/c you can skip all the sessions you saw the first time.  Since there&apos;s usually 2-3 good ones per time slot, reducing that down to 1-2 is nice.
&lt;br /&gt;&lt;br /&gt;
This afternoon, I&apos;m planning to attend sessions by Erik Hatcher and Stuart Halloway.  Erik for Ant 1.6 and Subversion (maybe even Lucene) and Stuart for &quot;dynamic, reflective languages&quot;.  Since much of AppFuse&apos;s build.xml is based on Erik&apos;s Java Dev with Ant sample app, it&apos;d be nice to figure out how to take advantage of 1.6 features (especially since &lt;a href=&quot;http://raibledesigns.com/page/rd?anchor=aren_t_out_of_container&quot;&gt;1.6.2 is required&lt;/a&gt;). I&apos;ve never seen Stuart speak before, but I&apos;ve heard he&apos;s excellent.
&lt;br /&gt;&lt;br /&gt;
Saturday I plan on learning more about Tapestry from Erik (in a 3-hour session!).  Since adding Tapestry to AppFuse is my next open-source development effort, this weekend and ApacheCon are good opportunities to learn more about it.  I know, I should just buck up and read the book (I made it to page 100 a couple of weeks ago, nothing since), but it&apos;s tough to find the time.
&lt;br /&gt;&lt;br /&gt;I&apos;ll probably skip out tomorrow afternoon and work on Spring Live since Chapter 10 is due by Monday and I&apos;m not done yet.  Sunday, I&apos;ll be talking about AppFuse making open-source easier.  &quot;Brain, get ready to be stuffed.&quot;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/tapestry_and_hibernate_tutorial</id>
        <title type="html">Tapestry and Hibernate Tutorial</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/tapestry_and_hibernate_tutorial"/>
        <published>2004-08-24T21:40:49-06:00</published>
        <updated>2007-02-10T20:07:56-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">Wanna use Hibernate with your Tapestry application?  Or maybe learn about Tapestry for the first time?  If so, &lt;a href=&quot;http://www.warneronstine.com/cgi-bin/blosxom.cgi/&quot;&gt;Warner&lt;/a&gt; has a &lt;a href=&quot;http://www.sandcastsoftware.com/articlesandtutorials/brownbag/index.html#tapestry&quot;&gt;great set of tutorials&lt;/a&gt;.  His first tutorial on creating a CRUD application with Tapestry was exactly what I needed - right when I needed it - thanks Warner!  I&apos;m looking forward to his next tutorials, especially Spring, Hivemind and Lucene.  Integrating Spring with Tapestry  is pretty simple - we&apos;ll have to see how Hivemind compares.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/a_few_thoughts_on_appfuse</id>
        <title type="html">A few thoughts on AppFuse</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/a_few_thoughts_on_appfuse"/>
        <published>2004-01-23T06:58:11-07:00</published>
        <updated>2007-02-10T20:07:56-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">I&apos;ve been thinking about how to structure &lt;a class=&quot;wikipage&quot; href=&quot;http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse&quot;&gt;AppFuse&lt;/a&gt; for the upcoming Spring and iBatis enhancements.  These enhancements shouldn&apos;t require any directory structure changes. However, I&apos;ve received some suggestions to change the &lt;i&gt;common&lt;/i&gt;, &lt;i&gt;ejb&lt;/i&gt; and &lt;i&gt;web&lt;/i&gt; directory structure to be a little more inline with the tiers.  So it would become something more like &lt;i&gt;database&lt;/i&gt;, &lt;i&gt;business&lt;/i&gt; and &lt;i&gt;web&lt;/i&gt; (or &lt;i&gt;dao&lt;/i&gt;, &lt;i&gt;service&lt;/i&gt; and &lt;i&gt;web&lt;/i&gt;).  After thinking about this for the last couple of days, it seems to make sense.  I picked up the notion of &lt;i&gt;common&lt;/i&gt; from Erik Hatcher&apos;s &lt;a class=&quot;external&quot; href=&quot;http://www.ehatchersolutions.com/JavaDevWithAnt/&quot;&gt;JavaDevWithAnt&lt;/a&gt;&lt;img class=&quot;outlink&quot; src=&quot;http://raibledesigns.com/wiki/images/out.png&quot; alt=&quot;&quot; /&gt;, which I borrowed heavily from when creating AppFuse.  Erik used &lt;i&gt;common&lt;/i&gt; because this represented classes that would be included in both the web tier and the EJB tier.  But since I (currently) don&apos;t plan on every adding EJBs to AppFuse, does it make sense?  Even if I did, I&apos;d probably only use SessionBeans, and those could easily fit into the &lt;i&gt;service&lt;/i&gt; layer.  The nice thing about moving the business layer (currently in web/**/services) to it&apos;s own directory is that it will get it&apos;s own JAR (with hardly any modifications to build.xml) and can be used outside of the webapp.
&lt;br /&gt;&lt;br /&gt;
The nice thing about isolating the &lt;i&gt;web&lt;/i&gt; directory to web-only classes is I can use Ant to replace any Struts-specific classes with WebWork or Tapestry.  To prevent AppFuse from being cluttered with too many options, it&apos;ll ship with Struts out-of-the-box.  If users want WebWork for their framework, they can download a WebWork version of the web-tier and run an Ant target that will replace all the Struts stuff with WebWorks stuff.  It seems like the cleanest way to do web framework switching.
&lt;br /&gt;&lt;br /&gt;
Another thing that might happen to AppFuse, caused by my enthusiasm to try out everything, is that it will contain too much stuff for a basic web application.  It currently has security and user management built in, which is what most webapps need.  I recently added in OSCache and Clickstream.  OSCache is not enabled, but most webapps can probably use it somewhere.  Clickstream is a different story. For most of the webapps I&apos;ve built, this is not needed at all.  Most of the apps are no more than 20 screens, and it&apos;s unlikely the client will care where people go the most.  Another option that deserves ripping out is the idea of Struts&apos; submodules.  I tend to rip this out as the first thing when starting a new project.  File Upload is something I&apos;ve used rarely, so I should probably lose that feature too.  
&lt;br /&gt;&lt;br /&gt;
There are also other technologies that I&apos;ve thought of adding to AppFuse, namely &lt;a href=&quot;http://www.quartzscheduler.org/index.jsp&quot;&gt;Quartz&lt;/a&gt; and &lt;a href=&quot;http://jakarta.apache.org/lucene/docs/index.html&quot;&gt;Lucene&lt;/a&gt;.  However, I&apos;ve only used Quartz on 1 of my last 5 projects and Lucene on 2 - so obviously these might be considered &lt;i&gt;bloat&lt;/i&gt; for a basic webapp.  I think the best thing would be to implement these in AppFuse, on my own, and then document how I did it on the wiki (&lt;i&gt;for an example, see &lt;a class=&quot;wikipage&quot; href=&quot;http://raibledesigns.com/wiki/Wiki.jsp?page=SetupVizant&quot;&gt;diagramming build.xml with Vizant&lt;/a&gt;&lt;/i&gt;).  If folks need to use it they can add it on their own.  Documentation is always good, and if I can just document how to add stuff, I can certainly reduce the bloat.  
&lt;br /&gt;&lt;br /&gt;
Whaddya think - is it better to include options out-of-the-box or simply document them?  Should I restructure the directories to match the tiers more?  </content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/roller_searching_powered_by_lucene</id>
        <title type="html">Roller Searching - Powered by Lucene</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/roller_searching_powered_by_lucene"/>
        <published>2003-07-22T23:41:59-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://jakarta.apache.org/lucene&quot;&gt;&lt;img src=&quot;//jakarta.apache.org/lucene/docs/images/lucene_green_300.gif&quot; alt=&quot;Lucene Logo&quot; width=&quot;300&quot; height=&quot;46&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks to &lt;a href=&quot;http://idzelis.com/roller/page/aim4min&quot;&gt;Min&lt;/a&gt;, we now have searching in Roller.  He wrote a wicked-ass Lucene implementation using the &lt;a href=&quot;http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html&quot;&gt;util.concurrent&lt;/a&gt; package from &lt;a href=&quot;http://gee.cs.oswego.edu/dl&quot;&gt;Doug Lea&lt;/a&gt;.  Here&apos;s how it works:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When Roller starts, it checks to see if the index is OK, and if not, rebuilds it.  The index then goes into RAM and stays there until you destroy the servlet context - then it&apos;s written to disk.  The location is configurable, but defaults to $(user.home} + File.separator + &quot;roller-index&quot;.&lt;/li&gt;
&lt;li&gt;A user&apos;s index is updated when they add/delete weblog entries.&lt;/li&gt;
&lt;li&gt;A user can rebuild their own index via a button on the Website Settings page.&lt;/li&gt;
&lt;li&gt;An Admin can rebuild a user&apos;s index from the &quot;Admin&quot; page and rebuild all users&apos; indexes from the Config page.&lt;/li&gt;
&lt;li&gt;The IndexManager is the central entry point, and it lives in RollerContext.getIndexManager(). For indexing, searching, etc. you use one of the following operations:
&lt;br /&gt;&lt;br /&gt;
- AddWeblogOperation
&lt;br /&gt;
- RebuildUserIndexOperation
&lt;br /&gt;
- RemoveWeblogOperation
&lt;br /&gt;
- SearchOperation
&lt;br /&gt;&lt;br /&gt;
After creating these ops, set any op-specific configuration options and then pass it to the IndexManager.executeIndexOperation() method.&lt;/li&gt;
&lt;li&gt;Behind the scenes, there is an background thread running. This thread only performs one operation at a time. If an op is added when the thread it busy, the op will be queued. The way Lucene works is that most operations can be threaded. Lucene supports the concept of add, delete, read, query, and optimize. The only methods that cannot be active at the same time are IndexReader::delete() and IndexWriter::add(). Therefore, the operations that perform these operations are put into the background thread queue that garantees that these ops wont be performed at the same time. Searching doesn&apos;t interfere with these ops, so it can be run in any thread.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I created a #showSearchForm macro that renders a &amp;lt;form&amp;gt; with a textbox (size=20) and a &quot;Search&quot; submit button.  I also added this to all the current themes - so if you developed a theme for Roller - you might want to &lt;a href=&quot;http://raibledesigns.com/page/test&quot;&gt;check it out&lt;/a&gt; (username: test, passwd: roller).  You can edit it right on the site if you want, then copy/send me the adjusted files.  CSS seems to need the most tweaking for these to look right.  
&lt;br /&gt;&lt;br /&gt;
Please enter any bugs/enhancements in &lt;a href=&quot;http://opensource.atlassian.com/projects/roller/Dashboard.jspa&quot;&gt;Roller&apos;s JIRA instance&lt;/a&gt;.  The only one I&apos;ve seen so far is that a user has to build their index manually before they get any search results.  I don&apos;t know that this is a bug, just wanted to mention it.  Doesn&apos;t get comments yet either - a NPE from weblogMgr.getComments() (when adding a new post) kept me banging my head against the wall for an hour - so I commented it out.
&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;/search/rd?q=lucene&quot; title=&quot;search this site for &apos;lucene&apos;&quot;&gt;Try it&lt;/a&gt;, you might like it. ;-)
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;2 minutes later:&lt;/b&gt; Here&apos;s a bug - if you update an entry numerous times, it will get presented as numerous times (should be deleted and re-indexed).</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/luke_lucene_index_browser</id>
        <title type="html">Luke - Lucene Index Browser</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/luke_lucene_index_browser"/>
        <published>2003-07-22T13:44:58-06:00</published>
        <updated>2007-02-10T20:07:55-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">If you&apos;re working with &lt;a href=&quot;http://jakarta.apache.org/lucene&quot;&gt;Lucene&lt;/a&gt;, and you need an easy way to inspect your index, checkout &lt;a href=&quot;http://www.getopt.org/luke/&quot;&gt;Luke&lt;/a&gt;. 
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
&lt;strong&gt;Luke&lt;/strong&gt; is a handy development and diagnostic tool, which accesses already existing Lucene indexes and allows you to display their contents in several ways:
&lt;/p&gt;
&lt;ul style=&quot;font-style: italic; margin-left: 50px&quot;&gt;
    &lt;li&gt;browse by document number, or by term&lt;/li&gt;
    &lt;li&gt;view documents / copy to clipboard&lt;/li&gt;
    &lt;li&gt;retrieve a ranked list of most frequent terms&lt;/li&gt;
    &lt;li&gt;execute a search, and browse the results&lt;/li&gt;
    &lt;li&gt;selectively delete documents from the index&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/added_google_search_to_this</id>
        <title type="html">Added Google search to this theme</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/added_google_search_to_this"/>
        <published>2003-06-27T16:57:58-06:00</published>
        <updated>2007-02-10T20:07:55-07:00</updated> 
        <category term="/Roller" label="Roller" />
        <content type="html">The idea hit me like a cold beer pouring down my throat on a hot summer day.  Crisp, clean and exciting.  I&apos;ve been wanting to add a search form to this theme, but I didn&apos;t want to add another tab, and putting it anywhere in the header would conflict with the background image.  And then I spotted the perfect spot.  Right under the categories, in the &lt;em&gt;banner&lt;/em&gt; of the first entry on this page.  With a little love from the &lt;abbr title=&quot;Document Object Model (a.k.a. JavaScript)&quot;&gt;DOM&lt;/abbr&gt;, you can now search this site using this theme and Google.  Here&apos;s the relevant code that I added to the bottom of this theme.
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div id=&quot;search&quot; style=&quot;display:none; margin-top: -17px; text-align: right&quot;&amp;gt;
    &amp;lt;form id=&quot;searchForm&quot; method=&quot;get&quot; action=&quot;http://www.google.com/search&quot;
        onsubmit=&quot;return search()&quot; style=&quot;margin: 0; padding: 0&quot;&amp;gt;  
        &amp;lt;input type=&quot;text&quot; id=&quot;q&quot; name=&quot;q&quot; size=&quot;20&quot; maxlength=&quot;255&quot;
            value=&quot;search this site&quot; onclick=&quot;this.value=&apos;&apos;&quot; /&amp;gt; 
&amp;lt;/div&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    &lt;code style=&quot;color: green&quot;&gt;// get the first entry shown in the page and append the
    // hidden &apos;search&apos; div from above&lt;/code&gt;
    document.getElementById(&quot;entries&quot;)
            .getElementsByTagName(&quot;div&quot;)&amp;#91;0&amp;#93;
            .appendChild(document.getElementById(&quot;search&quot;));
    toggle(&quot;search&quot;);
    function search() {
        form = document.getElementById(&quot;searchForm&quot;);
        if (form.q.value == &quot;search this site&quot; || form.q.value == &quot;&quot;) {
            alert(&quot;Please enter a search term to continue.&quot;);
            form.q.focus();
            return false;
        } else {
            form.q.value = form.q.value + &quot; site:www.raibledesigns.com&quot;;
            form.submit();
        }
    }
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Boy oh boy does the DOM make it easy to do web sites!  Seems to work in all the browsers I use regularly (IE/Moz on Win, Camino/Safari on Mac).  It doesn&apos;t work in Opera 6, but does in Opera 7.  Now back to that cold beer - I&apos;m gettin&apos; thirsty...</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/all_i_m_proud_and</id>
        <title type="html">Java Development with Ant, The Application</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/all_i_m_proud_and"/>
        <published>2002-12-27T19:25:45-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">&lt;a href=&quot;http://erik.hatcher.net/#JDwA&quot;&gt;&lt;img src=&quot;//erik.hatcher.net/antbook_small.gif&quot; class=&quot;picture&quot; alt=&quot;Ant Book&quot; /&gt;&lt;/a&gt;
If you&apos;ve been fortunate enough to read &lt;a href=&quot;http://www.ehatchersolutions.com/servlets/blogscene/&quot;&gt;Erik Hatcher&apos;s&lt;/a&gt; &lt;a href=&quot;http://erik.hatcher.net/#JDwA&quot;&gt;Java Development with Ant&lt;/a&gt;, you know that there&apos;s tons of good tips in it.  I read it and I&apos;ve been recommending it every since.  Erik has been continuing development of the sample app for the book ever since it was released.  I got many tips from Erik in developing AppFuse and I have to say, it really is a nice example.  Maybe I&apos;ll get some more stuff now that it appears to have jumped from version 0.4 to 0.9!  Here&apos;s a message Erik sent about the latest release.&lt;/p&gt;
&lt;pre&gt;
All -

I&apos;m proud (and worried about the support e-mails! :) to announce the 
near-final release of a project demonstrating Ant, XDoclet, Struts, 
JUnit, Cactus, and Lucene.  Its called JavaDevWithAnt as it was written 
for the book Steve and I co-authored and has been refined during 
several presentations I&apos;ve been giving on Ant, XDoclet and Struts.

The documentation is in draft stage, and my primary goal is to collect 
feedback on polishing the documentation (and the application if there 
are any bugs that surface).  The site where I&apos;m hosting the 
distribution and documentation is:

	&lt;a href=&quot;http://www.ehatchersolutions.com/JavaDevWithAnt/&quot;&gt;http://www.ehatchersolutions.com/JavaDevWithAnt/&lt;/a&gt;

Please let me know if you try it out and have suggestions for 
improvement, or just to let me know you tried it and hate it or love 
it, etc.  Feedback more than welcome!  Direct feedback to me at 
JavaDevWithAnt@ehatchersolutions.com

	Erik

p.s. Since this e-mail is directed to the XDoclet, Lucene, and Cactus 
lists, here is a brief teaser for you:

XDoclet - its used extensively, even using a custom tag handler to 
generate starter JSP&apos;s from Struts form beans.

Lucene - my &amp;lt;index&amp;gt; Ant task is used to index text and HTML files, and 
Lucene&apos;s API is used at run-time to query the index.

Cactus - StrutsTestCase is used, although no direct Cactus tests.
&lt;/pre&gt;
&lt;p&gt;Happy information-overload!  There&apos;s a lot there, but if I could figure it out - I&apos;m sure you can. Erik - finally on Jaguar eh?  What took you so long ;-)</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/erik_s_struts_xdoclet_example</id>
        <title type="html">Erik&apos;s Struts/XDoclet example application</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/erik_s_struts_xdoclet_example"/>
        <published>2002-12-02T04:25:10-07:00</published>
        <updated>2007-02-10T20:07:55-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">Erik Hatcher has released his &quot;much hyped and long awaited sample application&quot; demonstrating how to generate some Struts goodness with XDoclet.  You&apos;ll be happy to know that I&apos;ve been swapping e-mails with Erik a lot in the past couple weeks - so my &lt;a href=&quot;/struts&quot;&gt;struts-xdoclet&lt;/a&gt; app is very similar.  Here are the details:
&lt;/p&gt;
&lt;pre&gt;
It is a trimmed down version of the application Steve and I developed
for our Java Development with Ant book.

Relevant to Struts folks are these tidbits:

  - XDoclet is generating struts-config.xml, validation.xml, web.xml, 
and antbook.tld

  - LabelTag (currently mysteriously busted for required tagging) is 
included.  This tag styles field labels differently if its in error, and 
(when its not busted, it works on my production app actually) it shows 
an asterisk by required fields.

  - strutsgen: a one-off starter generation for JSP&apos;s and 
ApplicationResources.properties snippets for cutting and pasting into 
the main application.  It uses XDoclet to process a specified form bean 
and uses the fields it finds for generation.

  - Use of StrutsTestCase for Cactus testing.

  - Maybe some other Struts goodies lurking there that I&apos;ve forgotten to 
mention.

The application itself is a document search engine, based on Lucene, and 
should run out of the box in Tomcat or JBoss.  It even has the ability 
to (at build time) toggle between whether to use a session bean or not 
(functionality is the same either way).  By default, you can simply 
deploy the WAR that you&apos;ve built and it will work without EJB, but if 
you are interested in exploring the session bean piece it can be turned on.

I am in the process of creating much more detailed documentation, but I 
wanted to get this out sooner rather than later.  If you find any 
problems or have any questions, please do not hesitate to let me know so 
I can refine it and post updates.

The one documentation I need to provide now is to note that you&apos;ll need 
j2ee.jar to build.  I include all other API&apos;s.  To build, unzip the file 
(link below) and it will expand into JavaDevWithAnt directory.  In that 
directory, run Ant.  If you have J2EE_HOME set you shouldn&apos;t need to do 
anything... just &quot;ant&quot;.  You&apos;ll also need to build a site index, so run 
&quot;ant build-site-index&quot;.  This is intentionally two separate steps.  If 
you don&apos;t have J2EE_HOME set, then you need to provide j2ee.jar to the 
build.  Do it this way:

	ant -Dj2ee.jar=/path/to/my/j2ee.jar

Where &quot;/path/to/my/j2ee.jar&quot; is the actual path to your j2ee.jar

Post any questions/problems to me directly.  E-mail me at 
&lt;a href=&quot;mailto:JavaDevWithAnt@ehatchersolutions.com&quot;&gt;JavaDevWithAnt@ehatchersolutions.com&lt;/a&gt;.

Download: &lt;a href=&quot;http://www.ehatchersolutions.com/downloads/&quot;&gt;http://www.ehatchersolutions.com/downloads/&lt;/a&gt;

You will need &lt;a href=&quot;http://prdownloads.sourceforge.net/junit/junit3.8.1.zip?download&quot;&gt;JUnit 3.8(.1)&lt;/a&gt; as I take advantage of the new lack of 
required String-arg constructors.  junit.jar should live in 
ANT_HOME/lib.  &lt;a href=&quot;http://www.apache.org/dist/ant/&quot;&gt;Ant 1.5(.1)&lt;/a&gt; is required also.

There will be updates in the next week or so as I polish the 
documentation and address any issues that turn up.

	Erik
&lt;/pre&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/struts_xdoclet_0_2</id>
        <title type="html">Struts-XDoclet 0.2</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/struts_xdoclet_0_2"/>
        <published>2002-11-26T20:33:07-07:00</published>
        <updated>2007-02-10T20:07:55-07:00</updated> 
        <category term="/Java" label="Java" />
        <content type="html">I&apos;ve posted an updated version of &lt;a href=&quot;/struts/&quot;&gt;struts-xdoclet&lt;/a&gt;.  I spent most of the day trying to get my build.xml and directory structure in line with &lt;a href=&quot;http://erik.hatcher.net&quot;&gt;Erik Hatcher&apos;s&lt;/a&gt;.  He is planning on releasing a sample app based on his Ant book later this week, so I want to be relatively similar in our approaches.  His app is a best-practices app for using Ant, JUnit and Lucene - while mine is more geared for Struts, Security and UI/Persistence Generation.  I don&apos;t know if I&apos;ll commit to saying it&apos;s a best-practices app, but it&apos;s filled with a number of things I&apos;ve learned in my Struts projects.  I&apos;d like to think of it as a kickstart app - kind of like &lt;code&gt;struts-blank.war&lt;/code&gt;, but with more meat.
&lt;br /&gt;
&lt;br /&gt;
One of the things I discussed with Erik today was that I&apos;d like to add the ability to choose Castor, Hibernate, EJB, or DAO with some switches in the build script.  &lt;em&gt;Yeah, that&apos;ll only take me until March to get done, so don&apos;t hold your breath!&lt;/em&gt;  His response was to take a look &lt;a href=&quot;http://www.keelframework.org/&quot;&gt;http://www.keelframework.org/&lt;/a&gt;.  The idea of it, supposedly, is being able to take the same business logic and swap out UI and persistence tiers easily.  I guess it &lt;a href=&quot;http://www.keelframework.org/history.html&quot;&gt;was started&lt;/a&gt; by the &lt;a href=&quot;http://jcorporate.com&quot;&gt;Expresso&lt;/a&gt; Team.  Hmmm, I don&apos;t know if that is good or bad.  I shied away from Expresso when I saw that they promoted putting a bunch of HTML into your Java classes.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/roller_s_search_feature</id>
        <title type="html">Roller&apos;s Search Feature</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/roller_s_search_feature"/>
        <published>2002-11-21T09:55:01-07:00</published>
        <updated>2007-02-10T20:07:55-07:00</updated> 
        <category term="/Roller" label="Roller" />
        <content type="html">I&apos;d love to use &lt;a href=&quot;http://jakarta.apache.org/lucene/docs/index.html&quot;&gt;Lucene&lt;/a&gt; to 
develop Roller&apos;s search feature, but there have been discussions of a much simpler search 
(i.e. simple SQL &lt;code&gt;LIKE `%searchTerm%&apos;&lt;/code&gt; statements).  Since I&apos;d like to dig in and 
learn Lucene, I think it would be valuable to integrate into Roller, but so as to not discourage
any other ideas - maybe we could code for a pluggable search module.  That way, roller 
administrators could choose which one they liked, and developers could plug in others.&lt;/p&gt;

&lt;p&gt;I don&apos;t know how much time I&apos;ll have to contribute to this, but just wanted to throw it out there.
BTW, does anyone know if Lucene can index existing database records (weblog entries)?  I would
imagine so.  Would we want to index bookmarks and newsfeeds as well?  The nice think about the
Google search on this site is that it indexes &lt;em&gt;everything&lt;/em&gt;.  Anyone know of a java-based
google-like search package?</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/aqua_text_how_to_scale</id>
        <title type="html">Aqua Text - How to Scale Down.</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/aqua_text_how_to_scale"/>
        <published>2002-10-10T23:32:26-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/General" label="General" />
        <content type="html">I sent an e-mail to the author (Rick Yaeger) of the aqua-text tutorial last night asking how to scale down my text and reduce the fuzziness (or as Lance called it, &quot;the gel toothpaste look&quot;). &lt;img src=&quot;//us.i1.yimg.com/us.yimg.com/i/mesg/tsmileys/8.gif&quot; alt=&quot;I got a kick out of this comment.&quot; style=&quot;border: 0; vertical-align: top&quot; /&gt; Here is Rick&apos;s response:&lt;/p&gt;

&lt;p style=&quot;margin-left: 50px; font-style: italic&quot;&gt;
There &lt;b&gt;is&lt;/b&gt; an easy way to scale the effects of the style in Photoshop 7. In fact, that&apos;s what the command is called &quot;Scale Effects...&quot; and it is found under the Layers menu under the Layer Style submenu. Select the layer that has the effects you wish to scale and use this command to adjust those effects on a percentage scale with preview.
&lt;br /&gt;&lt;br /&gt;
Another method is to create your type at 72pt and then flatten the image and scale it down 25%.
&lt;/p&gt;

&lt;p&gt;So I tried this, and it definitely helped.  Here is the &lt;a href=&quot;http://www.raibledesigns.com/skins/aqua/images/title-rd-old.gif&quot;&gt;old one&lt;/a&gt;, and the &lt;a href=&quot;http://www.raibledesigns.com/skins/aqua/images/title-rd.gif&quot;&gt;new one&lt;/a&gt;. I&apos;ve noticed that I do lack one thing as a Blogger - and that is following up on my previous posts, so here goes...&lt;/p&gt;

&lt;p&gt;&lt;b&gt;PDF Searching.&lt;/b&gt; Thanks to Vince Mastrantoni (&lt;a href=&quot;http://www.google.com/search?q=Vince+Mastrantoni+blog&quot; title=&quot;... or at least I can&apos;t find it&quot;&gt;no blog&lt;/a&gt;) and &lt;a href=&quot;http://greg.klebus.com/blog&quot; title=&quot;Java To Go&quot;&gt;Greg Klebus&lt;/a&gt; for their e-mails.  These will help me find my solution I&apos;m sure. Thanks Guys.&lt;/p&gt;

&lt;p style=&quot;margin-left: 50px; font-family: &apos;Courier New&apos;, Courier, monospace; font-size: 1em; background: #eee; border: 1px solid black; padding: 5px; margin-right: 50px&quot;&gt;
The obvious answer would be Adobe Acrobat.  But, this is not open source and if you have many files to search through, would be cumbersome.  I tried to do a batch search using it, but was unable to.  It appears as though this may not be supported or an option.
&lt;br /&gt;&lt;br /&gt;
Another alternative is the Lucene search engine available at:
&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://jakarta.apache.org/lucene/docs/index.html&quot;&gt;http://jakarta.apache.org/lucene/docs/index.html&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Now, this by itself doesn&apos;t search PDFs.  However, you can add a plug-in to do this.  See here:
&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.i2a.com/websearch/&quot;&gt;http://www.i2a.com/websearch/&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Other stuff that might help is here:
&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.etymon.com/&quot;&gt;http://www.etymon.com/&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Also, the Google internet search engine searches and indexes PDFs and allows them to be displayed in text format.  I&apos;m not sure how or if this might help but I wanted to point this out to you.
&lt;br /&gt;&lt;br /&gt;
Lastly, there is a PDF filter that Adobe provides that can be plugged into IIS index server.  Tried looking for it but couldn&apos;t find it.  Maybe you&apos;ll have better luck.
&lt;br /&gt;&lt;br /&gt;
Vince
&lt;br /&gt;&lt;br /&gt;
---&lt;br /&gt;
Found that filter.  Gave up too soon:
&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.adobe.com/support/downloads/product.jsp?product=1&amp;amp;platform=Windows&quot;&gt;http://www.adobe.com/support/downloads/product.jsp?product=1&amp;amp;platform=Windows&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Vince
&lt;br /&gt;&lt;br /&gt;
---&lt;br /&gt;
Raible, (I seem to have read your explanation about the name :)
&lt;br /&gt;&lt;br /&gt;
pdftotext (forgot the source, you need to &lt;a href=&quot;http://www.google.com/search?q=pdftotext&quot;&gt;google it yourself&lt;/a&gt;). The name says it all -- convert your PDF to text and do the search.
&lt;br /&gt;&lt;br /&gt;
It&apos;s a default viewer under Midnight Commander on my linux box, so I can view PDF&apos;s as text easily.
&lt;br /&gt;&lt;br /&gt;
Open source, and probably cross-platform.
&lt;br /&gt;&lt;br /&gt;
You can also try Ghostscript, it probably has something similar (but it&apos;s big, and you&apos;d need to go through Postscript files anyway).
&lt;br /&gt;&lt;br /&gt;
I hope I could help.
&lt;br /&gt;&lt;br /&gt;
Regards,&lt;br /&gt;
-Greg
&lt;/p&gt;
&lt;p&gt;Also, I mentioned &lt;a href=&quot;http://www.raibledesigns.com/page/rd/20020829#my_review_of_jaguar_i&quot;&gt;a while back&lt;/a&gt; that I didn&apos;t use &lt;a href=&quot;http://www.apple.com/macosx/jaguar/mail.html&quot;&gt;Mail&lt;/a&gt; for OS X, but instead I use &lt;a href=&quot;http://www.microsoft.com/mac/entouragex/default.asp?navindex=s4&quot;&gt;Entourage&lt;/a&gt;. Truth is, I&apos;ve started using Mail (over Entourage) for a very simple reason, it&apos;s faster.  When I click on the icon, it opens faster.  I&apos;m easy that way.&lt;/p&gt;

&lt;p&gt;To follow up on my &lt;a href=&quot;http://www.raibledesigns.com/page/rd/20020928#isynch_has_arrived&quot;&gt;iSync&lt;/a&gt; post, I can&apos;t wait for the actual release.  When I import all my vCards from Outlook XP, it changes the &quot;mobile&quot; phone number to &quot;main&quot; in my Address Book.  Because of this, my contacts&apos; mobile numbers never make it to &lt;a href=&quot;http://www.sonyericsson.com/T68i/&quot;&gt;my phone&lt;/a&gt; - doh!  This same import works fine in Entourage.  Also, I can&apos;t seem to 1) sync with .Mac or 2) publish my iCal to my &lt;em&gt;webdav-enabled&lt;/em&gt; Tomcat server.  Not that I really need to, but I like to experiment and see if it&apos;s possible. Manually changing my contacts&apos; numbers from &quot;main&quot; to &quot;mobile&quot; in Address Book fixes the problem, but what a pain.  And my phone seems to end up with a bunch of contacts I never put in there - iSync definitely has room for improvement. I&apos;m looking forward to &lt;a href=&quot;http://www.macrumors.com/pages/2002/10/20021005130322.shtml&quot;&gt;this update&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Last, but &lt;strong&gt;certainly&lt;/strong&gt; not least, to follow up on &lt;a href=&quot;http://www.raibledesigns.com/page/rd/20021005#hang_in_there_russ&quot;&gt;where  is Russ&lt;/a&gt; - it&apos;s great to have you back Russ, you were missed.  You update &lt;a href=&quot;http://www.russellbeattie.com/notebook/&quot;&gt;your blog&lt;/a&gt; more frequently than any others I read - thanks.&lt;/p&gt;
&lt;p&gt;In other news, I can see &lt;a href=&quot;http://www.mozilla.org/projects/phoenix/phoenix-release-notes.html&quot;&gt;Phoenix&lt;/a&gt; being my default browser very soon.  It&apos;s Mozilla without the extra stuff (i.e. Mail) that I don&apos;t use.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/the_future_of_roller</id>
        <title type="html">The Future of Roller.</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/the_future_of_roller"/>
        <published>2002-09-03T06:49:32-06:00</published>
        <updated>2007-02-10T20:07:54-07:00</updated> 
        <category term="/Roller" label="Roller" />
        <content type="html">To answer &lt;a href=&quot;http://www.rollerweblogger.org/page/roller/20020902&quot;&gt;Dave&apos;s questions&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) What do you want Roller to be?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I want it to be my personal portal, my weblogger, and my corporate website.  I&apos;m also interested in adding a wiki to my website for new projects.  But I don&apos;t expect or need wiki functionality in roller.  I&apos;m planning on adding a new roller page with an &lt;a href=&quot;http://www.htmlhelp.com/reference/html40/special/iframe.html&quot;&gt;iframe&lt;/a&gt; to a wiki such as &lt;a href=&quot;http://veryquickwiki.sourceforge.net/&quot;&gt;Very Quick Wiki&lt;/a&gt;.  The iframe gives me the ability to view another site/app with the current skin being used.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) What are you interested in working on?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Converting the editor UI to use Tiles instead of including header/footer JSP pages.&lt;/li&gt;
&lt;li&gt;Making the editor UI XHTML-compliant, while maintaining some backwards compatibility with Netscape 4.x.&lt;/li&gt;
&lt;li&gt;Adding the ability to collapse/expand folders for bookmarks.&lt;/li&gt;
&lt;li&gt;Adding search capability to weblog entries and entire site pages, either using &lt;a href=&quot;http://jakarta.apache.org/lucene&quot;&gt;Lucene&lt;/a&gt; or just &apos;like&apos; SQL statements.&lt;/li&gt;
&lt;li&gt;Investigating &lt;a href=&quot;http://xdoclet.sourceforge.net&quot;&gt;XDoclet&lt;/a&gt; and &lt;a href=&quot;http://castor.exolab.org&quot;&gt;Castor&lt;/a&gt; and how it&apos;s being used so I can use them on my next project.&lt;/li&gt;
&lt;li&gt;Adding an option for drop-down menus for editor UI (alternative to tabbed menu).  I know there is a &quot;Struts Menu&quot; that has been converted to use &lt;a href=&quot;http://www.dhtmlcentral.com/projects/coolmenus/&quot;&gt;CoolMenus&lt;/a&gt;, so maybe use this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3) What features would you like to see added to Roller?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The ability to search weblog entries.&lt;/li&gt;
&lt;li&gt;Ability to include an anchor name for each weblog entry, i.e. &amp;lt;a name=&quot;entryId...&quot; id=&quot;entryId...&quot;&amp;gt;&amp;lt;/a&amp;gt;. This would be convenient for other webloggers who are referencing your posts.&lt;/li&gt;
&lt;li&gt;Ability to use other blogging client-side software to post to roller, besides just w:blogger.&lt;/li&gt;
&lt;li&gt;Ability to edit (x)HTML via a web interface - in both Mozilla and IE.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I keep myself motivated by using Roller everyday as the engine behind this site. Thanks Dave, Roller has made the re-design of my website much easier, and it&apos;s opened my eyes to the world of weblogging.  Good Stuff!</content>
    </entry>
</feed>

