Author: gnodet
Date: Fri Nov 29 16:56:18 2013
New Revision: 1546608

URL: http://svn.apache.org/r1546608
Log:
[KARAF-2594] The use of inheritable thread locals in ThreadIO can cause problems

Modified:
    karaf/trunk/pom.xml
    
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
    
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/Main.java
    
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
    
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleImpl.java
    
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
    
karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
    
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
    
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/impl/jline/ConsoleImplTest.java
    
karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
    karaf/trunk/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
    
karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
    
karaf/trunk/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml

Modified: karaf/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/pom.xml?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- karaf/trunk/pom.xml (original)
+++ karaf/trunk/pom.xml Fri Nov 29 16:56:18 2013
@@ -149,7 +149,7 @@
         <felix.configadmin.version>1.8.0</felix.configadmin.version>
         <felix.fileinstall.version>3.2.6</felix.fileinstall.version>
         <felix.framework.version>4.2.1</felix.framework.version>
-        <felix.gogo.version>0.10.0</felix.gogo.version>
+        <felix.gogo.version>0.11.0-SNAPSHOT</felix.gogo.version>
         <felix.plugin.version>2.4.0</felix.plugin.version>
         <felix.utils.version>1.4.0</felix.utils.version>
         <felix.webconsole.version>4.2.0</felix.webconsole.version>

Modified: 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
 (original)
+++ 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
 Fri Nov 29 16:56:18 2013
@@ -26,9 +26,10 @@ import javax.security.auth.Subject;
 import jline.Terminal;
 
 import org.apache.felix.service.command.CommandProcessor;
+import org.apache.felix.service.threadio.ThreadIO;
 
 public interface ConsoleFactory {
-    Console create(CommandProcessor processor, InputStream in, PrintStream 
out, PrintStream err, final Terminal term, String encoding, Runnable 
closeCallback);
-    Console createLocal(CommandProcessor processor, Terminal terminal, String 
encoding, Runnable closeCallback);
+    Console create(CommandProcessor processor, ThreadIO threadIO, InputStream 
in, PrintStream out, PrintStream err, final Terminal term, String encoding, 
Runnable closeCallback);
+    Console createLocal(CommandProcessor processor, ThreadIO threadIO, 
Terminal terminal, String encoding, Runnable closeCallback);
     void startConsoleAs(Console console, Subject subject, String threadName);
 }

Modified: 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/Main.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/Main.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/Main.java
 (original)
+++ 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/Main.java
 Fri Nov 29 16:56:18 2013
