【问题标题】:Karaf executing commands in java consoleKaraf 在 Java 控制台中执行命令
【发布时间】:2016-05-20 01:03:09
【问题描述】:

以下代码在控制台中执行 karaf 命令。这在 karaf 版本 3.0.3 中运行良好。它在 4.0.0 或更高版本中失败

@Inject 
CommandProcessor commandProcessor;
private class dummyCallable implements Callable{
    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    final PrintStream printStream = new PrintStream(byteArrayOutputStream);
    final CommandSession commandSession = commandProcessor.createSession(System.in, printStream, System.err);
    String[] commands;
    dummyCallable( String[] commands){
        this.commands = commands;
    }
    public String call() {
        try {
            for(String command:commands) {
                System.err.println(command);
                commandSession.execute(command);
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
        return byteArrayOutputStream.toString();
    }
}
protected String executeCommands(final String ...commands) {
    String response;
    dummyCallable dd = new dummyCallable(commands);
    ExecutorService executor = Executors.newFixedThreadPool(1);
    FutureTask<String> futureTask2 = new FutureTask<String>(dd);
    try {
        executor.submit(futureTask2);
        response =  futureTask2.get();
    } catch (Exception e) {
        e.printStackTrace(System.err);
        response = "SHELL COMMAND TIMED OUT: ";
    }
return response;
}

任何人都可以向我提供一个适用于 karaf 4.0.0 的代码

【问题讨论】:

    标签: osgi apache-karaf karaf blueprint-osgi pax-exam


    【解决方案1】:

    在 Karaf 4 中,您应该向服务中注入 SessionFactory 并调用 sessionFactory.createSession(System.in, printStream, System.err)

    Karaf3和Karaf4的方法相同,类和包发生了变化:

    • CommandProcessor => SessionFactory
    • CommandSession => 会话

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      相关资源
      最近更新 更多