CamelはJBossやTomcat上のAPサーバでも動作可能です。APサーバ上にwarファイルとしてデプロイし、APサーバからは単なるアプリケーションとして認識されます。またルーティングはSpringDSLで記述します。

モデル動作に必要なものは以下になります。SpringはCamelにバンドルされている為、ダウンロードは不要です。

作成モデル

作成するモデルはスタンドアロン版と同様、ファイルから読み込み、拡張子を変更後出力フォルダにコピーするモデルを例にとります。

手順

Tomcatの設定

Tomcat7を例にとって説明します。他のバージョンのTomcatを使う場合は適宜読み替えてください。またTomcatはインストール済みで起動可能な状態であることが前提になります。Tomcatのインストールをまだしていない場合は他のサイトを参考にインストールを終えてください。

管理者権限の設定

$CATALINA_HOME/conf/tomcat-users.xmlに管理者権限を設定します。今回はID/PWDともadminとします。

  1. <tomcat-users>
  2. <role rolename="manager-gui"/>
  3. <user username="admin" password="admin" roles="manager-gui"/>
  4. </tomcat-users>

セキュリティマネージャ

開発環境でRMI通信等を使用する場合、tomcatのセキュリティマネージャを変更します。ここではセキュリティマネージャを無効にしますが、商用環境では適切な設定が必要です。

$CATALINA_HOME/conf/conf/catalina.policyを以下に変更

grant{
        permission java.security.AllPermission;
};

ライブラリの設定

  • ライブラリの配置

$CATALINA_HOME/lib配下にCamel動作に必要なライブラリを配置します。ここではCAMEL_LIBディレクトリ配下に以下のライブラリを置きます。これらははすべてCamelのlib配下にあります。

$CATALINA_HOME/lib/CAMEL_LIB/camel-core-2.9.0.jar
$CATALINA_HOME/lib/CAMEL_LIB/camel-spring-2.9.0.jar
$CATALINA_HOME/lib/CAMEL_LIB/commons-logging-1.1.1.jar
$CATALINA_HOME/lib/CAMEL_LIB/log4j-1.2.16.jar
$CATALINA_HOME/lib/CAMEL_LIB/slf4j-api-1.6.1.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-aop-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-asm-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-beans-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-context-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-core-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-expression-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/spring-web-3.0.6.RELEASE.jar
$CATALINA_HOME/lib/CAMEL_LIB/slf4j-log4j12-1.6.1.jar
$CATALINA_HOME/lib/CAMEL_LIB/slf4j-api-1.6.1.jar

  • ライブラリにクラスパスを通す

