blob: 70f5abad229c880d1bf4084bb348ad31ad478845 [file] [log] [blame]
Shell support
=============
SpringSource dm Server 2.0 used jline for its console support. The vsh command was added to cover
Virgo specifics and this, combined with the sophisticated tab completion of jline, worked out
rather well.
When dm Server was contributed to form the Eclipse Virgo project, jline was one of the dependencies
which didn't make it through the stringent Eclipse IP review. So we had to find an alternative.
For the Virgo 2.0 release, we reverted to using the Equinox console and added vsh as a subcommand.
This wasn't great as there was no tab completion or even command history.
In Virgo 3.0, we integrated the Apache Felix Gogo shell from Equinox and again added vsh as a
subcommand. There is minimal tab completion, but still not as good as that of jline. There is
command history though.
Several bugs and enhancements were not address in 3.0, so in preparing to fix some of these,
the following notes were made. They are far from complete or definitive, but are better than nothing.
vsh command
===========
The implementation of the vsh command resides in the bundle org.eclipse.virgo.kernel.osgicommand.
CommandExecutor is a service published by the shell bundle which is used to execute commands
provided by the shell bundle.
OSGi command bundle
===================
This bundle provides class loading commands (clload, clhas, etc.) and registers a service of
type org.eclipse.osgi.framework.console.CommandProvider to make these commands available to
Equinox. The bundle also registers an mbean to provide class loading support via JMX.
The bundle also obtains the CommandExecutor service from the shell bundle and uses this to
register a corresponding CommandProvider implemented in the class OsgiKernelShellCommand.
Aan implmementation of CommandProvider has methods named "_<commandName>" (e.g. _vsh) which
take a CommandInterpreter parameter which is used to output the results of the command on
the shell.
Shell bundle
============
The shell bundle derives from the "old world" of jline and the OSGi command bundle integrates the old
world with the new shell support. The shell bundle is not jline specific, but it was designed for
use with jline and so it shows some bias towards jline capabilities.
The shell bundle uses the quasi-framework to explore the OSGi state in the user region in
conjunction with the Equinox region digraph which controls access to and from the user region.
Gogo support
============
See:
* http://felix.apache.org/site/apache-felix-gogo.html
* http://felix.apache.org/site/rfc-147-overview.html
Examples of command help annotations:
* http://svn.apache.org/viewvc/felix/trunk/gogo/command/src/main/java/org/apache/felix/gogo/command/OBR.java?view=markup