Простой способ общаться с процессом Java - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь найти самый простой способ запросить информацию у процесса Java. Из сценария оболочки мне нужно передать 2 строки в качестве аргументов и получить одну строку обратно. Полностью синхронный и блокирующий.

Какой самый простой способ подойти к нему? Http немного тяжел, но мог бы сделать, если ничего больше нет. Связь через трубу / Unix-сокет будет простой, но требует гораздо больше кода обслуживания (относительно времени ожидания, дополнительных собственных библиотек привязки и т. Д.). Собственное tcp-соединение может быть в порядке ... но это трудно сделать из скрипта bash.

Существуют ли другие простые и легкие опции, которые не требуют запуска другой JVM из скрипта?

Ответы [ 4 ]

3 голосов
/ 23 марта 2011

Вы можете использовать поддержку bash /dev/tcp для чтения и записи в сокеты TCP:

В одном терминале:

$ nc -l 8888
hello
why hello!
^D

В другом терминале:

$ exec 6<>/dev/tcp/localhost/8888
$ echo hello >&6
$ cat <&6
why hello!
$ 

Если вы пишете свою Java-программу для прослушивания на локальном сокете вместо nc -l, вы можете использовать TCP с небольшими хлопотами.

1 голос
/ 23 марта 2011

Я бы определенно использовал http. Если вы уже работаете на сервере приложений, это легко. Если нет, вы можете найти ответ здесь:

http://blogs.operationaldynamics.com/andrew/software/free-java/sun-secret-webserver.html

1 голос
/ 23 марта 2011

Вы отметили это в Linux. Если предполагается, что это работает только в Linux, вы можете создать пару именованных каналов с помощью mkfifo, иметь программный блок Java во время чтения из одного (или только одного потока в программе Java, если это необходимо), а затем отправлять команды, записывая к этому; Java-программа может отправить ответ на другой.

0 голосов
/ 23 марта 2011

Для простого общения, просто используйте файлы и dirwatcher - хромой, но эффективный. С HTTP-сервером я бы придерживался HTTP, иначе вы всегда можете попробовать JMX или написать собственное соединение с сокетом.

...