2012-12-05 3 views
0

Tomcat 6, Windows 7, 64bit에서 실행중인 서블릿에서 외부 Java 클래스 파일을 호출하려고합니다. 이 주제에는 이미 몇 가지 스레드가 있지만 아무도 실제로 나를 돕지 않습니다.웹 응용 프로그램에서 외부 Java 프로그램 실행

Fyi, 쉘에서 직접 실행하면 성공적으로 수행 할 수 있습니다.

임이

ProcessBuilder bp = new ProcessBuilder("cmd.exe","/C","java", "TheExternalClass", "ParameterA" }); 

나는 또한 생성 된 프로세스에서 errorStream와 inputStream을 소모 것 같은 명령을 실행하기 위해 ProcessBuilder를 사용하여.

서블릿에서 실행할 때 단순히 멈 춥니 다.

예를 들어 java 명령을 dir에 swith하면 예상대로 작동하지만 Tomcat이나 새로운 Java 프로세스를 시작하는 메모리 나 문제와 관련이 있다는 것을 알게되었습니다.

아무도 이것을 해결하는 방법에 대한 좋은 아이디어가 있습니까? 주제에

다른 어떤 게시물 : 많은 독서

http://www.javaworld.com/jw-12-2000/jw-1229-traps.html?page=1

call a java program from a webapp in tomcat server - the java program is out side of tomcat server

Tomcat fails to execute external java program

감사합니다.

답변

1

위의 코드가 작동하고 서블릿이 멈추지 않습니다. 내 생각 엔 p.waitFor() 또는 나중에 호출하거나 JSP 스레드에서 프로세스의 출력 스트림을 읽는 것입니다. 이 차단됩니다.

  • 를 사용하여 AJAX 백그라운드에서 JSP를 폴링하기 :

    차단하지 않으려면

    , 당신은 두 가지 옵션이 있습니다. JSP는 여전히 차단되지만 브라우저는 사용할 수 있습니다.
  • 출력 스트림을 읽는 백그라운드 스레드를 만듭니다. 이렇게하면 JSP가 즉시 반환되지만 서버에서 발생하는 상황을 알 수 없기 때문에 프로세스 결과를 브라우저로 보내는 방법을 찾아야합니다.
+0

답장을 보내 주셔서 감사합니다. 맞습니다. p.waitFor()를 호출하고 생성 된 프로세스에서 errorStream 및 inputStream을 읽는 중입니다. 그러나 실제로는 아무것도하지 않습니다. 그 스트림을 읽지 않고 p.waitFor()를 호출하면 작동하지 않을 것이라고 제안 하시겠습니까? –

+1

글쎄, JSP는 더 이상 블록하지 않을 것이지만 프로세스가 stdout/stderr에 4KB 이상을 쓴다면 프로세스가 끝나지 않을 수 있으며 오류가 발생하면 결코 알 수 없습니다. –

관련 문제