301.6. Camel JAR をアプリサーバーのブートクラスパスに配置する
camel-core
、camel-servlet
などの Camel JAR をアプリケーションサーバーのブートクラスパス (例: 通常 lib ディレクトリ) に配置する場合、サーブレットマッピングリストは、アプリケーションサーバーにデプロイされた複数の Camel アプリケーション間で共有されていることに注意してください。
Camel JAR をアプリケーションサーバーのブートクラスパスに配置することは、一般的にベストプラクティスではないことに注意してください。
したがって、このような状況では、各 Camel アプリケーションでカスタムの一意のサーブレット名を定義する 必要があります。たとえば、web.xml
で次のように定義します。
<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 アプリケーションごとに一意の サーブレット名
を使用することを 強くお勧めします。