A key feature of Waffle has always been its pluggable architecture. From the beginning we believed that the default behavior defined by the Waffle team might not be suitable for every situation. Therefor Waffle was built following an Interface driven approach. Practically all of Waffle's built-in functionality can easily be extended or replaced. This design made integrating JRuby support quite easy. The next 3 steps give a brief overview of how to integrate JRuby support into your Waffle based applications.
Step 1 - configure Waffle to be "Ruby Aware"
Waffle avoids XML like the plague but we still need to have a web.xml for our applications. This web.xml is where we can take advantage of Waffle's pluggability. The following three context-param nodes need to be added to your applications web.xml. This alerts Waffle that a few of its foundational components should be replaced with alternate implementations.
org.codehaus.waffle.context.ContextContainerFactory
org.codehaus.waffle.context.pico.RubyAwarePicoContextContainerFactory
org.codehaus.waffle.bind.DataBinder
org.codehaus.waffle.bind.RubyDataBinder
org.codehaus.waffle.controller.ControllerDefinitionFactory
org.codehaus.waffle.controller.RubyControllerDefinitionFactory
Step 2 - Your application's Registrar should extended AbstractRubyAwareRegistrar. This exposes a new registration method to use within your Registrar ... registerRubyScript(String key, String className). See the example below:
{
super(delegate);
}
@Override
{
registerRubyScript("foobar", "FooBar");
}
...
} {
In this example the Ruby class named 'FooBar' will be exposed as a Controller under the name 'foobar' (e.g. http://localhost:8080/jruby/foobar.waffle).
Step 3 - Write your Ruby Controller class. Notice in the following example that your class does not need to extend or include anything.
# This is the default action
"<h1>Hello World</h1>"
end
end
And that is all the steps required to integrate JRuby within your Waffle Applications. In my next post I will uncover details on how to access registered components from your Ruby based controllers as well as explain the built in conventions that make writing Ruby controllers so easy.
No comments:
Post a Comment