Mishell provides an interactive console
that executes scripts in different scripting languages.
Running mishell: 
JRE 6 is needed (because of javax.script). Mishell provides some built-in commands and interprets ruby, javascript or any other language that you
configure. You can also load scripts with the load command. Type 'help' for available commands. 
You can see an example of configuring Felix for launching both Jmood and mishell in the same OSGi platform in the FelixLauncher
class in the src/test/java dir. Remember to change the paths to match your installation. 

The initial object that is exported to the scripting engine is a JMoodProxyManager that extends 
the general-purpose MBeanProxyManager (from the jmxintrospector project) to simplify working with JMood. 
For example, when running on OSGi with JMood you can add the mbeans by typing:
$manager.addLocalServer(nil) #Ruby NOTE: This has been fixed in latest versions and should be fixed
or
manager.addLocalServer(null) //Javascript
And you issue commands like
$manager.objects.each{|mbean| puts mbean.objectName} #this lists the objectnames for all mbeans known to the shell




IMPORTANT: 
Dependencies that need to be manually installed:
1. It needs Java 6 to work (as it depends on javax.script API). 
Once that API is stable and released standalone, it should also work in Java 5.
2. It needs JMX introspector.
By default, the only available engine is the javascript bundled with Java 6. To add new ones, you need to
install the bundles. For example for ruby:
- It needs classes from com.sun.jruby.* and from org.jruby. The easiest way is to bundle both together
and export both packages in order to run ruby. 
	- The binding is available at https://scripting.dev.java.net/ and licensed
	under the BSD license. Download the jsr223-engines.[zip|tar.gz]
	and install the  jruby-engine.jar
	- JRuby is available at http://dist.codehaus.org/jruby/ under a tri-license: CPL/LGPL/GPL
	located at engines/jruby/build/jruby-engine.jar. JRuby implementation
4. If you want to use any other language, you should: 
	- Create and install a bundle (or more) that contain the necessary classes and export the packages. 
	

