Hi all,
as you might already know, we maintain two jetty releases at the
moment. The core jetty is hosted at eclipse and additionally we
maintain the "Jetty Hightide" release hosted at codehaus:
http://docs.codehaus.org/display/JETTY/Hightide+Documentation.
We'd like to get rid of hightide and all the maintenance work
caused by it. To do so, we evaluate a plugin/module concept for
jetty and wire up the remaining hightide features as plugins for
eclipse jetty. In a later phase it can be extended to contain
plugins not from hightide (e.g. cometd) and even plugins
contributed by the community. We'd like the community to take
part in the design decisions and discuss the setup with all
interested developers.
In the first phase we want to achieve the following milestones:
- discuss and write down a directory structure for plugins
- wire up and run a proof of concept with the hightide activemq
module
- tweak jetty-start to be able to load everything belonging to
the POC plugin which is installed manually at this phase
In the second phase:
- some kind of ModuleManager to activate/deactivate plugins and
install/remove plugins
- use aether to fetch plugins from maven central
In the third phase:
- create more plugins (cometd, etc.)
The first thing to think about is the directory structure for
plugins. Jesse McConnell and I had a discussion and the
following structure is what I've in mind after the chat with
Jesse:
(some standard directories are omitted for readability)
$JETTY_HOME
|-bin
|-contexts
|-contexts-available
|-etc
|-lib
|-plugins
|---activemq
|-----context
|-----etc
|-----lib
|-----webapps
|-resources
|-webapps
So basically everything belonging to a plugin is installed in a
single directory: $JETTY_HOME/plugins/[pluginname] and thus can
be installed/removed easily. It's also nicely separated from
everything else.
As you can see a plugin is supposed to be able to have config
files, additional jar files and even webapps (at least in a
later phase). First of all we need to tweak jetty-start to
pickup and enable installed plugins. Then we need to think about
something like a PluginManager responsible for
installing/removing plugins from maven central and a config file
for the plugin-manager "jetty-plugins.xml" enabling/disabling
plugins.
Plugins could be installed on the commandline using something
like:
java -jar start.jar -list-plugins
to retrieve a list of available plugins. And:
java -jar start.jar -install-plugin [pluginname]
to install a plugin.
I will now start with hightide activemq and fit it into the
directory structure as shown above. However this is all open for
discussion and if you've better ideas, like another
structure/approach more, please let us know. I will be able to
refactor at any time.
Cheers,
Thomas