<?xml version="1.0" encoding="utf-8"?>
<!-- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
-->
<?xml-stylesheet type="text/xsl" href="https://rollerweblogger.org/roller-ui/styles/rss.xsl" media="screen"?><rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
  <title>Blogging Roller</title>
  <link>https://rollerweblogger.org/roller/</link>
    <atom:link rel="self" type="application/rss+xml" href="https://rollerweblogger.org/roller/feed/entries/rss?tags=java" />
  <description>Dave Johnson on open web technologies, social software and software development</description>
  <language>en-us</language>
  <copyright>Copyright 2026</copyright>
  <lastBuildDate>Tue, 28 Apr 2026 07:02:22 +0000</lastBuildDate>
  <generator>Apache Roller 6.1.5</generator>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/upgraded-to-roller-6-1</guid>
    <title>Upgraded to Roller 6.1.1</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/upgraded-to-roller-6-1</link>
    <pubDate>Sat, 30 Apr 2022 20:09:11 +0000</pubDate>
    <category>Roller</category>
    <category>java</category>
<description>&lt;p&gt;A note about this site: I just upgraded rollerweblogger.org to run the recently released&amp;nbsp;&lt;a href=&quot;https://rollerweblogger.org/project/entry/apache-roller-6-1-1&quot; target=&quot;_blank&quot;&gt;Roller 6.1.1&lt;/a&gt;, and Java 17. There was one snag. This site uses the Roller-JSPWiki plugin and old Lucene dependency in that plugin prevented Tomcat from loading Roller. It took me a couple of hours to figure out how to upgrade the plugin to use the latest version of JSPWiki. That fixed it.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/building-an-open-source-j2ee</guid>
    <title>Building an Open Source J2EE Weblogger</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/building-an-open-source-j2ee</link>
    <pubDate>Sun, 17 Apr 2022 16:42:50 +0000</pubDate>
    <category>General</category>
    <category>java</category>
    <category>opensource</category>
    <category>roller</category>
<atom:summary type="html">I wrote this article for O&amp;#39;Reilly&amp;#39;s OnJava.com over twenty years ago and it was published on April 17, 2002. Roller would not become Apache Roller until about five years later. Publishing this article changed my life and set my career on a new trajectory. I can&amp;#39;t find it online anymore so to celebrate this anniversay, i&amp;#39;m going to publish it here on Roller.

As a Java developer, you should be aware of the tremendous wealth of open source development software that is available for your use -- even if you have no desire to release any of your own software as open source. In this article, I will introduce you to some of the most useful open source Java development tools by showing you how I used these tools to develop a complete database-driven Web application called Roller.</atom:summary><description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;I wrote this article for O&amp;#39;Reilly&amp;#39;s OnJava.com over twenty years ago and it was published on April 17, 2002. Roller would not become Apache Roller until about five years later. Publishing this article changed my life and set my career on a new trajectory. I can&amp;#39;t find it online anymore so to celebrate this anniversay, i&amp;#39;m going to publish it here on Roller.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;

 
&lt;/p&gt;&lt;p&gt;As a Java developer, you should be aware of the tremendous
wealth of open source development software that is available for your use
-- even if you have no desire to release any of your own software as open
source. In this article, I will introduce you to some of the most useful
open source Java development tools by showing you how I used these tools
to develop a complete database-driven Web application called Roller.&lt;/p&gt;
 
&lt;p&gt;Roller fits into the relatively new category of software called webloggers: applications that make it
easy for you to maintain a weblog, also known as a &lt;i&gt;blog&lt;/i&gt; -- a public diary where you link to recent reading on the Web and comment on items of interest to you.&lt;/p&gt;
 
&lt;p&gt;The Roller Web application
allows you to maintain a Web site that consists of a weblog, an organized collection of favorite Web bookmarks,
and a collection of favorite news feeds. You can define Web pages
to display your weblog, bookmarks, and news feeds. By editing the HTML templates
that define these pages, you have almost total control over the layout and
appearance of these pages. Most importantly, you can do all of this without
leaving the Roller Web application -- no programming is required.&lt;/p&gt;
 
&lt;p&gt;I used over a dozen open source development tools to develop
Roller, the most useful of which are listed in Table 1; however,
this article focuses on just four tools: the XDoclet code generator,
the Castor persistence framework, the Struts Servlet/JSP
framework, and the Velocity code-generation engine. In this article
I will describe the Roller application, its architecture, and specifically
how I used XDoclet, Castor, Struts, and Velocity in its development.&lt;/p&gt;
 
&lt;p&gt;&lt;i&gt;Table 1: Open source tools used in Roller Development&lt;/i&gt;&lt;/p&gt;
 
&lt;table border=&quot;1&quot; bordercolor=&quot;#cccccc&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Type of License*&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Castor&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Persistence framework&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Exolab&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Similar to BSD license&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;HSQL&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Small but powerful Java database&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Thomas Meuller&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Similar to BSD license&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Ant&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;XML-driven Java build system&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Commons&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Collections, utilities&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Struts&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Servlet/JSP framework&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Tomcat&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Servlet/JSP Server&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Velocity&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Template-driven code generator&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Netbeans&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Integrated Dev. Environment&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&amp;nbsp;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Sun Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Xerces&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;XML parser&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;XDoclet&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Code generator&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Dreambean&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Similar to MIT License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
 
&lt;p class=&quot;smalltext2&quot;&gt;* For more information on open source licenses see &lt;a href=&quot;http://www.opensource.org/&quot;&gt;&lt;i&gt;opensource.org&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;The Roller Application&lt;/h3&gt;

