JBoss Shotoku Contributors
Project Lead: Adam Warski , JBoss
Adam is a Ph.D. student of computer science at the University of Warsaw (Poland). Adam joined JBoss as one of the first interns at JBoss. He has been with the Labs initiative since its beginning.

Developer: Tomek Szymanski , JBoss
Now attending Warsaw Technical University and graduating with an engineering and Master degree in 2007, Tomek is the primary developer of JBoss Wiki and continues to contribute to the core JBoss Labs initiative.

Retired: Damon Sicore
After spending over ten years finding a way to get paid to write open source software, Damon has found his home at JBoss Labs as Lead. Damon offers sacrificial animals and children daily in order to continue the efforts of JBoss Labs.

The Shotoku Project...

Shotoku is designed to provide easy access to content repositories in which you can store data, bind metadata, revision content, and provide branching and merging strategies. This means Shotoku can interface with repositories such as the Java Content Repository (JSR 170: JCR), Subversion, and file-system based repository implementations that aim to support basic revisioning mechanisms.


Here are some of the currently implemented features:
  • Three content managers: the first and default SVN-based, JCR-based and a local file system repository.
  • Because a local working copy is present, data reading is very fast (SVN repository implementation).
  • Data writing is reliable, because data is sent straight to the repository, without touching the working copy (SVN repository implementation).
  • Shotoku can work in "embedded" mode in stand-alone applications, as well as a component in an application server.
  • Shotoku allows you to "inject" content into any POJO using annotations (currently supported only in app server mode). POJOs which are Shotoku aware are automatically updated when a user updates a node in a Subversion repository Shotoku is configured to reference. Content can be anything and there are no structural requirements placed on the repository - even existing Subversion repositories can be referenced by Shotoku without modification.
  • A simple search mechanism.
  • Integeration with Apache Velocity - you can easily store templates in Shotoku to create higher level application features such as content and blog engines.
  • Feeds component - automatic generation of rss, atom and rdf feeds/ podcasts, configured through a xml file, together with arbitrary feeds aggregation. You can see feeds already at work on JBoss Labs - just click the "Feeds" link in navigation or simply here.
  • Blog component.
  • A simple cache with "renewable" values.

As an example application that can be built using Shotoku, a blog and podcasting engine has been created using the template mechanisms available in Shotoku. In fact, all the feeds you see on JBoss Labs, the blog and podcasts, are driven using content stored in our Subversion content repository. This means, to publish a podcast, you just check in your content to a directory of your choice in your svn repository. Shotoku automatically applies the selected templates to produce content feeds. These feeds are described using simple xml files. This is just one of the many application level uses of Shotoku.

But that's only the beginning of what Shotoku will consist of. Here is a short plan for the future:

  • Clustering support using JBoss Cache
  • Semantic web integration
  • Improved searching
  • A servlet for accessing files based on defined access privileges.

More information

Here are some links you might want to visit:

  • For instructions on how to use Shotoku or for examples please visit our wiki.
  • Also, visit our downloads section to get the alpha version of Shotoku.
  • You can view the Shotoku roadmap in JIRA.
  • If you have an suggestions or quesitons, go to the Shotoku forum
  • The javadocs may help a lot.

The latest version of Shotoku source files can be found in Labs subversion repository: http://anonsvn.labs.jboss.com/trunk/forge/portal-extensions/shotoku/.

In the subversion implementation of Shotoku (our main one :) ) we use the JavaSVN library created by TMate. Be sure to visit their site if you are interested in tightly integrating your project with Subversion and accessing its advanced functions.

JBoss Blog Portlet

Bi-temporal versioning with Envers
Posted on Jun 16, 2008 12:22:43 PM by Adam Warski.

With the recent addition of queries to Envers, it is now possible to easily retrieve data in a bi-temporal way. If you are not familiar with bi-temporal versioning, a good introduction by Martin Fowle...

Envers beta - now with queries!
Posted on Jun 12, 2008 7:03:37 AM by Adam Warski.

So far Envers made it easy to store historical data; now, with version 1.0.0.beta1 (download here), you can also query it, in two “dimensions”: for entities at a given revision and for revisions, at w...

What data should be stored in versions tables? - a poll
Posted on Jun 4, 2008 4:10:28 AM by Adam Warski.

Hello, I’ve posted a poll on what data should be stored in versions tables in Envers, see here and cast your vote: http://www.jboss.com/index.html?module=bb&op=viewtopic&t=136764 The results will dete...

Envers preview 3: logging data for revisions, Seam demo
Posted on May 6, 2008 8:57:24 AM by Adam Warski.

With the preview 3 release of Envers, you can easily associate additional data with revisions. This could be, for example, the name of the user making the change. You simply need to annotate an entity...

Value-to-variable binding “let” tag for JSF, Facelets and Seam
Posted on Apr 28, 2008 6:54:56 AM by Adam Warski.

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value. The concept comes of course from functional programming. It is especial...

Value-to-variable binding “let” tag for JSF, Facelets and Seam
Posted on Apr 28, 2008 6:54:56 AM by Adam Warski.

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value. The concept comes of course from functional programming. It is especial...

Value-to-variable binding “let” tag for JSF, Facelets and Seam
Posted on Apr 28, 2008 6:54:56 AM by Adam Warski.

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value. The concept comes of course from functional programming. It is especial...

Value-to-variable binding “let” tag for JSF, Facelets and Seam
Posted on Apr 28, 2008 6:54:56 AM by Adam Warski.

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value. The concept comes of course from functional programming. It is especial...

Value-to-variable binding “let” tag for JSF, Facelets and Seam
Posted on Apr 28, 2008 6:54:56 AM by Adam Warski.

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value. The concept comes of course from functional programming. It is especial...

Value-to-variable binding “let” tag for JSF, Facelets and Seam
Posted on Apr 28, 2008 6:54:56 AM by Adam Warski.

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value. The concept comes of course from functional programming. It is especial...