Мой вопрос: Какой подход можно взять/должен использовать для связи между двумя или несколькими экземплярами JVM, которые работают локально?
Некоторое описание проблемы:
Я разрабатываю систему для проекта, который требует, чтобы отдельные экземпляры JVM полностью изолировали определенные задачи друг от друга.
При запуске "родительский" JVM создаст "дочерние" JVM, которые он будет ожидать, и затем вернет ему результаты (в формате относительно простых POJO-классов или, возможно, структурированных XML-данных). Эти результаты не должны передаваться с использованием SysErr/SysOut/SysIn, поскольку ребенок уже может использовать их как часть своего запуска.
Если дочерняя JVM не отвечает результатами в течение определенного времени, родительская JVM должна иметь возможность сигнализировать ребенку о прекращении обработки или убить дочерний процесс. В противном случае дочерняя JVM должна нормально выйти в конце выполнения своей задачи.
Исследования пока:
Я знаю, что существует ряд технологий, которые могут быть полезны, например....
- Использование библиотеки Java RMI
- Использование сокетов для передачи объектов
- Использование библиотек распространения, таких как Cajo, Hessian
... но мне интересно узнать, какие подходы могут рассмотреть другие, прежде чем преследовать один из этих вариантов или любые другие.
Спасибо за любую помощь или совет по этому поводу!
редактирует:
Количество передаваемых данных - относительно небольшое, в основном это будет всего лишь несколько POJO, содержащих строки, которые будут представлять результат выполнения дочернего элемента. Если какое-либо решение будет неэффективным для больших объемов информации, это вряд ли будет проблемой в моей системе. Передаваемая сумма должна быть довольно статичной, и поэтому ее не нужно масштабировать.
Задержка передачи - не является серьезной проблемой в этом случае, хотя, если требуется какой-либо "опрос" результатов, это должно быть достаточно частым без значительных накладных расходов, поэтому я могу поддерживать отзывчивый GUI поверх этого в более позднее время (например, индикатор выполнения)