2013-03-06 4 views
1

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

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

Пожалуйста, отправьте несколько примеров команд – Aubin

+0

@Aubin: примеры: перезапустите другие процессы с помощью '/etc/init.d',do' ifconfig', удалите оболочку, чтобы назвать наиболее важные – Cratylus

ответ

2

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

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

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

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

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

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

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

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

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

+0

+ 1. Это интересно, но некоторые части, которые я не соблюдаю. Что вы имеете в виду, когда ссылаетесь на задания? И что под «моделью»? Я имею в виду, что вы просто предлагаете читать из файла конфигурации XML (может быть, даже файл свойств) правильно? – Cratylus

+0

Спасибо. Да, Jobs - это {Process + meta information, как ее статус, его логическое имя и т. Д.}. Модель больше, чем «config-file», потому что это спецификация логики, и ваша программа будет интерпретатором этой спецификации. XML более структурирован, чем файл свойств. – Aubin

+0

И что вы подразумеваете под «параллелизмом и синхронизацией между заданиями»? Как это сделать? – Cratylus

Смежные вопросы