&lt;p&gt;Roller does not support
all of the features of commercial weblogging software (such as Userland&amp;#39;s
&lt;a href=&quot;http://onjava.com/onjava/2002/04/17/radio.userland.com&quot;&gt;Radio&lt;/a&gt; or Pyra Labs&amp;#39; &lt;a href=&quot;http://www.blogger.com/&quot;&gt;Blogger&lt;/a&gt; products), but Roller does support what I consider the essential weblogging features. With Roller you
can:&lt;/p&gt;
 
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Maintain a weblog, with user-defined categories.&lt;/b&gt; You can write new weblog entries and edit entries that have already been posted. You can define a set of weblog categories and can assign weblog entries to different categories. This allows you to maintain several different weblogs, each covering a different topic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Publish your weblog as an RSS news feed.&lt;/b&gt; Roller
makes your weblog available as a standard Rich Site Summary (RSS) news feed
so that readers can subscribe to and read your weblog without visiting your
Roller site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Maintain a collection of favorite bookmarks, organized
by bookmark folders.&lt;/b&gt; You can define new bookmark folders and can add,
delete, and edit the bookmarks within these folders. You can then display
these bookmarks on one or more of your Roller site&amp;#39;s pages. This allows you to do &lt;i&gt;blogrolling&lt;/i&gt; -- displaying links to your favorite weblogs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Maintain a collection of favorite RSS news feeds.&lt;/b&gt; This allows you
to display headlines with links to news stories from your favorite news
sources or weblogs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Define a set of Web pages to display your weblog, bookmarks, and news feeds.&lt;/b&gt; Pages are defined using HTML templates with embedded macros for each type of data. For example, there is a &lt;code&gt;$Bookmarks&lt;/code&gt; macro that will draw a portion of your bookmark collection on a Web page and a &lt;code&gt;$WeblogCalendar&lt;/code&gt; macro that will draw a calendar view of your past weblog entries. These templates allow you almost complete control over the layout and look-and-feel of your Web pages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
 
&lt;p&gt;There are two types of Roller users: readers and editors.  Readers are simply anonymous visitors to the Roller Web site. Editors have user accounts and must log in by providing a user name and password.  Editors have the ability to edit their weblog entries, bookmarks, newsfeeds, and page templates.&lt;/p&gt;


 
&lt;p&gt;Figure 1 illustrates the Roller application by showing the Roller Web page navigation tree. The boxes represent Web pages and the arrows represent links between pages. The gray pages are the public pages that any visitor may access, the yellow pages are the login pages, and the red pages are the pages that only editors can access.&lt;/p&gt;
 
&lt;table width=&quot;645&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 1: Roller Web Pages&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;Roller Architecture&lt;/h3&gt;
 
&lt;p&gt;Internally, Roller is divided into a presentation
tier and a business tier, as recommended in Sun&amp;#39;s J2EE Pattern Catalog. The presentation tier is responsible for Roller&amp;#39;s user interface,
and the business tier is responsible for Roller&amp;#39;s application logic and the 
persistence of application data. Figure 2 provides an overview of
the Roller architecture.&lt;/p&gt;
 
&lt;table width=&quot;391&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 2: Roller Architecture&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;The presentation tier is implemented using the Model-View-Controller (MVC) pattern and the Struts MVC framework.  The Model is an abstraction of the
application logic and application data and is represented by a set of interfaces 
defined in the &lt;code&gt;org.roller.model&lt;/code&gt; package.  The View is implemented using Servlets, JSP pages, and Velocity page templates.  The Controller is Struts, which is responsible for receiving incoming requests and dispatching them to the View.  The implementation of the presentation tier is further discussed in the sections on Struts and Velocity.&lt;/p&gt;
 
&lt;p&gt;The business tier implements the interfaces in the &lt;code&gt;org.roller.model&lt;/code&gt; package, using the Castor JDO persistence framework. The business tier exchanges data with the presentation tier in the form of simple, lightweight JavaBeans known as Value Objects. Value Objects are yet another of the Sun J2EE patterns. Each Value Object maps to a table in the Roller database.&lt;/p&gt;
 
&lt;p&gt;Figure 3 shows the Roller Value Objects, their properties, and the relationships between them. Each editor is represented by a User object.  Each User has a Website object, which represents the editor&amp;#39;s Web site and which has weblog entries, bookmark folders, newsfeeds, and page templates.  The Website object also specifies the default page template of the Web site and which page template is used for rendering a day of weblog entries.&lt;/p&gt;
 
&lt;table width=&quot;466&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 3: Roller Value Objects&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;


 
&lt;p&gt;The business tier uses Castor JDO to store and retrieve Value Objects to and from a JDBC-accessible database. Castor JDO is part of the larger Castor data-binding framework, which according to the Castor Web site is &amp;quot;the shortest path between Java objects, XML documents, SQL databases, and LDAP.&amp;quot;&lt;/p&gt;

&lt;p&gt;As a persistence framework, Castor JDO is similar to commercial object-relational mappers such as TopLink and Cocobase. Castor JDO fulfills a role similar to that of Sun&amp;#39;s Java Data Objects, but Castor JDO is not an implementation of Sun&amp;#39;s JDO specification (JSR-000012). Castor JDO allows you to define a mapping between Java classes and tables in a relational database. You can then issue queries using Castor&amp;#39;s own Object Query Language (OQL) and receive the results as collections of Java objects.&lt;/p&gt;
 



&lt;p&gt;Before you can use Castor JDO, you must provide a mapping file -- an XML file that maps each class to a database table and each class property to a field within a database table. Below is a portion of Roller&amp;#39;s mapping file.&lt;/p&gt;
 
&lt;pre&gt;&lt;code&gt;&amp;lt;mapping&amp;gt; 
&amp;lt;class name=org.roller.model.BookmarkData&amp;quot; identity=&amp;quot;id&amp;quot;
    access=&amp;quot;shared&amp;quot; key-generator=&amp;quot;UUID&amp;quot; auto-complete=&amp;quot;false&amp;quot;&amp;gt;
    &amp;lt;map-to table=&amp;quot;bookmark&amp;quot;/&amp;gt; 
    &amp;lt;cache-type type=&amp;quot;count-limited&amp;quot;/&amp;gt;
    &amp;lt;field name=&amp;quot;folderId&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;id&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;image&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;name&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;priority&amp;quot; type=&amp;quot;java.lang.Integer&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;url&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
&amp;lt;/class&amp;gt;
...
&amp;lt;/mapping&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you provide Castor with a mapping file, retrieving a collection of objects from the database can be as simple
as the code snippet shown below:&lt;/p&gt;
 

&lt;pre&gt;&lt;code&gt;// Construct a new query and bind its parameters
String query = &amp;quot;SELECT p FROM BookmarkData p WHERE websiteId=$&amp;quot;;
OQLQuery oql = db.getOQLQuery( query );
oql.bind( websiteId );

// Retrieve results and print each one
QueryResults results = oql.execute();
while ( results.hasMore() ) {
   BookmarkData bookmark = (BookmarkData)results.next();
   System.out.println( bookmark.toString() );
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;XDoclet&lt;/h3&gt;
 
&lt;p&gt;XDoclet is a code generator that is implemented as a Javadoc extension, a &lt;i&gt;Doclet&lt;/i&gt;. To
use XDoclet, you place special Javadoc tags in your Java source code. Based
on these tags, XDoclet can generate additional Java code that supports your
classes, mapping files that map your classes to database tables, and deployment
descriptors that assist in deploying your classes.&lt;/p&gt;
 
&lt;p&gt;XDoclet started out
its life as EJBDoclet, a tool that allows you to implement an Enterprise JavaBean
by writing just one source code file. Now, the XDoclet product includes two
Doclets: EJBDoclet and WebDoclet. EJBDoclet is for generating EJB
classes, value objects, and database mappings. WebDoclet is for generating
all sorts of Servlet Web Application deployment descriptors, including &lt;code&gt;web.xml&lt;/code&gt; files, Tag Library Descriptors, and
Struts configuration files.&lt;/p&gt;
 
&lt;p&gt;The Roller build
process uses both EJBDoclet and WebDoclet, as shown in Figure 4. In
Step 1, EJBDoclet is used to process a set of abstract classes of
type &lt;code&gt;javax.ejb.EntityBean&lt;/code&gt; -- one
for each one of the Roller Value Objects. From these classes, EJBDoclet generates
a Castor mapping file, the Roller Value Object classes, and a set of corresponding
Struts form classes. In Step 2, WebDoclet is used to process a
source directory that contains JSP tags, Servlet classes, and Struts classes.
The output of the WebDoclet is the complete set of Roller Web Application
deployment descriptors.&lt;/p&gt;
 
&lt;table width=&quot;476&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 4: XDoclet and the Roller Build Process&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Below is a simple example bean that shows the EJBDoclet tags necessary to create a Value Object. The &lt;code&gt;@castor&lt;/code&gt; tags provide the information needed to generate the Castor mapping entries for the bean. The &lt;code&gt;@ejb&lt;/code&gt; tags provide the information needed to generate the Value Object and a complete EJB entity bean (which Roller does not use).&lt;/p&gt;
 
&lt;pre&gt;&lt;code&gt;/**
 * Represents a single URL in a user&amp;#39;s favorite web-bookmarks collection.
 * @ejb:bean name=&amp;quot;Bookmark&amp;quot; type=&amp;quot;CMP&amp;quot; jndi-name=&amp;quot;roller/Bookmark&amp;quot;
 * @ejb:data-object extends=&amp;quot;org.roller.model.ValueObject&amp;quot;
 * @struts:form 
 * @castor:class name=&amp;quot;bookmark&amp;quot; table=&amp;quot;bookmark&amp;quot; xml=&amp;quot;bookmark&amp;quot;
 *               id=&amp;quot;id&amp;quot; key-generator=&amp;quot;UUID&amp;quot;&lt;br&gt; */

public abstract class BookmarkBean implements EntityBean 
{

  /** @ejb:interface-method 
   *  @ejb:transaction type=&amp;quot;Required&amp;quot; */
   public abstract void setData(org.roller.model.BookmarkData dataHolder);

  /** @ejb:interface-method */
   public abstract org.roller.model.BookmarkData getData();

  /** @castor:field set-method=&amp;quot;setId&amp;quot;
   *  @castor:field-xml node=&amp;quot;attribute&amp;quot;
   *  @castor:field-sql name=&amp;quot;id&amp;quot; sql-dirty=&amp;quot;check&amp;quot; dirty=&amp;quot;true&amp;quot; 
   *  @ejb:interface-method 
   *  @ejb:pk-field
   *  @ejb:persistent-field */
    public abstract String getId();

  /** @ejb:pk-field
   *  @ejb:persistent-field */
    public abstract void setId( String value );
    ...
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Struts&lt;/h3&gt;
 
&lt;p&gt;The Roller presentation tier is implemented using Struts and Velocity. Struts is a Servlet application framework that is based on the MVC pattern. In a typical Struts application, the Model is a set of JavaBeans that hold the data to be presented in the View; the View is a set of JSP pages that render 
HTML; and the Controller is a Servlet and set of action classes that are
registered to handle incoming requests.&lt;/p&gt;
 
&lt;p&gt;Roller&amp;#39;s Edit-Bookmark form provides a nice, simple example of how Struts works. There are four parts to the Edit-Bookmark form implementation: the &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; page, the &lt;code&gt;BookmarkForm&lt;/code&gt; JavaBean class, the &lt;code&gt;BookmarkFormAction&lt;/code&gt; action handler, and some entries in Roller&amp;#39;s &lt;code&gt;struts-config.xml&lt;/code&gt; file that tie the first three items together. So, let&amp;#39;s introduce the players:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; page looks just
like an HTML page, except that it uses the Struts HTML form tags instead
of standard HTML form tags. The Struts HTML form tags know how to find
the &lt;code&gt;BookmarkForm&lt;/code&gt; JavaBean and how to use its properties to populate the form with data.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkForm&lt;/code&gt; class is a dumb JavaBean that just holds data -- it has the exact same properties as the Bookmark Value Object. As you may recall, the &lt;code&gt;BookmarkForm&lt;/code&gt; class and all of its sibling form classes are generated by XDoclet. In Struts, form classes must extend &lt;code&gt;org.apache.struts.action.ActionForm&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; is essentially an action handler. It is registered (in the &lt;code&gt;struts-config.xml&lt;/code&gt; file) to handle incoming requests that include the pattern &lt;code&gt;/bookmark.do&lt;/code&gt;. In Struts, action classes must extend &lt;code&gt;org.apache.struts.action.Action&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
 
&lt;p&gt;Figure 5 shows the sequence of events that occurs when a request for the Edit-Bookmark form comes into the system. Roller needs to respond to this request by creating an HTML form populated with data for the bookmark that is to be edited.&lt;/p&gt;

&lt;table width=&quot;634&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 5: Incoming request for Edit-Bookmark page&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Here are the steps in processing an incoming request for the Edit-Bookmark page:&lt;/p&gt;
 
&lt;ol&gt;&lt;li&gt;&lt;p&gt;The Struts Controller Servlet receives a request for the Edit-Bookmark action. The Controller uses the URI of the request to look up the  &lt;code&gt;FormAction&lt;/code&gt; that should handle the request.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Struts Controller Servlet dispatches the request to the &lt;code&gt;BookmarkFormAction.edit()&lt;/code&gt; method. Knowing that the user has requested the Edit-Bookmark page, the &lt;code&gt;BookmarkFormAction&lt;/code&gt; looks for a request parameter that specifies the bookmark that is to be edited.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; calls the &lt;code&gt;BookmarkManager&lt;/code&gt; to retrieve the bookmark information that is to be edited.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; creates the &lt;code&gt;BookmarkForm&lt;/code&gt;
bean and adds that bean to the request&amp;#39;s attributes so that it can be accessed
by the JSP page.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; finally forwards the request to &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; so that the page may be rendered.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Struts form tags on the &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; page reads data from the &lt;code&gt;BookmarkForm&lt;/code&gt; bean and uses that data to populate the Edit-Bookmark form. After that, the HTML page is returned to the user&amp;#39;s browser for display.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Figure 6 shows
the sequence of events that occurs when the request that contains posted
data from the Edit-Bookmark page comes into the system. Roller needs to take
the incoming form data and use it to update the bookmark that is stored in
the data store managed by the business tier.&lt;/p&gt;

&lt;table width=&quot;608&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 6: Request with data posted from Edit-Bookmark page&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Here are the steps in processing a request with data from a posted Edit-Bookmark page:&lt;/p&gt;
 
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Struts Controller
Servlet receives a request for the &lt;code&gt;Update-Bookmark&lt;/code&gt; action. The Struts Controller
determines which action should handle the request and which form bean should
receive the data from the incoming form post.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Struts Controller Servlet populates the &lt;code&gt;BookmarkForm&lt;/code&gt; bean with data from the incoming request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Controller calls the &lt;code&gt;BookmarkFormAction&lt;/code&gt; and passes
in the form bean.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; retrieves the data
from the &lt;code&gt;BookmarkForm&lt;/code&gt; bean.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The action calls upon the &lt;code&gt;BookmarkManager&lt;/code&gt; to store
the updated bookmark information.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
 
&lt;h3&gt;Velocity&lt;/h3&gt;
 
&lt;p&gt;While JSP pages work
well for the Roller editor pages, which rarely change, JSP does not work
so well for the user pages. Weblog authors are not programmers, and they
cannot be required to learn JSP and Java programming just to customize
their weblog and associated Web pages. Furthermore, allowing Roller users
to add new JSP pages, and thus new Java code, to the Roller application at
runtime is a security risk.&lt;/p&gt;
 
&lt;table width=&quot;622&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 7: Velocity-generated public page&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;The best solution to the user pages problem is Velocity. Velocity is a general purpose template-based code-generation engine. That may sound complicated, but from the user&amp;#39;s point of view, it is simple and easy-to-use. For example, the weblog page shown in Figure 7 is generated by a simple Velocity template. This template is shown below:&lt;/p&gt;
 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;
&amp;lt;html&amp;gt;
;&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;$macros.showWebsiteTitle()&amp;lt;/title&amp;gt;     
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;$macros.includePage(&amp;quot;_css&amp;quot;)&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
;&amp;lt;body&amp;gt; 
&amp;lt;table cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;15&amp;quot; &lt;br&gt;   border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;95%&amp;quot;&amp;gt;   
   &amp;lt;tr&amp;gt;    
   &amp;lt;td width=&amp;quot;20%&amp;quot; valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;      
      $macros.showNavBar(true)&amp;lt;br&amp;gt;       
      $macros.showEditorNavBar(true)&amp;lt;br&amp;gt;
      $macros.showBookmarks(&amp;quot;Blogrolling&amp;quot;,true)&amp;lt;br&amp;gt;       
      $macros.showBookmarks(&amp;quot;News&amp;quot;,true)    
   &amp;lt;/td&amp;gt;    
   &amp;lt;td width=&amp;quot;60%&amp;quot; valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;                
      &amp;lt;h2&amp;gt;$macros.showWebsiteTitle()&amp;lt;/h2&amp;gt;                       
      $macros.showWeblogCategoryChooser()&amp;lt;br&amp;gt;       
      $macros.showWeblogEntries()    
   &amp;lt;/td&amp;gt;    
   &amp;lt;td valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot; width=&amp;quot;20%&amp;quot;&amp;gt;         
      $macros.showWeblogCalendar()&amp;lt;br&amp;gt;       
      $macros.showRSSBadge()    
   &amp;lt;/td&amp;gt; 
   &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;                  
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The items that start with &lt;code&gt;$&lt;/code&gt; are Velocity expressions, most of which result in calls to JSP tags that have been specially designed to work with Velocity. For example, the &lt;code&gt;$macros.showWeblogCategoryChooser()&lt;/code&gt; expression results in the generation of the navigation bar at the top of the page -- the one that reads &amp;quot;All | Technology | News | Entertainment.&amp;quot; The navigation bar is implemented in a custom JSP tag class named &lt;code&gt;org.roller.presentation.tags.NavigationTag&lt;/code&gt;, which is also used in the JSP-based Roller editor pages.&lt;/p&gt;
 


&lt;p&gt;Each user can define
any number of pages, and since these pages are simply HTML pages, they can
be customized using Front Page or any other HTML editor. The user just has
to put the Velocity expressions in the right place. Below is a list of some
of the Velocity expressions that are available for use in user-defined Roller
Web pages.&lt;/p&gt;
 
&lt;table border=&quot;1&quot; bordercolor=&quot;#cccccc&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;b&gt;Macro&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;b&gt;Emits HTML for:&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showNavBar()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Navigation bar, with a link to each one of the user&amp;#39;s user-defined pages&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showEditorNavBar()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Editor navigation
bar, with links to the edit-bookmarks,edit-newsfeeds, edit-weblog,
and edit-website pages &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showBookmarks()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Entire bookmark
collection in a multi-column table &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showNewsfeeds()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Current headlines
and story descriptions for the user&amp;#39;s RSS newsfeeds 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showWeblogEntries()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;The most recent weblog entries &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showWeblogCalendar()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;A weblog calendar,
with a link for each day on which there is a weblog entry 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
 
&lt;h3&gt;Conclusion&lt;/h3&gt;
 
&lt;p&gt;In this article,
I have described four open source Java development tools and how these tools
can be used together to develop a fairly sophisticated Web application. I
hope I have given you a good idea of the power and flexibility of these tools.&lt;/p&gt;
 
&lt;p&gt;Although I have not
mentioned any problems with the open source tools that I have discussed,
I did run into a number of bugs.  I was able to find work-arounds and fixes
for these bugs, but it was not always easy.  I had to spend some time browsing
mailing-lists, searching with Google, and, in one case, downloading the latest
source for a product and building it myself. Formal technical support is
not available for many open source tools, so keep in mind that you may have
to solve your own problems.&lt;/p&gt;
 
&lt;p&gt;In closing, I would like to thank the many developers and other contributors that made possible the open source Java development tools that I used in the development of Roller.  The tools are great and they just keep getting better.&lt;/p&gt;
 
&lt;h3&gt;Resources&lt;/h3&gt;
 
&lt;h4&gt;Weblogging&lt;/h4&gt;
 
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://newhome.weblogs.com/historyOfWeblogs&quot;&gt;The History of Weblogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radio.userland.com/&quot;&gt;Userland Radio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.blogger.com/&quot;&gt;Pyra Labs Blogger&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Castor&lt;/h4&gt;
 
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://castor.exolab.org/castor&quot;&gt;The Castor Project Homepage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Struts&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jakarta.apache.org/struts&quot;&gt; The Jakarta Struts Project&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.javaworld.com/javaworld/jw-12-2000/jw-1201-struts.html&quot;&gt;&amp;quot;Strut your stuff with JSP tags&amp;quot;&lt;/a&gt; (JavaWorld article)&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Velocity&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jakarta.apache.org/velocity&quot;&gt; The Jakarta Velocity Project Homepage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;XDoclet&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://xdoclet.sourceforge.net/&quot;&gt;The XDoclet Project Homepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onjava.com/pub/a/onjava/2002/01/30/xdoclet.html&quot;&gt; &amp;quot;Using XDoclet: Developing EJBs with Just the Bean Class&amp;quot;&lt;/a&gt; (onJava.com article)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onjava.com/pub/a/onjava/2002/01/30/xdoclet.html&quot;&gt; &amp;quot;Deciding Whether EJB is Appropriate&amp;quot;&lt;/a&gt; (OnJava.com article)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Originally published here:&amp;nbsp;&lt;a href=&quot;http://onjava.com/onjava/2002/04/17/wblogosj2ee.html&quot; target=&quot;_blank&quot;&gt;http://onjava.com/onjava/2002/04/17/wblogosj2ee.html&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;
&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/talking_usergrid_at_apachecon2014</guid>
    <title>Talking Usergrid at ApacheCon 2014</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/talking_usergrid_at_apachecon2014</link>
    <pubDate>Sun, 16 Mar 2014 16:10:16 +0000</pubDate>
    <category>Open Source</category>
    <category>apachecon</category>
    <category>asf</category>
    <category>baas</category>
    <category>cassandra</category>
    <category>java</category>
    <category>opensource</category>
    <category>usergrid</category>
<description>&lt;a href=&quot;http://www.apachecon.com/&quot;&gt;
&lt;img src=&quot;https://rollerweblogger.org/roller/mediaresource/59d5e8f1-074f-4fd2-84a3-0b0a108c089c&quot; align=&quot;right&quot; alt=&quot;ApacheCon 2014&quot;&gt;
&lt;/a&gt;

&lt;p&gt;I&amp;#39;ve been working at &lt;a href=&quot;http://apigee.com&quot;&gt;Apigee&lt;/a&gt; since September 2013 and one of the things I love most about my new job is the fact that I&amp;#39;m actively contributing to open source again. &lt;/p&gt;

&lt;p&gt;I&amp;#39;m working on &lt;a href=&quot;http://usergrid.incubator.apache.org/&quot;&gt;Apache Usergrid&lt;/a&gt; (incubating), an open source &lt;b&gt;Backend-As-A-Service&lt;/b&gt; (BaaS) that&amp;#39;s built on the Apache Cassandra database system. Apigee uses Usergrid as part of &lt;a href=&quot;http://apigee.com/about/content/apigee-edge&quot;&gt;Apigee Edge&lt;/a&gt; (see the &lt;a href=&quot;http://apigee.com/docs/content/build-apps-home&quot;&gt;Build Apps&lt;/a&gt; part of the docs).&lt;/p&gt;

&lt;p&gt;Apigee contributed code for Usergrid to the &lt;a href=&quot;http://apache.org&quot;&gt;Apache Software Foundation&lt;/a&gt; back in October 2013 and Usergrid is now part of the Apache Incubator. The project is working towards graduating from the Incubator. That means learning the Apache way, following the processes to get a release out and most importantly, building a diverse community of contributors to build and maintain Usergrid.&lt;/p&gt;

&lt;p&gt;One on the most important parts of building an open source community is making it easy for people to contribute and and that&amp;#39;s why I submitted a talk to the &lt;a href=&quot;http://www.apachecon.com/&quot;&gt;ApacheCon US 2014&lt;/a&gt; conference (April 7-9 in Denver, CO) titled &lt;a href=&quot;http://events.linuxfoundation.org/events/apachecon-north-america/program/schedule&quot;&gt;How to Contribute to Usergrid&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The talk is intended to be a briefing for contributors, one that will lead you through building and running Usergrid locally, understanding the code-base and test infrastructure and how to get your code accepted into the Usergrid project.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s the outline I have so far:&lt;/p&gt;

&lt;h3&gt;How to Contribute to Apache Usergrid&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Motivation
    &lt;ul&gt;&lt;li&gt;Why would anybody want to contribute to Usergrid?&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;First steps
    &lt;ul&gt;&lt;li&gt;The basics&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Getting signed up&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Contributing to the Stack
    &lt;ul&gt;&lt;li&gt;Understanding the architecture &amp; code base&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Building the code. Making and testing changes&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Running Usergrid locally via launcher &amp; via Tomcat&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Contributing to the Portal
    &lt;ul&gt;&lt;li&gt;Understanding the architecture &amp; code base&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Building the code. Making and testing changes&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Running the portal locally via node.js&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Contributing to the SDKs
    &lt;ul&gt;&lt;li&gt;Understanding the architecture &amp; code base&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Building the code. Making and testing changes&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Contributor workflow: how to get your code into Usergrid
    &lt;ul&gt;&lt;li&gt;For quickie drive-by code contributions&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;For more substantial code contributions&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;For documentation &amp;  website changes&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Contributing Docs and Website changes
    &lt;ul&gt;&lt;li&gt;Website, wiki and GitHub pages&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;How to build the website and docs&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Roadmap
    &lt;ul&gt;&lt;li&gt;First release&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;New Core Persistence system&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;The two-dot-o branch&lt;/li&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;li&gt;Other ideas&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&amp;#39;m in the process of writing this talk now so suggestions and other feedback are most welcome.&lt;/p&gt;


</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/10_years_ago</guid>
    <title>10 years ago today</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/10_years_ago</link>
    <pubDate>Tue, 17 Apr 2012 07:41:07 +0000</pubDate>
    <category>Roller</category>
    <category>apacheroller</category>
    <category>blogging</category>
    <category>ibm</category>
    <category>java</category>
    <category>oracle</category>
<description>&lt;p&gt;&lt;img src=&quot;https://rollerweblogger.org/roller/mediaresource/d41c26ed-d162-4b37-b9a5-65fccc404303&quot; alt=&quot;O&amp;#39;Reilly logo&quot; align=&quot;right&quot;&gt;Ten years ago on this day, O&amp;#39;Reilly published an article that I wrote called &lt;a href=&quot;http://onjava.com/pub/a/onjava/2002/04/17/wblogosj2ee.html&quot;&gt;Building an Open Source J2EE Weblogger&lt;/a&gt;, the article that introduced the Roller weblogger (now known as &lt;a href=&quot;http://roller.apache.org&quot;&gt;Apache Roller&lt;/a&gt;) to the world. It changed my career and my life in a bunch of nice ways and 10 years later I&amp;#39;m still benefiting from my choice to create Roller and write that article. So you can get a taste of the times, here&amp;#39;s the intro:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://onjava.com/pub/a/onjava/2002/04/17/wblogosj2ee.html&quot;&gt;Building an Open Source J2EE Weblogger&lt;/a&gt;: As a Java developer, you should be aware of the tremendous wealth of open source development software that is available for your use -- even if you have no desire to release any of your own software as open source. In this article, I will introduce you to some of the most useful open source Java development tools by showing you how I used these tools to develop a complete database-driven Web application called Roller.&lt;/p&gt;

&lt;p&gt;Roller fits into the relatively new category of software called webloggers: applications that make it easy for you to maintain a weblog, also known as a blog -- a public diary where you link to recent reading on the Web and comment on items of interest to you.&lt;/p&gt;

&lt;p&gt;The Roller Web application allows you to maintain a Web site that consists of a weblog, an organized collection of favorite Web bookmarks, and a collection of favorite news feeds. You can define Web pages to display your weblog, bookmarks, and news feeds. By editing the HTML templates that define these pages, you have almost total control over the layout and appearance of these pages. Most importantly, you can do all of this without leaving the Roller Web application -- no programming is required.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I&amp;#39;ve written and talked about Roller and the history of Roller numerous times. If you&amp;#39;re interested in learning more about it here&amp;#39;s my most recent Roller presentation, which covers Roller history in some detail:&lt;/p&gt;


&lt;div style=&quot;width:425px;&quot; id=&quot;__ss_2573296&quot;&gt; &lt;strong style=&quot;display:block;margin:12px 0 4px;&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/snoopdave/whats-new-in-roller5&quot; title=&quot;Whats New In Roller5&quot; target=&quot;_blank&quot;&gt;Whats New In Roller5&lt;/a&gt;&lt;/strong&gt;  &lt;div style=&quot;padding:5px 0 12px;&quot;&gt; View more &lt;a href=&quot;http://www.slideshare.net/&quot; target=&quot;_blank&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/snoopdave&quot; target=&quot;_blank&quot;&gt;snoopdave&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;


&lt;p&gt;These days, Roller isn&amp;#39;t really thriving as an open source project. Wordpress became the de facto standard blogging package and then micro-blogging took over the world. There are only a couple of active committers and most recent contributions have come via student contributions. Though IBM, Oracle and other companies still use it heavily, they do not contribute back to the project. If you&amp;#39;re interested in contributing to Roller or becoming part of the Apache Software Foundation, then &lt;a href=&quot;http://rollerweblogger.org/project/entry/roller_needs_you&quot;&gt;Roller needs YOU!&lt;/a&gt;.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/open_source_vs_weblogic_and</guid>
    <title>Open-source vs Weblogic and WebSphere</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/open_source_vs_weblogic_and</link>
    <pubDate>Tue, 10 Jan 2012 10:33:53 +0000</pubDate>
    <category>Open Source</category>
    <category>java</category>
    <category>weblogic</category>
    <category>websphere</category>
<description>&lt;p&gt;Survey says 80% of New Relic&amp;#39;s Java customers choose open source app servers over expensive bloat-ware.&lt;/p&gt;

&lt;blockquote&gt;
Server wars: Open-source Java vs Weblogic and WebSphere | Software, Interrupted - CNET News:
Overall, it&amp;#39;s not surprising that users who are deploying their applications to the cloud are more likely to use open source, if for no other reason than that licensing is far simpler. Additionally, there are Amazon Machine Images (AMIs) available for most open source stacks, making it very easy to choose open source over a traditionally licensed application server.
&lt;/blockquote&gt;

</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links47</guid>
    <title>Latest Links - July 30, 2011</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links47</link>
    <pubDate>Wed, 20 Jul 2011 15:00:01 +0000</pubDate>
    <category>Links</category>
    <category>design</category>
    <category>java</category>
<description>&lt;p&gt;Latest links, favorites and photos shared elsewhere:&lt;/p&gt;
    &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/0f4c0070-b26e-4bf9-91bf-1ed071fbc9d5&quot;&gt;
            &lt;a href=&quot;http://twitter.com/snoopdave/statuses/97026367639654401&quot;&gt;snoopdave&lt;/a&gt; Shared: Flederhaus - An entire building of hammocks! &lt;a href=&quot;http://bit.ly/oeEkp9&quot;&gt;http://bit.ly/oeEkp9&lt;/a&gt; #fb &lt;span&gt;03:31:03 PM 29 Jul 2011&lt;/span&gt;
            &lt;/p&gt;

            &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/1b58fb4b-7ebe-4a5e-8b84-983cc356c325&quot;&gt;
            &lt;a href=&quot;http://twitter.com/jukkaz/statuses/96869207362375680&quot;&gt;jukkaz&lt;/a&gt; So much for Java 7 then: &lt;a href=&quot;http://t.co/7dMuDyV&quot;&gt;http://t.co/7dMuDyV&lt;/a&gt; &lt;span&gt;05:06:33 AM 29 Jul 2011&lt;/span&gt;
            &lt;/p&gt;

            &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/1b58fb4b-7ebe-4a5e-8b84-983cc356c325&quot;&gt;
            &lt;a href=&quot;http://twitter.com/ryanirelan/statuses/96786436778491904&quot;&gt;ryanirelan&lt;/a&gt; New Ways of Designing the Modern Workspace &lt;a href=&quot;http://j.mp/ob3Btu&quot;&gt;http://j.mp/ob3Btu&lt;/a&gt; The comments are the best part. Read all of them. &lt;span&gt;11:37:39 PM 28 Jul 2011&lt;/span&gt;
            &lt;/p&gt;

            &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/7473d1b1-7fde-4520-aad2-437e11a222a3&quot;&gt;
            &lt;a href=&quot;http://www.lucidimagination.com/blog/2011/07/28/dont-use-java-7-for-anything/&quot;&gt;Chris Hostetter: Don&#146;t Use Java 7, For Anything&lt;/a&gt; shared &lt;span&gt;06:21:12 PM 28 Jul 2011&lt;/span&gt; 
            &lt;/p&gt;

            </description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_5_and_websphere_8</guid>
    <title>Roller 5 and WebSphere 8 (beta)</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_5_and_websphere_8</link>
    <pubDate>Wed, 9 Feb 2011 22:18:55 +0000</pubDate>
    <category>Roller</category>
    <category>java</category>
    <category>javaee</category>
    <category>websphere</category>
<atom:summary type="html">&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/8413ae9f-d4a2-418a-9d37-0fab7644e413&quot; alt=&quot;Websphere logo&quot; align=&quot;right&quot;&gt;In my quest to get Roller running on the latest in Java EE servers, the last server I tacked was the &lt;a href=&quot;http://www-01.ibm.com/software/webservers/appserv/was/&quot;&gt;WebSphere Application Server&lt;/a&gt;. Unlike Glassfish and JBoss, WebSphere&amp;#39;s Java EE 6 offering is not available in final form yet. Java EE 6 support is coming in WebSphere 8. So, for this exercise I used the WebSphere 8 beta, which was made &lt;a href=&quot;http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14482785&quot;&gt;available in July 2010&lt;/a&gt;. In this blog I&amp;#39;ll describe how I approached the problem what I learned along the way.&lt;/p&gt;</atom:summary><description>&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/8413ae9f-d4a2-418a-9d37-0fab7644e413&quot; alt=&quot;Websphere logo&quot; align=&quot;right&quot;&gt;In my quest to get Roller running on the latest in Java EE servers, the last server I tacked was the &lt;a href=&quot;http://www-01.ibm.com/software/webservers/appserv/was/&quot;&gt;WebSphere Application Server&lt;/a&gt;. Unlike Glassfish and JBoss, WebSphere&amp;#39;s Java EE 6 offering is not available in final form yet. Java EE 6 support is coming in WebSphere 8. So, for this exercise I used the WebSphere 8 beta, which was made &lt;a href=&quot;http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14482785&quot;&gt;available in July 2010&lt;/a&gt;. In this blog I&amp;#39;ll describe how I approached the problem what I learned along the way.&lt;/p&gt;
&lt;h4&gt;Deployed the Java EE version of the Roller WAR&lt;/h4&gt;
&lt;p&gt;If you remember my back to my post on &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_5_and_glassfish_3&quot;&gt;Glassfish&lt;/a&gt;, I ended up with two WARs, one for Tomcat and one for Java EE. Then in my post on &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_5_and_jboss_6&quot;&gt;JBoss&lt;/a&gt;, I had to add a special WAR just for JBoss. Fortunately for WebSphere, I was able to use same &amp;quot;Java EE&amp;quot; WAR that I used on Glassfish. It didn&amp;#39;t work the first time I tried, but with some code changes and installation guide adjustments, I was able to make it work. Here&amp;#39;s a quick summary of the problems I hit:&lt;/p&gt;
&lt;h4&gt;Problem 1: Commons Logging&lt;/h4&gt;
&lt;p&gt;I was able to deploy Roller successfully via the WebSphere console, but when I tried to load the Roller setup page I got a 404 error. I looked for the Roller log and found nothing. Something was preventing Commons Logging or Log4J from working properly. After some googling, I learned that this has been a problem on WebSphere for some time and there&amp;#39;s an easy (but annoying) fix. I had to add a property file to Roller and ask those installing Roller to add a property file to their WebSphere installation, details are here (&lt;a href=&quot;https://issues.apache.org/jira/browse/ROL-1895&quot;&gt;ROL-1895&lt;/a&gt;).&lt;/p&gt;
&lt;h4&gt;Problem 2: Filter compatibility&lt;/h4&gt;
&lt;p&gt;I had logging working but that didn&amp;#39;t really help me figure out what was going wrong. Eventually, I remembered the WebSphere Filter Compatibility issue. Servlet Filters are a standard feature of the Servlet API for years, but for some reason they are turned off by default in WebSphere. The solution is to set the &lt;code&gt;com.ibm.ws.webcontainer.invokeFiltersCompatibility&lt;/code&gt; flag to true via the WebSphere console and so that&amp;#39;s what I did. It worked.&lt;/p&gt;
&lt;h4&gt;Problem 3: Struts mapping&lt;/h4&gt;
&lt;p&gt;Once I got beyond the setup page, the Roller bootstrapping page would not load. After some investigation I found that the Struts filter was not being executed. Roller was using the mapping &lt;code&gt;/*&lt;/code&gt; meaning that all requests go through Struts. When I changed that to &lt;code&gt;*.rol&lt;/code&gt;, which is the extension we use for all Struts actions, things started working. That&amp;#39;s what we should have been doing anyway, so I made the change and moved on.&lt;/p&gt;
&lt;h4&gt;Wrapping up...&lt;/h4&gt;
&lt;p&gt;In the end, I was able to make Roller&amp;#39;s Java EE WAR work on WebSphere and that&amp;#39;s a good thing. I really don&amp;#39;t want to have a separate WAR for each app server. As I did for the other three servers, I added detailed step-by-step installation instructions for WebSphere to the &lt;a href=&quot;http://people.apache.org/~snoopdave/apache-roller-5.0/roller-install-guide.pdf&quot;&gt;Roller 5 Install Guide (2MB PDF)&lt;/a&gt;, with screenshots.&lt;/p&gt;
&lt;p&gt;See also: &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_5_and_java_ee&quot;&gt;Roller 5 and Java EE 6&lt;/a&gt;, &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_5_and_glassfish_3&quot;&gt;Roller 5 on Glassfish 3&lt;/a&gt; and &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_5_and_jboss_6&quot;&gt;Roller 5 on JBoss AS 6&lt;/a&gt;.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_5_and_glassfish_3</guid>
    <title>Roller 5 and Glassfish 3</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_5_and_glassfish_3</link>
    <pubDate>Mon, 10 Jan 2011 17:29:36 +0000</pubDate>
    <category>Roller</category>
    <category>asf</category>
    <category>glassfish</category>
    <category>java</category>
    <category>javaee</category>
    <category>jpa</category>
<atom:summary type="html">&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/1ae0d27d-6c18-4b34-89a8-2c4db15313a3&quot; alt=&quot;Duke and GlassFish&quot; align=&quot;right&quot;&gt;In my quest to make Roller work on Java EE 6, the first server that I decided to tackle was &lt;a href=&quot;http://glassfish.java.net&quot;&gt;Glassfish 3&lt;/a&gt;. In this blog I&amp;#39;ll describe how I approached the problem and what I learned along the way.&lt;/p&gt;

&lt;h4&gt;Tested with EclipseLink JPA&lt;/h4&gt;

&lt;p&gt;Roller uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Persistence_API&quot;&gt;JPA&lt;/a&gt; for persistence and specifically the &lt;a href=&quot;http://openjpa.apache.org/&quot;&gt;Apache OpenJPA&lt;/a&gt; implementation. I knew that GlassFish uses the &lt;a href=&quot;http://www.eclipse.org/eclipselink/&quot;&gt;EclipseLink JPA&lt;/a&gt; implementation and I suspected that there would be JPA portability problems, so I decided to run Roller&amp;#39;s JUnit tests against EclipseLink JPA. I wanted to find and fix those problems before even touching GlassFish. The tests ran and there were many JPA related failures and errors, most due to differences in the way that EclipseLink handles bi-directional relationships and the use of unmanaged objects.&lt;/p&gt;</atom:summary><description>&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/1ae0d27d-6c18-4b34-89a8-2c4db15313a3&quot; alt=&quot;Duke and GlassFish&quot; align=&quot;right&quot;&gt;In my quest to make Roller work on Java EE 6, the first server that I decided to tackle was &lt;a href=&quot;http://glassfish.java.net&quot;&gt;Glassfish 3&lt;/a&gt;. In this blog I&amp;#39;ll describe how I approached the problem and what I learned along the way.&lt;/p&gt;

&lt;h4&gt;Tested with EclipseLink JPA&lt;/h4&gt;

&lt;p&gt;Roller uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Persistence_API&quot;&gt;JPA&lt;/a&gt; for persistence and specifically the &lt;a href=&quot;http://openjpa.apache.org/&quot;&gt;Apache OpenJPA&lt;/a&gt; implementation. I knew that GlassFish uses the &lt;a href=&quot;http://www.eclipse.org/eclipselink/&quot;&gt;EclipseLink JPA&lt;/a&gt; implementation and I suspected that there would be JPA portability problems, so I decided to run Roller&amp;#39;s JUnit tests against EclipseLink JPA. I wanted to find and fix those problems before even touching GlassFish. The tests ran and there were many JPA related failures and errors, most due to differences in the way that EclipseLink handles bi-directional relationships and the use of unmanaged objects.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/c55737d5-bb41-4cf5-ab58-fed6a783aa08&quot; alt=&quot;EclipseLink logo&quot; align=&quot;right&quot;&gt;Where OpenJPA is lenient about bi-directional relationships, EclipseLink requires you to manage both ends. For example, with OpenJPA you can get away with adding a bookmark to a folder with &lt;code&gt;folder.addBookmark(bookmark)&lt;/code&gt;, but with EclipseLink you&amp;#39;d also have to add &lt;code&gt;bookmark.setFolder(folder)&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Where OpenJPA is lenient about use of unmanaged objects, EclipseLink will complain bitterly whenever it finds one in a persisted collection or relationship. This was more of a problem in the tests than in the actual Roller code, which usually deals only with managed objects (i.e. those persisted to / loaded from the database and managed by the JPA implementation).&lt;/p&gt;

&lt;p&gt;I was able to fix those problems easily and move onto the next step.&lt;/p&gt;

&lt;h4&gt;Created a Roller WAR without OpenJPA&lt;/h4&gt;

&lt;p&gt;I also knew that Roller included some jars needed for Tomcat but that are not needed, or worse, problematic, on true Java EE servers. For example, we include the Apache OpenJPA implementation because Tomcat doesn&amp;#39;t have one of its own. I modified the Roller build process to create two builds. One build is for Tomcat and includes OpenJPA and the other build is for Java EE and does not.&lt;/p&gt;

&lt;h4&gt;Deployed, tested and updated the docs&lt;/h4&gt;

&lt;p&gt;Next, I figured out how to deploy Roller to GlassFish 3 via the GlassFish web console, which was pleasant to use and familiar to me. I didn&amp;#39;t run into any problems along the way and later I documented the whole process in the &lt;a href=&quot;http://people.apache.org/~snoopdave/apache-roller-5.0/roller-install-guide.pdf&quot;&gt;Roller 5 Install Guide (2MB PDF)&lt;/a&gt;, with screenshots.&lt;/p&gt;

&lt;p&gt;Next up: &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_5_and_jboss_6&quot;&gt;Roller 5 on JBoss 6&lt;/a&gt;&lt;/p&gt; 
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_built_with_maven</guid>
    <title>Built with Maven</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_built_with_maven</link>
    <pubDate>Sun, 14 Mar 2010 09:47:26 +0000</pubDate>
    <category>Roller</category>
    <category>ant</category>
    <category>java</category>
    <category>maven</category>
<description>&lt;a href=&quot;http://maven.apache.org&quot;&gt;
&lt;img style=&quot;padding:4px;align:left;&quot; src=&quot;http://rollerweblogger.org/roller/mediaresource/f20c4914-80dc-48f5-a8d1-2efa3d89eb07&quot; alt=&quot;Maven Logo&quot;&gt;
&lt;/a&gt;

&lt;p&gt;I was a &lt;a href=&quot;http://maven.apache.org&quot;&gt;Maven&lt;/a&gt; hater and resisted it for a long time but over the years Maven has gotten much better, it&amp;#39;s well supported in IDEs and as far as I can tell, Maven has replaced Ant as the de facto build system for Java projects. If you want new developers be able to easily build, debug and run your code via command or their favorite IDE then Maven is the way to go, and that&amp;#39;s especially true for open source projects like Roller.&lt;/p&gt;

&lt;p&gt;That&amp;#39;s why I spent a couple of weekends learning Maven and converting Roller&amp;#39;s build process from Ant to Maven (&lt;a href=&quot;https://issues.apache.org/jira/browse/ROL-1849&quot;&gt;ROL-1849&lt;/a&gt;). The process of conversion wasn&amp;#39;t too difficult. Getting dependencies under control was a pain, but it believe it will be a one time pain and a worthwhile one. What took the most time was figuring out how to get Maven to start Derby, create the Roller tables and then run Roller&amp;#39;s JUnit tests. Also, getting Maven&amp;#39;s Jetty plugin setup to run Roller was a little tricky but hopefully also a one-time pain. The result is that Roller now uses a standard and well known directory structure, dependencies are managed and it&amp;#39;s easier for developers to get started with the codebase.&lt;/p&gt;

&lt;p&gt;If you have Maven and Subversion installed on your computer then these commands will fetch the Roller source code, compile the code, run all JUnit tests and then build the Roller webapp:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
   svn co https://svn.apache.org/repos/asf/roller/trunk roller_trunk
   cd roller_trunk 
   mvn install
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;And once all that is done, the following commands will start the Jetty app server, start the Derby database and start Roller at http://localhost:8080/roller, ready for testing, experimentation, etc.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
   cd weblogger-web
   mvn jetty:run-war
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;I think that&amp;#39;s pretty damn useful.&lt;/p&gt;

&lt;p&gt;Here are some articles/links that influenced my thinking on Maven recently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symphonious.net/2010/01/11/comparing-build-systems/&quot;&gt;Comparing Build Systems&lt;/a&gt; - Adrian Sutton concludes that Maven is too much work but &amp;quot;the consistency in how a project is built that the Maven project has brought to the Java would is absolutely revolutionary&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.atlassian.com/developer/2008/02/maven_in_our_development_proce.html&quot;&gt;Maven in our development process&lt;/a&gt; - Sherali Karimov explains how Atlassian and says the need for Maven training is &amp;quot;the most important and most overlooked issue of all.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sonatype.com/&quot;&gt;Sonatype&lt;/a&gt; - The Maven Company. Founded in 2008 by Jason van Zyl, the creator of Maven. Offers training, support and the Nexus Professional repo manager.&lt;/li&gt;
&lt;/ul&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_beginners_guide_available</guid>
    <title>Roller Beginner&amp;#39;s Guide available</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_beginners_guide_available</link>
    <pubDate>Thu, 25 Feb 2010 07:54:11 +0000</pubDate>
    <category>Roller</category>
    <category>blogging</category>
    <category>java</category>
    <category>opensource</category>
<description>&lt;a href=&quot;http://www.packtpub.com/apache-roller-4-0-beginners-guide/book/mid/270110dldzcj?utm_source=rollerweblogger.org&amp;amp;utm_medium=affiliate&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_002234&quot;&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/e481af17-243b-4b18-a6f9-9305739ff217&quot; style=&quot;padding:4px;align:right;&quot; alt=&quot;photo of beginner&amp;#39;s guide to Apache Roller 4.0&quot;&gt;&lt;/a&gt;

&lt;p&gt;I blogged about Alfonso Romero&amp;#39;s Apache Roller 4.0 Beginner&amp;#39;s Guide book before. It&amp;#39;s a great resource for folks who want to get the most out of their Apache Roller-based blogs, and not just beginners. As you can see in the photo on the right, I&amp;#39;ve got my copy. You can get yours directly from Pakt publishing:&lt;/p&gt;

&lt;p&gt; 
&lt;a href=&quot;http://www.packtpub.com/apache-roller-4-0-beginners-guide/book/mid/270110dldzcj?utm_source=rollerweblogger.org&amp;amp;utm_medium=affiliate&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_002234&quot;&gt;Buy a copy of Beginner&amp;#39;s Guide to Apache Roller 4.0&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;To publicize the book, Pakt publishing has been publishing some useful excerpts and even a complete sample chapter online. Here&amp;#39;s summary of the excerpts so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.packtpub.com/files/9508-Chapter-9-Advanced-Topics.pdf&quot;&gt;Chapter 9 - Advanced topics (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.packtpub.com/article/working-with-templates-in-apache-roller-4&quot;&gt;Working with Templates in Apache Roller 4.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.packtpub.com/article/uploading-videos-sound-files-posts-using-apache-roller&quot;&gt;Using video and sound files in Roller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.packtpub.com/article/including-google-map-posts-using-apache-roller-4&quot;&gt;Including Google Maps in Roller blog posts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.packtpub.com/article/spicing-blog-uploading-files-images-weblog-apache-roller&quot;&gt;Spicing up your Roller blog with uploaded images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you&amp;#39;ve been following Roller development you know that &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Apache+Roller+5.0+Release&quot;&gt;Roller 5.0&lt;/a&gt; is on the way. Most of the changes in Roller 5.0 are &amp;quot;under the hood&amp;quot; so 5.0 won&amp;#39;t make Alfonso&amp;#39;s book obsolete. Except for a couple of pages in Chapter 5 &amp;quot;Spicing Up Your Blog&amp;quot; that need updated screenshots, I believe everything in the book applies to Roller 5.0 as well.&lt;/p&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/month_of_blogging</guid>
    <title>Month of blogging</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/month_of_blogging</link>
    <pubDate>Sun, 2 Aug 2009 16:04:33 +0000</pubDate>
    <category>General</category>
    <category>blogging</category>
    <category>feeds</category>
    <category>ibm</category>
    <category>java</category>
    <category>opensource</category>
    <category>socialsoftware</category>
    <category>sun</category>
    <category>webdev</category>
<atom:summary type="html">&lt;p&gt;Crammed into one post...&lt;/p&gt;

After a month of blog neglect, my automatic Latest Links from my Delicious.com account started to pile up. Back in the glory days of this blog, I blogged about things instead just saving links or tweeting about them. I realized that, by adding some commentary/opinion for each, I could turn a month&amp;#39;s worth of links into a month&amp;#39;s worth of blog posts and thus gain total absolution for my sin of going a full month without a post. So that&amp;#39;s what I did. &amp;nbsp;</atom:summary><description>&lt;p&gt;Crammed into one post...&lt;/p&gt;

&lt;p&gt;After a month of blog neglect, the automatic Latest Links posts from my Delicious.com account started to pile up in my blog editor. Back in the glory days of this blog, I blogged about things instead just saving links or tweeting about them and would never have let a month go by without blogging. I realized that, by adding some commentary/opinion for each, I could turn a month&amp;#39;s worth of links into a month&amp;#39;s worth of blog posts and thus gain total absolution for my sin of going a full month without a post. So that&amp;#39;s what I did.&lt;/p&gt;


ul.linkentry&amp;gt;li {margin-bottom:0.5em;}
ul.linkentry&amp;gt;li span {color:gray; font-style: italics}


&lt;p&gt;Category: Blogging&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://bitworking.org/news/2009/07/comment-system-review&quot;&gt;Joe Gregorio: Comment system review&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Comparing Disqus, IntenseDebate and Google Friend Connect.&amp;quot;&lt;/span&gt; Joe Gregorio looked at commenting systems and ended up chosing Intense Debate.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/eclectic/entry/disqus_integration_bsc_roller_weblogger&quot;&gt;Integrating Disqus and Roller Weblogger on blogs.sun.com&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;I&amp;#39;ve recently updated my site to use Disqus the blog comment hosting and conversation site.&amp;quot;&lt;/span&gt; Sun UK CTO Wayne Horkan explains how (and why) to use the Disqus in a Roller, with code and helpful comments from Disqus CEO Daniel Ha.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://googleblog.blogspot.com/2009/07/new-blog-search-tools-feeds-hot-queries.html&quot;&gt;Official Google Blog: New Blog Search tools&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Feeds, Hot Queries and Latest Posts.&amp;quot;&lt;/span&gt; Nice to see Google is still working on blog search despite the rumored death of blogging.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Category: Feeds&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/pubsubhubbub/&quot;&gt;pubsubhubbub - Google Code&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;A simple, open, server-to-server web-hook-based pubsub (publish/subscribe) protocol as an extension to Atom.&amp;quot;&lt;/span&gt; Collaboration between Google and SixApart folks to allow quick notifiation of new content to feed subscribers and reduce load on feed publishers. Hub implementations are underway for AppEngine/Python, Erlang, Python and Ruby. Hmm... no Java?&lt;/li&gt;

&lt;/ul&gt;


&lt;p&gt;Category: General&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://www.johnryding.com/the-ryding-list/&quot;&gt;The Ryding List | Why Not?&lt;/a&gt;&lt;br&gt; &lt;span&gt;&amp;quot;I have found a wealth of great things to do in Raleigh.&amp;quot;&lt;/span&gt; Great list of things to do around Raleigh by newcomer John Ryding, one of my coworkers at IBM.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.allthingsdistributed.com/2007/07/the_different_cto_roles.html&quot;&gt;The Different CTO Roles - All Things Distributed&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;there is no well established definition of what a CTO actually does.&amp;quot;&lt;/span&gt; Of special interest to me now that I work on a CTO&amp;#39;s staff.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.boingboing.net/2009/07/01/life-during-wartime.html&quot;&gt;Life During Wartime video from Stop Making Sense - Boing Boing&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;This is the best concert movie I&amp;#39;ve ever seen.&amp;quot;&lt;/span&gt; Me too.&lt;/li&gt;

&lt;/ul&gt;


&lt;p&gt;Category: IBM&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;https://jazz.net/wiki/bin/view/Main/RtcSdk20&quot;&gt;Integrating and Extending Rational Team Concert 2.0&lt;/a&gt;&lt;br&gt;Great guide and presentation on Team Concert development via the Jazz Server SDK. Referring to this a lot these days.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blog.zvikico.com/2009/06/eclipse-galileo-for-mac-cocoa-or-carbon.html&quot;&gt;Eclipse Galileo for Mac: Cocoa or Carbon?&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Carbon is more mature and thoroughly tested, the new Cocoa implementation offers advantages and improvements.&amp;quot;&lt;/span&gt; And the answer is: 32-bit Cocoa. Yep, I&amp;#39;m paying attention to Eclipse again. It&amp;#39;s really the only way to do Jazz development.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://eclipse.org/e4/resources/e4-whitepaper.php&quot;&gt;Whitepaper: e4 Technical Overview&lt;/a&gt;&lt;br&gt;Lots of detail on the apparently massive changes coming in Eclipse e4 including the ability write Eclipse components in JavaScript and to run &amp;quot;existing SWT applications to be executed on web platforms such as ActionScript/Flash.&amp;quot;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Category: Java&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html&quot;&gt;James Strachan: Scala as the long term replacement for Java&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;if someone had shown me the Programming Scala book back in 2003 I&amp;#39;d probably have never created Groovy.&amp;quot;&lt;/span&gt; I&amp;#39;m sure that sent a lot of folks to Amazon, including me.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/pblaha/entry/google_app_engine_plugin_in&quot;&gt;Google App Engine plugin in NetBeans&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;With a video showing how easy it is to develop Google App Engine application in NetBeans. You can see that Hello World takes just 1 minute. :-)&amp;quot;&lt;/span&gt; Looks good and apparently it&amp;#39;s an open source side-project. Hosted at Kenai.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://fiber-space.de/wordpress/?p=1016&quot;&gt;Trails of EasyExtend: Java Spring - or the Biggus Dickus effect&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Looking at the API alone Spring feels like reading a parody on Java enterprise software.&amp;quot;&lt;/span&gt; Schadenfreude for me; never been a fan and always thought of it as a big grab bag of insidious crap I don&amp;#39;t need.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Category: Open Source&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://www.nytimes.com/2009/07/26/technology/companies/26mozilla.html?src=tp&amp;pagewanted=all&quot;&gt;NYTimes.com: For Mozilla and Google, Group Hugs Are Getting Tricky&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Google pays Mozilla hefty fees in return. The deal accounted for 88 percent of Mozilla&amp;#39;s $75 million in revenue in 2007.&amp;quot;&lt;/span&gt; Makes you wonder about the future of Firefox, Thunderbird, etc.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html&quot;&gt;Official Google Blog: Introducing the Google Chrome OS&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;The software architecture is simple: Google Chrome running within a new windowing system on top of a Linux kernel.&amp;quot;&lt;/span&gt;  Yet another Linux distro. That&amp;#39;s cool with me; I like Linux distros.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.scripting.com/stories/2009/07/08/theJavaWarsContinued.html&quot;&gt;The Java Wars, continued (Scripting News)&lt;/a&gt;&lt;br&gt; &lt;span&gt;&amp;quot;most people want XP on their netbook, not Linux. That was true yesterday and it&amp;#39;s still true today.&amp;quot;&lt;/span&gt; Dave Winer&amp;#39;s take on Google&amp;#39;s Chrome OS. I think he&amp;#39;s probably right at the moment but things are changing rapidly.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Category: Social Software&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://code.google.com/apis/gdata/articles/gdata_gadgets.html&quot;&gt;Creating a Google Data Gadget - Google Data APIs - Google Code&lt;/a&gt;&lt;br&gt; &lt;span&gt;&amp;quot;This article will walk you through creating a Blogger gadget.&amp;quot;&lt;/span&gt; Google and OpenSocial Gadget support for OAuth makes things easier, but it&amp;#39;s still a PITA.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://code.google.com/intl/en/apis/gadgets/docs/oauth.html&quot;&gt;Writing OAuth Gadgets - Gadgets API - Google Code&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;send mail to oauthproxyreg@google.com with the following information to register your OAuth Consumer Secret.&amp;quot;&lt;/span&gt; If you want to write a Gadget that uses OAuth to access Twitter there&amp;#39;s an icky manual registration step involved. Apparently the solution to this problem is for Twitter.com to enhance their &amp;quot;OAuth configuration to accept digital signatures directly from iGoogle.&amp;quot;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Category: Sun&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://www.sdtimes.com/blog/post/2009/07/16/The-End-of-Sun.aspx&quot;&gt;The end of Sun&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;And that is why Schwartz isn&amp;#39;t here, I believe. Because he genuinely loved Sun and its employees.&amp;quot;&lt;/span&gt; A depressing article for former Sun employee to read, or anybody I guess. I do think there is something to this quote about Scwhartz.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.forbes.com/2009/07/25/oracle-sun-ibm-technology-cio-network-oracle.html&quot;&gt;Oracle-Sun Creating Churn - Forbes.com&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Suns loyal customers are defecting in droves.&amp;quot;&lt;/span&gt; Not really very surprising considering the conventional wisdom, which seems to be that Oracle will gut Sun&amp;#39;s software efforts and ditch the hardware entirely.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.computerworld.com/is_oracle_getting_ready_to_kill_opensolaris&quot;&gt;Computerworld Blogs: Is Oracle getting ready to kill OpenSolaris? - &lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Sun, Oracle and third-party sources are telling me that OpenSolaris developers are afraid.&amp;quot;&lt;/span&gt; This article is typical of what I&amp;#39;ve seen from the author: dumb speculation of the mean-spirited variety. &lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.oracle.com/us/corporate/press/020174&quot;&gt;Justice department extends Oracle-Sun probe&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;All that&amp;#39;s left is one narrow issue about the way rights to Java are licensed.&amp;quot;&lt;/span&gt; I don&amp;#39;t there&amp;#39;s a chance in hell that it is, but wouldn&amp;#39;t it be fun if this was all about the Sun-Apache Terms of Use controversy? &lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Web development&lt;/p&gt;

&lt;ul class=&quot;linkentry&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/news/2009/06/Twitter-Architecture&quot;&gt;InfoQ: Twitter, an Evolving Architecture&lt;/a&gt;&lt;br&gt;Brief overview of Twitter architecture, use of caching and message queue technologies.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.freaks-unidos.net/javascript-libraries#my-opinion&quot;&gt;Evaluation of Javascript Libraries&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;jQuery and YUI come out on top, Prototype at the bottom.&amp;quot;&lt;/span&gt; Helped convince me that, now that we have YUI, we don&amp;#39;t really need Prototype and Scriptaculous in Roller.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blog.creonfx.com/javascript/mootools-vs-jquery-vs-prototype-vs-yui-vs-dojo-comparison-revised&quot;&gt;&amp;quot;MooTools vs JQuery vs Prototype vs YUI vs Dojo revised&lt;/a&gt;&lt;br&gt;&lt;span&gt;&amp;quot;Prototype is among the slowest.&amp;quot;&lt;/span&gt; More justification for ripping out Prototype and Scriptaculous.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;And now, back to your regular schedule of blogging, or not.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/rsc_2009</guid>
    <title>RSC 2009: connecting developers and community</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/rsc_2009</link>
    <pubDate>Tue, 26 May 2009 22:22:00 +0000</pubDate>
    <category>Social Software</category>
    <category>conferences</category>
    <category>ibm</category>
    <category>java</category>
    <category>jazz</category>
    <category>rsc</category>
<description>&lt;a href=&quot;http://www.ibm.com/software/rational/rsdc&quot;&gt;
&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/rscFace_bigger.JPG&amp;quot; 
alt=&amp;quot;RSC logo&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;&lt;/a&gt;

&lt;p&gt;I&amp;#39;ve attended every JavaOne since 2004, but this year I&amp;#39;ve got new job and a new conference to attend. This year I&amp;#39;ll be traveling to Orlando, FL and attending the &lt;a href=&quot;http://www.ibm.com/software/rational/rsdc&quot;&gt;Rational Software Conference&lt;/a&gt; also known as &lt;a href=&quot;http://search.twitter.com/search?q=%23rsc2009&quot;&gt;#rsc2000&lt;/a&gt; in the twit&amp;#39;o&amp;#39;sphere.&lt;/p&gt;

&lt;p&gt;I&amp;#39;m not going to be giving a talk, but I will be manning a demo pedestal and showing some of what I&amp;#39;ve been working on in my first couple of months at IBM: working on getting &lt;a href=&quot;http://www.ibm.com/developerworks/rational/products/rtc&quot;&gt;Rational Team Concert&lt;/a&gt; and other Jazz-based products to work well with &lt;a href=&quot;http://www.ibm.com/software/lotus/products/connections&quot;&gt;Lotus Connections&lt;/a&gt;, IBM&amp;#39;s social software suite which includes communities, forums, blogs, bookmarking, social networking and wikis (coming soon in Connections 2.5).&lt;/p&gt;

&lt;a href=&quot;http://www.ibm.com/software/lotus/products/connections&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/connections-logo.jpg&quot; alt=&quot;Connections logo&quot; align=&quot;left&quot; hspace=&quot;5&quot; title=&quot;Lotus Connections&quot;&gt;&lt;/a&gt;

&lt;p&gt;Why would you want to use Team Concert with Connections? It&amp;#39;s all about connecting developers to community, helping developers use social software tools to inform, share and collaborate with the wider community of people that support, manage, sell and use the software.&lt;/p&gt;

&lt;a href=&quot;http://jazz.net/&quot;&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/RationaJazz_148x78.jpg&quot; alt=&quot;Jazz logo&quot; align=&quot;right&quot; hspace=&quot;5&quot; title=&quot;Jazz!&quot;&gt;&lt;/a&gt;

&lt;p&gt;The tentative plan that we&amp;#39;ve outlined for all (registered users) to see on the Jazz.net is all about making it easy to setup and integrate community infrastructure for a new software project.&lt;/p&gt;

&lt;p&gt;For example, wouldn&amp;#39;t it be nice if, when you setup a new project in Team Concert you&amp;#39;d have the option of setting up an integrated Lotus Connections community complete with a project blog, discussion forum, wiki space and shared bookmarks? Shouldn&amp;#39;t those blogs, forums and wikis be searched when you do a project search and shouldn&amp;#39;t it be dead-simple to fire-off a blog entry or forum post to start a community conversation about a work-item or any other Team Concert artifact? We think so and we think that&amp;#39;s just a start; there&amp;#39;s lots more we can do.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re going to be at RSC 2009, please stop by and say hi. I&amp;#39;ll be on duty from 5-8PM on Monday and most of the day Tuesday. Whether you&amp;#39;re there or not, if you&amp;#39;ve got ideas about developer tool and social software integration, I&amp;#39;d love to hear from you.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/media_blogging_for_roller</guid>
    <title>Media Blogging for Roller</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/media_blogging_for_roller</link>
    <pubDate>Thu, 19 Feb 2009 12:57:37 +0000</pubDate>
    <category>Roller</category>
    <category>apacheroller</category>
    <category>atom</category>
    <category>java</category>
    <category>mentoring</category>
    <category>opensource</category>
    <category>rss</category>
<atom:summary type="html">For the past five months I&amp;#39;ve had the pleasure of mentoring two &lt;a href=&quot;http://www.sjsu.edu/&quot;&gt;San Jose State Univ.&lt;/a&gt; graduate students, &lt;a href=&quot;http://www.linkedin.com/pub/dir/ganesh/mathrubootham&quot;&gt;Ganesh Mathrubootham&lt;/a&gt; and &lt;a href=&quot;http://www.linkedin.com/pub/7/71/299&quot;&gt;Tanuja Varkanthe&lt;/a&gt;, who are working on a project for classes CMP 295A and B. They picked one of the projects that I first proposed for Google Summer of Code and then for Glassfish&amp;#39;s student outreach program, Media Blogging for &lt;a href=&quot;http://roller.apache.org&quot;&gt;Apache Roller&lt;/a&gt;. It&amp;#39;s turned out to be a major project and the central new feature in the upcoming Roller 5.0 release.&amp;nbsp;</atom:summary><description>&lt;p&gt;For the past five months I&amp;#39;ve had the pleasure of mentoring two &lt;a href=&quot;http://www.sjsu.edu/&quot;&gt;San Jose State Univ.&lt;/a&gt; graduate students, &lt;a href=&quot;http://www.linkedin.com/pub/dir/ganesh/mathrubootham&quot;&gt;Ganesh Mathrubootham&lt;/a&gt; and &lt;a href=&quot;http://www.linkedin.com/pub/7/71/299&quot;&gt;Tanuja Varkanthe&lt;/a&gt;, who are working on a project for classes CMP 295A and B. They picked one of the projects that I first proposed for Google Summer of Code and then for Glassfish&amp;#39;s student outreach program, Media Blogging for &lt;a href=&quot;http://roller.apache.org&quot;&gt;Apache Roller&lt;/a&gt;. It&amp;#39;s turned out to be a major project and the central new feature in the upcoming Roller 5.0 release.&lt;/p&gt;


&lt;h4&gt;The plan&lt;/h4&gt;

&lt;p&gt;The basic idea is to make it really easy to upload images, audio and video files to Roller, and really easy to include them in Roller blog posts and RSS/Atom feeds. Of course, the devil is in the details and Ganesh and Tanuja really have those covered. They have put together the most detailed and well thought-out plan and design ever for a new Roller feature. You can find the &lt;a href=&quot;http://cwiki.apache.org/confluence/x/rnkB&quot;&gt;proposal page&lt;/a&gt; and the full Media Blogging for Roller Project Plan (PDF, 2mb) on the Roller wiki. Here&amp;#39;s a key excerpt from the project summary:&lt;/p&gt; 

&lt;blockquote&gt;
&lt;p&gt;Roller currently lacks support for the latest blogging features.  Roller does allow 
users to upload any type of content to their blogs and include that content on blog entries as images or podcasts, but lacks tools to make media blogging a seamless experience for bloggers.  Interface to manage uploaded files is not sortable and not page-able. Once the user has uploaded a file, which could be an image or a podcast, he needs to explicitly cut and paste the URL into his blog post.&lt;/p&gt;

&lt;p&gt;Overall, Rollerâ&#128;&#153;s support for media blogs is currently limited to basic file upload functionality, which is cumbersome to use for creating media blogs. This project will revamp the existing file upload interface to incorporate powerful media blogging features into Roller. Also, successful media management websites such as Flickr and YouTube are driven by a public media library, offering different ways for users to search and locate the content of their like. This feature incorporated into a blog server can make it very powerful and we intend to do that as part of this project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To get an idea of what this is all about, let&amp;#39;s take a look at some screenshots/wireframes taken directly from the project plan.&lt;/p&gt;


&lt;h4&gt;New media file upload dialog&lt;/h4&gt;

&lt;p&gt;First up is the new media file upload dialog. There are a couple of interesting things here. We&amp;#39;ll have metadata for each upload, including description, tags and copyright message. We&amp;#39;ll also have the option of including the file in the gallery. We&amp;#39;ll support a media gallery for each blog, and new files added to the gallery are included in a special media feed for the blog.&lt;/p&gt;

&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/mediablogging-upload-1.png&amp;quot;
alt=&amp;quot;screenshot of new upload dialog&amp;quot; /&amp;gt;


&lt;h4&gt;File Uploads browser&lt;/h4&gt;

&lt;p&gt;To make it easy to manage your media files, the proposal includes a new upload browser interface, with a tabular and a hierarchical view. Thumbnails will be automatically generated on upload. Search and filtering controls will make it easy to find and operate on the files you are looking for, based on file metadata.&lt;/p&gt;

&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/mediablogging-browse-1.png&amp;quot; 
alt=&amp;quot;screenshot of new upload browser&amp;quot; /&amp;gt;


&lt;h4&gt;Select media dialog&lt;/h4&gt;

&lt;p&gt;When you are writing a blog post, you&amp;#39;ll be able to browse for and include media files without leaving the blog editor interface. You&amp;#39;ll be able to choose the size and orientation of the image or video in the blog post, as you can see below.&lt;/p&gt;

&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/mediablogging-video-1.png&amp;quot; 
alt=&amp;quot;screenshot of new add media dialog&amp;quot; /&amp;gt;


&lt;br&gt;&lt;br&gt;

&lt;p&gt;Needless to say, I&amp;#39;m pretty excited about these new features, and to looking forward to a major new Roller release, and one where I don&amp;#39;t have to do much of the work. If you want more information on 5.0 then check the &lt;a href=&quot;http://cwiki.apache.org/confluence/x/9aQB&quot;&gt;Apache Roller 5.0 proposal page&lt;/a&gt;. And if you want to help out then join the &lt;a href=&quot;http://cwiki.apache.org/confluence/x/ZYk&quot;&gt;Roller development mailing list&lt;/a&gt; and introduce yourself.&lt;/p&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/rome_1_0_rc2</guid>
    <title>ROME 1.0 RC2 on the way</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/rome_1_0_rc2</link>
    <pubDate>Wed, 7 Jan 2009 08:48:11 +0000</pubDate>
    <category>Feeds</category>
    <category>atom</category>
    <category>java</category>
    <category>opensource</category>
    <category>rome</category>
    <category>rss</category>
<description>&lt;img src=&quot;http://rollerweblogger.org/roller/resource/nicklothian-logo.png&quot; alt=&quot;Nick&amp;#39;s Twitter icon&quot; title=&quot;Go Nick go!&quot; align=&quot;right&quot;&gt;

&lt;p&gt;Good news for &lt;a href=&quot;https://rome.dev.java.net/&quot;&gt;ROME&lt;/a&gt; fans. &lt;a href=&quot;http://nicklothian.com/blog/&quot;&gt;Nick Lothian&lt;/a&gt; picked up the puck and is galloping towards the finish line (sorry, I&amp;#39;m terrible at sports analogies).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://markmail.org/message/5df7knpcceubjug&quot;&gt;Nick Lothian&lt;/a&gt; on ROME dev:&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve gone and built some preview jars for the upcoming ROME 1.0RC2, ROME Fetcher
1.0RC2 and Modules 0.3 release.&lt;/p&gt;

&lt;p&gt;Those jars can be found here:
&lt;a href=&quot;https://rome.dev.java.net/servlets/ProjectDocumentList?folderID=10368&amp;amp;expandFolder=10368&amp;amp;folderID=10368&quot;&gt;https://rome.dev.java.net/servlets/ProjectDoc...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#39;ve created source and javadoc jars as well as the normal jars - the idea being
that I&amp;#39;ll get them uploaded to some maven repository.&lt;/p&gt;

&lt;p&gt;If you have some spare time, please take a look at these and test them and let
me know of any problems. Assuming there are no big issues found I&amp;#39;d like to do a proper release in a couple of days.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Guess that means I should test &lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomePropono&quot;&gt;Propono&lt;/a&gt; with RC2.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/give_up_on_desktop</guid>
    <title>Sun should give up on the desktop?</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/give_up_on_desktop</link>
    <pubDate>Tue, 25 Nov 2008 17:27:19 +0000</pubDate>
    <category>Sun</category>
    <category>java</category>
    <category>mysql</category>
    <category>netbeans</category>
    <category>opensolaris</category>
    <category>sun</category>
<description>&lt;blockquote&gt;&lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2008/11/24/What-Sun-Should-Do&quot;&gt;Tim Bray: What Sun should do&lt;/a&gt;: Sun is going through a lousy spell right now. Well, so is the worldâ&#128;&#153;s economy in general and the IT business in particular, but this is about Sun. This is my opinion about what my employer should do about it.&lt;/blockquote&gt;

&lt;p&gt;It takes a lot of guts to write a piece like that and I&amp;#39;m really glad Tim did it. I&amp;#39;m going to walk out on the same limb and agree with pretty much everything Tim wrote. Tim wants Sun to focus like a laser on providing the best web platform around with Solaris, storage offerings, Java/Hotspot, Glassfish, MySQL and Netbeans for Java, Ruby, PHP, Groovy, etc. tooling. He writes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Itâ&#128;&#153;s easy to understand how our servers, CMT and x86, and the Solaris OS, fit into the Web Suite. All the software, including the HotSpot, GlassFish, and MySQL runtimes, needs to be obsessively tuned and optimized to run best in the context of the Suite. Obviously, the Suite will also include Ruby and Python and PHP runtimes, similarly tuned.&lt;/p&gt;
&lt;p&gt;All of Sunâ&#128;&#153;s software tooling should have a laser focus on usability, performance, and ease of adoption for the Web Suite.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I agree, but as a web geek I guess I&amp;#39;m pretty biased.&lt;/p&gt;

&lt;p&gt;Tim doesn&amp;#39;t shy away from the critical question of what Sun should stop doing. Tim says Sun should give up on the client-side, dropping JavaFX and JavaME (and OpenOffice too, I presume). Here&amp;#39;s Tim on JavaFX:&lt;/p&gt;

&lt;blockquote&gt;
For actual business apps, the kind that our servers spend most of their time running, the war for the desktop is over and the Web Browser won. I just totally donâ&#128;&#153;t believe that any combination of Flash and Silverlight and JavaFX is going to win it back.
&lt;/blockquote&gt;

&lt;p&gt;I can&amp;#39;t say I disagree with that either. Cutting JavaFX and JavaME would be extremely tough and painful decisions, but somebody&amp;#39;s going to make to make some of those. Looking at things from Tim&amp;#39;s web-platform-only point of view, they make sense. Sun needs only enough client-side software to keep Solaris attractive to developers and to support great development tools on all the platforms that web developers love.&lt;/p&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/apache_abdera_graduates</guid>
    <title>Atom news: Apache Abdera graduates</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/apache_abdera_graduates</link>
    <pubDate>Fri, 21 Nov 2008 15:54:48 +0000</pubDate>
    <category>Java</category>
    <category>asf</category>
    <category>atom</category>
    <category>atompub</category>
    <category>feeds</category>
    <category>java</category>
    <category>opensource</category>
    <category>rome</category>
<description>&lt;img src=&quot;http://rollerweblogger.org/roller/resource/atom-logo75px.gif&quot; align=&quot;right&quot; alt=&quot;Atom logo&quot; title=&quot;Atom logo&quot;&gt;

&lt;p&gt;Congratulations to the &lt;a href=&quot;http://incubator.apache.org/abdera/&quot;&gt;Apache Abdera&lt;/a&gt; team, who&amp;#39;ve just &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/incubator-abdera-dev/200811.mbox/%3C4585c4a60811191238t52bd9840q845653578eb0690d@mail.gmail.com%3E&quot;&gt;graduated&lt;/a&gt; to full Apache top level project status. The don&amp;#39;t have the new site at &lt;b&gt;abdera.apache.org&lt;/b&gt; up yet and they&amp;#39;re still not quite at 1.0 yet, but this is a  major milestone. They&amp;#39;ve got the best Atom format and protocol toolkit around, &lt;a href=&quot;http://rollerweblogger.org/roller/entry/rome_vs_abdera&quot;&gt;in my opinion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;via &lt;a href=&quot;http://asdf.blogs.com/asdf/2008/11/abdera-graduation.html&quot;&gt;Garett&lt;/a&gt; and &lt;a href=&quot;http://www.snellspace.com/wp/?p=979&quot;&gt;James&lt;/a&gt;.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/socialsites_flexible_relationship_model</guid>
    <title>SocialSite&amp;#39;s Flexible Relationship model</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/socialsites_flexible_relationship_model</link>
    <pubDate>Wed, 19 Nov 2008 10:47:21 +0000</pubDate>
    <category>Social Software</category>
    <category>java</category>
    <category>socialsite</category>
    <category>socialsoftware</category>
    <category>sun</category>
<atom:summary type="html">&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/oneswayrel.png&amp;quot; 
    title=&amp;quot;oneway rel cartoon&amp;quot; align=&amp;quot;right&amp;quot; alt=&amp;quot;oneway&amp;quot; /&amp;gt;
We want &lt;a href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt; to have a Flexible Relationship model that a site operator can tweak to suit the unique requirements of the site&amp;#39;s community. We&amp;#39;ve settled on a model based on relationship types and named levels. In this post, I&amp;#39;ll review this new model that we have designed.&amp;nbsp;</atom:summary><description>&lt;div style=&quot;float:right;text-align:center;font-size:6pt;margin:0.3em;&quot;&gt;
&lt;img src=&quot;http://farm2.static.flickr.com/1113/763130671_3f9eb37e61_m.jpg&quot; title=&quot;Facebook Friend Wheel&quot; alt=&quot;Friend Wheel&quot;&gt;&lt;br&gt;Image by &lt;a href=&quot;http://flickr.com/photos/flawedartist/763130671/in/photostream/&quot;&gt;flawedartist&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;We&amp;#39;re designing &lt;a href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt; to support the needs of any site that wishes to add Social Networking features and support &lt;a href=&quot;http://code.google.com/opensocial&quot;&gt;OpenSocial&lt;/a&gt;. That means we have to be flexible.

&lt;p&gt;We can&amp;#39;t hard-code the names of different types of relationships because some sites might want to call friends &amp;quot;buddies&amp;quot; and some might call them &amp;quot;connections.&amp;quot; Some sites might want multiple levels of relationships, with some relationships being considered stronger than others, like on Flickr where you have contacts, friends and family. Some sites might want to allow one-way relationships, as Twitter does with &amp;quot;followers,&amp;quot; but some sites might want to require that relationships be two-way, as Facebook does.&lt;/p&gt;

&lt;p&gt;We want SocialSite to have a Flexible Relationship model that a site operator can tweak to suit the unique requirements of her site&amp;#39;s community. We&amp;#39;ve settled on a model based on relationship types and named levels. In this post, I&amp;#39;ll review this new model that we have designed in hopes of getting some feedback, push-back and other good things that might help us refine our model.&lt;/p&gt;


&lt;h3&gt;I) Relationship Types&lt;/h3&gt;

&lt;p&gt;SocialSite is designed to support the types of personal relationship shown below. This doesn&amp;#39;t include group relationships, which are handled separately.&lt;/p&gt;

&lt;ul&gt;
&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/oneswayrel.png&amp;quot; 
    title=&amp;quot;oneway rel cartoon&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;
&lt;li&gt;&lt;b&gt;One-way relationship&lt;/b&gt;: A relationship from one person to another person that is not reciprocated. For example, Fred has a relationship with Bob, but Bob has no relationship with Fred. Another example: a follower relationship as you see in Twitter.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Two-way relationship&lt;/b&gt;: A relationship from one person to another that is reciprocated. For example, Fred has a relationship with Bob and Bob also has one with Fred. Another example is Facebook, which requires friendship relationships to be two-way.&lt;li&gt;

&lt;li&gt;&lt;b&gt;Mutual relationship&lt;/b&gt;: Fred and Bob have a two-way relationship and have agreed on a &amp;quot;how we know each other&amp;quot; message. This is more meaningful than a two-way relationship, because the two parties have agreed on some shared item of information about the relationship like &amp;quot;we met at band camp.&amp;quot;&lt;/li&gt;
&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;


&lt;h3&gt;II) Relationship Levels&lt;/h3&gt;

&lt;p&gt;SocialSite can be configured to support multiple relationship levels like Flickr&amp;#39;s contacts, friends and family levels. Users can use these levels when sharing information, e.g. share a photo only with relationships of family-level or higher. I&amp;#39;ll explain how the configuration works, but first let&amp;#39;s define what we mean by relationship level.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Relationship Level&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;A Relationship Level is a named integer index that is assigned by one person to indicates the strength of a relationship with another person. People only know the levels that that they have assigned to relationships, so one person in a relationship won&amp;#39;t feel slighted if the other party thinks less of the relationship than they do. For example, Fred might consider Bob to be a level 2 &amp;quot;Close Friend&amp;quot; but Bob considers Fred only a level 1 &amp;quot;Acquaintance&amp;quot; relationship. Fred won&amp;#39;t learn about this (unless Bob tells him).&lt;/p&gt;

&lt;p&gt;You can configure the relationships levels and names supported by SocialSite via the property &amp;#39;socialsite.relationship.levels&amp;#39;. You simply provide a comma separatied list of the I18N keys of the relationship level names, in order from no-relationship to the strongest level. Here is the default setting, which establishes three relationship levels 0=none, 1=contact and 2=friend:&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.levels=\
  relationshipLevel.none,\
  relationshipLevel.contact,\
  relationshipLevel.friend
&lt;/pre&gt;

&lt;a href=&quot;http://code.google.com/opensocial&quot;&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/opensocial_140_140.jpg&quot; alt=&quot;OpenSocial&quot; align=&quot;right&quot;&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href=&quot;http://code.google.com/opensocial&quot;&gt;OpenSocial&lt;/a&gt; doesn&amp;#39;t define differently named relationship levels like we do, so we need to do some mapping. OpenSocial has one type and one level of relationship called &amp;quot;friend.&amp;quot; So, to map SocialSite relationships to OpenSocial, we have introduced the notion of a friendship level.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Friendship level&lt;/b&gt;&lt;p&gt;

&lt;p&gt;Friendship level is an integer configuration property which indicates the relationship level that is considered to be &lt;i&gt;the&lt;/i&gt; friendship relationship across a SocialSite system. Relationships at or above this level are considered to be friends when returning data via OpenSocial APIs. Also, when you add a relationship at friendship-level or above, the other party will be notified and given the opportunity to add you as a friend too. You can configure the friendship level via the property below:&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.friendshiplevel=2
&lt;/pre&gt;

&lt;p&gt;It&amp;#39;s good to have the flexibility to support both one and two-way relationships, but we can&amp;#39;t assume that all sites will want both. Some social network services, like Facebook, require that friendship-level relationships be two-way, i.e. both parties must agree that they are friends. To make such a setup possible with SocialSite, we&amp;#39;ve introduced the configuration property below:&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.twoway.requiredForFriendship=true
&lt;/pre&gt;

&lt;p&gt;If that property is true, then any relationship that is considered a friendship (relationship level &amp;gt;= friendship level) must be a two-way relationship. So, when you add a relationship at friend-level or above, the other party must reciprocate or the relationship will not be created.&lt;/p&gt;


&lt;h3&gt;III) Example SocialSite configurations&lt;/h3&gt;

&lt;p&gt;To better explain how SocialSite Flexible Relationships work, here are some example configurations that configure SocialSite to behave like well-known social network services.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://flickr.com&quot;&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/flickr.png&quot; title=&quot;flickr logo&quot;&gt;&lt;/a&gt;
&lt;b&gt;-like configuration&lt;/b&gt;. Flickr supports relationship levels of Contact, Friend and Family. It&amp;#39;s possible for you to consider somebody to be Family, while they only consider you only to be a Contact. Any level relationship is considered to be a friendship relationship, for the purposes of OpenSocial.&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.levels=\
     relationshipLevel.none,\
     relationshipLevel.contact,\
     relationshipLevel.friend,\
     relationshipLevel.family
  socialsite.relationship.friendshiplevel=1
  socialsite.relationship.twowayRequiredForFriendship=false
&lt;/pre&gt;


&lt;p&gt;&lt;a href=&quot;http://twitter.com&quot;&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/twitter.png&quot; title=&quot;twitter logo&quot;&gt;&lt;/a&gt;
&lt;b&gt;-like configuration&lt;/b&gt;. Twitter supports one relationship level and that is follower. Its possible for you to follow somebody that does not follow you.&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.levels=\
     relationshipLevel.none,\
     relationshipLevel.follower
  socialsite.relationship.friendshiplevel=1
  socialsite.relationship.twowayRequiredForFriendship=false
&lt;/pre&gt;


&lt;p&gt;&lt;a href=&quot;http://facebook.com&quot;&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/facebook.png&quot; title=&quot;facebook logo&quot;&gt;&lt;/a&gt;
&lt;b&gt;-like configuration&lt;/b&gt;: Facebook supports one relationship level and that is friend. Friendships are required to be two-way, so we have this:&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.levels=\
     relationshipLevel.none,\
     relationshipLevel.friend
  socialsite.relationship.friendshiplevel=1
  socialsite.relationship.twowayRequiredForFriendship=true
&lt;/pre&gt;


&lt;p&gt;&lt;b&gt;The default SocialSite configuration&lt;/b&gt;. We&amp;#39;re considering the below settings for our default configuration. This would allow you to have contacts, with which you can share information but who are not considered friends and would not show up in your friends list or be returned as friends via the OpenSocial APIs.&lt;/p&gt;
&lt;pre&gt;
  socialsite.relationship.levels=\
     relationshipLevel.none,\
     relationshipLevel.contact,\
     relationshipLevel.friend
  socialsite.relationship.friendshiplevel=2
  socialsite.relationship.twowayRequiredForFriendship=true
&lt;/pre&gt;

&lt;h3&gt;IV) Wrapping up...&lt;/h3&gt;

&lt;p&gt;That just about covers it, so I&amp;#39;m going to wrap up now. Most of the above is now implemented in SocialSite, but none of this stuff is carved in stone. So your feedback is more than welcome, either here or on the &lt;a href=&quot;https://socialsite.dev.java.net/servlets/ProjectMailingListList&quot;&gt;SocialSite development or user&lt;/a&gt; mailing lists.&lt;/p&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/communityone_call_for_papers_is</guid>
    <title>CommunityOne call for papers is open X 2</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/communityone_call_for_papers_is</link>
    <pubDate>Wed, 19 Nov 2008 08:12:27 +0000</pubDate>
    <category>Sun</category>
    <category>cloud</category>
    <category>communityone</category>
    <category>java</category>
    <category>ria</category>
    <category>socialsoftware</category>
<description>&lt;p&gt;Next year there will be two &lt;a href=&quot;http://developers.sun.com/events/communityone/&quot;&gt;CommunityOne&lt;/a&gt; events in the US of A; one in New York City on March 18 and the other, coinciding with JavaOne week in June 1 in San Francisco. Here&amp;#39;s the &lt;a href=&quot;http://www.eventreg.com/sun/communityone09/cfp&quot;&gt;call for papers link&lt;/a&gt;. The call closes on December 11.&lt;/p&gt;

&lt;a href=&quot;http://developers.sun.com/events/communityone/&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/communityone.png&quot; alt=&quot;c1&quot; title=&quot;CommunityOne&quot;&gt;
&lt;/a&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/details_of_roller_setup_at</guid>
    <title>Details of Roller setup at blogs.sun.com</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/details_of_roller_setup_at</link>
    <pubDate>Tue, 18 Nov 2008 15:33:52 +0000</pubDate>
    <category>Roller</category>
    <category>apacheroller</category>
    <category>bsc</category>
    <category>java</category>
    <category>sun</category>
<description>&lt;p&gt;Meena Vyas, Murthy Chintalapati and Allen Gilliland just published an article on BigAdmin that describes the architecture of &lt;a href=&quot;http://blogs.sun.com&quot;&gt;blogs.sun.com&lt;/a&gt;, a Roller, Sun Web Server, Memcached and MySQL based site that averages 4 million hits a day with its two SunFire T2000 servers at 97% idle. You can get the article for free (registration required) here: &lt;a href=&quot;http://www.sun.com/bigadmin/features/articles/sunblogs.jsp&quot;&gt;Sun Blogs: A Sun Java System Web Server 7.0 Reference Deployment&lt;/a&gt;&lt;/p&gt;

   &amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/bsc-architecture.png&amp;quot; 
      title=&amp;quot;blogs.sun.com architecture&amp;quot; alt=&amp;quot;diagram&amp;quot; /&amp;gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/another_vote_for_restful_jsf</guid>
    <title>Another vote for RESTful JSF</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/another_vote_for_restful_jsf</link>
    <pubDate>Tue, 26 Aug 2008 08:27:33 +0000</pubDate>
    <category>General</category>
    <category>java</category>
    <category>jsf</category>
    <category>rest</category>
<description>&lt;p&gt;From the Seam Framework team&amp;#39;s wiki page on &lt;a href=&quot;http://seamframework.org/Documentation/JSF2&quot;&gt;JSF2 major issues&lt;/a&gt;:

&lt;blockquote&gt;
The JSF2 expert group should work closely with the JSR 311 expert group to define overlapping integration points (unified configuration) and programming models, so that a JSF implementation can work seamlessly with a JAX-RS implementation. For example, a @Path annotated POJO should work as a JSF backing bean without any additional configuration. A JSF application programmer should be able to expose RESTful remote APIs easily. 
&lt;/blockquote&gt;

&lt;p&gt;Right on.&lt;/p&gt;

&lt;p&gt;Via &lt;a href=&quot;http://raibledesigns.com/rd/entry/what_s_wrong_with_jsf&quot;&gt;Matt Raible&lt;/a&gt;&lt;/p&gt;
&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/social_roller</guid>
    <title>Social Roller</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/social_roller</link>
    <pubDate>Mon, 25 Aug 2008 19:51:31 +0000</pubDate>
    <category>Social Software</category>
    <category>apacheroller</category>
    <category>java</category>
    <category>socialsite</category>
<description>&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/socialroller-ss.jpg&amp;quot; 
title=&amp;quot;SocialSite - Roller demo screenshot from JavaOne 2008&amp;quot; align=&amp;quot;right&amp;quot; 
vspace=&amp;quot;15px&amp;quot; hspace=&amp;quot;15px&amp;quot; /&amp;gt;

&lt;p&gt;We demonstrated the &lt;a href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt; widgets in &lt;a href=&quot;http://roller.apache.org&quot;&gt;Roller&lt;/a&gt; at JavaOne, but we didn&amp;#39;t show much other than just the basic widgets. We modified a Roller front-page theme to include a people directory, added a profile page for each user and slapped the widgets on the page. It was pretty rough, as you can see on the right, like our other SocialSite demo vehicles.&lt;/p&gt;

&lt;p&gt;This week, I&amp;#39;m working to put together a much better demonstration, something useful enough to deploy to our internal blog site at Sun. Since I have limited time and I really need to get back to working on the SocialSite widgets and web services, I&amp;#39;ve been thinking about minimum set of features needed to add some value. Here&amp;#39;s what I think we need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Landing page&lt;/b&gt;: shows activities of your friends and groups, your inbox of social requests and place for you to update your status. This could be added to Roller&amp;#39;s Main Menu page or to pages of the Front Page blog, which is my preferred option.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Personal profile page&lt;/b&gt;: shows your mugshot and the subset of your profile information that the viewer is allowed to see. Shows your activities and the OpenSocial gadgets you have installed. This could be done in the pages of each user&amp;#39;s blog, which would give folks complete control of profile layout via page templates. Or I could be done in the pages of the Front Page blog.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Activity per entry or comment&lt;/b&gt;: whenever you publish a weblog post, or comment on one, an entry will be added to your activity feed so that your friends can see what you&amp;#39;re doing. This will be implemented as a feature of a Roller-specific OpenSocial Gadget.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Protected entries&lt;/b&gt;: ability to publish blog entries that are visible only to your friends via the Roller Gadget.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of the above items should be pretty easy with the SocialSite widgets, but I&amp;#39;m sure I&amp;#39;ll run into a snag or two at least. I always do. I&amp;#39;ll post again next week and let you know how far I got.&lt;/p&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/restful_jsf_in_the_works</guid>
    <title>RESTful JSF in the works?</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/restful_jsf_in_the_works</link>
    <pubDate>Fri, 8 Aug 2008 15:52:58 +0000</pubDate>
    <category>Java</category>
    <category>java</category>
    <category>jsf</category>
    <category>rest</category>
<description>&lt;p&gt;JSF spec lead &lt;a href=&quot;http://weblogs.java.net/blog/edburns&quot;&gt;Ed Burns&lt;/a&gt; just pointed out that some of my Sun-internal comments about JSF have made it outside the firewall and into an &lt;a href=&quot;https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=272&quot;&gt;issue&lt;/a&gt; on the JSF specification project:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On Wed, 19 Mar 2008, David M Johnson said:&lt;/p&gt;

&lt;p&gt;I think the goal should be to make JSF applications RESTful by  
default, with proper use of GET and POST, i.e. only use POST when  
application data is changing, not for component state. Another goal  
should be clean, book-markable URLs that only carry path-info and  
parameters needed by the application logic.&lt;/p&gt;

&lt;p&gt;That&amp;#39;s easy and the default situation with Rails, Grails, Struts, etc.  
How hard would it be to redesign JSF along those lines? Would it  
require EJB2 -&amp;gt; EJB3 level changes to JSF?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I suspect work on JSF 2.0 is too far along for this kind of change now, but it&amp;#39;s nice to hear that the idea of a truly RESTful JSF is at least under consideration.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links40</guid>
    <title>Latest Links</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links40</link>
    <pubDate>Tue, 8 Jul 2008 14:00:05 +0000</pubDate>
    <category>Links</category>
    <category>energy</category>
    <category>google</category>
    <category>java</category>
    <category>netbeans</category>
    <category>oauth</category>
<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoworld.com/article/08/07/07/28TC-ruby-ides_1.html&quot;&gt;InfoWorld 2008-07-07 Lab test: Climb aboard Ruby on Rails&lt;/a&gt;&lt;br&gt;Interesting that the best rated Ruby-on-Rails IDE is the one that is free &amp;amp; opensource. Go Netbeans!&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2008/07/07/Atom&quot;&gt;ongoin Â· Atomic Monday&lt;/a&gt;&lt;br&gt;&amp;quot;Herewith some evidence, for the general tech public, that Atompub is a big deal&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/articles/atomserver&quot;&gt;InfoQ: AtomServer â&#128;&#147; The Power of Publishing for Data Distribution&lt;/a&gt;&lt;br&gt;&amp;quot;a distributed, publish-subscribe service is a great way to address resiliency and loose coupling of subsystems&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blog.reddit.com/2008/06/reddit-goes-open-source.html&quot;&gt;blog.reddit -- what&amp;#39;s new on reddit: reddit goes open source&lt;/a&gt;&lt;br&gt;&amp;quot;Until now, the only portion of reddit that wasn&amp;#39;t freely available is reddit itself&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://googledataapis.blogspot.com/2008/06/oauth-for-google-data-apis.html&quot;&gt;OAuth for Google Data APIs&lt;/a&gt;&lt;br&gt; &amp;quot;we&amp;#39;re proud to announce that all of the Google Data APIs support OAuth&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://google-code-updates.blogspot.com/2008/07/protocol-buffers-our-serialized.html&quot;&gt;Google Code Blog: Protocol Buffers released as Open Source&lt;/a&gt;&lt;br&gt;&amp;quot;think XML, but smaller, faster, and simpler&amp;quot;&lt;/li&gt;

&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://www.dailykos.com/storyonly/2008/6/29/123633/282&quot;&gt;Daily Kos: Cars After The Age of Oil&lt;/a&gt;&lt;br&gt;&amp;quot;We can switch to a new tech that is older and simpler than the Internal Combustion Engine - the electric horseless carriage was first created in 1830&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blog.wired.com/cars/2008/07/laugh-at-high-g.html&quot;&gt;Wired.com: Laugh at High Gas Prices With a 282-MPG VW&lt;/a&gt;&lt;br&gt;&amp;quot;VW has approved a plan to build a limited number of One-Liters in 2010&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.newraleigh.com/articles/archive/sas-solar-farm/#When:16:22:00Z&quot;&gt;SAS Solar Farm | New Raleigh, NC&lt;/a&gt;&lt;br&gt; &amp;quot;Our local 500 pound software gorilla is building a five acre, one megawatt photovoltaic solar farm&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/linkedin_99_pure_java</guid>
    <title>LinkedIn: 99% Pure Java</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/linkedin_99_pure_java</link>
    <pubDate>Thu, 5 Jun 2008 09:07:23 +0000</pubDate>
    <category>Social Software</category>
    <category>java</category>
    <category>rome</category>
    <category>socialnetworking</category>
<description>&lt;p&gt;
&lt;a href=&quot;http://nicklothian.com/blog/&quot;&gt;Nick Lothian&lt;/a&gt; 
&lt;a href=&quot;http://twitter.com/nlothian/statuses/827220968&quot;&gt;tweeted&lt;/a&gt; about this 
&lt;a href=&quot;http://www.slideshare.net/linkedin/linkedins-communication-architecture&quot;&gt;
   JavaOne presentation on LinkedIn&lt;/a&gt; because it mentions the 
&lt;a href=&quot;https://rome.dev.java.net/&quot;&gt;ROME RSS/Atom feed parser&lt;/a&gt;.
I&amp;#39;m really sorry I missed it at JavaOne. What&amp;#39;s particularly interesting to me are the diagrams that explain how the LinkedIn architecture has evolved to scale up to 22 million users. Here&amp;#39;s an example:&lt;/p&gt;

&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/linkedin-today.png&amp;quot; 
alt=&amp;quot;LinkedIn architecture diagram&amp;quot; /&amp;gt;

</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/struts_2_in_action</guid>
    <title>Struts 2 in Action</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/struts_2_in_action</link>
    <pubDate>Wed, 7 May 2008 12:19:49 +0000</pubDate>
    <category>Java</category>
    <category>java</category>
    <category>javaone</category>
    <category>struts2</category>
<description>&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/struts2-in-action.jpg&amp;quot; 
hspace=&amp;quot;5px&amp;quot; align=&amp;quot;right&amp;quot; alt=&amp;quot;stack of struts 2 books at the JavaOne bookstore&amp;quot; /&amp;gt;

&lt;p&gt;&lt;a href=&quot;http://struts.apache.org&quot;&gt;Struts 2&lt;/a&gt; is my favorite Java web framework these days; it&amp;#39;s REST-friendly, simple, easy to use, very flexible and the only thing it has with its creaky old Struts 1.x parent is the fact that it&amp;#39;s an action framework rather than a component framework like JSF. As most of my readers probably already know, Struts 2 is based on WebWork/XWork the framework that powers JIRA and Confluence, two of the coolest Java webapps around.&lt;/p&gt;

&lt;p&gt;Apparently, I&amp;#39;m not alone in this thinking -- I keep on running into folks at JavaOne who feel the same way. But unfortunately, Struts 2 docs are lacking, so I was very happy to see two new books on Struts 2 at the JavaOne bookstore. There&amp;#39;s &lt;a href=&quot;http://www.manning.com/dbrown/&quot;&gt;Struts 2 in Action&lt;/a&gt;, a rewrite of the classic Manning book, and &amp;lt;a href=
&amp;quot;http://www.apress.com/book/view/1590599039&amp;quot;&amp;gt;Practical Apache Struts 2 Web 2.0 Projects from Apress.&lt;/p&gt;

&lt;p&gt;I picked up a copy of Struts 2 in Action on Monday and it looks great so far, but I&amp;#39;ve only skimmed it. I&amp;#39;ll let you know what I think once I dig-in on the flight home.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re at JavaOne, check out &lt;b&gt;TS-5739 - Hands-on Struts2&lt;/b&gt; by Ian Roughley (author of the Apress book) today at 10:50 AM in Esplanade 307/310.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/social_software_at_javaone</guid>
    <title>Social Software at JavaOne 2008</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/social_software_at_javaone</link>
    <pubDate>Tue, 29 Apr 2008 15:00:08 +0000</pubDate>
    <category>Java</category>
    <category>communityone</category>
    <category>communityone2008</category>
    <category>java</category>
    <category>javaone</category>
    <category>javaone2008</category>
<atom:summary type="html">There are quite a number of Social Software related talks at JavaOne and CommunityOne this year. You can learn about everything from building Social Networks with the Liferay portal and federated relationships with OpenSSO to creating 3D virtual works and implementing OpenSocial with Java. And, I&amp;#39;ll finally be able to talk about what I&amp;#39;ve been working on for the past couple of months -- more about that later.&amp;nbsp;</atom:summary><description>&lt;p&gt;There are quite a number of Social Software related talks coming up at &lt;a href=&quot;http://java.sun.com/javaone/sf&quot;&gt;JavaOne&lt;/a&gt; and &lt;a href=&quot;http://developers.sun.com/events/communityone/&quot;&gt;CommunityOne&lt;/a&gt; this year. You can learn about everything from building Social Networks with the Liferay portal and federated relationships with OpenSSO to creating 3D virtual works and implementing OpenSocial with Java. And, I&amp;#39;ll finally be able to talk about what I&amp;#39;ve been working on for the past couple of months -- more about that later.&lt;/p&gt;

&lt;p&gt;Here are the 11 Social Software related talks that I&amp;#39;ve found so far at both JavaOne and CommunityOne. Did I leave any out?&lt;/p&gt;

&lt;h3&gt;CommunityOne - Monday&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/cc197/session_details.jsp?isid=297141&amp;ilocation_id=197-1&amp;ilanguage=english&amp;quot;&amp;gt;
S297141 - Building a Social Network with Liferay Portal&lt;br&gt;	
Brian Chan, Liferay, Inc.&lt;br&gt;	
Monday May 05 12:25 - 13:20 / Moscone North - Hall E 135&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/cc197/session_details.jsp?isid=297226&amp;ilocation_id=197-1&amp;ilanguage=english&amp;quot;&amp;gt;
S295742 - Turn Your Web Site into an OpenSocial Container&lt;br&gt;	
Dave Johnson and Vijay Ramachandran, Sun Microsystems, Inc.&lt;br&gt;	
Monday May 05 14:35 - 15:30 / Moscone North - Hall E 135&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/cc197/session_details.jsp?isid=297300&amp;ilocation_id=197-1&amp;ilanguage=english&amp;quot;&amp;gt;
S297300 - OpenSSO: Federated Relationships with Social Networking and Web 2.0&lt;br&gt;
Pat Patterson, Daniel Raskin and Nick Wooler, Sun Microsystems, Inc.&lt;br&gt;
Monday May 05 16:00 - 16:55 - Moscone North - Hall E 135&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;JavaOne - Tuesday&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=296125&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
TS-6125 - Project Wonderland: A Toolkit for Building 3-D Virtual Worlds&lt;br&gt;
Paul Byrne and Jonathan Kaplan, Sun Microsystems, Inc.&lt;br&gt;
Tuesday 05/06/2008 3:20 PM -4:20 PM / North Mtg-121/122/124/125&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;JavaOne - Wednesday&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=296574&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
TS-6574 - How to Implement Your Own OpenSocial Container with Java&lt;br&gt;
Chris Schalk, Google&lt;br&gt;
Wednesday 05/07/2008 1:30 PM -2:30 PM&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;JavaOne - Thursday&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=296362&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
BOF-6362 - LinkedIn: Prof. Social Network Built with Java and Agile Practices&lt;br&gt;
Nick Dellamaggiore and Eishay Smith, LinkedIn&lt;br&gt;	
Thursday 05/08/2008 6:30 PM -7:20 PM / Esplanade 301&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=295857&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
BOF-5857 - Turn Your Web Site into an OpenSocial Container&lt;br&gt;	
Dave Johnson and Jamey Wood, Sun Microsystems, Inc.&lt;br&gt;	
Thursday 05/08/2008 6:30 PM &lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=296575&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
BOF-6575 - Building OpenSocial JavaServer Faces Components&lt;br&gt;	
Ed Burns, Sun Microsystems, Inc.; Chris Schalk, Google&lt;br&gt;	
Thursday 05/08/2008 7:30 PM -8:20 PM&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=295911&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
BOF-5911 - Beatnik: Building an Open Social Network Browser&lt;br&gt;	
Tim Boudreau and Henry Story, Sun Microsystems, Inc.&lt;br&gt;	
Thursday 05/08/2008 7:30 PM -8:20 PM&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=296435&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
BOF-6435 - Creating Facebook and OpenSocial Widgets with Java&lt;br&gt;	
Florent Gerbod and Kevin Leong, Mo&amp;#39;Blast Inc.&lt;br&gt;	
Thursday 05/08/2008 8:30 PM -9:20 PM&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;JavaOne - Friday&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;a href=
&amp;quot;http://www28.cplan.com/sb191/session_details.jsp?isid=296537&amp;ilocation_id=191-1&amp;ilanguage=english&amp;quot;&amp;gt;
TS-6537 - Applications for the Masses by the Masses&lt;br&gt;
Girish Balachandran and Todd Fast, Sun Microsystems, Inc.&lt;br&gt;	
Friday 05/09/2008 10:50 AM -11:50 AM&lt;/li&gt;
&lt;/ul&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links38</guid>
    <title>Latest Links: open source, social networking and etc.</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links38</link>
    <pubDate>Sun, 23 Mar 2008 14:00:05 +0000</pubDate>
    <category>Links</category>
    <category>java</category>
    <category>maven</category>
    <category>opensource</category>
    <category>socialnetworking</category>
<description>&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;http://cgwalters.livejournal.com/14310.html&quot;&gt;cgwalters - A software tsunami&lt;/a&gt;&lt;br&gt;&amp;quot;OpenJDK is finally changing that. Now, you can write a library using Java, it can be sensibly integrated with Free operating systems&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.regdeveloper.co.uk/2008/01/11/ibm_project_zero_commercial/&quot;&gt;Countdown for IBM Project Zero | Reg Developer&lt;/a&gt;&lt;br&gt;&amp;quot;bringing the feedback typical of an open source project without any of the obligations to give the resulting technology back to the community.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.regdeveloper.co.uk/2008/03/21/jcp_smoke_filled_rooms/&quot;&gt;Soviet-era JCP needs change, concedes top commissar | Reg Developer&lt;/a&gt;&lt;br&gt; Patrick Curran has reached a firm conclusion on his organization: &amp;quot;We have to change,&amp;quot; he said. &amp;quot;No more smoke-filled rooms.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.gnome.org/gman/2008/03/19/why-our-governance-doesnt-work/&quot;&gt;Glynn Foster: Why Our Governance Doesnâ&#128;&#153;t Work&lt;/a&gt;&lt;br&gt;&amp;quot;Thereâ&#128;&#153;s no substitute to JFDI - or improving our governance model so that it doesnâ&#128;&#153;t get in the way of suitably motivated people who want to contribute.&amp;quot;&lt;/li&gt;

&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://skypejournal.com/blog/2008/03/skype_and_the_social_network_s.html&quot;&gt;Skype Journal: Skype and the Social Network Stack&lt;/a&gt;&lt;br&gt;&amp;quot;We need a new stack to sort out social media&amp;#39;s plumbing&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://chris.pirillo.com/2008/03/23/an-open-letter-to-american-express/&quot;&gt;An Open Letter to American Express ~ Chris Pirillo&lt;/a&gt;&lt;br&gt; &amp;quot;You know, for all the buzz that FaceBook getsâ&#128;¦ I get far more value out of Twitter.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/buddypress/&quot;&gt;buddypress - Google Code&lt;/a&gt;&lt;br&gt;&amp;quot;suite of plugins that will completely transform a vanilla installation of Wordpress MU into a fully functional social network platform&amp;quot;&lt;/li&gt;

&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://apsblog.burtongroup.com/2008/03/looking-for-soa.html&quot;&gt;App Platform Strategies Blog: Looking for SOA success stories&lt;/a&gt;&lt;br&gt;&amp;quot;SOA is not working in most organizations&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.olpcnews.com/software/windows/xp_on_the_xo_in_60_days.html&quot;&gt;OLPC News: Negroponte Says XP on XO in 60 Days&lt;/a&gt;&lt;br&gt;&amp;quot;the end of a dream&amp;quot;. &lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.atlassian.com/developer/2008/03/maven_in_our_development_process_part_4_remaining_issues.html&quot;&gt;Atlassian Dev Blog - Maven in our development process. Part 4.&lt;/a&gt;&lt;br&gt;&amp;quot;Maven users need training.&amp;quot;&lt;/li&gt;

&lt;/ul&gt;


</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/howto_configure_roller_caching</guid>
    <title>HOWTO: Configure caching in Apache Roller</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/howto_configure_roller_caching</link>
    <pubDate>Mon, 3 Mar 2008 12:15:00 +0000</pubDate>
    <category>General</category>
    <category>apacheroller</category>
    <category>blogging</category>
    <category>caching</category>
    <category>java</category>
    <category>memcached</category>
<atom:summary type="html">Since the early days, Roller has included a pluggable caching system for blog pages and feeds. In Roller 2.1 (early 2006), Sun&amp;#39;s Allen Gilliland rewrote the whole cache system and made it much more flexible and much easier to configure. But, apart from comments in the configuration file, we never provided any documentation for the cache system. In this post, I&amp;#39;ll start to correct that. I&amp;#39;ll explain the basics of how the cache works and how to configure it.</atom:summary><description>&lt;p&gt;Since the early days, Roller has included a pluggable caching system for blog pages and feeds. In Roller 2.1 (early 2006), Sun&amp;#39;s Allen Gilliland rewrote the whole cache system and made it much more flexible and much easier to configure. But, apart from comments in the configuration file, we never provided any documentation for the cache system. In this post, I&amp;#39;ll start to correct that. I&amp;#39;ll explain the basics of how the cache works and how to configure it.
&lt;/p&gt;&lt;p&gt;&lt;b&gt;Overview&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Displaying a blog page can take dozens of database queries and database queries can be expensive. They take time, consume CPU cycles and typically use network bandwidth. Roller&amp;#39;s built-in caching system addresses this problem by caching generated pages and feeds. By default, Roller caches pages and feeds in memory using a Least Recently Used (LRU) algorithm and by default caches are configured appropriately for a 100 blog system. If you are running a site with more blogs or a very high-traffic site, you should consider changing the caching configuration. First,  let&amp;#39;s discuss how the caches work.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cache invalidation and expiration&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;When Roller generates a page, it puts a copy of that page in a cache. The next time that a request comes in for that page, Roller returns the page from the cache. When a blog changes, Roller &lt;i&gt;invalidates&lt;/i&gt; the blog&amp;#39;s cache enties, i.e. it throws that blog&amp;#39;s pages out of the cache. And by default, when the cache is full and we need to add a new entry to the cache, we push out the least recently used entry in the cache to make room; that&amp;#39;s the LRU algorithm I mentioned before.
&lt;/p&gt;
&lt;p&gt;Sometimes, a blog page includes things that change frequently like a list of referrers or a server-side hit counter or data from some other source. We don&amp;#39;t want to invalidate a blog&amp;#39;s cache entries every time a hit is counted. That would defeat the purpose of the cache. So, by default Roller uses an &lt;i&gt;expiring cache&lt;/i&gt; that automatically invalidates cache entries after timeout period. 
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cache configuration&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;To configure the Roller caches, you add properties to your roller-custom.properties properties override file. You can learn more about this override in Section 6 of the Roller 4.0 Installation Guide and you can find a complete list of the properties you can override in Section 11.
&lt;/p&gt;
&lt;p&gt;First, let&amp;#39;s cover the default caching mechanism. If you&amp;#39;re running  a large and high-traffic site, you &lt;i&gt;might&lt;/i&gt; want to consider using the non-expiring cache or setting the cache timeout very high (4, 6 or 12 hours).  Here&amp;#39;s how you tell all caches to use the non-expiring cache:
&lt;/p&gt;
&lt;pre&gt;

   cache.defaultFactory=org.apache.roller.util.cache.LRUCacheFactoryImpl

&lt;/pre&gt;
However, if you do that, then blogs that use Roller&amp;#39;s built-in hit counter or that display referrers will not be updated as often as your users would like. So, you might want to consider removing the #showReferrersList() macro from any themes in use on your site.
&lt;p&gt;&lt;b&gt;Configuring Roller&amp;#39;s four page and feed caches&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;You can configure caching differently for the different types of pages and feeds produced by Roller. There are four separately configurable caches. Here are their names and an explanation of each:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;weblogpages&lt;/b&gt;: this cache is used to cache weblog pages
&lt;/li&gt;&lt;li&gt;&lt;b&gt;weblogfeeds&lt;/b&gt;: this one is for weblog RSS and Atom feeds
&lt;/li&gt;&lt;li&gt;&lt;b&gt;sitewide&lt;/b&gt;: this is for the aggregated front-page blog and it&amp;#39;s RSS/Atom feeds
&lt;/li&gt;&lt;li&gt;&lt;b&gt;planet&lt;/b&gt;: this is for feeds produced by Roller&amp;#39;s built-in aggregator
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;And for each one of these caches you can configure these properties:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;enabled&lt;/b&gt;: for debugging purposes you can completely disable a cache by setting it&amp;#39;s enabled property to &amp;#39;false&amp;#39; 
&lt;/li&gt;&lt;li&gt;&lt;b&gt;size&lt;/b&gt;: sets the total number of entries allowed in a cache, each entry holds one page or feed response.
&lt;/li&gt;&lt;li&gt;&lt;b&gt;timeout&lt;/b&gt;: the number of seconds that an entry is allowed to remain in the cache. After this time expires the entry will be removed from the cache.
&lt;/li&gt;&lt;li&gt;&lt;b&gt;factory&lt;/b&gt;: set the classname of the cache factory to be used for this cache, otherwise default cache will be used
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Cache property names follow the pattern cache... The best way to understand how this works is to look at the default cache configuration used by Roller:
&lt;/p&gt;
&lt;pre&gt;

# Weblog page cache (all the weblog content)
cache.weblogpage.enabled=true
cache.weblogpage.size=400
cache.weblogpage.timeout=3600

# Feed cache (xml feeds like rss, atom, etc)
cache.weblogfeed.enabled=true
cache.weblogfeed.size=200
cache.weblogfeed.timeout=3600

# Site-wide cache (all content for site-wide frontpage weblog)
cache.sitewide.enabled=true
cache.sitewide.size=50
cache.sitewide.timeout=1800

# Planet cache (planet feeds)
cache.planet.enabled=true
cache.planet.size=10
cache.planet.timeout=1800

&lt;/pre&gt;
&lt;p&gt;The default cache configurations above are setup for a 100 weblog system.  To some extent, this is guess-work. For example, we&amp;#39;ve decided to cache 4 pages and 2 feeds for each blog. That&amp;#39;s how we arrived a cache.weblogpage.size=400 and cache.weblogfeed.size=200. And we&amp;#39;ve decided to cache blog entries for 30 minutes and feeds for one hour. That&amp;#39;s how we arrived at cache.weblogpage.size=400 and cache.weblogfeed.timeout=3600. 
&lt;/p&gt;
&lt;p&gt;You might decide to do things a little differently on your Roller system.  Copy the properties above to your roller-custom.properties file and set them to values you thing are appropriate for number of weblogs, average page size, traffic levels and JVM heap size of your Roller installation.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Conclusion&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Roller default cache configuration will work well without modification for a small to medium size Roller installation, but for large high-traffic sites you should increase cache sizes and think carefully about timeouts. And if you&amp;#39;re running Roller in a cluster you might want to consider using a distributed caching system like &lt;a class=&quot;external&quot; href=&quot;http://www.danga.com/memcached&quot;&gt;memcached&lt;/a&gt;. I&amp;#39;ll discuss that in my next HOWTO.
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links22</guid>
    <title>Latest Links: JSF vs. REST</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links22</link>
    <pubDate>Mon, 18 Feb 2008 13:27:08 +0000</pubDate>
    <category>Links</category>
    <category>java</category>
    <category>jsf</category>
    <category>rest</category>
<description>&lt;p&gt;I&amp;#39;ve been very happy with the choice of Struts 2 for Roller, but I still follow JSF because it&amp;#39;s the Java standard. A couple of articles by Ryan Lubke about what&amp;#39;s coming in JSF 2.0 got me thinking about JSF again.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/rlubke/entry/jsf_2_0_new_feature5&quot;&gt;Ryan Lubke&amp;#39;s Blog: JSF 2.0 New Feature Preview Series, pt. 2.1: Resources&lt;/a&gt;&lt;br&gt;&amp;quot;Previous versions of JSF had no facility for serving resources&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/rlubke/entry/jsf_2_0_new_feature2&quot;&gt;Ryan Lubke&amp;#39;s Blog: JSF 2.0 New Feature Preview, pt. 1: ProjectStage&lt;/a&gt;&lt;br&gt;&amp;quot;the JSF 2.0 EG has given a nod to Ruby on Rails&amp;#39; RAILS_ENV functionality&amp;quot;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of my problems with JSF is REST. REST fans say JSF is inherently RESTless because every JSF request is a POST. JSF advocates say JSF can do GET and bookmarkable URLs if necessary and that&amp;#39;s good enough.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dehora.net/journal/2007/11/19/java-rest/&quot;&gt;Bill de hora on JSF and REST&lt;/a&gt;&lt;br&gt;&amp;quot;JSF is clearly not focused on or suitable for working in the REST style to the extent REST principles seem to be actively excluded from the design.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=39214&quot;&gt;Gavin King on JSF and REST&lt;/a&gt;&lt;br&gt;&amp;quot;On these community sites that claim you can&amp;#39;t build restful application with JSF. I mean it is total nonsense. It is not even remotely true.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=38601#197750&quot;&gt;Gavin&amp;#39;s JSF bookmarkable URL example&lt;/a&gt;&lt;br&gt;In the comments thread of an anti-JSF story at The Server Side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fortunately, the plans for JSF 2.0 indicate that REST improvements are coming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.java.net/bin/view/Projects/Jsf2RequirementsScratchpad&quot;&gt;Java.Net TWik: JSF 2.0 Requirements Scratchpad&lt;/a&gt;&lt;br&gt;Mentions REST API (JSR-311) and navigation without using POST&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jcp.org/en/jsr/detail?id=314&quot;&gt;JSR-314: JavaServer Faces 2.0&lt;/a&gt;&lt;br&gt; 
&amp;quot;Allow JSF application resources to be accessed via REST&amp;quot; and &amp;quot;Add support for REST (JSR 311)&amp;quot;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately, it sounds like all they&amp;#39;re planning to do is make it easier to create bookmarkable URLs and add some support for the JSF-311 REST API. Why can&amp;#39;t the goal be to make JSF applications RESTful by default? Why can&amp;#39;t JSF ensure that POST is only used when required by the application (not the framework) and JSF URLs are simple, clean and always bookmarkable.&lt;/p&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links27</guid>
    <title>Latest Links: Feb. 16, 2008</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links27</link>
    <pubDate>Sat, 16 Feb 2008 12:48:07 +0000</pubDate>
    <category>Links</category>
    <category>facebook</category>
    <category>java</category>
    <category>liferay</category>
    <category>opensocial</category>
    <category>socialnetworking</category>
<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://gigaom.com/2008/02/04/more-on-myspaces-open-development-platform/&quot;&gt;More on MySpaceâ&#128;&#153;s Open Development Platform - GigaOM&lt;/a&gt;&lt;br&gt;&amp;quot;made up of three APIs â&#128;&#148; primarily Open Social and extensions weâ&#128;&#153;ve added&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.zdnet.com/BTL/?p=7891&quot;&gt;ZDNet.com: Progress report on the OpenSocial Web&lt;/a&gt;&lt;br&gt; Summary of latest OpenSocial news and hackathons from Dan Farber&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.readwriteweb.com/archives/facebook_to_punish_stupid_apps.php&quot;&gt;Facebook to Punish Stupid Applications, Reward Good Ones - ReadWriteWeb&lt;/a&gt;&lt;br&gt;&amp;quot;Metered messaging based on user engagement could save the Facebook Platform from a growing sense of app fatigue&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/roumen/entry/android_plug_in_for_netbeans&quot;&gt;Roumen&amp;#39;s Weblog: Android plug-in for NetBeans&lt;/a&gt;&lt;br&gt;&amp;quot;the screenshots look promising&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.jroller.com/robwilliams/entry/few_random_rants&quot;&gt;Rob Williams&amp;#39; Blog: finally ditched LifeRay&lt;/a&gt;&lt;br&gt; &amp;quot;we have finally ditched Liferay in favor of JBoss Portal. So far so good. It is much more stable. The code base is not a rat&amp;#39;s nest of untested Struts goop.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://meraki.com/oursolution/hardware/mini/&quot;&gt;Indoor WiFi Signal Booster by Meraki&lt;/a&gt;&lt;br&gt;&amp;quot;Meraki Mini is a small, easy-to-use wireless mesh repeater.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/yahoo_weather_module_rome</guid>
    <title>Yahoo Weather RSS module for ROME</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/yahoo_weather_module_rome</link>
    <pubDate>Wed, 23 Jan 2008 15:40:22 +0000</pubDate>
    <category>Java</category>
    <category>feeds</category>
    <category>java</category>
    <category>rome</category>
    <category>rss</category>
<description>&lt;img src=&quot;http://rollerweblogger.org/roller/resource/rome-logo.png&quot;&gt;&lt;br&gt;

&lt;p&gt;Apparently, I spoke to soon about ROME being in maintenance mode. There&amp;#39;s an all-new 
&lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/YahooWeather&quot;&gt;Yahoo Weather module&lt;/a&gt; for 
&lt;a href=&quot;http://rome.dev.java.net&quot;&gt;ROME&lt;/a&gt; from 
&lt;a href=&quot;http://www.oreillynet.com/pub/au/2413&quot;&gt;Robert &amp;quot;kerbernet&amp;quot; Cooper&lt;/a&gt;.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/rome_vs_abdera</guid>
    <title>ROME vs. Abdera</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/rome_vs_abdera</link>
    <pubDate>Tue, 22 Jan 2008 18:18:40 +0000</pubDate>
    <category>Java</category>
    <category>abdera</category>
    <category>apache</category>
    <category>atom</category>
    <category>feeds</category>
    <category>java</category>
    <category>rome</category>
    <category>rss</category>
<description>&lt;img src=&quot;http://rollerweblogger.org/roller/resource/atom-logo75px.gif&quot; align=&quot;right&quot;&gt;

&lt;p&gt;For Java developers starting out with RSS and Atom, here are some notes to help you figure out the differences between the Java.net ROME and Apache Abdera (incubating) projects.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://rome.dev.java.net&quot;&gt;&lt;b&gt;ROME&lt;/b&gt;&lt;/a&gt; is a set of Java tools for parsing, fetching and generating all forms of RSS and Atom feeds. The core ROME library is relatively small and depends only on the somewhat creaky old JDOM XML parser. Available separately are modules to support various feed extensions such as OpenSearch, iTunes, GeoRSS, etc. ROME was originally developed and open sourced by Sun Portal dev team members in 2004.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomePropono&quot;&gt;&lt;b&gt;ROME Propono&lt;/b&gt;&lt;/a&gt; is a subproject of ROME that supports publishing/editing entries and files to blog servers and AtomPub servers. Propono is made up of three parts: 1) a Blog Client library can publish via either the old lagacy MetaWeblog API or the shiny new AtomPub protocol, 2) an AtomPub client that publishes only via AtomPub and 3) a framework for creating AtomPub servers. Propono was developed by Ramesh Mandava and Dave Johnson, based on code from &lt;a href=&quot;http://www.amazon.com/exec/obidos/ASIN/1932394494/bloggingrolle-20&quot;&gt;RSS and Atom in Action&lt;/a&gt; and open sourced as part of the Sun Web Developer Pack in 2007.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://incubator.apache.org/abdera/&quot;&gt;&lt;b&gt;Abdera&lt;/b&gt;&lt;/a&gt; is a set of Java tools for working with Atom feeds and AtomPub protocol. This includes a parser, writers, an AtomPub client and a framework for creating AtomPub servers. Abdera&amp;#39;s Atom feed parser uses STAX, so it uses less memory and is faster than ROME. Abdera&amp;#39;s Atom feed support is more comprehensive than ROME&amp;#39;s and it supports signatures, encryption, Atom to JSON, extensions for Threading, Paging, GeoRSS, OpenSearch, GoogleLogin, etc. etc. Abdera was developed by IBM and contribued to Apache in 2006.&lt;/p&gt;

&lt;p&gt;Now let&amp;#39;s compare frameworks. The pros and cons of ROME are:
&lt;ul&gt;
&lt;li&gt;Pro: complete RSS support, all of the dozen various flavors&lt;/li&gt;
&lt;li&gt;Pro: it&amp;#39;s generally simple and small, depending only one jar (JDOM)&lt;/li&gt;
&lt;li&gt;Pro: easy to understand and use the AtomPub server framework&lt;/li&gt;
&lt;li&gt;Pro: MetaWeblog API support&lt;/li&gt;
&lt;li&gt;Con: Atom feed support not as comprehensive as Abdera&lt;/li&gt;
&lt;li&gt;Con: parser uses lots of memory, slower, JDOM based&lt;/li&gt;
&lt;li&gt;Con: community not as active, seems to be in maintenance mode 
(See also &lt;a href=&quot;http://ohloh.com/projects/413/analyses/latest/contributors&quot;&gt;Ohloh stats&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pros and cons of Abdera are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pro: comprehensive Atom feed support, lots more Atom extensions&lt;/li&gt;
&lt;li&gt;Pro: faster more efficient parser&lt;/li&gt;
&lt;li&gt;Pro: In the Apache Incubator with active and growing community
(See also &lt;a href=&quot;http://ohloh.com/projects/4718/analyses/latest/contributors&quot;&gt;Ohloh stats&lt;/a&gt;)
&lt;li&gt;Con: lots of dependencies&lt;/li&gt;
&lt;li&gt;Con: AtomPub server framework poorly documented, overly complex (rewrite coming soon)&lt;/li&gt;
&lt;li&gt;Con: no RSS support (there is something in Abdera contrib, but it&amp;#39;s incomplete).&lt;/li&gt;
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;There you have it. ROME and Abdera folks: think that&amp;#39;s a fair comparison? Are you a ROME or Abdera user? How would you like to see these frameworks move forward?&lt;/p&gt; &lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/holiday_project_jmaki_for_roller</guid>
    <title>Holiday project: JMaki for Roller</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/holiday_project_jmaki_for_roller</link>
    <pubDate>Wed, 2 Jan 2008 13:12:54 +0000</pubDate>
    <category>Java</category>
    <category>java</category>
    <category>javascript</category>
    <category>jmaki</category>
    <category>roller</category>
<description>&lt;p&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/jmaki-logo.png&quot; alt=&quot;JMaki seal&quot; align=&quot;right&quot;&gt;
Over the holidays I avoided doing anything directly related to my current set of work tasks. Sun went quiet, which helped, and I ignored the messages that piled-up in the Roller user and dev lists.  It was so quiet that I had time for a fun little project: a JMaki plugin for Roller.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://ajax.dev.java.net&quot;&gt;JMaki&lt;/a&gt; makes it easy to use JavaScript widgets (Dojo, Google, YUI, etc.) from PHP, JSP, JSF and now Roller. To use a widget, all you have to do is call a method or include a tag and JMaki takes care of including the right JavaScript files and generating the right HTML for you. That&amp;#39;s not all JMaki does, there&amp;#39;s also a pub/sub facility to make it easy to wire widgets together via events, there&amp;#39;s a proxy for fetching remote resources common table and tree data models. The theme is cool widgets with ease-of-development and that&amp;#39;s what I&amp;#39;d like to see in Roller. You can read more about the JMaki value proposition on the &lt;a href=&quot;https://ajax.dev.java.net/whyusejmaki.html&quot;&gt;Why Use JMaki page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s an example. Below is a Roller page template that uses two JavaScript widgest, the Dojo Clock and the YUI Data Table. All it takes is a single line of template code to include each widget, and one widget is dynamic i.e. the table is populated via an RSS feed.&lt;/p&gt;

&lt;pre&gt;

    &amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;JMaki test page&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;

        &amp;lt;h1&amp;gt;JMaki test: dojo.clock&amp;lt;/h1&amp;gt;
        $jmaki.addWidget(&amp;quot;dojo.clock&amp;quot;)

        &amp;lt;h1&amp;gt;JMaki test: yahoo.dataTable&amp;lt;/h1&amp;gt;
        $jmaki.addWidget(&amp;quot;yahoo.dataTable&amp;quot;, &amp;quot;/roller/xhp?id=rss&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;)

    &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;

&lt;/pre&gt;

&lt;p&gt;And here&amp;#39;s what that page looks like when displayed by Roller:&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/snoopdave/2143146264/&quot; title=&quot;JMaki Plugin for Roller w/Dojo and YUI by snoopdave, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2221/2143146264_2d39b97ff9.jpg&quot; width=&quot;500&quot; height=&quot;377&quot; alt=&quot;JMaki Plugin for Roller w/Dojo and YUI&quot;&gt;&lt;/a&gt;
&lt;br&gt;

&lt;p&gt;I&amp;#39;ll write more about the plugin once I install it on this site. If you want some details about how the plugin was developed, you can read the email that I sent to the JMaki dev list: &lt;a href=&quot;https://ajax.dev.java.net/servlets/ReadMsg?list=dev&amp;msgNo=2035&quot;&gt;JMaki for Roller issues and suggestions&lt;/a&gt;. It links to the Java source code for the plugin.&lt;/p&gt;

</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_4_0_released</guid>
    <title>Roller 4.0 released</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_4_0_released</link>
    <pubDate>Wed, 5 Dec 2007 13:16:32 +0000</pubDate>
    <category>Roller</category>
    <category>blogging</category>
    <category>java</category>
    <category>roller</category>
<description>&lt;p&gt;&lt;br&gt;
Finally!
&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Apache Roller 4.0 has been released and is now available for download.&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;This is a major new Roller release which includes easier blog theme customization, a much more simple installation/upgrade process, infrastructure improvements and numerous other small fixes. You can get the release files and the official documentation via the Apache mirrors at this page:
&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org/download.cgi&quot;&gt;http://roller.apache.org/download.cgi&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;And you can read about the new features on the &lt;a class=&quot;external&quot; href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;What&amp;#39;s New in Roller 4.0&lt;/a&gt; page of the Roller wiki.
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Project releases are approved by vote of the Apache Roller Project Management Committee (PMC). Support for a release is provided by project volunteers on the project &lt;a class=&quot;external&quot; href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Roller+Mailing+Lists&quot;&gt;mailing lists&lt;/a&gt;. Additional free support is provided by many other volunteer subscribers to the list. Bugs found in a release may be discussed on the list and reported through the &lt;a class=&quot;external&quot; href=&quot;http://opensource.atlassian.com/projects/roller&quot;&gt;issue tracker&lt;/a&gt;.
&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Roller is a Project of the &lt;a class=&quot;external&quot; href=&quot;http://apache.org/foundation&quot;&gt;Apache Software Foundation&lt;/a&gt; (ASF), formed by a resolution of the &lt;a class=&quot;external&quot; href=&quot;http://apache.org/foundation/board&quot;&gt;ASF Board of Directors&lt;/a&gt;. As an ASF Project, Roller is subject to the &lt;a class=&quot;external&quot; href=&quot;http://apache.org/foundation/bylaws.html&quot;&gt;ASF Bylaws&lt;/a&gt; and the direction of the ASF Board. The user mailing list and issue tracker are the &lt;/i&gt;only&lt;i&gt; support options hosted by the Apache Roller project.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;Cross posted from the &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/project&quot;&gt;Roller project blog&lt;/a&gt;.
&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/openqabal</guid>
    <title>OpenQabal: a social software platform w/Roller</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/openqabal</link>
    <pubDate>Tue, 4 Dec 2007 13:56:55 +0000</pubDate>
    <category>Open Source</category>
    <category>java</category>
    <category>opensource</category>
    <category>roller</category>
    <category>socialsoftware</category>
<description>&lt;p&gt;
I&amp;#39;m always happy to see Roller used in new sites, projects and products. 
Here&amp;#39;s an interesting new example that I&amp;#39;ve been meaning to blog for a while now.

Phillip Rhodes is working on building what he calls &lt;a href=&quot;http://openqabal.dev.java.net&quot;&gt;OpenQabal&lt;/a&gt; a  &amp;quot;social software operating system.&amp;quot; The project integrates a set of social software applications, including Roller and JavaBB, via Single Sign-On (SSO), a common look-and-feel and &lt;a href=&quot;http://www.sioc-project.org/&quot;&gt;Semantically-Interlinked Online Communities&lt;/a&gt; (SIOC). 

He explains it all in an lengthy and informative &lt;a href=&quot;http://www.jroller.com/openqabal/entry/so_what_is_openqabal_and&quot;&gt;blog post&lt;/a&gt; on the project&amp;#39;s JRoller.com blog. &lt;/p&gt;

&lt;p&gt;I&amp;#39;d never heard of SIOC before. Here&amp;#39;s the executive summary:&lt;/p&gt;

&lt;blockquote&gt;Semantically-Interlinked Online Communities SIOC or is a framework aimed at connecting online community sites and internet-based discussions. Currently, online communities (boards, blogs, etc.) are like islands - they contain valuable information but are not well connected. SIOC allows us to interlink these sites, and enables the extraction of richer information from various discussion services.&lt;/blockquote&gt;

&lt;p&gt;Sounds like it could be pretty darn useful. 

But then again, I spent a little time exploring the list of SIOC enabled sites with the &lt;a href=&quot;http://sioc-project.org/firefox&quot;&gt;SIOC Firefox plugin&lt;/a&gt; and didn&amp;#39;t really find any examples of interlinked communities or conversations. 

Am I missing something?&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/sun_open_source_project_governance</guid>
    <title>Sun open source project governance</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/sun_open_source_project_governance</link>
    <pubDate>Sat, 1 Dec 2007 13:57:03 +0000</pubDate>
    <category>Sun</category>
    <category>java</category>
    <category>opensource</category>
    <category>sun</category>
<description>&lt;p&gt;Here&amp;#39;s a sampling of governance docs from some of Sun&amp;#39;s many open source projects. I&amp;#39;ve listed them in order of what I feel to be, the most progressive (i.e. community governance) to least progressive (i.e. corporate control). I&amp;#39;ve also listed a key quote from each doc and made a brief comment about each.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.opensolaris.org/os/community/cab/governance&quot;&gt;OpenSolaris governance&lt;/a&gt;: 
&amp;quot;The OpenSolaris Community has the authority and responsibility for all decisions&amp;quot; - seems to approach ASF style governance.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://openjdk.java.net/legal/charter/&quot;&gt;OpenJDK &lt;i&gt;interim &lt;/i&gt;governance&lt;/a&gt;:
&amp;quot;The [board] shall be comprised of [5 and ] shall conduct its affairs in accordance with democratic principles and shall represent the interests of the Community. Two [members] shall be employees of Sun&amp;quot; - not final, but looking good.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://www.netbeans.org/about/os/governance.html&quot;&gt;Netbeans governance&lt;/a&gt;:
&amp;quot;In the case of an irresolvable dispute, there is a governance board of three people, who are appointed for six month terms.&amp;quot; (2 appointed by community, 1 by Sun).&amp;quot; - sounds pretty good, but the doc seems a little vague.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;https://sungrid.dev.java.net/community.html&quot;&gt;SunGrid governance&lt;/a&gt;:
&amp;quot;The Board positions include the Community Leader, the Community Site Manager, and four general members, two Sun members and from the independent developer Community.&amp;quot; - sounds good, again doc seems a little vague.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;https://glassfish.dev.java.net/public/GovernancePolicy.html&quot;&gt;Glassfish governance&lt;/a&gt;:
&amp;quot;The GlassFish project has an overall Project Lead ... appointed by Sun&amp;quot; - Sun has final say.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;https://opensso.dev.java.net/public/about/governance/&quot;&gt;OpenSSO governance &lt;i&gt;(draft)&lt;/i&gt;&lt;/a&gt;:
&amp;quot;Project Managers make the final decision ... are appointed by Sun&amp;quot; - Sun has final say.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;https://opends.dev.java.net/public/docs/dev-docs/OpenDS-Governance.html&quot;&gt;OpenDS governance&lt;/a&gt;:
The OpenDS project has single, overall Project Lead [who is] appointed by Sun Microsystems.&amp;quot; - Sun has final say.&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;https://mobileandembedded.dev.java.net/governance.html&quot;&gt;Mobile and embedded&lt;/a&gt;:
&amp;quot;Sun may change its appointed Governance Board members at any time&amp;quot; - Sun has final say.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looks to me like the trend is towards community governance and the most important projects are the ones getting the most attention and the most progressive governance. That&amp;#39;s good and I sincerely hope the trend continues.&lt;/p&gt;

</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/apache_shindig_voting_in_progress</guid>
    <title>Apache Shindig voting in progress and more OpenSocial details emerge</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/apache_shindig_voting_in_progress</link>
    <pubDate>Fri, 30 Nov 2007 12:48:25 +0000</pubDate>
    <category>Open Source</category>
    <category>asf</category>
    <category>java</category>
    <category>ning</category>
    <category>opensocial</category>
<description>&lt;p&gt;I wrote about Shindig before, it&amp;#39;s a new open source project to implement the &lt;a href=&quot;http://code.google.com/apis/opensocial/&quot;&gt;Google OpenSocial APIs&lt;/a&gt;. 

Well, now the official voting to accept the Shindig project into the &lt;a href=&quot;http://incubator.apache.org/&quot;&gt;Apache Incubator&lt;/a&gt; is in progress and some interesting details have emerged in the latest version of &lt;a href=&quot;http://markmail.org/message/6hed4akb4jefcdur&quot;&gt;the proposal&lt;/a&gt;. 

First, as you can see by the initial list of committers in the proposal Google has joined the Shindig effort in force. 

Second, the proposal says that Shindig will be the reference implementation of the OpenSocial APIs. 

And third, Shindig will not only include the client-side JavaScript container but also a Java back-end. 

Brian McAllister has already made some &amp;quot;gnarly&amp;quot; initial client-side &lt;a href=&quot;http://markmail.org/message/ypkv4qaksbmpmonh&quot;&gt;container code&lt;/a&gt; available, I can&amp;#39;t wait to see the Google contribution.&lt;/p&gt; </description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/groovy_netbeans</guid>
    <title>Groovy support back in Netbeans</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/groovy_netbeans</link>
    <pubDate>Wed, 28 Nov 2007 09:05:28 +0000</pubDate>
    <category>Java</category>
    <category>groovy</category>
    <category>java</category>
    <category>netbeans</category>
<description>&lt;p&gt;After going missing in NB 5.5, Groovy support is back in Netbeans. Basic Groovy support with syntax coloring and support for running scripts from the IDE is available in plugin form (&lt;a href=&quot;http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=3914&quot;&gt;download page&lt;/a&gt;) for Netbeans 6.0 (starting with RC2), read about it on  
&lt;a href=&quot;http://blogs.sun.com/geertjan/entry/groovy_plugin_updates_to_netbeans&quot;&gt;Geertjan&amp;#39;s blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s what&amp;#39;s coming after Netbeans 6.0, Groovy project support:&amp;lt;/&amp;gt;

&lt;img src=&quot;http://rollerweblogger.org/roller/resource/netbeans-grails.jpg&quot; alt=&quot;screenshot of Groovy NB project types&quot;&gt;

&lt;p&gt;After Netbeans 6.0, the story gets better. &lt;a href=&quot;http://blogs.sun.com/geertjan/entry/big_milestone_for_groovy_and&quot;&gt;Geertjan writes&lt;/a&gt; that a brand new Groovy plugin will be available in the post-6.0 builds that adds support for three types of Groovy projects: applications, class libraries and Grails webapps.&lt;/p&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_strong_11</guid>
    <title>Roller Strong #11</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_strong_11</link>
    <pubDate>Tue, 27 Nov 2007 21:04:43 +0000</pubDate>
    <category>Roller</category>
    <category>java</category>
    <category>opensource</category>
    <category>roller</category>
<description>&lt;p&gt;I&amp;#39;ve got a couple of Roller related items to blog about, so why not just call it Roller Strong #11.&lt;/p&gt;

&lt;p&gt;First, Lars Trieloff responds to some of the questions I raised about 
&lt;a href=&quot;http://weblogs.goshaky.com/weblogs/lars/entry/jcr_for_roller&quot;&gt;JCR and Roller&lt;/a&gt; 
in my ApacheCon wrap-up post. I left a comment on his blog in response. 
Personally, I think a JCR back-end is a very interesting idea 
and I wish I had some more time to explore it.&lt;/p&gt;

&lt;p&gt;Manchi Leung AKA Thinkboy posted the code for a new &lt;a href=&quot;http://markmail.org/message/gs34nqgkocfpi4g2&quot;&gt;Textile plugin&lt;/a&gt; to the Roller dev list, using 
&lt;a href=&quot;https://textile-j.dev.java.net/&quot;&gt;Textile-J&lt;/a&gt;. Thinkboy says &amp;quot;it supports almost all of the Textile syntax. 
very much the same as &lt;a href=&quot;http://www.atlassian.com/software/confluence/&quot;&gt;Confluence wiki&lt;/a&gt;. Now I can easily sync or copy working notes from Confluence wiki to my personal Roller blog.&amp;quot; Nice. Note to self: I need to fix up some of our existing entry plugins -- I think some of them (e.g. Ekit) still haven&amp;#39;t been updated for Roller 3.1.&lt;/p&gt;

&lt;p&gt;Arun Gupta blogged recently about &lt;a href=&quot;http://blogs.sun.com/arungupta/entry/totd_17_backin_up_your&quot;&gt;Backing up your Roller entries&lt;/a&gt; and explained how to use the Grabber example (now known as BlogBackup in Blogapps 2) from the &lt;a href=&quot;https://blogapps.dev.java.net/&quot;&gt;Blogapps project&lt;/a&gt; to backup your Roller blog. Backing-up your entries, but backing up your uploads is not. Hopefully, blogs.sun,com will turn on Atom protocol someday and that&amp;#39;ll will make it easy for a tool like Grabber backup both entries and uploads. &lt;/p&gt;

&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; alt=&quot;roller logo&quot; align=&quot;right&quot;&gt;

&lt;p&gt;We&amp;#39;re still waiting on &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt;, but I sense our wait is soon over. &lt;a href=&quot;http://markmail.org/message/5ccve3y6sgittjo4&quot;&gt;Roller 4.0 RC10&lt;/a&gt; was released one week ago with just a couple of bug fixes. And so far, no critical issues have been found. We&amp;#39;ve got only one +1 vote (thanks &lt;a href=&quot;http://www.busybuddha.org/blog/&quot;&gt;Anil&lt;/a&gt;!) so far so committers please test and vote.&lt;/p&gt;

&lt;p&gt;And finally, I have to mention MarkMail because I&amp;#39;ve been using it throughout this blog post. MarkMail provides a slick interface and excellent facilities for mailing lists of all kinds. They&amp;#39;re indexing all of the Apache mailing lists and providing statis and charts for each. Check the &lt;a href=&quot;http://roller.markmail.org/&quot;&gt;Roller page at MarkMail&lt;/a&gt; for example.&lt;/p&gt;

&lt;p&gt;That&amp;#39;s all I&amp;#39;ve got for this go-round. Keep on rollin&amp;#39;&lt;/p&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links23</guid>
    <title>Latest Links: Android, OpenSolaris and misc.</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links23</link>
    <pubDate>Mon, 26 Nov 2007 17:00:03 +0000</pubDate>
    <category>Links</category>
    <category>java</category>
    <category>opensolaris</category>
    <category>opensource</category>
<description>&lt;ul&gt;

&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://mail.opensolaris.org/pipermail/ogb-discuss/2007-November/003054.html&quot;&gt;Roy Fielding [ogb-discuss]: please dissolve the Desktop Community&lt;/a&gt;&lt;br&gt;&amp;quot;there is absolutely no reason for this organization to exist if all decisions are going to be made by Sun.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://mail.opensolaris.org/pipermail/ogb-discuss/2007-November/002935.html&quot;&gt;Ian Murdock [ogb-discuss]: re: please dissolve the Desktop Community&lt;/a&gt;&lt;br&gt;&amp;quot;You have to be joking? I don&amp;#39;t even know where to begin.. This is like Robert&amp;#39;s Rules of Order run amok&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/jimgris/entry/two_great_linus_quotes&quot;&gt;Jim Grisanzio: Two Great Linus Quotes&lt;/a&gt;&lt;br&gt;&amp;quot;(1) one person or company shouldn&amp;#39;t control the entire community, and (2) the real value of community development comes over the long term and results from many small contributions, not one big one.&amp;quot;&lt;/li&gt;


&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.zdnet.com/Burnette/?p=469&quot;&gt;Ed Burnette: Sun/Google Android â&#128;&#156;fightâ&#128;&#157; overblown&lt;/a&gt;&lt;br&gt; &amp;quot;Iâ&#128;&#153;m here to tell you, itâ&#128;&#153;s all bunk&amp;quot;...&amp;quot;However Google did make one big mistake with Android&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://developers.slashdot.org/article.pl?sid=07/11/17/0223204&quot;&gt;Slashdot: Google, Sun Headed for Showdown Over Android&lt;/a&gt;&lt;br&gt;Pure FUDtastic speculation based on Stefano&amp;#39;s blog post&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://robilad.livejournal.com/22312.html&quot;&gt;robilad: QOTD: Google&amp;#39;s license for the Android SDK&lt;/a&gt;&lt;br&gt; &amp;quot;you may not extract the source code or create a derivative work of the SDK&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.javalobby.org/java/forums/t103315.html&quot;&gt;Javalobby: Is Google the New Microsoft?&lt;/a&gt;&lt;br&gt; Dalibor&amp;#39;s comment: &amp;quot;Google will keep Android as proprietary as they can for as long as they can, while letting people believe something else&amp;quot;&lt;/li&gt;


&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://www.jroller.com/heffel/entry/eclipse_veteran_tries_and_keeps&quot;&gt;David Heffelfinger: Eclipse Veteran Switches To NetBeans&lt;/a&gt;&lt;br&gt;&amp;quot;NetBeans has now surpassed Eclipse in usability. Count me in as a new convert.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.jroller.com/rickard/entry/reloaded_the_continuing_adventures_of&quot;&gt;Stuck in the middle : Weblog&lt;/a&gt;&lt;br&gt; Rickard Oberg is blogging at JRoller.com again&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/alanbur/entry/how_to_leave_facebook&quot;&gt;Alan Burlison&amp;#39;s Blog: How to leave Facebook&lt;/a&gt;&lt;br&gt;&amp;quot;try mailing them, quoting the clear precedent they have set by closing my account&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.symphonious.net/2007/11/14/why-support-opensocial/&quot;&gt;Symphonious  Â» Why Support OpenSocial?&lt;/a&gt;&lt;br&gt;&amp;quot;However, if OpenSocial gets support outside social networks it has the possibility of attracting developers who actually care about their users, not just their advertising profits and install count&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.zdnet.com/BTL/?p=7107&quot;&gt;ZDNet: Firefox 3 Beta 1 has landed&lt;/a&gt;&lt;br&gt;&amp;quot;Improved performance with more than 300 memory leak fixes.&amp;quot;&lt;/li&gt;

&lt;/ul&gt;
</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/apachecon_us_2007_wrapup</guid>
    <title>ApacheCon US 2007 wrapup</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/apachecon_us_2007_wrapup</link>
    <pubDate>Tue, 20 Nov 2007 17:42:51 +0000</pubDate>
    <category>Open Source</category>
    <category>apache</category>
    <category>apachecon</category>
    <category>apacheconus2007</category>
    <category>asf</category>
    <category>java</category>
<atom:summary type="html">I spent last week at the ApacheCon US 2007 conference in Atlanta, Georgia. Here&amp;#39;s a write up of some of my experiences there.&amp;nbsp;</atom:summary><description>&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/acus2007-badge.JPG&amp;quot; alt=&amp;quot;ApacheCon badge&amp;quot; 
width=&amp;quot;150px&amp;quot; vspace=&amp;quot;15px&amp;quot; hspace=&amp;quot;15px&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;

&lt;p&gt;I spent last week at the ApacheCon US 2007 conference in Atlanta, Georgia. Here&amp;#39;s a write up of some of my experiences there.&lt;/p&gt;

&lt;h3&gt;The Hackathon&lt;/h3&gt;

&lt;p&gt;The Hackathon is a two day event. For those who don&amp;#39;t know what a hackathon is, I&amp;#39;ll explain how it works. A room with about 20 large round tables, wireless internet and plenty of power strips is provided. Folks show up, plug-in, start working and chatting with each other about projects and other random topics. Sometimes they cluster by project, Struts guys around one table and Geronimo guys at the next, but usually there&amp;#39;s a good mix at each table. Sometimes groups have specific goals like &amp;quot;ship version 2.0&amp;quot; in mind, but usually folks are just working, sharing knowledge and getting to know each other. At various times pizza, soda, breakfast pastries, beer, coffee and/or wine is carted into the room -- so there&amp;#39;s not much reason to leave except for things like fresh air, sunlight and sanity.&lt;/p&gt;

&lt;p&gt;I had a couple of interesting conversations at the Hackathon. I spent some time talking to &lt;a href=&quot;http://blog.skife.org/&quot;&gt;Brian McAllister&lt;/a&gt; about his &lt;a href=&quot;http://markmail.org/message/yzkaf33e4v3ajfwx&quot;&gt;Shindig proposal&lt;/a&gt;, which I&amp;#39;ve &lt;a href=&quot;http://rollerweblogger.org/roller/entry/shindig_open_source_implementation_of&quot;&gt;already mentioned&lt;/a&gt;. I also spoke with David Jencks about getting better Role Based Access Control (RBAC) in Java EE to support social software like blogs, wikis and social network applications because static roles hard-coded into web.xml just won&amp;#39;t do.&lt;/p&gt;


&lt;h3&gt;Roller and the Roller/Struts2 BOF&lt;/h3&gt;

&lt;p&gt;As usual, I attended ApacheCon to promote and represent Roller and I did so in my talk, at the Roller/Struts 2 BOF, at the Sun booth and wherever else I could. As I &lt;a href=&quot;http://rollerweblogger.org/roller/entry/roller_and_blogs_as_a&quot;&gt;mentioned before&lt;/a&gt;, my talk on Roller and blogs as a web development platform went well. I had updated my talk to include an example of how to post to a blog using Abdera and I urged folks to stick around for &lt;a href=&quot;http://asdf.blogs.com/&quot;&gt;Garrett Rooney&lt;/a&gt;&amp;#39;s &lt;a href=&quot;http://incubator.apache.org/abdera&quot;&gt;Abdera&lt;/a&gt; talk, which followed mine in the same room.&lt;/p&gt;

&lt;p&gt;The BOF session also went well. &lt;a href=&quot;http://raibledesigns.com&quot;&gt;Matt Raible&lt;/a&gt; and &lt;a href=&quot;http://www.jroller.com/mrdon/&quot;&gt;Don Brown&lt;/a&gt; organized the session and all I had to do was show up and enjoy the good company and the Atlassian provided beer, wine and nibbles. About ten people showed up and we talked about a variety of topics including user management in Roller, the growing similarity of Struts 2, Spring MVC and other Java web frameworks and then my wife dragged me away from the fun. By the way, Don works for Atlassian on the new &lt;a href=&quot;http://www.jira.com&quot;&gt;JIRA Studio suite&lt;/a&gt;, which, I believe, is going to give Collabnet, SourceForge Enterprise and even the likes of IBM Jazz and Microsoft Team System some serious competition.&lt;/p&gt;


&lt;h3&gt;Roller the Java Content Repository (JCR) API&lt;/h3&gt;

&lt;p&gt;The idea of using a content management system to store Roller content keeps on coming up. At ApacheCon EU earlier this year, I spent some time talking to Lars Trieloff (who now works for CMS vendor &lt;a href=&quot;http://www.day.com/&quot;&gt;Day Software&lt;/a&gt;) about implementing the Roller back-end interfaces using the &lt;a href=&quot;http://jcp.org/en/jsr/detail?id=170&quot;&gt;Java Content Repository&lt;/a&gt; (JCR) APIs instead of the &lt;a href=&quot;http://java.sun.com/javaee/technologies/persistence.jsp&quot;&gt;Java Persistence API&lt;/a&gt; (JPA) that we use now. At this ApacheCon, &lt;a href=&quot;http://www.us.apachecon.com/us2007/program/speaker/4776&quot;&gt;Noel Bergman&lt;/a&gt; brought up the topic a couple of times and pointed out that Day Software, has blog and wiki modules that are both backed by JCR. We could do the same thing: create version of Apache Roller and Apache JSPWiki (incubating) that share the same content repository.&lt;/p&gt;

&lt;p&gt;Later, &lt;a href=&quot;http://jukkaz.wordpress.com/&quot;&gt;Jukka Zitting&lt;/a&gt; (who also works for Day Software), suggested the idea of implementing JPA itself with JCR, thus allowing Roller to store its content in a CMS in a totally transparent fashion. This topic is interesting to me, but I don&amp;#39;t fully understand the benefits of backing blogs and wikis with JCR. What new use cases would this support? How do the interesting features of JCR, like versioning for example, bubble up through Roller -- especially if Roller is to support both RDBMS and CMS back-ends?&lt;/p&gt;

&lt;p&gt;And by the way, Day is not the only company building interesting products around JCR and the &lt;a href=&quot;http://jackrabbit.apache.org/&quot;&gt;Apache Jackrabbit&lt;/a&gt; JCR implementation. Hippo CTO &lt;a href=&quot;http://blogs.hippo.nl/arje/&quot;&gt;ArjÃ© Cahn&lt;/a&gt; and others from Hippo were &lt;a href=&quot;http://www.hippo.nl/en/agenda,2007/apachecon.html&quot;&gt;present at ApacheCon&lt;/a&gt;, talking about their CMS product and related Apache projects.&lt;/p&gt;


&lt;h3&gt;The REST sessions and the Struts 2 REST plugin&lt;/h3&gt;

&lt;a href=&quot;http://struts.apache.org/2.x&quot;&gt;
&lt;img src=&quot;http://struts.apache.org/2.x/images/struts2-merger2.png&quot; alt=&quot;struts 2 logo&quot; align=&quot;right&quot;&gt;
&lt;/a&gt;

&lt;p&gt;Thursday afternoon there was series of REST talks, starting with &lt;a href=&quot;http://en.wikipedia.org/wiki/Roy_Fielding&quot;&gt;Roy Fielding&lt;/a&gt; father of REST, then &lt;a href=&quot;http://sanjiva.weerawarana.org/&quot;&gt;Sanjiva Weerawarana&lt;/a&gt; defender of WS-*, &lt;a href=&quot;http://netzooid.com/blog&quot;&gt;Dan Diephouse&lt;/a&gt; and &lt;a href=&quot;http://www.jroller.com/mrdon/&quot;&gt;Don Brown&lt;/a&gt;. Roy&amp;#39;s talk was standing room only and the other REST talks were quite popular as well. Hearing from REST masters as great, but Don&amp;#39;s talk was the one most relevant to my work (since I&amp;#39;m a Struts 2 user). &lt;/p&gt;

&lt;p&gt;Don talked about the new &lt;a href=&quot;http://struts.apache.org/2.x/docs/rest-plugin.html&quot;&gt;REST plugin&lt;/a&gt; he has developed for &lt;a href=&quot;http://struts.apache.org/2.x/&quot;&gt;Struts 2&lt;/a&gt;, which looks like a wonderful thing. It builds on the existing CodeBehind plugin to give you Ruby-on-Rails like convention-over-configuration and in most cases no Struts configuration or properties files are necessary. From my point-of-view, it&amp;#39;s just another reason to choose Struts 2 over JSF, which, as &lt;a href=&quot;http://www.dehora.net/journal/2007/11/19/java-rest/&quot;&gt;Bill de hÃ&#147;ra points out&lt;/a&gt;, &amp;quot;is clearly not focused on or suitable for working in the REST style to the extent REST principles seem to be actively excluded from the design.&amp;quot;  See also: &lt;a href=&quot;http://raibledesigns.com/rd/entry/go_light_with_apache_struts&quot;&gt;Matt Raible&amp;#39;s notes on the Struts 2 REST plugin&lt;/a&gt; and Don&amp;#39;s &lt;a href=&quot;http://wiki.apache.org/apachecon-data/attachments/Us2007OnlineSessionSlides/attachments/ApacheConUS2007-Struts2REST.pdf.zip&quot;&gt;slides&lt;/a&gt; (a zipped PDF file).&lt;/p&gt;


&lt;h3&gt;Lucene and search sessions&lt;/h3&gt;

&lt;p&gt;On Friday there was a series of talks related to &lt;a href=&quot;http://lucene.apache.org&quot;&gt;Apache Lucene&lt;/a&gt; and related projects such as Solr. These talks seemed to be quite popular as well. I attended the Solr talk. &lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Apache Solr&lt;/a&gt; is a version of the Lucene search engine that is packaged as an easy to install and easy to use web application. 
The &lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1992&quot;&gt;talk&lt;/a&gt; demonstrated all of the things you can do with Solr without writing any Java code and it was pretty impressive. I also spoke with Ken Krugler of &lt;a href=&quot;http://corp.krugle.com/company/&quot;&gt;Krugle&lt;/a&gt;, the source code search engine, about search in Roller, something that he&amp;#39;s been thing and &lt;a href=&quot;http://blog.krugle.com/?p=271&quot;&gt;writing about lately&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Couple of end notes re: Atlanta&lt;/h3&gt;

&lt;a href=&quot;http://www.flickr.com/photos/snoopdave/2044103505/&quot; title=&quot;Atlanta skyline by snoopdave, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2010/2044103505_e003894b52_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Atlanta skyline&quot; align=&quot;right&quot; hspace=&quot;15px&quot; vspace=&quot;15px&quot;&gt;&lt;/a&gt;

&lt;p&gt;First, the venue. &lt;a href=&quot;http://www.Westin.com/Peachtree&quot;&gt;The Westin&lt;/a&gt; is an impressive building, it&amp;#39;s the tallest hotel in the western hemisphere and the rotating bar and restaurant at the top are a lot of fun, with relatively good food and well worth a visit. The hotel itself, though, does not seem to be all that well managed or maintained. The carpets are a little spotty and the furniture is a little worn. Generally, that kind of stuff doesn&amp;#39;t bother me much, but I can see why folks might complain (and they did).&lt;/p&gt;

&lt;p&gt;Second item: a good dining experience. On Monday night, a big group of hackathon attendees ventured out to look for &lt;a href=&quot;http://www.yelp.com/biz/bpYsgz3J62i0iT03atmVTA&quot;&gt;Rare&lt;/a&gt;, billed as a soul-food tapas restaurant. It was quite a long walk from the Westin but we managed to get there with help from Greg Stein&amp;#39;s iPhone and some overly helpful folks we ran into on the street. Rare was simply wonderful so next time you&amp;#39;re in Atlanta, skip Pittypat&amp;#39;s Portch and give Rare a try instead.&lt;/p&gt;

&lt;p&gt;And third, MARTA. The travel info I received from the ApacheCon folks recommended taking a shuttle bus from the airport to the Westin, but that&amp;#39;s not the best way to go. The MARTA train is a much better way to go -- $4 for a the round trip, it&amp;#39;s quick and there&amp;#39;s no need to tip. &lt;/p&gt;

&lt;h3&gt;Wrapping up&lt;/h3&gt;

&lt;p&gt;That brings me to the end of my notes, so it&amp;#39;s time to wrap up. As usual, ApacheCon was a great experience and I hope to make it to the next one in Amsterdam this coming April.&lt;/p&gt;

&lt;p&gt;One more thing. You can find many of the session slides on the &lt;a href=&quot;http://wiki.apache.org/apachecon/Us2007OnlineSessionSlides&quot;&gt;ApacheCon wiki&lt;/a&gt;.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_and_blogs_as_a</guid>
    <title>Roller and blogs as a web dev. platform presentation</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_and_blogs_as_a</link>
    <pubDate>Wed, 14 Nov 2007 17:09:31 +0000</pubDate>
    <category>Roller</category>
    <category>apachecon</category>
    <category>blogging</category>
    <category>java</category>
<description>&lt;p&gt;I just posted the slides for my ApacheCon US 2007 talk on the &lt;a href=&quot;http://wiki.apache.org/apachecon/FrontPage&quot;&gt;ApacheCon wiki&lt;/a&gt;. It&amp;#39;s basically the same talk that I gave at ApacheCon EU earlier this year, but I spent some time tweaking the slides, simplifying removing unnecessary bits and adding a little &lt;a href=&quot;http://incubator.apache.org/abdera/&quot;&gt;Abdera&lt;/a&gt; coverage. That, and the fact that the power did not fail, seemed to make the talk go more smoothly this morning. Here are the slides:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://wiki.apache.org/apachecon-data/attachments/Us2007OnlineSessionSlides/attachments/ApacheConUS2007-roller-session-2023.pdf&quot;&gt; Apache Roller and blogs as a web development platform&lt;/a&gt; (2MB PDF)&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/latest_links_nov_12_2007</guid>
    <title>Latest links Nov. 12, 2007: Glassfish, OpenSocial and more</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/latest_links_nov_12_2007</link>
    <pubDate>Mon, 12 Nov 2007 07:23:08 +0000</pubDate>
    <category>Links</category>
    <category>app</category>
    <category>atom</category>
    <category>glassfish</category>
    <category>java</category>
    <category>opensocial</category>
<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.soundopinions.com/&quot;&gt;Sound Opinions from Chicago Public Radio and American Public Media&lt;/a&gt;&lt;br&gt; Best podcast ever&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/theaquarium/entry/glassfish_interim_governance_board_now&quot;&gt;The Aquarium: GlassFish Interim Governance Board - Now Complete&lt;/a&gt;&lt;br&gt; &amp;quot;The complete roster is Tony, Greg Luck (Wotif.com) and Pierre Delisle (Google), and Simon and myself (Sun)&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/alexismp/entry/glassfish_sjs_as_in_production&quot;&gt;Bistro!: GlassFish/SJS AS in production - which bundle, which profile, ...?&lt;/a&gt;&lt;br&gt; Explains differences between developer, cluster and enterprise profiles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/glassfishpodcast/&quot;&gt;GlassFish Podcast: The GlassFish Podcast&lt;/a&gt;&lt;br&gt; Finally, a Glassfish podcast! Props to Alexis Moussine-Pouchkine&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.apple.com/downloads/macosx/unix_open_source/glassfish.html&quot;&gt;Apple - Downloads - UNIX &amp;amp; Open Source - GlassFish&lt;/a&gt;&lt;br&gt; Download Glassfish V2 directly from Apple&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;newsId=20071105005882&amp;newsLang=en&quot;&gt;Red Hat and Sun Collaborate to Advance Open Source Java Technology&lt;/a&gt;&lt;br&gt; &amp;quot;Red Hat has signed Sun&amp;#39;s broad contributor agreement that covers participation in all Sun-led open source projects.&amp;quot;&lt;/li&gt;
&lt;br&gt;


&lt;li&gt;&lt;a href=&quot;http://www.megginson.com/blogs/quoderat/2007/11/03/first-looks-at-opensocial-part-1-urls/&quot;&gt;Megginson: First looks at OpenSocial: part 1 (URLs)&lt;/a&gt;&lt;br&gt; Lists the URIs for the AtomPub collections available in OpenSocial&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.megginson.com/blogs/quoderat/2007/11/05/first-looks-at-opensocial-part-2-content-for-members-and-friends/&quot;&gt;Megginson: First looks at OpenSocial: part 2 (members and friends)&lt;/a&gt;&lt;br&gt; How OpenSocial members and friends are represented in Atom format&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.megginson.com/blogs/quoderat/2007/11/06/first-looks-at-opensocial-part-3-content-for-activities/&quot;&gt;Megginson: First looks at OpenSocial: part 3 (activities)&lt;/a&gt;&lt;br&gt; How OpenSocial activities are represented in Atom format and manipulated via AtomPub protocol&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.megginson.com/blogs/quoderat/2007/11/08/first-looks-at-opensocial-part-4-content-for-persistence-data/&quot;&gt;Megginson: First looks at OpenSocial: part 4 (persistence data)&lt;/a&gt;&lt;br&gt; How OpenSocial persistence is implemented via AtomPub protocol&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/opensocial-container-sample/wiki/GettingStarted&quot;&gt;Google: OpenSocial Container Sample&lt;/a&gt;&lt;br&gt; Shows &amp;quot;basic demonstration-level OpenSocial container can be implemented&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.25hoursaday.com/weblog/2007/11/03/GoogleOpenSocialTechnicalOverviewAndCritique.aspx&quot;&gt;Dare Obasanjo: OpenSocial Tech. Overview and Critique&lt;/a&gt;&lt;br&gt; &amp;quot;Despite these misgivings, I think this is a step in the right direction. Web widget and social graph APIs need to be standardized across the Web.&amp;quot;&lt;/li&gt;
&lt;br&gt;

&lt;li&gt;&lt;a href=&quot;http://www.snellspace.com/wp/?p=799&quot;&gt;snellspace.com: Notes, Part 2&lt;/a&gt;&lt;br&gt; &amp;quot;lots and lots of things that can be modeled as collections of web resources&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://netzooid.com/blog/2007/11/08/building-services-with-atompub/&quot;&gt;netzooid: Building Services with AtomPub&lt;/a&gt;&lt;br&gt; &amp;quot;While APP is not the one true protocol, I think I?m hooked&amp;quot;&lt;/li&gt;

&lt;/ul&gt;

</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/roller_plugins</guid>
    <title>Ten types of plugins supported by Roller 4.0</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/roller_plugins</link>
    <pubDate>Wed, 17 Oct 2007 10:12:31 +0000</pubDate>
    <category>Roller</category>
    <category>java</category>
    <category>plugins</category>
    <category>roller</category>
<atom:summary type="html">&amp;lt;a href=&amp;quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0
&amp;quot;&amp;gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; align=&quot;right&quot; alt=&quot;Roller 4.0 logo&quot;&gt;
I&amp;#39;m working on documenting the Roller plugin system, comparing it to similar systems (e.g. &lt;a href=&quot;http://codex.wordpress.org/Plugin_API&quot;&gt;Wordpress&lt;/a&gt; and &lt;a href=&quot;http://confluence.atlassian.com/display/DOC/Writing+Confluence+Plugins&quot;&gt;Confluence&lt;/a&gt;) and coming up with some proposals for improvements. 
As part of that work, I&amp;#39;ve come up with a list of the plugin types supported by &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt;.&amp;nbsp;</atom:summary><description>&lt;p&gt;&amp;lt;a href=&amp;quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0
&amp;quot;&amp;gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; align=&quot;right&quot; alt=&quot;Roller 4.0 logo&quot;&gt;
I&amp;#39;m working on documenting the Roller plugin system, comparing it to similar systems (e.g. &lt;a href=&quot;http://codex.wordpress.org/Plugin_API&quot;&gt;Wordpress&lt;/a&gt; and &lt;a href=&quot;http://confluence.atlassian.com/display/DOC/Writing+Confluence+Plugins&quot;&gt;Confluence&lt;/a&gt;) and coming up with some proposals for improvements. 
As part of that work, I&amp;#39;ve come up with a list of the plugin types supported by &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Page Model Plugin&lt;/b&gt; (Interface: &lt;a href=&quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PageModel.java?view=markup&quot;&gt;PageModel&lt;/a&gt;)
&lt;br&gt;Allows you to make new objects available to Roller page templates, providing a way to display external data in the blog pages and feeds generated by Roller.

&lt;li&gt;&lt;b&gt;Weblog Editor UI Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/core/plugins/WeblogEntryEditor.java?view=markup&amp;quot;&amp;gt;
WeblogEntryEditor)&lt;br&gt; Plugin your own Rich Text or other type of editor into the New/Edit Entry page in the Roller web UI. Roller comes with two such plugins: a plain-text editor and a rich-text editor based on Xinha.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Weblog Entry Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/plugins/entry/WeblogEntryPlugin.java?view=markup&amp;quot;&amp;gt;
WeblogEntryPlugin)&lt;br&gt; Allows you to transform weblog entry content at the time it is displayed in a weblog page or a feed. Once you&amp;#39;ve installed your entry plugin, blog authors can enable and disable it on a per entry basis. For example, if you&amp;#39;ve got the Wiki Plugin installed then bloggers can choose to blog using wiki syntax and the plugin will transform the wiki syntax to HTML on display.&lt;/li&gt;
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Weblog Entry Comment Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/business/plugins/comment/WeblogEntryCommentPlugin.java?view=markup&amp;quot;&amp;gt;
WeblogEntryCommentPlugin)&lt;br&gt; Allows you to transform comment content at the time it is displayed in a weblog page or feed. By default, Roller uses a link-markup plugin to turn URLs into clickable links, an auto-format plugin to add paragraph breaks and a safe-subset plugin to strip out all but the safest HTML tags. You can add new comment formatter plugins or replace the existing ones. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Comment Authenticator Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.java?view=markup&amp;quot;&amp;gt;
CommentAuthenticator)&lt;br&gt; Plugin your own comment authenticator to replace the math-question test used in most Roller blogs. Allows you to add some additional HTML to the comment form and some server-side logic for authenticating comment posts. You could add a CAPTCHA test this way, but I&amp;#39;m not sure there&amp;#39;s enough pluggability to support OpenID authentication. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Comment Validator Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.java?view=markup&amp;quot;&amp;gt;
CommentValidator)&lt;br&gt; Allows you to add additional comment spam filters to Roller. Your filter can examine each comment posted and report to Roller whether it appears to be spam or not. Roller includes an Akismet validator, a too-many-links validator and a trackback validator. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Renderer Plugin&lt;/b&gt; (Interfaces: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/RendererFactory.java?view=markup&amp;quot;&amp;gt;
RendererFactory and &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/Renderer.java?view=markup&amp;quot;&amp;gt;
Renderer)&lt;br&gt; Allow you to plugin a renderer for a specific template language name. Roller&amp;#39;s stock templates and theme all use the Velocity template language, but by plugging in your own renderer you can author templates in whatever JVM based language you wish. For example, plugins exist for authoring Roller templates in JavaScript, JRuby and Groovy Server Pages (GSP) languages. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Request Mapper Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/RequestMapper.java?view=markup&amp;quot;&amp;gt;
RequestMapper)&lt;br&gt; Allows you to plugin to Roller&amp;#39;s URL structure and request handling system, like adding a Servlet but not requiring you to edit web.xml.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Cache system Plugin&lt;/b&gt; (Interfaces: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/util/cache/CacheFactory.java?view=markup&amp;quot;&amp;gt;
CacheFactory and &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/util/cache/Cache.java?view=markup&amp;quot;&amp;gt;
Cache)&lt;br&gt; Plugin your own cache system to replace or augment Roller&amp;#39;s in-memory cache system. For example, you might want to plugin memcached as your distributed page/feed cache as Sun does for blogs.sun.com.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Repeatable Task&lt;/b&gt; (Classes to extend: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/runnable/RollerTask.java?revision=559911&amp;view=markup&amp;quot;&amp;gt;
RollerTask or &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/runnable/RollerTaskWithLeasing.java?revision=559911&amp;view=markup&amp;quot;&amp;gt;
RollerTaskWithLeasing)&lt;br&gt; Roller runs a number of tasks behind the scenes and you can add your own tasks and configure when they start and how often they run. There&amp;#39;s also a lease-system for working in a distributed environment.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;UPDATE: The &lt;a href=&quot;http://people.apache.org/~snoopdave/presentations/advanced-roller-aceu2008.pdf&quot;&gt;Advanced Roller presentation from ApacheCon EU 2008&lt;/a&gt; covers many of the different types of plugins above and gives examples, configuration tips, etc.&lt;/p&gt;


</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/atom_news_round_up</guid>
    <title>Latest links: AtomPub news round-up edition</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/atom_news_round_up</link>
    <pubDate>Fri, 12 Oct 2007 12:31:13 +0000</pubDate>
    <category>Blogging</category>
    <category>atom</category>
    <category>atompub</category>
    <category>feeds</category>
    <category>gdata</category>
    <category>java</category>
    <category>movabletype</category>
    <category>roller</category>
    <category>wordpress</category>
<atom:summary type="html">I&amp;#39;ve been in crunch-mode working on a new project, but I&amp;#39;ve been trying to keep an eye on what&amp;#39;s going on the world of &lt;a href=&quot;http://tools.ietf.org/wg/atompub/&quot;&gt;Atom Publishing Protocol&lt;/a&gt; or AtomPub as the cool kids &lt;a href=&quot;http://blog.ianbicking.org/2007/08/12/atom-publishing-protocol-atompub/&quot;&gt;call it&lt;/a&gt;. Here&amp;#39;s a wrap-up of some of the AtomPub news I&amp;#39;ve picked up on the past month or so.&amp;nbsp;</atom:summary><description>&lt;p&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/atom-logo75px.gif&quot; alt=&quot;atom logo&quot; align=&quot;right&quot;&gt;
I&amp;#39;ve been in crunch-mode working on a new project, but I&amp;#39;ve been trying to keep an eye on what&amp;#39;s going on the world of &lt;a href=&quot;http://tools.ietf.org/wg/atompub/&quot;&gt;Atom Publishing Protocol&lt;/a&gt; or AtomPub as the cool kids &lt;a href=&quot;http://blog.ianbicking.org/2007/08/12/atom-publishing-protocol-atompub/&quot;&gt;call it&lt;/a&gt;. Here&amp;#39;s a wrap-up of some of the AtomPub news I&amp;#39;ve picked up on the past month or so.

&lt;h3&gt;Specifications&lt;/h3&gt;

&lt;p&gt;
The big news is, of course, that AtomPub has been granted an RFC number &lt;a href=&quot;http://tools.ietf.org/html/rfc5023&quot;&gt;RFC-5023&lt;/a&gt; and is now an IETF &amp;quot;proposed standard&amp;quot; like Atom format (RFC-4287). The folks at Ricoh have provided a &lt;a href=&quot;http://www.ricoh.co.jp/src/rd/webtech/rfc5023_ja.html&quot;&gt;Japanese translation&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Extensions to AtomPub are under development and you can find a good list of them at the &lt;a href=&quot;http://xml.coverpages.org/atom.html&quot;&gt;XML Cover Pages page for Atom&lt;/a&gt;. 

One I find interesting is James Snell&amp;#39;s AtomPub &lt;a href=&quot;http://tools.ietf.org/html/draft-snell-atompub-feature-10&quot;&gt;Feature Discovery&lt;/a&gt; spec, which is designed to help AtomPub clients determine what features are supported and required by servers. The features spec is controversial and has sparked a lot of good discussion including, Brian Smith&amp;#39;s email &lt;a href=&quot;http://www.imc.org/atom-protocol/mail-archive/msg10265.html&quot;&gt;Atom Weblog Publishers Guide&lt;/a&gt; and &lt;a href=&quot;http://sberyozkin.blogspot.com/2007/09/atom-and-ws-policy.html&quot;&gt;Sergey Beryozkin&lt;/a&gt; and &lt;a href=&quot;http://netzooid.com/blog/2007/09/25/atompub-ws-policy/&quot;&gt;Dan Diephouse&amp;#39;s discussion of AtomPub and WS-Policy&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;Server implementations&lt;/h3&gt;

&lt;p&gt;
More big news to report here: the new Wordpress 2.3 release provides full support for AtomPub. Sam Ruby blogged about it in &lt;a href=&quot;http://intertwingly.net/blog/2007/08/30/WordPress-2-3-AtomPub&quot;&gt;Wordpress 2.3 loves AtomPub&lt;/a&gt; and the &lt;a href=&quot;http://codex.wordpress.org/AtomPub&quot;&gt;Wordpress 2.3 AtomPub docs&lt;/a&gt; provide a good summary and cover some limitations. 

Yesterday, Sam posted &lt;a href=&quot;http://intertwingly.net/blog/2007/10/11/Wordpress-Vigilance-and-Plans&quot;&gt;Wordpress vigilance and plans&lt;/a&gt;. He wants to get Wordpress to score a perfect 0 errors and 0 warnings on the APE tests, which means among other things preserving foreign markup.
&lt;/p&gt;

&lt;p&gt;
New releases of Apache Roller have also been updated for the final AtomPub spec. The upcoming Roller 3.1.1 and &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt; releases include AtomPub support. Both releases are up for vote now, so they should be out Real Soon 

Now. And I&amp;#39;m working on adding AtomPub support for comments for Roller 4.1, building on top of the Atom Threading Extension (&lt;a href=&quot;http://www.ietf.org/rfc/rfc4685.txt&quot;&gt;RFC-4685&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
I&amp;#39;ve been googling and browsing the SixApart site, but I can&amp;#39;t figure out if Movable Type 4.0 supports the final AtomPub spec. Anybody know?
&lt;/p&gt;

&lt;p&gt;
And Google has added another AtomPub based API. Read about it on &lt;span style=&quot;color:#3c3c3c;&quot;&gt;Bill de hÃ&#147;ra&amp;#39;s blog &lt;/span&gt;&lt;a href=&quot;http://www.dehora.net/journal/2007/08/youtube_via_gdata.html&quot;&gt;YouTube via GData&lt;/a&gt; and on the YouTube Developer API blog: &lt;a href=&quot;http://apiblog.youtube.com/2007/08/new-youtube-api-released-into-wild.html&quot;&gt;New YouTube API Released into the Wild&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;Client implementations&lt;/h3&gt;

&lt;p&gt;
In &lt;a href=&quot;http://jcheng.wordpress.com/2007/10/09/stick-a-fork-in-it/&quot;&gt;Stick a fork in it&lt;/a&gt; Joe Cheng writes &amp;quot;The Windows Live Writer team is still on track to deliver AtomPub support in the next version, which I am looking forward to immensely. Itâ&#128;&#153;s definitely an exciting time to be in the blogging tools space!&amp;quot; Based on what I saw at the last face-to-face AtomPub interop, it looks like Microsoft may have the best AtomPub-based blog client around. I wonder when MarsEdit and Ecto will get on board with AtomPub.
&lt;/p&gt;

&lt;h3&gt;Toolkits and programming libraries&lt;/h3&gt;

&lt;p&gt;I already blogged about the &lt;a href=&quot;http://rollerweblogger.org/roller/entry/rome_propono_0_6_released&quot;&gt;Propono 0.6&lt;/a&gt;, a Java-based client and server library for AtomPub, which has been updated for final spec. 

Since then the Apace Abdera project has released &lt;a href=&quot;http://www.nabble.com/-Announce--Apache-Abdera-0.3.0-t4577068.html&quot;&gt;Apache Abdera (incubating) 0.3 release&lt;/a&gt; is available with a long list of improvements and new features. 
There are also a couple of &lt;a href=&quot;http://www.snellspace.com/wp/?p=770&quot;&gt;usage&lt;/a&gt; &lt;a href=&quot;http://www.snellspace.com/wp/?p=773&quot;&gt;notes&lt;/a&gt; from James Snell. 

Also on the topic of Abdera, Dan Diephouse has done some work to make &lt;a href=&quot;http://netzooid.com/blog/2007/09/04/spring-abdera/&quot;&gt;Spring and Abdera&lt;/a&gt; work well together.
&lt;/p&gt;

&lt;p&gt;The Perl &lt;a href=&quot;http://search.cpan.org/~takeru/Atompub/lib/Atompub/Client.pm#NAME&quot;&gt;AtomPub::Client at CPAN&lt;/a&gt;&lt;span style=&quot;color:#3c3c3c;&quot;&gt; has updated for final AtomPub too.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;That&amp;#39;s all I&amp;#39;ve got for now. Did I miss any important AtomPub news?&lt;/p&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/blogapps_2_1_released</guid>
    <title>Blogapps 2.1 released</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/blogapps_2_1_released</link>
    <pubDate>Tue, 2 Oct 2007 21:49:40 +0000</pubDate>
    <category>Java</category>
    <category>app</category>
    <category>atom</category>
    <category>blogapps</category>
    <category>blogging</category>
    <category>java</category>
    <category>jspwiki</category>
    <category>roller</category>
    <category>rss</category>
<description>&lt;p&gt;&amp;lt;a href=
&amp;quot;http://www.amazon.com/dp/1932394494?tag=bloggingrolle-20&amp;link_code=as3&amp;creativeASIN=1932394494&amp;creative=373489&amp;camp=211189&amp;quot;&amp;gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/dmjohnson_3d.gif&quot; alt=&quot;RSS and Atom in Action image&quot; align=&quot;right&quot;&gt;
The next releases that I&amp;#39;d like to announce are the &lt;a href=&quot;http://blogapps.dev.java.net&quot;&gt;Blogapps&lt;/a&gt; 2.1 Examples and the Blogapps 2.1 Server.&lt;/p&gt;


&lt;p&gt;If you&amp;#39;d like to learn more about the Blogapps examples and server then read &lt;a href=&quot;http://today.java.net/pub/a/today/2006/10/17/the-blogapps-project.html&quot;&gt;The Blogapps Project&lt;/a&gt; article at Java.net. Here&amp;#39;s a quick summary:&lt;/p&gt;

&lt;blockquote&gt;
            The Blogapps project hosts a collection of &lt;b&gt;useful RSS and Atom utilities and 
            examples&lt;/b&gt; from &lt;a href=&quot;http://manning.com/dmjohnson&quot;&gt;RSS and Atom In Action&lt;/a&gt; 
            by Dave Johnson.  They&amp;#39;re 
            designed to be useful even if you haven&amp;#39;t read the book and they&amp;#39;re available 
            under the Apache License 2.0 so you can use the code in your applications and 
            you can modify and redistribute them as you wish. 
&lt;/blockquote&gt;

&lt;p&gt;What&amp;#39;s changed since 2.0? The examples have been updated to include the latest version of ROME Propono, which means that most of them now support the final Atom protcol spec. The server has been updated to include Roller 4.0 RC5, which also includes Atom protocol support and JSPWiki 2.4. And of course, various bugs have been fixed. Here are the release files, installation instructions and release notes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/server.html&quot;&gt;Blogapps server install instructions&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70491/blogapps-server-2.1.tar.gz&quot;&gt;Blogapps Server-2.1.tar.gz&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70516/blogapps-server-2.1.zip&quot;&gt;Blogapps-Server-2.1.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/java/blogapps_2.x/README.html&quot;&gt;Blopapps example release notes&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70489/blogapps-java-examples-2.1.tar.gz&quot;&gt;Blogapps-Examples-2.1.tar.gz&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70490/blogapps-java-examples-2.1.zip&quot;&gt;Blogapps Examples-2.1.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This blog entry was posted via Atom protocol and the MatisseBlogger blog-client, which you can see in the screen-shot below (which was also posted via Atom.&lt;/p&gt;

&lt;a href=&quot;http://rollerweblogger.org/roller/resource/roller-2007100222411.jpg&quot;&gt;
   &lt;img src=&quot;http://rollerweblogger.org/roller/resource/matisse-blogger-2.1.jpg&quot; alt=&quot;screenshot of MatisseBlogger&quot;&gt;
&lt;/a&gt;

&lt;p&gt;What&amp;#39;s next? Not sure at this point, but I will do another Blogapps release once ROME 1.0 is released.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/rome_propono_0_6_released</guid>
    <title>ROME Propono 0.6 released</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/rome_propono_0_6_released</link>
    <pubDate>Mon, 1 Oct 2007 11:20:19 +0000</pubDate>
    <category>Feeds</category>
    <category>atom</category>
    <category>atomprotocol</category>
    <category>java</category>
    <category>rome</category>
    <category>rss</category>
<description>&lt;p&gt;&lt;a href=&quot;http://rome.dev.java.net&quot;&gt;
&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/rome-logo.png&amp;quot; 
alt=&amp;quot;ROME logo&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The first release to discuss is ROME Propono, which includes a ROME based Atom protocol client library, Atom protocol server framework and an Blog Client library abstraction that supports both Atom protocol and the MetaWeblog API. &lt;/p&gt;

&lt;p&gt;I&amp;#39;ve been working on Propono 0.6 off-and-on since May, keeping it in sync with the latest version of the Atom protocol, testing it against Tim Bray&amp;#39;s APE and adding various improvements needed in my other projects. Over the weekend I finally had enough time to get a release out. You can find the full-details at the link below but basically this release adds support for the &lt;a href=&quot;http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-17.html&quot;&gt;final Atom Publishing Protocol specification&lt;/a&gt; and better support for relative URIs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomeProponoRelease06&quot;&gt;ROME Propono 0.6 release notes / change list&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://rome.dev.java.net/apidocs/subprojects/propono/0.6/overview-summary.html&quot;&gt;API documentation&lt;/a&gt;&lt;/li&gt;

&lt;li&gt; &lt;a href=&quot;https://rome.dev.java.net/dist/rome-propono-0.6.tar.gz&quot; rel=&quot;nofollow&quot; target=&quot;_top&quot;&gt;Propono 0.6 Binary tar.gz&lt;/a&gt;&lt;/li&gt; 

&lt;li&gt; &lt;a href=&quot;https://rome.dev.java.net/dist/rome-propono-0.6.zip&quot; rel=&quot;nofollow&quot; target=&quot;_top&quot;&gt;Propono 0.6 Binary zip&lt;/a&gt;&lt;/li&gt; 

&lt;li&gt; &lt;a href=&quot;https://rome.dev.java.net/dist/rome-propono-0.6-src.tar.gz&quot; rel=&quot;nofollow&quot; target=&quot;_top&quot;&gt;Propono 0.6 Source tar.gz&lt;/a&gt;&lt;/li&gt; 

&lt;li&gt; &lt;a href=&quot;https://rome.dev.java.net/dist/rome-propono-0.6-src.zip&quot; rel=&quot;nofollow&quot; target=&quot;_top&quot;&gt;Propono 0.6 Source zip&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;What&amp;#39;s next? Once ROME 1.0 is released Real Soon Now, I&amp;#39;ll get a another release out and I&amp;#39;ll probably call it ROME Propono 1.0.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/re_jspwiki_apache</guid>
    <title>re: JSPWiki@Apache?</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/re_jspwiki_apache</link>
    <pubDate>Tue, 18 Sep 2007 22:26:13 +0000</pubDate>
    <category>Open Source</category>
    <category>asf</category>
    <category>foss</category>
    <category>java</category>
    <category>jspwiki</category>
    <category>wikis</category>
<description>&lt;p&gt;Congrats are also in order for the JSPWiki team. 

As &lt;a href=&quot;http://www.ecyrd.com/ButtUgly/wiki/Main_blogentry_180907_1&quot;&gt;Janne Jalkanen&lt;/a&gt; notes, &lt;a href=&quot;http://jspwiki.org&quot;&gt;JSPWiki&lt;/a&gt; was accepted into the Apache Incubator yesterday. 

I&amp;#39;m proud to be one of the four mentors who will guide the project through the incubation process. Janne and the JSPWiki team put together a great proposal and I think it was clear to everybody involved in the vote that these folks know what they&amp;#39;re doing. They&amp;#39;ll master the Apache way in no time.&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/switched</guid>
    <title>Switched</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/switched</link>
    <pubDate>Tue, 18 Sep 2007 21:46:20 +0000</pubDate>
    <category>Sun</category>
    <category>glassfish</category>
    <category>java</category>
<description>&lt;p&gt;
&lt;a href=&quot;https://glassfish.dev.java.net&quot;&gt;
&lt;img src=&quot;https://glassfish-theme.dev.java.net/logo.gif&quot; alt=&quot;Glassfish logo&quot; align=&quot;right&quot;&gt;
&lt;/a&gt;

Yes this is my obligatory &lt;a href=&quot;http://blogs.sun.com/theaquarium/entry/glassfish_v2_launch_roundup&quot;&gt;Glassfish V2&lt;/a&gt; post but listen, for me V2 is a pretty big big deal. Like Eclipse, which was the IDE that pulled me away from VIM, Glassfish V2 is the app server that finally pulled me away from Tomcat.&lt;/p&gt;

&lt;p&gt;You see, I&amp;#39;ve been using Tomcat every day for a very long time. I started back in 2000 when I worked at HAHT Software and I  was working on the new &amp;quot;Rocketsled&amp;quot; J2EE version of the HAHTsite app server. We were ripping out the old proprietary page engine and plugging in Tomcat. It was a pleasure to work with and I learned a hell of a lot from the code-base. After joining Sun and switching from Eclipse to Netbeans because Sun-on-Sun matters, I still stuck with Tomcat. It&amp;#39;s what we were using for blogs.sun.com and Glassfish was just too bulky and slow. I grew to love Netbeans, but I couldn&amp;#39;t stomach Glassfish, until now.&lt;/p&gt;

&lt;p&gt;Now that Glassfish V2 is out I&amp;#39;m switching from Tomcat to Glassfish for all of my development. It&amp;#39;s more than fast enough. With Glassfish on my MacBook Pro, Roller restart time is about 8 seconds compared to 16 with Tomcat. And the quality is high; the admin console, the asadmin command-line utility and the docs are all excellent. The dog food is surprisingly tasty ;-)&lt;/p&gt;

&lt;p&gt;Congrats to the Glassfish team!&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">https://rollerweblogger.org/roller/entry/apachecon_us_2007_early_bird</guid>
    <title>ApacheCon US 2007 - still time to be an early bird</title>
    <dc:creator>Dave Johnson</dc:creator>
    <link>https://rollerweblogger.org/roller/entry/apachecon_us_2007_early_bird</link>
    <pubDate>Fri, 7 Sep 2007 18:48:10 +0000</pubDate>
    <category>Roller</category>
    <category>apachecon</category>
    <category>blogging</category>
    <category>java</category>
    <category>roller</category>
<description>&lt;a href=&quot;http://us.apachecon.com&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/apachecon2007_logo.png&quot; alt=&quot;ApacheCon US 2007 logo&quot;&gt;&lt;/a&gt;

&lt;p&gt;ApacheCon is coming up fast. I just faxed in my speaker&amp;#39;s agreement and I&amp;#39;m starting to update my &lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2023&quot;&gt;talk&lt;/a&gt; to cover the latest changes in the upcoming Apache Roller 4.0 and 4.1 releases.&lt;/p&gt;

&lt;p&gt;I&amp;#39;ve been four times now and ApacheCon is always a great conference. It&amp;#39;s small and cozy enough, but almost all of the Apache projects are represented. So it&amp;#39;s easy to find the experts, make new friends and get all of your questions answered. The session line-up looks great this year; here are ones that caught my eye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1913&quot;&gt;
    Hacking Atom with Apache Abdera&lt;/a&gt; - Garret Rooney&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2012&quot;&gt;
    A little REST and Relaxation&lt;/a&gt; - Roy Fielding&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1882&quot;&gt;
    WS-* vs. REST: Facts, Myths and Lies&lt;/a&gt; - Sanjiva Weerawarana&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2058&quot;&gt;
    Go Light with Apache Struts 2 and REST&lt;/a&gt; - Don Brown&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1971&quot;&gt;
    How to Run a Business Around The ASF&lt;/a&gt; 
    - Sanjiva Weerawarana&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1990&quot;&gt;
    Open Source Community Anti-Patterns&lt;/a&gt; - Ted Leung&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1985&quot;&gt;
    RIAs using Apache Derby and Comet&lt;/a&gt; 
    - Jeanfrancois Arcand &amp;amp; Francois Orsini&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1982&quot;&gt;
    Apache Derby - Saucer Separation&lt;/a&gt; - Rick Hillegas&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1956&quot;&gt;
    JCR in Action - Content-based Applications with Apache Jackrabbit&lt;/a&gt;
    - Carsten Ziegeler&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to go? There&amp;#39;s still time to shave a couple of hundred dollars off the conference fees by registering early. Early bird pricing has been extended to Sept. 22, 2007.&lt;/p&gt;

&lt;p&gt;And the Weston looks like a pretty nice place for a conference:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/peachtree-westin-atlanta.jpg&quot; alt=&quot;Westin hotel&quot;&gt;&lt;/p&gt;

&lt;a href=&quot;http://us.apachecon.com&quot;&gt;ApacheCon US 2007&lt;/a&gt; | &lt;a href=&quot;http://guest.cvent.com/i.aspx?5S,M3,5356863a-01a0-4859-b0d3-35153b04110e&quot;&gt;Register here&lt;/a&gt;&lt;br&gt;
November 12-16, 2007&lt;br&gt;
&lt;a href=&quot;http://www.Westin.com/Peachtree&quot;&gt;Westin Peachtree Plaza&lt;/a&gt;&lt;br&gt;
Atlanta, Georgia&lt;br&gt;


</description>  </item>
</channel>
</rss>