問題発生

ここまでは非常に順調だったのだけど、最近問題が発生した。

今回の開発プロジェクトのターゲットになるアプリケーションサーバはJBoss5.1なので、テスト用の環境にコミュニティ版のJBoss5.1.0GAをインストールして、リモートでデプロイしようとしたところ、これがうまく動かない。
デプロイのためにはJenkinsにDeploy Plugin というプラグインを入れる必要があるのだけど、これがデプロイをしようとした際エラーになっているようだ。

ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception
org.codehaus.cargo.container.ContainerException: Failed to create deployer with implementation class org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer for the parameters (container [id = [jboss5x]], deployer type [remote]).
at
(中略)
Caused by: org.codehaus.cargo.util.CargoException: Cannot locate the JBoss deployer class! Make sure the jboss-deployer for your
JBoss version as well as all required JBoss JARs are in CARGO's classpath.
More information on: http://cargo.codehaus.org/JBoss+Remote+Deployer
at org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer.(JBoss5xRemoteDeployer.java:91)
... 26 more
Caused by: java.lang.ClassNotFoundException: org.codehaus.cargo.tools.jboss.JBossDeployer
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

Deploy Pluginの内部でCARGOという、J2EEコンテナを操作するためのラッパーを使用しているようなのだけど、そこで例外が発生しているようだ。
後ろのほうにClassNotFoundExceptionとあるので、何かクラスが足りてないのだろう、と思い、試行錯誤の結果以下のCARGO関連のJarをダウンロードし、プラグインのlibディレクトリに入れてみた。
(最新版でないのは、プラグインに入っていた他のCARGO関連のJarファイルとバージョンを合わせたため)

  • cargo-core-uberjar-1.0.6.jar
  • cargo-core-tools-jboss-deployer-5-1.0.6.jar

これによりエラーメッセージは変わったものの、今度は別のクラスが足りないとエラーを出すようになった。

ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception
org.codehaus.cargo.util.CargoException: Cannot deploy deployable org.codehaus.cargo.container.deployable.WAR@17f4804
at org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer.deploy(JBoss5xRemoteDeployer.java:116)
at org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer.redeploy(JBoss5xRemoteDeployer.java:154)
at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:64)
(中略)
Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.(InitialContext.java:197)
at org.codehaus.cargo.tools.jboss.JBossDeployer.getDeploymentManager(JBossDeployer.java:136)
at org.codehaus.cargo.tools.jboss.JBossDeployer.deploy(JBossDeployer.java:63)
at org.codehaus.cargo.container.jboss.JBoss5xRemoteDeployer.deploy(JBoss5xRemoteDeployer.java:112)
... 18 more
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)

今度はorg.jnp.interfaces.NamingContextFactoryというクラスがないようだ。
これはどうもJBoss関連のクラスらしいので、いろいろJarを入れてみたのだけど、いまのところ解決していない。

最初の例外のStack Traceに表示されていたURLの先を見ると、コンテナのクラスパスに以下のJarを置け、と書いてあるようなのでJboss5.1のclientやlibディレクトリにあるJarを片っ端から置いてはみたのだけど…。

 JBoss deployment manager JARs
 JBoss remoting client JARs

ちなみにCARGOのant taskでも同じエラーになるので、JenkinsというよりCARGO側で何か問題が起きているのだと思う。(もちろん、使い方含め)

今回のアプリで、コンテナに依存するような部分はほとんどないので、Tomcatでも全然問題はないのだけど…。