November 13th, 2013 by Lincoln Baxter III

Creating a simple static file server with Rewrite

Today, I’d like to take a quick moment to demonstrate how to make a simple file server using [[Rewrite]], and any Servlet Container, such as Tomcat, Wildfly, or Jetty. This can enable much easier file updates for static content, such as preventing the need to re-deploy an entire application just to update an image, or document.

[[Rewrite]] is an open-source Routing ↑↓ and /url/{rewriting} solution for Servlet, Java Web Frameworks, and Java EE.

To start, you’ll need to include the Rewrite dependencies in your project. If you’re using maven, this is as simple as making sure your POM has the following entries (You’ll also need the Servlet API):

November 12th, 2013 by Lincoln Baxter III

PrettyTime 3.2.1.Final Released – Now with Czech language support

We are proud to announce the 3.2.1.Final version of PrettyTime. This release includes several bug-fixes, an improved NLP (time parsing) module, and a new method for more convenient configuration of time units:
public void exampleUnitConfiguration() {
    JustNow unit = t.getUnit(JustNow.class);
    // This means that "just now" will only be used to represent one millisecond difference between the target time and reference time. (the default is 5 minutes.)

Improvements in the NLP module (based on Natty.) include more resilient parsing of date offsets such as “the day before yesterday,” which previously resulted in a date that actually represented “yesterday.”

Get PrettyTime 3.2.1.Final and PrettyTime NLP 3.2.1.Final.

October 3rd, 2013 by Lincoln Baxter III

Create a dynamic Logout URL without a Servlet or JSP, using Rewrite

The code below implements a simple command mapping that binds logout functionality to a URL. To use this example, you must include the following [[Rewrite]] dependency in your project:


Once your project is set up to include Rewrite, just paste the following code into your application source folder.

public class LogoutConfiguration extends HttpConfigurationProvider

   public Configuration getConfiguration(ServletContext context)
      return ConfigurationBuilder.begin()
               .perform(new HttpOperation() {
                  public void performHttp(HttpServletRewrite event, EvaluationContext context)
               }.and(Redirect.temporary(context.getContextPath() + "/")));

   public int priority()
      return Integer.MIN_VALUE;
October 2nd, 2013 by lastcow

Help! RewriteFilter won’t start – Why? Look to web.xml DOCTYPE for answers.

I was developing JSF 2.2.1 web application using [[Rewrite]] for URL cleanup and navigation. It was simple to get started building an application using Rewrite on JBoss WildFly Beta 4 server. I installed the dependencies, starting using the appropriate configuration and components. All I wanted to do was map a few simple pages, and create links to them in the html – Rewrite was perfect for this.

Everything was working fine in the application except page mappings didn’t seem to work (I had to access pages via their direct URL,) and the <pretty:link> always rendered a link to the homepage.

I stopped by the #ocpsoft channel on IRC, and Lincoln helped me solved this ‘strange’ issue (and invited me to write a quick post about it.) Now of course you must be wondering what was wrong – It was because the doctype declaration of my web.xml was both invalid, and also specifying an out-of-date servlet version.

This is the original web.xml DOCTYPE declaration generated by Intellij IDEA:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "">

As it turns out, this caused Wildfly to use an older version of Servlet support, which meant that I needed to either register Rewrite in the application manually, by adding the RewriteFilter configuration to my web.xml file, or simply update the web.xml file to use the more recent (and correct) document type (which is by far the simpler solution!)

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns=""

Now everything works fine, the old declaration deactivated servlet 3.0, which actually prevented Rewrite to start up (Rewrite bundles a web-fragment.xml file which requires Servlet 3.0 in order to support automatic activation.)

Thanks again to Lincoln, saved my life. 😉

~Lastcow (zhijiang)

September 30th, 2013 by Lincoln Baxter III

Rewrite 2.0.8.Final Released – Fixes critical parameterization bug

Bug Fixes

If you experienced problems with rule parameterization in Rewrite 2.0.7.Final, then sorry about that, and this release of [[Rewrite]] is for you:

Erroneous failures such as the following exception should be fixed by this release:

org.ocpsoft.rewrite.exception.ParameterizationException: The value of required parameter [s] was null.
	at org.ocpsoft.rewrite.param.RegexParameterizedPatternBuilder.extractBoundValues(
	at org.ocpsoft.rewrite.servlet.config.Forward.performHttp(
	at org.ocpsoft.rewrite.servlet.config.HttpOperation.perform(
	at org.ocpsoft.rewrite.servlet.config.rule.Join.perform(

New Features

September 17th, 2013 by Lincoln Baxter III

Simplest RVM Installation Guide

Run this command to install the rvm command, a very simple and intuitive “Ruby Version Manager”:
mkdir -p ~/.rvm/src && cd ~/.rvm/src && rm -rf ./rvm && \
git clone --depth 1 git:// && \
cd rvm && ./install && \
echo "if [[ -s $HOME/.rvm/scripts/rvm ]]; then source $HOME/.rvm/scripts/rvm; fi" >> ~/.bashrc
Edit: Oops, I guess it can get even simpler: (Yes, the ‘\’ is intentional.)
\curl -L | bash
Now use it:
rvm install 1.9.3
Source: An awesome Canadian website.
September 15th, 2013 by Lincoln Baxter III

Rewrite 2.0.7.Final Released – Bug fixes and enhancements

We are glad to announce the latest version of [[Rewrite]], servlet toolkit and URL-rewriting extensions. This release includes serveral bug fixes and enhancements:

Simplified Configuration

We heard you! It is now much easier to register ConfigurationProvider objects. You can forget about creating a service file, and simply use the convenient @RewriteConfiguration annotation:

import org.ocpsoft.logging.Logger.Level;
import org.ocpsoft.rewrite.annotation.RewriteConfiguration;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.config.Log;
import org.ocpsoft.rewrite.servlet.config.HttpConfigurationProvider;

public class ApplicationConfigurationProvider extends HttpConfigurationProvider
   public Configuration getConfiguration(ServletContext context)
      return ConfigurationBuilder.begin()
         .perform(Log.message(Log.message(Level.INFO, "Rewrite is active.")))

   public int priority()
      return 0;

Issues resolved

Upgrade to 2.0.7.Final

Read the installation guide, or configuration manual.

September 11th, 2013 by Lincoln Baxter III

OpenShift Pro-tip – scaling: tail server logs on all gears of your app at once

UPDATE: I’ve filed an issue for this feature request. Until it is completed, you will need to use the command below.

So i’ve recently started working on making function better in a cluster, to support scaling out for large-scale use, and I’ve been working with as my PaaS hosting provider. I started to run into some problems where I wasn’t sure if the cluster was responding how I wanted to.

Being a good developer, my application has logging, so I know that if I can just watch the logs as they occur (or sift through them after the fact), I can probably figure out what is wrong, and fix it.

Unfortunately, running rhc tail will tail the gear running HA-proxy, but not the gears running the actual application, or any of the duplicate gears if HA-proxy is sharing a gear with an app! You’ll just get HA-proxy logs or maybe one of your application gears if you are lucky. What to do? I ran crying for help to the #openshift channel on IRC, where the openshift gurus quickly set me straight. This is all you need to do (for the ‘jbosseap’ cartridge, at least):

rhc ssh <app> --gears 'tail -f jbosseap/logs/*';

The rhc ssh command will execute a command on each of your gears simultaneously, and stream the output to your termainal, which is just an absolute perfect match for tail -f. Note, though, that you’ll need to pass in your application name, and the path to your logs on each gear (which should be fairly easy to find out if you ssh in and take a look around. The log location is even documented for your cartridge on the openshift site: ) I retrieved it using the same rhc ssh command:

sharktop:gems lb3$ rhc ssh redoculous --gears 'echo $OPENSHIFT_JBOSSEAP_LOG_DIR';
[gear1name jbosseap-6+haproxy-1.4] /var/lib/openshift/gear1name/jbosseap/logs/
[gear2name jbosseap-6+haproxy-1.4] /var/lib/openshift/gear2name/jbosseap/logs/
[gear3name jbosseap-6+haproxy-1.4] /var/lib/openshift/gear3name/jbosseap/logs/

So in this case, the log-dir relative to the home directory is just, jbosseap/logs. Good to go!

Now, I do think that this would be much better suited as rhc tail-all (DOES NOT CURRENTLY WORK), but I’ll just have to file an issue request, or maybe take a stab at the code here if nobody beats me to it:

I hope this helps. Good luck, openshifters!

September 9th, 2013 by Lincoln Baxter III

160+ Java EE 7 Samples and Quickstarts

If you are looking for examples on how to use some of the new or improved features of Java EE 7, I highly recommend checking out this git repository from Arun Gupta.

He has created over 160 samples that should work on every EE application server. If you find a bug, it’s likely a bug in the particular container you are using, but Arun is also welcoming feedback on these examples. So if there’s something you’d like to see that isn’t there, let him know. Additionally, if there’s something there that isn’t done right, speak up and he’ll fix it!

This is a great resource for the Java Enterprise Ecosystem 🙂


August 12th, 2013 by Lincoln Baxter III

Rewrite – Servlet Toolkit and Java URL-rewriting library featured on

Just in case you would like to see a little tutorial of using [[Rewrite]], our friends over at have written up a quick tutorial explaining how to use Rewrite and get started using CDN relocation to save server bandwidth. Be sure to check out the tutorial to see some very interesting use-cases that can be solved simply with Rewrite.

Rewrite is a URL-rewriting and Servlet application framework intended to simplify tasks such as inbound request redirection, url-mapping, and outbound response modification. It provides a simple configuration API and annotation framework that makes customizing your Servlet applications simple.