2008-10-10 13 views
24

Kontrola procesu Java jest bardzo zła - głównie z powodu niewystarczającej obsługi klas Java VM/JDK (np. Java.lang.Process).Dobra biblioteka sterowania procesem Java

Zastanawiam się, czy istnieją dobre biblioteki open source, które są niezawodne.

Wymagania byłoby:

  1. OSS
  2. Start/Stop przetwarza
  3. Zarządzaj standardowego wejścia i wyjścia
  4. wieloplatformowym (przynajmniej Linux, systemu Windows, Solaris, HP i IBM w z tego zamówienia)
  5. (opcjonalnie) do ponownego uruchomienia
  6. (pożądane) starsze
+0

Dodałbym pojęcie zależności procesu jako wymaganie: Proces/usługa powinna rozpoczynać się tylko wtedy, gdy rozpoczął się zależny proces/usługa. Jeśli proces/usługa zostanie zatrzymana, wszystkie jej zależne procesy/usługi zostają zatrzymane. –

+0

Jest teraz 2015. Zastanawiam się, czy coś się zmieniło, a teraz odpowiedź na to pytanie byłaby inna. – wilx

Odpowiedz

4

Java Service Wrapper może być tym, czego szukasz. Jest to platforma wieloplatformowa, może być używana do uruchamiania rzeczy jako usługa Windows, przechwytywania IO i ogólnie do zarządzania dowolną aplikacją java. Jest bardzo lekka i dobrze zaprojektowana. Atlassian używa go do pakowania swoich produktów (Jira, Bamboo itp.), Więc jest testowany w walce.

+2

do zarządzania usługami jest w porządku. ale nie jest to biblioteka, którą można wykorzystać do łatwej kontroli procesu. również, to nie całkiem OSS. –

+0

@Omry JSW ma bardzo dobrą bibliotekę sterowania procesem (http://wrapper.tanukisoftware.com/doc/english/child-exec.html), problemem jest to, że nie jest to OSS. – jnorris

13

Co powiecie na Apache Commons Exec?

+1

Dobra wskazówka - dobry tutorial też! http://commons.apache.org/exec/tutorial.html – grrussel

+1

Nie sądzę, że Apache Commons Exec zapewnia taki sam poziom abstrakcji, jak program Java Service Wrapper. Za wdrożenie menedżera procesów/demonów Commons Exec może być dobrym początkiem. –

3

Jeszcze jedno wymaganie ... wsparcie dla platformy dla zabicia osieroconego procesu. Z java.lang.Process (i Apache Commons Exec), nie ma sposobu, aby zabić procesy zewnętrzne, gdy aplikacja Java ma twardy postój (kill -9). Naprawdę chciałbym znaleźć bibliotekę, która lepiej poradzi sobie z problemem.

Jednym z rozwiązań może być przechowywanie PIDów w niektórych zasobach na dysku, a następnie zabijanie procesów po ponownym uruchomieniu aplikacji Java. Oczywiście byłoby to zależne od platformy, więc dobra biblioteka między platformami byłaby fantastyczna.