OpenEJB を使用してステートレス セッション Bean をテストするテストがあります。ビルド管理にMavenを使用しています。このテストは、Jenkins から (コマンド ラインで) 完全に正常に動作しているように見えますが、Jenkins でジョブを追加した後は失敗します。
より具体的には、私のテストは JNDI で EJB をルックアップできず、次の例外が発生します。
javax.naming.NameNotFoundException: Name "global/slides/SlideService" not found.
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:198)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:152)
at org.apache.xbean.naming.context.ContextFlyweight.lookup(ContextFlyweight.java:55)
at com.diycomputerscience.slides.service.SlideServiceTest.setUp(SlideServiceTest.java:45)
at junit.framework.TestCase.runBare(TestCase.java:132)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
Jenkins でテストを実行すると、何らかの形で JNDI に影響するのでしょうか? Jenkins が Maven エンベダーを使用していることは知っていますが、Surefire プラグインはデフォルトでテストをフォークしており、Jenkins と同じ vm インスタンス内で実行されていない可能性があります。
フォアグラウンドでジェンキンスを実行しており(java -jar jenkins.war)、ログインしているのと同じユーザーで実行しているため、権限の問題はありません。また、Selenium とは異なり、テストで UI を操作する必要がないため、Window Manager を実行する必要もありません。
私が両方の環境で使用している Java と Maven のバージョンもまったく同じです。
ポインタはありますか?