Оптимизация дизайна при выполнении вызовов внешних процессов

Мне нужно из процесса Java для вызова внешних процессов / скриптов / команд.
Поскольку этих вызовов будет довольно много, и некоторые из них вернут результат запуска процесса / скрипта, а другие просто запустят его, мне было интересно, если:

  1. Существует стандартная конструкция, основанная на Java ProcessBuilderтак что я не разбросал в коде звонки ProcessBuilderпостоянно
  2. Какие оптимизации я могу сделать? Например, имеет ли смысл читать из файлов все команды cli, а не сохранять их, например, какfinal String в коде?

1 ответ

Решение

Ваш вопрос немного неопределенный, чтобы написать точный ответ, но у меня есть несколько предложений:

  • Оболочки предназначены для связывания команд (конвейер, ожидание и т. Д.) И небольшого количества логики. Оболочки интерпретируются и очень легко обновляются, но должны быть простыми. Они могут быть основной частью вашей системы.
  • Написать свой launch метод для запуска процесса и захвата stdout и stderr (в двух потоках), чтобы записать журнал вашего драйвера.
  • Разработайте XML-файл для декларативного указания:
    • пути процессов, их аргументы (статические)
    • параллелизм и синхронизация между заданиями
  • Напишите модель на Java, чтобы отразить модель процесса XML (решение может быть JAXB)
  • Добавьте к модели возможность ожидания набора заданий
  • Добавить модификаторы в модель для динамического изменения значения аргументов

Если я пытаюсь классифицировать вашу проблему, я думаю, в основном, на Потоке управления.

Для решения большой проблемы вы можете использовать параллелизм: запускать одновременно несколько процессов и ждать завершения всех из них: это фаза рандеву или соединение. Возможно, вы можете запустить удаленную команду для другого сетевого компьютера.

Хорошим примером того, как указать параллелизм в XML-файле, являются файлы сборки ANT:

<parallel>
  <wlrun ... >
  <sequential>
    <sleep seconds="30"/>
    <junit fork="true" forkmode="once" ... >
    <wlstop/>
  </sequential>
</parallel>

Могу ли я предложить вам использовать ANT для решения вашей проблемы без программирования?

Может помочь рисунок желаемого исполнения, с бумагой и ручкой...;-)

Несколько графических приложений могут помочь нарисовать логическую диаграмму потока управления. После этого опубликуйте его здесь, и вы получите более точный ответ, я надеюсь...

Другие вопросы по тегам