301.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 に以下の依存関係を追加する必要があります。
301.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 を設定する必要があります。
301.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 を名前として使用します。 | |
| name |
| CamelContext の名前を設定します。 |
| messageHistory |
| Camel 2.12.2: メッセージ履歴を有効にするか無効にするか (デフォルトで有効)。 |
| streamCache |
| ストリームキャッシュを有効にするかどうか。 |
| trace |
| トレーサーを有効にするかどうか。 |
| delayer |
| Delay Interceptor の遅延値を設定します。 |
| handleFault |
| ハンドルフォルトを有効にするかどうか。 |
| errorHandlerRef |
| 使用するコンテキストスコープのエラーハンドラーを参照します。 |
| autoStartup |
| Camel の起動時にすべてのルートを開始するかどうか。 |
| useMDCLogging |
| MDC ロギングを使用するかどうか。 |
| useBreadcrumb |
| breadcrumb を使用するかどうか。 |
| managementNamePattern |
| JMX MBean のカスタム命名パターンを設定します。 |
| threadNamePattern |
| スレッドのカスタム命名パターンを設定するには。 |
| properties.XXX |
| |
| routebuilder.XXX | 使用するルートを設定します。詳細は、こちらを参照してください。 | |
| CamelContextLifecycle |
| |
| XXX | CamelContext に任意のオプションを設定します。 |
301.9.3. 例 リンクのコピーリンクがクリップボードにコピーされました!
サーブレット Tomcat No Spring の例 を参照してください。
301.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");
ServletContext sc = ...
CamelContext camel = (CamelContext) sc.getAttribute("CamelContext");
301.9.5. ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
web.xml ファイルで使用するルートを設定する必要があります。これはさまざまな方法で行うことができますが、すべてのパラメーターの前に routeBuilder を付ける必要があります。
301.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>
<context-param>
<param-name>routeBuilder-MyRoute</param-name>
<param-value>org.apache.camel.component.servletlistener.MyRoute</param-value>
</context-param>
以下に示すように、同じ param-value で複数のクラスを指定できます。
パラメーターの名前は、実行時には意味がありません。一意で、routeBuilder で始まる必要があります。上記の例では、routeBuilder-routes があります。しかし、routeBuilder.foo という名前にすることもできます。
301.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>
<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>
301.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>
<context-param>
<param-name>routeBuilder-MyRoute</param-name>
<param-value>classpath:routes/myRoutes.xml</param-value>
</context-param>
XML ファイルは次のとおりです。
routes/myRoutes.xml
XML ファイルでは、ルートタグは <routes> であり、名前空間 "http://camel.apache.org/schema/spring" を使用する必要があることに注意してください。この名前空間の名前には Spring が含まれていますが、これは歴史的な理由によるものです。Spring は当時の最初で唯一の XML DSL でした。実行時に Spring JAR は必要ありません。おそらく Camel 3.0 では、名前空間を一般的な名前に変更できます。
301.9.5.4. 適切なプレースホルダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスパスから myproperties.properties をロードするプロパティープレースホルダーを設定するための web.xml 設定のスニペットを次に示します。
301.9.5.5. JMX の設定 リンクのコピーリンクがクリップボードにコピーされました!
JMX の無効化など、JMX を設定するための web.xml 設定のスニペットを次に示します。
JNDI または Camel Registry のようなシンプルな ^^^^^^^^^^^^^^^^^^
このコンポーネントは、JNDI または Simple をレジストリーとして使用します。
これにより、JNDI で Bean やその他のサービスを検索したり、独自の Bean をバインドおよびバインド解除したりできます。
これは、org.apache.camel.component.servletlistener.CamelContextLifecycle を実装することにより、Java コードから実行されます。
301.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>
<context-param>
<param-name>CamelContextLifecycle</param-name>
<param-value>org.apache.camel.component.servletlistener.MyLifecycle</param-value>
</context-param>
myBean という名前を使用して HelloBean Bean を登録したので、以下に示すように、Camel ルートでこの Bean を参照できます。
重要: org.apache.camel.component.servletlistener.JndiCamelServletContextListener を使用する場合、CamelContextLifecycle は JndiRegistry も使用する必要があります。同様に、サーブレットが org.apache.camel.component.servletlistener.SimpleCamelServletContextListener の場合、CamelContextLifecycle は SimpleRegistry を使用する必要があります
301.9.6. 関連項目 リンクのコピーリンクがクリップボードにコピーされました!
- SERVLET
- サーブレット Tomcat の例
- サーブレット Tomcat No Spring の例