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 애플리케이션에 고유한 서블릿 이름 을 사용하는 것이 좋습니다.