Initial commit of mishell. Mishell is a scripting environment and console for remote jmx management.
See README.txt for details.
git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@442641 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mishell/src/main/java/org/apache/felix/mishell/Activator.java b/mishell/src/main/java/org/apache/felix/mishell/Activator.java
new file mode 100644
index 0000000..a879a69
--- /dev/null
+++ b/mishell/src/main/java/org/apache/felix/mishell/Activator.java
@@ -0,0 +1,31 @@
+package org.apache.felix.mishell;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private Console console;
+
+ public void start(BundleContext context) throws Exception {
+
+ //NOTE: new javax.script.EngineManager() uses context class loader
+ //We've changed that to use EngineManager(ClassLoader loader)
+ //Alternatively, we could instantiate it in a separate thread with proper context class loader set.
+ console = new Console("javascript", null);
+ Thread t=new Thread(console);
+ //At least JRuby engine (maybe others too) uses context class loaders internally
+ //So this is to prevent problems with that: context cl=console class loader which in turn
+ //loads the manager and therefore engine factory
+ t.setContextClassLoader(this.getClass().getClassLoader());
+ t.setName("ConsoleThread");
+ t.start();
+
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ console.stop();
+
+ }
+
+}
diff --git a/mishell/src/main/java/org/apache/felix/mishell/Command.java b/mishell/src/main/java/org/apache/felix/mishell/Command.java
new file mode 100644
index 0000000..648428e
--- /dev/null
+++ b/mishell/src/main/java/org/apache/felix/mishell/Command.java
@@ -0,0 +1,9 @@
+package org.apache.felix.mishell;
+
+import java.io.PrintStream;
+
+public interface Command {
+ public void executeCommand(String cmd, PrintStream out) throws Exception;
+ public String getName();
+ public String getHelp();
+}
diff --git a/mishell/src/main/java/org/apache/felix/mishell/CommandNotFoundException.java b/mishell/src/main/java/org/apache/felix/mishell/CommandNotFoundException.java
new file mode 100644
index 0000000..9da9126
--- /dev/null
+++ b/mishell/src/main/java/org/apache/felix/mishell/CommandNotFoundException.java
@@ -0,0 +1,5 @@
+package org.apache.felix.mishell;
+
+public class CommandNotFoundException extends Exception {
+
+}
diff --git a/mishell/src/main/java/org/apache/felix/mishell/EngineNotFoundException.java b/mishell/src/main/java/org/apache/felix/mishell/EngineNotFoundException.java
new file mode 100644
index 0000000..3e8b05b
--- /dev/null
+++ b/mishell/src/main/java/org/apache/felix/mishell/EngineNotFoundException.java
@@ -0,0 +1,9 @@
+package org.apache.felix.mishell;
+
+public class EngineNotFoundException extends Exception {
+
+ public EngineNotFoundException(String language) {
+ super(language);
+ }
+
+}
diff --git a/mishell/src/main/java/org/apache/felix/mishell/JMoodProxyManager.java b/mishell/src/main/java/org/apache/felix/mishell/JMoodProxyManager.java
new file mode 100644
index 0000000..73a545f
--- /dev/null
+++ b/mishell/src/main/java/org/apache/felix/mishell/JMoodProxyManager.java
@@ -0,0 +1,27 @@
+package org.apache.felix.mishell;
+
+import java.util.List;
+
+import javax.management.MBeanServerConnection;
+
+import org.apache.felix.jmxintrospector.MBean;
+import org.apache.felix.jmxintrospector.MBeanProxyManager;
+
+public class JMoodProxyManager extends MBeanProxyManager {
+ public List<Object> getControllers(){
+ return findAll("type=controller");
+ }
+ public List<Object> getBundlesAt(Object controller){
+ MBeanServerConnection server=((MBean)controller).getMBeanServer();
+ return findAll("type=bundle", server);
+ }
+ public List<Object> getServicesAt(Object controller){
+ MBeanServerConnection server=((MBean)controller).getMBeanServer();
+ return findAll("type=service", server);
+ }
+ public List<Object> getPackagesAt(Object controller){
+ MBeanServerConnection server=((MBean)controller).getMBeanServer();
+ return findAll("type=package", server);
+ }
+
+}
diff --git a/mishell/src/main/resources/logging.properties b/mishell/src/main/resources/logging.properties
new file mode 100644
index 0000000..65f94dd
--- /dev/null
+++ b/mishell/src/main/resources/logging.properties
@@ -0,0 +1,54 @@
+############################################################
+# Default Logging Configuration File
+#
+# You can use a different file by specifying a filename
+# with the java.util.logging.config.file system property.
+# For example java -Djava.util.logging.config.file=myfile
+############################################################
+
+############################################################
+# Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler
+# classes. These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# By default we only configure a ConsoleHandler, which will only
+# show messages at the INFO and above levels.
+handlers= java.util.logging.ConsoleHandler
+
+# To also add the FileHandler, use the following line instead.
+#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+
+# Default global logging level.
+# This specifies which kinds of events are logged across
+# all loggers. For any given facility this global level
+# can be overriden by a facility specific level
+# Note that the ConsoleHandler also has a separate level
+# setting to limit messages printed to the console.
+.level= FINEST
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+# default file output is in user's home directory.
+java.util.logging.FileHandler.pattern = %h/java%u.log
+java.util.logging.FileHandler.limit = 50000
+java.util.logging.FileHandler.count = 1
+java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
+
+# Limit the message that are printed on the console to INFO and above.
+java.util.logging.ConsoleHandler.level = FINE
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages:
+com.xyz.foo.level = SEVERE