300.9. ServletListener Component

Camel 2.11 から利用可能

このコンポーネントは、Web アプリケーションで Camel アプリケーションをブートストラップするために使用されます。たとえば、事前に Camel をブートストラップする独自の方法を見つけるか、Spring などのサードパーティーフレームワークに依存する必要があります。

注記

サイドバー このコンポーネントは Servlet 2.x 以降をサポートしているため、古い Web コンテナーでも動作します。これがこのコンポーネントの目標です。ただし、Servlet 2.x では web.xml ファイルを設定として使用する必要があります。Servlet 3.x コンテナーの場合、@WebListener を使用してアノテーション駆動型設定を使用して Camel をブーストし、Camel をブーストする独自のクラスを実装できます。それでも、エンドユーザーが Camel を簡単に設定できるようにするにはどうしたらいいかという課題が残りますが、これは昔ながらの web.xml ファイルを使えば無料で手に入ります。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-servletlistener</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

300.9.1. 使用

抽象クラス org.apache.camel.component.servletlistener.CamelServletContextListener の次の実装のいずれかを選択する必要があります。

  • JndiRegistry を使用してレジストリーに JNDI を活用する JndiCamelServletContextListener
  • SimpleRegistry を使用して java.util.Map をレジストリーとして活用する SimpleCamelServletContextListener

これを使用するには、以下に示すように、WEB-INF/web.xml ファイルで org.apache.camel.component.servletlistener.CamelServletContextListener を設定する必要があります。

300.9.2. オプション

org.apache.camel.component.servletlistener.CamelServletContextListener は、web.xml ファイルで context-param として設定できる次のオプションをサポートします。

オプションタイプ説明

propertyPlaceholder.XXX

 

Camel でプロパティープレースホルダーを設定するには。オプションの前に propertyPlaceholder .を付ける必要があります。たとえば、場所を設定するには、propertyPlaceholder.location を名前として使用します。プロパティー コンポーネントからすべてのオプションを設定できます。

jmx.XXX

 

JMX を設定する場合。オプションの前に jmx.を付ける必要があります。たとえば、JMX を無効にするには、jmx.disabled を名前として使用します。org.apache.camel.spi.ManagementAgent からすべてのオプションを設定できます。JMX ページに記載されているオプションも同様です。

name

String

CamelContext の名前を設定します。

messageHistory

Boolean

Camel 2.12.2: メッセージ履歴を有効にするか無効にするか (デフォルトで有効)。

streamCache

Boolean

ストリームキャッシュを有効にするかどうか。

trace

Boolean

トレーサーを有効にするかどうか。

delayer

Long

Delay Interceptor の遅延値を設定します。

handleFault

Boolean

ハンドルフォルトを有効にするかどうか。

errorHandlerRef

String

使用するコンテキストスコープのエラーハンドラーを参照します。

autoStartup

Boolean

Camel の起動時にすべてのルートを開始するかどうか。

useMDCLogging

Boolean

MDC ロギングを使用するかどうか。

useBreadcrumb

Boolean

breadcrumb を使用するかどうか。

managementNamePattern

String

JMX MBean のカスタム命名パターンを設定します。

threadNamePattern

String

スレッドのカスタム命名パターンを設定するには。

properties.XXX

 

CamelContext.getProperties でカスタムプロパティーを設定します。これはめったに使用されません。

routebuilder.XXX

 

使用するルートを設定します。詳細は、こちらを参照してください。

CamelContextLifecycle

 

org.apache.camel.component.servletlistener.CamelContextLifecycle の実装の FQN クラス名を参照します。これにより、CamelContext が開始または停止される前後にカスタムコードを実行できます。詳細については、以下を参照してください。

XXX

 

CamelContext に任意のオプションを設定します。

300.9.3. 例

サーブレット Tomcat No Spring の例 を参照してください。

300.9.4. 作成した CamelContext へのアクセス

Camel 2.14/2.13.3/2.12.5 以降で利用可能

作成された CamelContext は、キー CamelContext を持つ属性として ServletContext に格納されます。以下に示すように、ServletContext を取得できる場合は、CamelContext を取得できます。

ServletContext sc = ...
CamelContext camel = (CamelContext) sc.getAttribute("CamelContext");

 

300.9.5. ルートの作成

web.xml ファイルで使用するルートを設定する必要があります。これはさまざまな方法で行うことができますが、すべてのパラメーターの前に routeBuilder を付ける必要があります。

300.9.5.1. RouteBuilder クラスの使用

以下に示すように、デフォルトでは、Camel は param-value が Camel RouteBuilder クラスの FQN クラス名であると想定します。

  <context-param>
    <param-name>routeBuilder-MyRoute</param-name>
    <param-value>org.apache.camel.component.servletlistener.MyRoute</param-value>
  </context-param>

以下に示すように、同じ param-value で複数のクラスを指定できます。

  <context-param>
    <param-name>routeBuilder-routes</param-name>
    <!-- we can define multiple values separated by comma -->
    <param-value>
      org.apache.camel.component.servletlistener.MyRoute,
      org.apache.camel.component.servletlistener.routes.BarRouteBuilder
    </param-value>
  </context-param>

