Accéder au programme Java en cours d’exécution à partir de la commande shell

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.