Я хочу запустить OSGi Framework на другом компьютере (основным способом).Поэтому я хотел знать, есть ли способ подключиться к консоли OSGi с другого компьютера и управлять пакетами?
Я подумал, что, возможно, использование java.net.Socket
поможет, и вот как я это реализовал.Я использовал 2 темы.один для обработки пользовательского потока ввода, а другой - для обработки ответа консоли OSGi.Это первый поток (обрабатывает поток ввода пользователя):
configMap.put("osgi.console", "6666");
Framework fwk = ff.newFramework(configMap);
try {
fwk.start();
} catch (BundleException e) {
e.printStackTrace();
}
//__________________________________________________________________//
try {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
Socket socket = new Socket(InetAddress.getByName("0.0.0.0"), 6666);
printlnInfo("Socket has been created: " + socket.getInetAddress() + ":" + socket.getPort());
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
ConsoleOutputReciever fr = new ConsoleOutputReciever();
new Thread(fr).start();
while (true) {
String userInput = "";
while ((userInput = stdIn.readLine()) != null) {
System.out.println("--> " + userInput);
out.write(userInput + "\n");
out.flush();
}
System.out.println("2");
}
} catch (Exception e1) {
e1.printStackTrace();
}
Это второй поток (обрабатывает ответ консоли OSGi):
public class ConsoleOutputReciever implements Runnable {
public Scanner in = null;
@Override
public void run() {
printlnInfo("ConsoleOutputReciever Started");
try {
Socket socket = new Socket(InetAddress.getByName("0.0.0.0"), 6666);
printlnInfo("Socket has been created: " + socket.getInetAddress() + ":" + socket.getPort());
String osgiResponse = "";
in = new Scanner(socket.getInputStream());
try {
while (true) {
in = new Scanner(socket.getInputStream());
while (in.hasNext()) {
System.out.println("-- READ LOOP");
osgiResponse = in.nextLine();
System.out.println("-- " + osgiResponse);
}
}
} catch (IllegalBlockingModeException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
, но я получаю только первый ответконсоль OSGi.как это:
- READ LOOP
-
- READ LOOP
ss
->ss
Есть какие-нибудь идеи по поводу проблемы или другого способа удаленного подключения к консоли OSGi?