パラメーターの名前は、実行時には意味がありません。一意で、routeBuilder で始まる必要があります。上記の例では、routeBuilder-routes があります。しかし、routeBuilder.foo という名前にすることもできます。

300.9.5.2. パッケージスキャンの使用

また、Camel にパッケージスキャンを使用するように指示することもできます。つまり、指定されたパッケージで RouteBuilder タイプのすべてのクラスを検索し、それらを Camel ルートとして自動的に追加します。これを行うには、以下に示すように、値の前に packagescan: を付ける必要があります。

  <context-param>
    <param-name>routeBuilder-MyRoute</param-name>
    <!-- define the routes using package scanning by prefixing with packagescan: -->
    <param-value>packagescan:org.apache.camel.component.servletlistener.routes</param-value>
  </context-param>

300.9.5.3. XML ファイルの使用

XML DSL を使用して Camel ルートを定義することもできますが、Spring または Blueprint を使用していないため、XML ファイルには Camel ルートのみを含めることができます。

web.xml では、以下に示すように、classpath、file、または httpURL から取得できる XML ファイルを参照します。

  <context-param>
    <param-name>routeBuilder-MyRoute</param-name>
    <param-value>classpath:routes/myRoutes.xml</param-value>
  </context-param>

XML ファイルは次のとおりです。

routes/myRoutes.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- the xmlns="http://camel.apache.org/schema/spring" is needed -->
<routes xmlns="http://camel.apache.org/schema/spring">

  <route id="foo">
    <from uri="direct:foo"/>
    <to uri="mock:foo"/>
  </route>

  <route id="bar">
    <from uri="direct:bar"/>
    <to uri="mock:bar"/>
  </route>

</routes>

XML ファイルでは、ルートタグは <routes> であり、名前空間 "http://camel.apache.org/schema/spring" を使用する必要があることに注意してください。この名前空間の名前には Spring が含まれていますが、これは歴史的な理由によるものです。Spring は当時の最初で唯一の XML DSL でした。実行時に Spring JAR は必要ありません。おそらく Camel 3.0 では、名前空間を一般的な名前に変更できます。

300.9.5.4. 適切なプレースホルダーの設定

クラスパスから myproperties.properties をロードするプロパティープレースホルダーを設定するための web.xml 設定のスニペットを次に示します。

  <!-- setup property placeholder to load properties from classpath -->
  <!-- we do this by setting the param-name with propertyPlaceholder. as prefix and then any options such as location, cache etc -->
  <context-param>
    <param-name>propertyPlaceholder.location</param-name>
    <param-value>classpath:myproperties.properties</param-value>
  </context-param>
  <!-- for example to disable cache on properties component, you do -->
  <context-param>
    <param-name>propertyPlaceholder.cache</param-name>
    <param-value>false</param-value>
  </context-param>

300.9.5.5. JMX の設定

JMX の無効化など、JMX を設定するための web.xml 設定のスニペットを次に示します。

  <!-- configure JMX by using names that is prefixed with jmx. -->
  <!-- in this example we disable JMX -->
  <context-param>
    <param-name>jmx.disabled</param-name>
    <param-value>true</param-value>
  </context-param>

JNDI または Camel Registry のようなシンプルな ^^^^^^^^^^^^^^^^^^

このコンポーネントは、JNDI または Simple をレジストリーとして使用します。
これにより、JNDI で Bean やその他のサービスを検索したり、独自の Bean をバインドおよびバインド解除したりできます。

これは、org.apache.camel.component.servletlistener.CamelContextLifecycle を実装することにより、Java コードから実行されます。

300.9.5.6. カスタム CamelContextLifecycle の使用

以下のコードでは、コールバック beforeStart および afterStop を使用して、カスタム Bean を Simple Registry に登録し、停止時にクリーンアップします。

次に、以下に示すように、パラメーター名 CamelContextLifecycle を使用して、このクラスを web.xml ファイルに登録する必要があります。値は、org.apache.camel.component.servletlistener.CamelContextLifecycle インターフェイスを実装するクラスを参照する FQN でなければなりません。

  <context-param>
    <param-name>CamelContextLifecycle</param-name>
    <param-value>org.apache.camel.component.servletlistener.MyLifecycle</param-value>
  </context-param>

myBean という名前を使用して HelloBean Bean を登録したので、以下に示すように、Camel ルートでこの Bean を参照できます。

public class MyBeanRoute extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("seda:foo").routeId("foo")
            .to("bean:myBean")
            .to("mock:foo");
    }
}

重要: org.apache.camel.component.servletlistener.JndiCamelServletContextListener を使用する場合、CamelContextLifecycleJndiRegistry も使用する必要があります。同様に、サーブレットが org.apache.camel.component.servletlistener.SimpleCamelServletContextListener の場合、CamelContextLifecycleSimpleRegistry を使用する必要があります

300.9.6. 関連項目