2011-11-29 3 views
3

에서 브로커, 예외를 내장 I 종료시에 다음과 같은 에러, 내장 된 브로커 사용하여 얻을 :의 ActiveMQ는 종료 훅

Exception in thread "ActiveMQ ShutdownHook" java.lang.NoClassDefFoundError: org/apache/activemq/broker/BrokerService 

내가 아마도 뭔가를 잘못 가지고 있습니까?

http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html

(하단에 "스프링 2.0 사용"로 표시된 구성) : 나는 여기에 ActiveMQ를 페이지에 철자 설정을 사용했다. 메시지가 제대로 전달되고 있으므로이 오류가 무해한 지 확실하지 않습니다.

답변

4

ActiveMQ가 포함되어 있고 100 % 올바르게 구성되지 않은 경우에 발생할 수있는 오래된 문제입니다. 연결 한 설정에서 제외 된 유일한 것은 useShutdownHook="false"을 XML 설정의 <broker> 요소에 추가하는 것입니다. 다음은 간단한 예입니다.

<amq:broker useJmx="false" persistent="false" useShutdownHook="false"> 
... 
</amq:broker> 

이렇게하면 종료 문제가 발생하지 않으며이 문제가 발생하지 않습니다.

0

사실 나는 종료 훅을 사용 가능 상태로 두 겠지만 올바른 위치에 정의되어야합니다. 어떤 사람이 이유 때문에 그것을 구현했습니다.)

저는 어떤 유형의 배포인지 모르지만 웹 응용 프로그램을 가정하겠습니다. 이 경우 web.xml에 셧다운 훅을 ServletContextListener으로 등록해야합니다. 이 경우 웹 응용 프로그램을 종료하는 동안 트리거되고 클래스 패스에는 모든 ActiveMQ 클래스가 포함되며 예상대로 작동합니다.

웹 응용 프로그램의 경우 JVM에 종료 훅을 등록하는 것이 문제가 될 수 있습니다. 종료하는 동안 웹 컨테이너 (tomcat)가 먼저 웹 응용 프로그램을 중지하고 나면 JVM 종료 후크가 실행됩니다.

ActiveMQ는 사용자 지정 스레드를 등록하고 웹 응용 프로그램이 중지 된 후에도 계속 실행되지만 해당 웹 응용 프로그램의 클래스에 액세스 할 수 없으므로 (파괴되었으므로) NoClassDefFoundError이됩니다.

한 가지 더 : 아마도 셧다운 훅을 사용 중지 할 수 있습니다. Spring Bean으로 ActiveMQ를로드하고 web.xml (Spring Web Context)에서 Spring 컨텍스트를로드하는 경우 Spring은 자동으로 후크를 등록하고 AcrtiveMQ beans를 올바르게 닫습니다.