2008-10-10 28 views
24

Kiểm soát quá trình Java nổi tiếng là xấu - chủ yếu là do sự hỗ trợ không đầy đủ của các lớp Java VM/JDK (ví dụ: java.lang.Process).Thư viện điều khiển quy trình Java tốt

Tôi tự hỏi, có bất kỳ thư viện nguồn mở tốt nào ở đó đáng tin cậy không.

Các yêu cầu sẽ là:

  1. OSS
  2. Start/Stop xử lý
  3. Quản lý STDIN và STDOUT
  4. nền tảng chéo (ít nhất là Linux, Windows, Solaris, HP, và IBM trong đơn đặt hàng đó)
  5. (tùy chọn) có thể khởi động lại
  6. (mong muốn) trưởng thành
+0

Tôi muốn thêm khái niệm phụ thuộc quy trình theo yêu cầu: Quy trình/dịch vụ chỉ nên bắt đầu nếu quá trình/dịch vụ phụ thuộc của nó bắt đầu. Nếu một quá trình/dịch vụ bị dừng lại, tất cả các quy trình/dịch vụ phụ thuộc của nó sẽ bị dừng lại. –

+0

Bây giờ là năm 2015. Tôi tự hỏi nếu có bất cứ điều gì đã thay đổi và câu trả lời cho câu hỏi này sẽ khác nhau. – wilx

Trả lời

4

Java Service Wrapper có thể là những gì bạn đang tìm kiếm. Nó là nền tảng đa nền tảng, có thể được sử dụng để khởi động mọi thứ như một dịch vụ Windows, nắm bắt IO và thường quản lý hoàn toàn mọi ứng dụng java. Đó là trọng lượng rất nhẹ và được thiết kế tốt. Atlassian sử dụng nó để bọc các sản phẩm của họ (Jira, Bamboo, v.v.), do đó, nó đã được thử nghiệm.

+2

để quản lý dịch vụ thì không sao. nhưng nó hầu như không phải là một thư viện có thể được sử dụng để kiểm soát quá trình dễ dàng. cũng có, nó không phải là khá OSS. –

+0

@Omry JSW có một thư viện điều khiển quá trình rất tốt (http://wrapper.tanukisoftware.com/doc/english/child-exec.html), vấn đề là nó không phải là OSS. – jnorris

13

Làm thế nào về Apache Commons Exec?

+1

Mẹo hay - cũng có hướng dẫn tốt! http://commons.apache.org/exec/tutorial.html – grrussel

+1

Tôi không nghĩ Apache Commons Exec cung cấp cùng một mức độ trừu tượng như Trình bao bọc dịch vụ Java. Để thực hiện một process/daemon manager Commons Exec có thể là một khởi đầu tốt. –

3

Một yêu cầu khác ... hỗ trợ nền tảng chéo cho việc giết chết một quy trình mồ côi. Với java.lang.Process (và Apache Commons Exec), không có cách nào để giết các tiến trình bên ngoài khi ứng dụng Java thực hiện một điểm dừng cứng (kill -9). Tôi thực sự muốn tìm một thư viện có thể xử lý vấn đề tốt hơn.

Một giải pháp có thể là lưu trữ PID trong một số tài nguyên trên đĩa và sau đó giết các quy trình khi khởi động lại ứng dụng Java. Tất nhiên, điều này sẽ phụ thuộc vào nền tảng, vì vậy tốt một thư viện nền tảng chéo sẽ là tuyệt vời.

Các vấn đề liên quan