JBossAS上でJBossAOPを動作させる
これ、想像以上に苦労した。まずは本家サイトをと思い
JBoss AOP - JBoss Community
のドキュメントを参照。
でもそこには局所的な実現方法しか書いておらず、JBossAOPをstandaloneで動作させる方法すら分からず。。。
仕方がないのでWebで検索、半日かけてやっとこのページに辿り着いた。
Deploy AOP to jboss 5.1 |JBoss Developer
これを元にJBossAS上でJBossAOPを動作させることに成功した。
1)JBossAOPのダウンロード
JBoss AOP Downloads - JBoss Community
よりJBossAOPをダウンロードし、適当な場所に展開する。
※現時点の最新版は「2.1.8.GA」
2)JBossASの設定
「jboss-aop-2.1.8.GA/lib/pluggable-instrumentor.jar」を「${JBOSS_HOME}/bin」にコピーする。
(※本当は「${JBOSS_HOME}/server/
その後、run.conf(Win系はrun.conf.bat)に以下を追記する。
JAVA_OPTS="$JAVA_OPTS -javaagent:pluggable-instrumentor.jar"
最後に「${JBOSS_HOME}/server/
<property name="enableLoadtimeWeaving">true</property>
とする。
3)サンプルWARの作成&デプロイ
「jboss-aop-2.1.8.GA/docs/aspect-framework/examples/injboss」のbuild-jboss5.xmlを編集してサンプルWARを作成&デプロイする。
まずは${JBOSS_HOME}を設定する。
<property environment="env" /> <property name="jboss.dir" value="${env.JBOSS_HOME}"/>
次にサーバコンフィグを設定する。
<property name="jboss.server.config" value="default" />
最後にクラスパスをちょいと修正する。(必要があれば)
<path id="jboss.classpath"> <pathelement path="${jboss.dir}/common/lib/servlet-api.jar"/> <pathelement path="${jboss.dir}/lib/jboss-javaee.jar"/> </path>
あとはantを実行するだけ。
ant -f build-jboss5.xml deploy-basic-lt-war
実行後、以下の2つがデプロイされる。
そして
http://localhost:8080/aopexample/
にアクセス。
これで動作すると思ったが・・・「java.lang.ClassNotFoundException: org.jboss.injbossaop.lib.SimpleInterceptor」が発生。
ん?なぜだ???と思い再度
Deploy AOP to jboss 5.1 |JBoss Developer
を見る。
どうやらAdvice用のクラスが参照できていないらしい。
そのため以下の手順を実施。
4)Advice用クラスのデプロイ
antを実行したディレクトリ直下の「output/lib/aopexamplelib.jar」を「${JBOSS_HOME}/server/
これで完成。再度
http://localhost:8080/aopexample/
にアクセスし、表示されたTextboxに適当な文字を入力して「送信」を押下。
というログが出力されている。
「<<< Entering SimpleInterceptor」から「>>> Leaving SimpleInterceptor」がAOPで挿入された処理になる。
うん、うまくいった。