サンプルコード (FileToFileのCamelサンプル) | 2012-03-13 17:34 |
documents (OSC2015沖縄セミナー資料) | 2015-07-09 11:48 |
CamelはJBossやTomcat上のAPサーバでも動作可能です。APサーバ上にwarファイルとしてデプロイし、APサーバからは単なるアプリケーションとして認識されます。またルーティングはSpringDSLで記述します。
モデル動作に必要なものは以下になります。SpringはCamelにバンドルされている為、ダウンロードは不要です。
作成するモデルはスタンドアロン版と同様、ファイルから読み込み、拡張子を変更後出力フォルダにコピーするモデルを例にとります。
Tomcat7を例にとって説明します。他のバージョンのTomcatを使う場合は適宜読み替えてください。またTomcatはインストール済みで起動可能な状態であることが前提になります。Tomcatのインストールをまだしていない場合は他のサイトを参考にインストールを終えてください。
$CATALINA_HOME/conf/tomcat-users.xmlに管理者権限を設定します。今回はID/PWDともadminとします。
開発環境で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)を利用する場合、必要なライブラリを追加が必要になります。
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の設定は終了になります。
Tomcatの設定が終わったところで、Camelのモデルを作成します。作成するモデルはStandAlone版と同様、入力ディレクトリからファイルを読み込み、拡張子を変更して出力ディレクトリにコピーするモデルとします。
作成する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.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&delay=5000" /> <to uri="file:/home/knoppix/Desktop/outboxWeb?fileName=${file:name.noext}.${date:now:yyyyMMdd-HH:mm:ss}" /> </route> </camelContext> </beans>
作成した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から行います。
$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秒間隔でポーリングしていることがログから分かります。