2012-01-16 7 views
0

기본적으로 나는 JSP로 웹 페이지를 사용하고 있기 때문에 리눅스에서 (관리자) 다른 백그라운드 프로세스 (실행되는 모든 것이 될 수 있음)를 실행한다.자바 웹 서버에서 별도의 백그라운드 프로세스 실행

웹 자체와 다른 사용자로 실행해야합니다.

내가 갖고있는 옵션이 궁금합니다.

대단히 감사합니다.


내가 그냥 발견 "런타임 RT = Runtime.getRuntime(); 프로세스 PROC = rt.exec ("리눅스 명령 ");" 효과가있을 수 있습니다.

하지만 막 시작된 ​​(자식?) 프로세스가 자바 서블릿 프로세스에서 완전히 분리되는지 여부를 모르겠습니까? 다른 계정으로 실행할 수 있습니까?

+0

어떤 JEE 버전입니까? JEE 6에서는 EJB JEE 5를 사용하여 비동기 서비스를 생성하는 것이 매우 쉽습니다. 메시지 기반 Bean을 사용해 볼 수 있습니다. – Thomas

+0

Thx Thomas. 내가 이해할 수없는 것은 자바 세계에서 다른 계정으로 완전히 분리 된 원시 프로세스를 시작하는 방법이다. – GaryX

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html을 원할 수도 있습니다. 나는 JSP 페이지에서 많은 것을 할 수 있다고 생각지 않는다. 최소한 서블릿이 필요 하겠지만, 심지어 보안 제한이있을 것이다. – Viruzzo

답변

0

평생 실행중인 Java EE 웹 응용 프로그램에서 Runtime을 사용하는 것은 좋지 않은 아이디어입니다.

우선적으로 Runtime으로 생성 된 새로운 프로세스는 현재 실행중인 Java 환경과 동일한 수의 새로운 힙 메모리를 디자인에 따라 할당합니다. 이것은 기본적으로 64MB 또는 그 밖의 것을 사용하는 단순한 자바 애플리케이션 내에서 반드시 해가되는 것은 아니지만 일반적으로 기가 바이트 단위로 메모리를 할당하는 Java EE 웹 애플리케이션에서는 완전한 메모리 낭비가 될 것입니다.

둘째, Java EE 웹 응용 프로그램 내에서 프로세스/스레드를 생성하지 않으려는 것입니다. 프로세스/쓰레드가 멈추거나 영원히 실행되어 필요시 Java EE 웹 애플리케이션을 종료/재시작 할 수 없게 될 수 있다면 어떻게해야합니까? (먼저 모두 죽여야 할 필요가 있습니다)? 프로세스가 충돌하여 전체 Java EE 런타임을 제거하면 어떻게됩니까?

마지막으로 프로세스를 실행하는 사용자를 변경할 수 없습니다. 항상 실행중인 Java 런타임을 실행 한 사용자와 동일합니다.

  1. 전혀이 자바를 사용하지 마십시오 :

    당신은 기본적으로 2 가지 옵션이 있습니다. 예를 들어 Unix 기반 플랫폼의 Cron 및 Windows 기반 플랫폼의 Task Scheduler와 같은 플랫폼에서 제공 한 백그라운드 작업 관리자를 사용하여 작업을 수행하십시오.

  2. 100 % 자바로하십시오. 프로세스를 생성 할 필요없이 순수 Java를 사용하여 동일한 목표를 수행하십시오. 필요한 경우 ExecutorService API 또는 Quartz와 같은 타사 라이브러리를 사용하여 백그라운드 작업을 관리 할 수 ​​있습니다. 이러한 작업조차도 여전히 100 % 순수 Java 코드를 실행해야합니다.

관련 문제