2010-01-28 7 views

답변

0

Java EE 컨테이너에서 생성하는 프로세스가이 작업에 적합하지 않을 수 있습니다. 쉘 스크립트 인 경우 이식 할 수 없습니다. 트랜잭션 지원을 사용하려는 경우 Quartz Scheduler을 사용하여 스크립트를 작업으로 다시 쓸 수 있습니다. 이렇게하면 Java EE에서 이런 식으로 작업 할 가능성이 높아집니다.

편집 : 당신의 요구 사항은 주석에 추가로이

Process process = new ProcessBuilder(command).start(); 

자세한 내용 here

작동합니다 당신은 스크립트 및/또는 파이프 (없음 기본 실행 파일)를 사용하는 경우가 포함해야 함을 유의하시기 바랍니다 쉘을 사용하여 명령 (및 설정 파이프)을 호출하십시오.

+0

현재 우리의 응용 프로그램은 Eclipse 플러그인이며 많은 기능을 위해 많은 유닉스 스크립트를 사용합니다. 우리의 목표는 웹 기반 응용 프로그램으로 만들고 동일한 Unix 스크립트를 다시 사용하고자합니다. 제 생각에는 App 서버에서 이러한 유닉스 스크립트를 호출하는 것입니다. 이 작업을 수행하는 더 좋은 방법을 제안 할 수 있습니까? –

0

가장 큰 문제는 앱 서버 메모리 이미지가 크고 스크립트를 실행하여 메모리가 부족하여 포크가 실패 할 때 가장 큰 문제입니다. 포크 할 때 시스템은 실행 가능 이미지의 완전한 복사본을 만들어야합니다. 실제 사본을 만들지는 않지만 가상 복사본을 만들어야합니다. 따라서 4G의 실제 메모리 (예 : Java 힙, 전체 프로세스 크기)와 같은 대형 Java EE 힙이있는 경우 포크가 충분히 가질 수 있도록 여분의 "무료"4G의 실제 RAM 및/또는 스왑이 필요합니다 가상 공간이 발생합니다.

예, 즉시 sh 또는 gazillion 리소스를 빨아 들이지 않을 다른 명령을 exec 할 것입니다. 그러나 시스템은이를 알 수 없으므로 Java EE 컨테이너의 사본을 나노초 동안 한 번에 실행해야하는 것처럼 행동해야합니다.

포크에 대한 리소스가없는 경우 포크가 실패합니다.

공간이 부족한 경우 작은 미니 exec 실행기 데몬을 만드는 것이 좋습니다. 그런 다음 프로세스를 포크하는 Java EE 앱 대신 데몬에 대한 소켓을 열면 IT 부서에서 프로세스를 포크합니다. 분명히이 작은 데몬은 컨테이너보다 훨씬 적은 리소스를 소비하므로 예상치 못한 포크로 처리 할 수 ​​있습니다.

데몬은 소켓을 통해 실행하기 위해 명령 줄을 사용하여 간단하게 처리 할 수 ​​있으며 명령 코드 및 일부 인수가 포함 된 단순한 rpc (잠재적으로 안전하지 않거나 자연스럽지 만 ...)을 실행합니다. 프로젝트에 적합한 것이 무엇이든지. 스크립트 언어 (Python, Perl, Ruby) 인 Java로 작성할 수 있습니다. 그것을 할 수있는 많은 방법.

0

JMS 대기열을 청취하고 스크립트를 호출하는 작은 응용 프로그램을 작성할 수 있습니다. 그렇게하면 스크립트 실행이 앱 서버와 분리되므로 사양 제한이 발생하지 않습니다.