300.6. 앱 서버 부팅 클래스 경로에 Camel JAR 배치
애플리케이션 서버의 부팅 클래스 경로(예: lib 디렉토리에 있음)에 camel-core
,camel-servlet
등 Camel JAR을 배치한 경우(일반적으로 lib 디렉토리에 있음) 서블릿 매핑 목록이 이제 앱 서버에 배포된 여러 Camel 애플리케이션 간에 공유된다는 점에 유의하십시오.
Camel JAR을 애플리케이션 서버의 부트 클래스 경로에 배치하는 것은 일반적으로 모범적이지 않습니다!
따라서 이러한 상황에서는 web.xml
에서 다음과 같이 각 Camel 애플리케이션에 사용자 지정 및 고유한 서블릿 이름을 정의해야 합니다.
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
그리고 Camel 엔드포인트에는 서블릿 이름도 포함됩니다.
<route> <from uri="servlet://foo?servletName=MyServlet"/> ... </route>
Camel 2.11 이후 Camel에서 이 중복을 감지하여 애플리케이션을 시작하지 못합니다. 다음과 같이 서블릿 init-parameter ignoreDuplicateServletName을 true로 설정하여 이 중복을 무시하도록 제어할 수 있습니다.
<servlet> <servlet-name>CamelServlet</servlet-name> <display-name>Camel Http Transport Servlet</display-name> <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> <init-param> <param-name>ignoreDuplicateServletName</param-name> <param-value>true</param-value> </init-param> </servlet>
그러나 이러한 중복 중복 문제를 방지하려면 각 Camel 애플리케이션에 고유한 서블릿 이름
을 사용하는 것이 좋습니다.