279.8. 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>
279.8.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
を設定する必要があります。
279.8.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 に任意のオプションを設定します。 |
279.8.3. 例
Servlet Tomcat No Spring の例 を参照してください。
279.8.4. 作成した CamelContext へのアクセス
Camel 2.14/2.13.3/2.12.5 以降で利用可能
作成された CamelContext
は、キー CamelContext を持つ属性として ServletContext
に格納されます。以下に示すように、ServletContext
を取得できる場合は、CamelContext を取得できます。
ServletContext sc = ... CamelContext camel = (CamelContext) sc.getAttribute("CamelContext");
279.8.5. ルートの作成
web.xml ファイルで使用するルートを設定する必要があります。これはさまざまな方法で行うことができますが、すべてのパラメーターの前に routeBuilder を付ける必要があります。
279.8.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 という名前にすることもできます。
279.8.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>
279.8.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 では、名前空間を一般的な名前に変更できます。
279.8.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>
279.8.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 コードから実行されます。
279.8.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
を使用する場合、CamelContextLifecycle
は JndiRegistry
も使用する必要があります。同様に、サーブレットが org.apache.camel.component.servletlistener.SimpleCamelServletContextListener
の場合、CamelContextLifecycle
は SimpleRegistry
を使用する必要があります
279.8.6. 関連項目
- SERVLET
- サーブレット Tomcat の例
- サーブレット Tomcat No Spring の例