2012-07-18 4 views
1

새 파일, 수정 된 파일 또는 제거 된 파일에 대한 파일 경로를 수신하는 스레드를 만들어야합니다. Spring 3, Struts 2 및 Hibernate 3을 사용하는 웹 응용 프로그램을 사용하고 있습니다. 프로젝트를 실행하면 "Hello World"텍스트가 포함 된 index.jsp가로드됩니다. 스레드가되지 않기 때문에 Java 웹 응용 프로그램의 스레드

<action name="" method="runThread" class="TestThreadBean"> 
    <result>index.jsp</result> 
</action> 

그런 다음에 "Hello World"텍스트가 지금까지 나타나지 않습니다

문제는 내가 파일 경로를 청취 자바 Thread()를 작성하고 index.jsp가에 할당 할 때이다 끊임없이 멈 춥니 다 (어느 쪽이 맞습니까, 멈추지 않아야합니다). 이 스레드가 백그라운드에서 실행되고 나머지 웹 응용 프로그램을 방해하지 않아야합니다. 비록이 스레드를 위해 별도의 웹 응용 프로그램을 만들고 싶지 않습니다. 또한 new 세션 인스턴스가 생성 될 때마다 new 스레드 인스턴스를 만들지 않으려면 활성화 된 세션 인스턴스 수에 관계없이 스레드 인스턴스가 하나만 있어야합니다.

+0

당신은 실제로 톰캣의 스레드를 실행하는 데 특별한 아무것도 할 필요가 없습니다 – NiranjanBhat

+2

더 구체적으로하시기 바랍니다. 'new Thread' 또는'Executor'를 사용하여 평소대로 생성 할 수 있습니다. 이것은 J2EE 스펙과 호환되지 않지만 실제로 작동한다는 것입니다. 스펙 호환 방식으로 수행하는 것은 쉽지 않습니다. 특히 서블릿 스펙을 구현하지만 J2EE의 나머지 부분은 구현하지 않는 컨테이너에서 특히 그렇습니다. –

+0

정확히 "고객 측"이 의미하는 바는 무엇입니까? –

답변

7

기본적으로 사람들은 웹 응용 프로그램이나 엔터프라이즈 (EJB) 응용 프로그램과 같은 컨테이너 관리 응용 프로그램에서 자신의 스레드를 시작하지 않을 것을 제안합니다.

컨테이너 환경에서 스레드를 포함한 모든 리소스를 컨테이너에서 관리해야하기 때문입니다. 하지만 IMHO 당신이 함축하고, 우리 자신의 쓰레드와 리소스의 라이프 사이클을 알고 있다면, 트랜잭션 등으로이 쓰레드를 싸는 것과 같이, 표준 방법 (new Thread())을 사용하여 쓰레드를 만들 수 있습니다.하지만 그것은 제 의견입니다. .

결정하기 전에 'Container managed threads'를 한 번 사용해 보시기 바랍니다. 컨테이너 스레드 풀에 대한 핸들을 얻으려면 commonJ을 한 번 참조 할 수 있지만 표준이 아니거나 컨테이너 사양에 언급되지 않았기 때문에 모든 컨테이너에서 작동하지 않을 수 있습니다. 이것은 작동합니다 :

+0

@ThreaT 제공된 commonJ 링크에 하나가 있습니다. – Carlo

+0

@ThreaT 왜 서버 측 스레드가 클라이언트를 인식해야합니까? – Carlo

+0

어쩌면 활동 일정을 잡을 필요가있을 수 있으며, 원하는 작업이 아닌 것입니다. – Carlo

관련 문제