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