@@ -70,7 +70,7 @@ public class Main {
         InputStream in = unwrap(System.in);
         PrintStream out = wrap(unwrap(System.out));
         PrintStream err = wrap(unwrap(System.err));
-        run(commandProcessor, args, in, out, err);
+        run(commandProcessor, threadio, args, in, out, err);
 
         // TODO: do we need to stop the threadio that was started?
         // threadio.stop();
@@ -84,7 +84,7 @@ public class Main {
      * @param args
      * @throws Exception
      */
-    public void run(CommandSession parent, String args[]) throws Exception {
+    public void run(CommandSession parent, ThreadIO threadIO, String args[]) 
throws Exception {
 
         // TODO: find out what the down side of not using a real ThreadIO 
implementation is.
         CommandProcessorImpl commandProcessor = new CommandProcessorImpl(new 
ThreadIO() {
@@ -98,10 +98,10 @@ public class Main {
         InputStream in = parent.getKeyboard();
         PrintStream out = parent.getConsole();
         PrintStream err = parent.getConsole();
-        run(commandProcessor, args, in, out, err);
+        run(commandProcessor, threadIO, args, in, out, err);
     }
 
-    private void run(CommandProcessorImpl commandProcessor, String[] args, 
InputStream in, PrintStream out, PrintStream err) throws Exception {
+    private void run(CommandProcessorImpl commandProcessor, ThreadIO threadIO, 
String[] args, InputStream in, PrintStream out, PrintStream err) throws 
Exception {
         StringBuilder sb = new StringBuilder();
         String classpath = null;
         boolean batch = false;
@@ -155,10 +155,10 @@ public class Main {
 
         discoverCommands(commandProcessor, cl);
 
-        run(commandProcessor, sb.toString(), in, out, err);
+        run(commandProcessor, threadIO, sb.toString(), in, out, err);
     }
 
-    private void run(final CommandProcessorImpl commandProcessor, String 
command, final InputStream in, final PrintStream out, final PrintStream err) 
throws Exception {
+    private void run(final CommandProcessorImpl commandProcessor, ThreadIO 
threadIO, String command, final InputStream in, final PrintStream out, final 
PrintStream err) throws Exception {
 
         if (command.length() > 0) {
 
@@ -194,7 +194,7 @@ public class Main {
 
             final TerminalFactory terminalFactory = new TerminalFactory();
             final Terminal terminal = terminalFactory.getTerminal();
-            ConsoleImpl console = createConsole(commandProcessor, in, out, 
err, terminal);
+            ConsoleImpl console = createConsole(commandProcessor, threadIO, 
in, out, err, terminal);
             CommandSession session = console.getSession();
             session.put("USER", user);
             session.put("APPLICATION", application);
@@ -229,8 +229,8 @@ public class Main {
      * @return
      * @throws Exception
      */
-    protected ConsoleImpl createConsole(CommandProcessorImpl commandProcessor, 
InputStream in, PrintStream out, PrintStream err, Terminal terminal) throws 
Exception {
-        return new ConsoleImpl(commandProcessor, in, out, err, terminal, null, 
null, null);
+    protected ConsoleImpl createConsole(CommandProcessorImpl commandProcessor, 
ThreadIO threadIO, InputStream in, PrintStream out, PrintStream err, Terminal 
terminal) throws Exception {
+        return new ConsoleImpl(commandProcessor, threadIO, in, out, err, 
terminal, null, null, null);
     }
 
     /**

Modified: 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
 (original)
+++ 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
 Fri Nov 29 16:56:18 2013
@@ -32,6 +32,7 @@ import jline.Terminal;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.service.command.Function;
+import org.apache.felix.service.threadio.ThreadIO;
 import org.apache.karaf.jaas.boot.principal.UserPrincipal;
 import org.apache.karaf.shell.console.Console;
 import org.apache.karaf.shell.console.ConsoleFactory;
@@ -46,8 +47,9 @@ public class ConsoleFactoryService imple
     }
     
     @Override
-    public Console createLocal(CommandProcessor processor, final Terminal 
terminal, String encoding, Runnable closeCallback) {
-        return create(processor, 
+    public Console createLocal(CommandProcessor processor, ThreadIO threadIO, 
final Terminal terminal, String encoding, Runnable closeCallback) {
+        return create(processor,
+                threadIO,
                 StreamWrapUtil.reWrapIn(terminal, System.in), 
                 StreamWrapUtil.reWrap(System.out), 
                 StreamWrapUtil.reWrap(System.err), 
@@ -57,9 +59,9 @@ public class ConsoleFactoryService imple
     }
 
     @Override
-    public Console create(CommandProcessor processor, InputStream in, 
PrintStream out, PrintStream err, final Terminal terminal,
+    public Console create(CommandProcessor processor, ThreadIO threadIO, 
InputStream in, PrintStream out, PrintStream err, final Terminal terminal,
             String encoding, Runnable closeCallback) {
-        ConsoleImpl console = new ConsoleImpl(processor, in, out, err, 
terminal, encoding, closeCallback, bundleContext);
+        ConsoleImpl console = new ConsoleImpl(processor, threadIO, in, out, 
err, terminal, encoding, closeCallback, bundleContext);
         CommandSession session = console.getSession();
         session.put("APPLICATION", System.getProperty("karaf.name", "root"));
         session.put("#LINES", new Function() {

Modified: 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleImpl.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleImpl.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleImpl.java
 (original)
+++ 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleImpl.java
 Fri Nov 29 16:56:18 2013
@@ -43,6 +43,7 @@ import jline.console.history.PersistentH
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.service.command.Converter;
+import org.apache.felix.service.threadio.ThreadIO;
 import org.apache.karaf.shell.console.CloseShellException;
 import org.apache.karaf.shell.console.CommandSessionHolder;
 import org.apache.karaf.shell.console.Completer;
@@ -65,6 +66,7 @@ public class ConsoleImpl implements Cons
     private static final Logger LOGGER = 
LoggerFactory.getLogger(Console.class);
 
     protected CommandSession session;
+    protected ThreadIO threadIO;
     private ConsoleReader reader;
     private BlockingQueue<Integer> queue;
     private boolean interrupt;
@@ -81,6 +83,7 @@ public class ConsoleImpl implements Cons
     private final BundleContext bundleContext;
 
     public ConsoleImpl(CommandProcessor processor,
+                       ThreadIO threadIO,
                        InputStream in,
                        PrintStream out,
                        PrintStream err,
@@ -88,6 +91,7 @@ public class ConsoleImpl implements Cons
                        String encoding,
                        Runnable closeCallback,
                        BundleContext bc) {
+        this.threadIO = threadIO;
         this.in = in;
         this.out = out;
         this.err = err;
@@ -172,40 +176,45 @@ public class ConsoleImpl implements Cons
     }
 
     public void run() {
-        SecuredCommandProcessorImpl secCP = createSecuredCommandProcessor();
-        thread = Thread.currentThread();
-        CommandSessionHolder.setSession(session);
-        running = true;
-        pipe.start();
-        Properties brandingProps = Branding.loadBrandingProperties(terminal);
-        welcome(brandingProps);
-        setSessionProperties(brandingProps);
-        String scriptFileName = System.getProperty(SHELL_INIT_SCRIPT);
-        executeScript(scriptFileName);
-        while (running) {
-            try {
-                String command = readAndParseCommand();
-                if (command == null) {
+        try {
+            threadIO.setStreams(consoleInput, out, err);
+            SecuredCommandProcessorImpl secCP = 
createSecuredCommandProcessor();
+            thread = Thread.currentThread();
+            CommandSessionHolder.setSession(session);
+            running = true;
+            pipe.start();
+            Properties brandingProps = 
Branding.loadBrandingProperties(terminal);
+            welcome(brandingProps);
+            setSessionProperties(brandingProps);
+            String scriptFileName = System.getProperty(SHELL_INIT_SCRIPT);
+            executeScript(scriptFileName);
+            while (running) {
+                try {
+                    String command = readAndParseCommand();
+                    if (command == null) {
+                        break;
+                    }
+                    //session.getConsole().println("Executing: " + line);
+                    Object result = session.execute(command);
+                    if (result != null) {
+                        session.getConsole().println(session.format(result, 
Converter.INSPECT));
+                    }
+                } catch (InterruptedIOException e) {
+                    //System.err.println("^C");
+                    // TODO: interrupt current thread
+                } catch (InterruptedException e) {
+                    //interrupt current thread
+                } catch (CloseShellException e) {
                     break;
+                } catch (Throwable t) {
+                    ShellUtil.logException(session, t);
                 }
-                //session.getConsole().println("Executing: " + line);
-                Object result = session.execute(command);
-                if (result != null) {
-                    session.getConsole().println(session.format(result, 
Converter.INSPECT));
-                }
-            } catch (InterruptedIOException e) {
-                //System.err.println("^C");
-                // TODO: interrupt current thread
-            } catch (InterruptedException e) {
-                //interrupt current thread
-            } catch (CloseShellException e) {
-                break;
-            } catch (Throwable t) {
-                ShellUtil.logException(session, t);
             }
+            secCP.close();
+            close(true);
+        } finally {
+            threadIO.close();
         }
-        secCP.close();
-        close(true);
     }
 
     SecuredCommandProcessorImpl createSecuredCommandProcessor() {

Modified: 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
 (original)
+++ 
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
 Fri Nov 29 16:56:18 2013
@@ -25,6 +25,7 @@ import javax.security.auth.Subject;
 import jline.Terminal;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
+import org.apache.felix.service.threadio.ThreadIO;
 import org.apache.karaf.jaas.boot.principal.RolePrincipal;
 import org.apache.karaf.jaas.boot.principal.UserPrincipal;
 import org.apache.karaf.shell.console.Console;
@@ -45,6 +46,7 @@ public class LocalConsoleManager {
     private boolean start;
     private final int defaultStartLevel;
     private CommandProcessor commandProcessor;
+    private ThreadIO threadIO;
     private ServiceRegistration registration;
 
     public LocalConsoleManager(boolean start, 
@@ -52,13 +54,15 @@ public class LocalConsoleManager {
             BundleContext bundleContext, 
             TerminalFactory terminalFactory, 
             ConsoleFactory consoleFactory,
-            CommandProcessor commandProcessor) throws Exception {
+            CommandProcessor commandProcessor,
+            ThreadIO threadIO) throws Exception {
         this.start = start;
         this.defaultStartLevel = Integer.parseInt(defaultStartLevel);
         this.bundleContext = bundleContext;
         this.terminalFactory = terminalFactory;
         this.consoleFactory = consoleFactory;
         this.commandProcessor = commandProcessor;
+        this.threadIO = threadIO;
         start();
     }
 
@@ -93,7 +97,7 @@ public class LocalConsoleManager {
         } else {
             encoding = System.getProperty("input.encoding", 
Charset.defaultCharset().name());
         }
-        this.console = consoleFactory.createLocal(this.commandProcessor, 
terminal, encoding, callback);
+        this.console = consoleFactory.createLocal(this.commandProcessor, 
this.threadIO, terminal, encoding, callback);
 
         registration = bundleContext.registerService(CommandSession.class, 
console.getSession(), null);
 

Modified: 
karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
 (original)
+++ 
karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
 Fri Nov 29 16:56:18 2013
@@ -27,6 +27,7 @@
     </ext:property-placeholder>
 
     <reference id="commandProcessor" 
interface="org.apache.felix.service.command.CommandProcessor"/>
+    <reference id="threadIO" 
interface="org.apache.felix.service.threadio.ThreadIO" />
 
     <bean id="consoleFactoryService" 
class="org.apache.karaf.shell.console.impl.jline.ConsoleFactoryService">
         <argument ref="blueprintBundleContext"/>
@@ -41,6 +42,7 @@
         <argument ref="terminalFactory"/>
         <argument ref="consoleFactoryService"/>
         <argument ref="commandProcessor"/>
+        <argument ref="threadIO"/>
     </bean>
 
     <bean id="converters" 
class="org.apache.karaf.shell.console.impl.Converters">

Modified: 
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
 (original)
+++ 
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
 Fri Nov 29 16:56:18 2013
@@ -21,6 +21,7 @@ import java.io.PrintStream;
 
 import jline.Terminal;
 import org.apache.felix.gogo.runtime.CommandProcessorImpl;
+import org.apache.felix.service.threadio.ThreadIO;
 import org.apache.karaf.shell.console.impl.Main;
 import org.apache.karaf.shell.console.impl.jline.ConsoleImpl;
 
@@ -45,8 +46,8 @@ public class ExampleSubclassMain extends
     }
 
     @Override
-    protected ConsoleImpl createConsole(CommandProcessorImpl commandProcessor, 
InputStream in, PrintStream out, PrintStream err, Terminal terminal) throws 
Exception {
-        return new ConsoleImpl(commandProcessor, in, out, err, terminal, null, 
null, null) {
+    protected ConsoleImpl createConsole(CommandProcessorImpl commandProcessor, 
ThreadIO threadIO, InputStream in, PrintStream out, PrintStream err, Terminal 
terminal) throws Exception {
+        return new ConsoleImpl(commandProcessor, threadIO, in, out, err, 
terminal, null, null, null) {
 
             /**
              * If you don't overwrite, then karaf will use the welcome message 
found in the

Modified: 
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/impl/jline/ConsoleImplTest.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/impl/jline/ConsoleImplTest.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/impl/jline/ConsoleImplTest.java
 (original)
+++ 
karaf/trunk/shell/console/src/test/java/org/apache/karaf/shell/console/impl/jline/ConsoleImplTest.java
 Fri Nov 29 16:56:18 2013
@@ -31,6 +31,7 @@ import java.security.PrivilegedAction;
 import javax.security.auth.Subject;
 
 import org.apache.felix.gogo.api.CommandSessionListener;
+import org.apache.felix.gogo.runtime.threadio.ThreadIOImpl;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.service.command.Converter;
@@ -73,7 +74,7 @@ public class ConsoleImplTest {
         }).anyTimes();
         EasyMock.replay(bc);
 
-        final ConsoleImpl console = new ConsoleImpl(null, System.in, 
System.out, System.err, null, "UTF-8", null, bc);
+        final ConsoleImpl console = new ConsoleImpl(null, new ThreadIOImpl(), 
System.in, System.out, System.err, null, "UTF-8", null, bc);
         assertTrue(console.session instanceof DelegateSession);
 
         console.session.put("foo", "bar");

Modified: 
karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
 (original)
+++ 
karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
 Fri Nov 29 16:56:18 2013
@@ -34,6 +34,8 @@ import org.apache.felix.service.command.
 import org.apache.felix.service.command.CommandSession;
 import org.apache.karaf.shell.console.Console;
 import org.apache.karaf.shell.console.ConsoleFactory;
+import org.apache.felix.service.command.Function;
+import org.apache.felix.service.threadio.ThreadIO;
 import org.apache.sshd.common.Factory;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.Environment;
@@ -49,10 +51,12 @@ import org.osgi.service.blueprint.contai
 public class ShellFactoryImpl implements Factory<Command> {
     private CommandProcessor commandProcessor;
     private ConsoleFactory consoleFactory;
+    private ThreadIO threadIO;
 
-    public ShellFactoryImpl(CommandProcessor commandProcessor, ConsoleFactory 
consoleFactory) {
+    public ShellFactoryImpl(CommandProcessor commandProcessor, ConsoleFactory 
consoleFactory, ThreadIO threadIO) {
         this.commandProcessor = commandProcessor;
         this.consoleFactory = consoleFactory;
+        this.threadIO = threadIO;
     }
 
     public Command create() {
@@ -106,7 +110,7 @@ public class ShellFactoryImpl implements
                 if (encoding != null && encoding.indexOf('.') > 0) {
                     encoding = encoding.substring(encoding.indexOf('.') + 1);
                 }
-                Console console = consoleFactory.create(commandProcessor, in,
+                Console console = consoleFactory.create(commandProcessor, 
threadIO, in,
                         lfToCrLfPrintStream(out), lfToCrLfPrintStream(err), 
terminal, encoding, destroyCallback);
                 final CommandSession session = console.getSession();
                 for (Map.Entry<String, String> e : env.getEnv().entrySet()) {

Modified: 
karaf/trunk/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- karaf/trunk/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml 
(original)
+++ karaf/trunk/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml 
Fri Nov 29 16:56:18 2013
@@ -83,6 +83,7 @@
             <bean class="org.apache.karaf.shell.ssh.ShellFactoryImpl">
                <argument ref="commandProcessor"/>
                <argument ref="consoleFactory"/>
+                <argument ref="threadIO"/>
             </bean>
         </property>
         <property name="commandFactory">
@@ -138,4 +139,7 @@
     <reference id="commandProcessor" 
interface="org.apache.felix.service.command.CommandProcessor">
     </reference>
 
+    <reference id="threadIO" 
interface="org.apache.felix.service.threadio.ThreadIO">
+    </reference>
+
 </blueprint>

Modified: 
karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
 (original)
+++ 
karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
 Fri Nov 29 16:56:18 2013
@@ -39,6 +39,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.service.command.CommandProcessor;
+import org.apache.felix.service.threadio.ThreadIO;
 import org.apache.karaf.jaas.boot.principal.UserPrincipal;
 import org.apache.karaf.shell.console.Console;
 import org.apache.karaf.shell.console.ConsoleFactory;
@@ -62,6 +63,7 @@ public class GogoPlugin extends Abstract
     private BundleContext bundleContext;
     private CommandProcessor commandProcessor;
     private ConsoleFactory consoleFactory;
+    private ThreadIO threadIO;
 
     @Override
     protected boolean isHtmlRequest(HttpServletRequest request) {
@@ -80,6 +82,10 @@ public class GogoPlugin extends Abstract
         this.consoleFactory = consoleFactory;
     }
 
+    public void setThreadIO(ThreadIO threadIO) {
+        this.threadIO = threadIO;
+    }
+
     public void start() {
         super.activate(bundleContext);
         this.logger.info(LABEL + " plugin activated");
@@ -192,6 +198,7 @@ public class GogoPlugin extends Abstract
                 final Subject subject = new Subject();
                 subject.getPrincipals().add(new UserPrincipal("karaf"));
                 Console console = consoleFactory.create(commandProcessor,
+                        threadIO,
                         new PipedInputStream(in),
                         pipedOut,
                         pipedOut,

Modified: 
karaf/trunk/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml?rev=1546608&r1=1546607&r2=1546608&view=diff
==============================================================================
--- 
karaf/trunk/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
 (original)
+++ 
karaf/trunk/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
 Fri Nov 29 16:56:18 2013
@@ -21,9 +21,11 @@
 
     <reference id="commandProcessor" 
interface="org.apache.felix.service.command.CommandProcessor" />
        <reference id="consoleFactory" 
interface="org.apache.karaf.shell.console.ConsoleFactory"/>
+    <reference id="threadIO" 
interface="org.apache.felix.service.threadio.ThreadIO" />
 
     <bean id="gogoPlugin" class="org.apache.karaf.webconsole.gogo.GogoPlugin" 
init-method="start" destroy-method="stop">
         <property name="commandProcessor" ref="commandProcessor" />
+        <property name="threadIO" ref="threadIO" />
         <property name="bundleContext" ref="blueprintBundleContext" />
         <property name="consoleFactory" ref="consoleFactory"/>
     </bean>


Reply via email to