Osgi Karaf在java控制台中执行命令

Osgi Karaf在java控制台中执行命令,osgi,apache-karaf,karaf,blueprint-osgi,pax-exam,Osgi,Apache Karaf,Karaf,Blueprint Osgi,Pax Exam,下面的代码在控制台中执行karaf命令。这在karaf 3.0.3版中运行良好。它在4.0.0或更高版本中失败 @Inject CommandProcessor commandProcessor; private class dummyCallable implements Callable{ final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final PrintS

下面的代码在控制台中执行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;
}
@Inject
命令处理器命令处理器;
私有类dummyCallable实现了Callable{
final ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream();
最终打印流打印流=新打印流(byteArrayOutputStream);
final CommandSession CommandSession=commandProcessor.createSession(System.in、printStream、System.err);
字符串[]命令;
dummyCallable(字符串[]命令){
this.commands=命令;
}
公共字符串调用(){
试一试{
用于(字符串命令:命令){
System.err.println(命令);
commandSession.execute(命令);
}
}捕获(例外e){
e、 printStackTrace(System.err);
}
返回byteArrayOutputStream.toString();
}
}
受保护的字符串执行命令(最终字符串…命令){
字符串响应;
dummyCallable dd=新的dummyCallable(命令);
ExecutorService executor=Executors.newFixedThreadPool(1);
FutureTask futureTask2=新的FutureTask(dd);
试一试{
执行人提交(未来任务2);
response=futureTask2.get();
}捕获(例外e){
e、 printStackTrace(System.err);
response=“SHELL命令超时:”;
}
返回响应;
}

有谁能给我提供一个能运行karaf 4.0.0的代码吗?在karaf 4中,您应该向您的服务中注入一个
SessionFactory
,并调用
SessionFactory.createSession(System.In,printStream,System.err)

Karaf3和Karaf4之间的方法相同,类和包已更改:

  • CommandProcessor=>SessionFactory
  • CommandSession=>Session

在Karaf 4中,您应该向您的服务中注入一个
SessionFactory
并调用
SessionFactory.createSession(System.In、printStream、System.err)

Karaf3和Karaf4之间的方法相同,类和包已更改:

  • CommandProcessor=>SessionFactory
  • CommandSession=>Session