Je cherche un moyen d’accéder au programme Java en cours d’exécution à partir de la ligne de commande. Le meilleur serait quelque chose qui fait ce qui suit:
Lancer l’application java:
bash$java -jar MyBundle.jar App
Accéder à l’application:
bash$test.sh param1 param2
Ainsi, test.sh
appelle App
depuis MyBundle.jar
et transmet les valeurs param1
et param2
.
Important: je cherche une approche très rapide. App
maintenez la connexion à la firebase database et il est très coûteux de démarrer App
chaque fois que j’ai besoin d’un access à la firebase database.
J’ai besoin d’une solution qui fonctionnera sous Ubuntu et Debian. Si cela fonctionnera sur Mac – génial.
Toute aide est appréciée!
Je pense que vous devez adopter une approche client-serveur. Votre application est le serveur, elle s’exécute en tant que processus d’arrière-plan et écoute les connexions sur certains ports. Et votre client fait des demandes au serveur et récupère la réponse.
Une manière simple et rapide de mettre en œuvre ceci en Java serait d’emballer votre application dans le conteneur de servlets Jetty . Vous pouvez le configurer pour renvoyer des réponses JSON, par exemple, faciles à traiter.
Il serait assez simple d’ouvrir un socket TCP / IP et d’utiliser netcat
du shell.
Code Java
final ServerSocket serverSocket = new ServerSocket(9050); while (true) { final Socket socket = serverSocket.accept(); java.util.logging.Logger.getAnonymousLogger().info("Accepted"); final BufferedReader br = new BufferedReader(new InputStreamReader( socket.getInputStream())); final Ssortingng input = br.readLine(); final BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); bw.write("You said [" + input + "]"); bw.flush(); socket.close(); }
Code shell
echo 'bla' | nc localhost 9050
Vous devez vous débrouiller avec les threads pour garder les sockets ouverts pour servir plusieurs requêtes.