$CATALINA_HOME/conf/catalina.propertiesのcommon.loaderに上記ライブラリを読み込ませます。

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/lib/CAMEL_LIB/*.jar

今回のサンプル意外のプロトコル(WebサービスやFTP)を利用する場合、必要なライブラリを追加が必要になります。

Tomcat起動オプション

UNIXの場合、$CATALINA_HOME/bin/setenv.shに起動オプションを追加することでオプションが有効になります。setenv.shがない場合は作成してください。またWindowsの場合はsetenv.batが該当します。ここではUNIXでの設定例を紹介します。

$CATALINA_HOME/bin/setenv.shの内容

# For Eclipse Debug
JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=8000

# For logging
LOG4J_OPT="-Dlog4j.configuration=file:${CATALINA_HOME}/conf/log4j.properties"

# For RMI 
RMI_OPT="-Djava.rmi.server.codebase=file:${CATALINA_HOME}/lib/CAMEL_LIB/spring-core-3.0.6.RELEASE.jar"

CLASS_RESOLVER="-Dcamel.classResolver=org.apache.camel.impl.DefaultPackageScanClassResolver"

# For JMX
JMX_OPT="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7901 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

# Endorsed dir
ENDORSED="-Djava.endorsed.dirs=${CATALINA_HOME}/endorsed"

# Set Java and Catalina Options
JAVA_OPTS="${LOG4J_OPT} ${RMI_OPT} ${CLASS_RESOLVER} ${ENDORSED} -Xms128m -Xmx512m"
CATALINA_OPTS="${CATALINA_OPTS} ${JMX_OPT}"

*LOG4J_OPTに設定しているlog4j.propertiesは自環境にあわせて設定してください。
*JMX_OPTをJAVA_OPTSに含めると、Tomcat終了時にJMXが正常終了しないため、JAVA_OPTSには入れないでください。

今回log4j.propertiesは$CATALINA_HOME/conf配下に置いています。

log4j.propertiesのサンプル

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=[ログディレクトリ]/logs/mylog.log
log4j.appender.file.Append=true
log4j.appender.file.MaxFileSize=3MB
log4j.appender.file.MaxBackupIndex=20  
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p %c{1} - %m%n

log4j.rootLogger=DEBUG,  file

以上でTomcatの設定は終了になります。

Camelモデル作成

FileToFileモデルの作成

Tomcatの設定が終わったところで、Camelのモデルを作成します。作成するモデルはStandAlone版と同様、入力ディレクトリからファイルを読み込み、拡張子を変更して出力ディレクトリにコピーするモデルとします。

  • web.xml

作成するWebアプリケーションのWEB-INF/web.xmlに以下を記述します。

<?xml version="1.0" encoding="UTF-8"?>
...
  <welcome-file-list>
...
  </welcome-file-list>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

  • WEB-INF/applicationContext

ルーティングをWEB-INF/applicationContext.xmlとして記述します。

ここでは取得元ディレクトリをhome/knoppix/Desktop/inboxWeb、コピー先ディレクトリを/home/knoppix/Desktop/outboxWebとし、ポーリング間隔を5秒にしています。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://camel.apache.org/schema/spring
        http://camel.apache.org/schema/spring/camel-spring.xsd">

	<!-- Camel Contextのコンフィギュレーション -->
	<camelContext xmlns="http://camel.apache.org/schema/spring" autoStartup="false">
		<route id="FileToFileのルート">
			<from uri="file:/home/knoppix/Desktop/inboxWeb?noop=true&amp;delay=5000" />
			<to uri="file:/home/knoppix/Desktop/outboxWeb?fileName=${file:name.noext}.${date:now:yyyyMMdd-HH:mm:ss}" />
		</route>
	</camelContext>
</beans>

Tomcatへのデプロイ

作成したwarファイルをTomcatにデプロイします。

今回作成するモデルではJavaコードを記述しないため、これらをTomcatにデプロイ可能なwarファイルにします。Eclipseの場合、Export→Web→WAR file、保存先を$CATALINA_HOME/webappsを指定します。

正常にデプロイができると、log4jで指定したログファイル(ログディレクトリ/logs/mylog.log)にログが出力されます。

起動/停止

デプロイされたアプリケーションは起動済みですがCamel自体は起動していません。これはCamelの自動起動をOFF(autoStartup="false")にしているためです。Camelの起動/停止はJDK付属のjconsoleから行います。

  • jconsoleを起動

$JDK_HOME/bin/jconsoleを起動します。

起動後、Tomcatと接続します。

  • モデルの状態確認/開始と停止

warファイルとしてデプロイされたアプリケーション上のCamelの状態確認はMBeanのorg.apache.camel→routesの"属性"で確認できます。またCamelの起動/停止はrouteの"操作"にあるstartやstopオペレーションで実施します。つまりAPサーバ上でのCamelの起動/停止というのは「Camelのルーティングを開始する/停止する」といったやり方になります。

  • モデルの状態確認

Mbeanタブのorg.apache.camel → routes → PC名/camel-xx(数値) → (ルート名) → 属性 の"status"オペレーションで確認します。ルート名はapplicationContext.xmlにあるrouteタグのid名になります。

  • モデルの開始/停止

Mbeanタブのorg.apache.camel → routes → PC名/camel-xx(数値) → (ルート名) → 操作 の"start","stop"オペレーションでCamelモデルの開始/停止を行います。開始状態になると、jconsoleの状態(Status)の値が"Stopped"から"Started"に変わり、5秒間隔でポーリングしていることがログから分かります。