私は、EJB3コンポーネントの単体テストのために、組み込みモードでOpenEJBを使用する可能性を探求し始めました。最初は以下のようなエラーが出ました
Testsuite: HelloBeanTest
Tests run: 4, Failures: 0, Errors: 4, Time elapsed: 1,779 sec
------------- Standard Output ---------------
Apache OpenEJB 3.1.4 build: 20101112-03:32
http://openejb.apache.org/
------------- ---------------- ---------------
------------- Standard Error -----------------
log4j:WARN No appenders could be found for logger
(org.apache.openejb.resource.activemq.ActiveMQResourceAdapter).
log4j:WARN Please initialize the log4j system properly.
------------- ---------------- ---------------
Testcase: sum took 1,758 sec
Caused an ERROR
Name "HelloBeanLocal" not found.
javax.naming.NameNotFoundException: Name "HelloBeanLocal" not found.
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:193)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:150)
at
org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at HelloBeanTest.bootContainer(Unknown Source)
# ... output is the same for all the rest of the tests
openejb.homeプロパティはシステムプロパティとして設定され、OpenEJBインストールディレクトリを指します。
HelloBeanTest #bootContainer()はsetUpメソッドであり、JNDIルックアップで失敗します。下に示された。
@Before
public void bootContainer() throws Exception{
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
Context context = new InitialContext(props);
hello = (Hello) context.lookup("HelloBeanLocal");
}
このような問題に苦労した後、私はOpenEJBを非埋め込みモードで試し始め、そのインストールディレクトリからコンテナを起動し、コンポーネントをejb.jarとしてデプロイしました。デプロイメントは成功し、スタンドアロンのJavaクライアントの作成を開始しました。スタンドアロンのJavaクライアントはまだ完成していませんが、その間に埋め込みモードでのテストに戻りました。
驚いたことに、テストは突然合格し始めました。コンポーネントにいくつかの機能を追加し、それらをテストしました。すべてがうまくいきました。以下は、その実行の出力です。
Testsuite: HelloBeanTest
Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 2,281 sec
------------- Standard Output ---------------
Apache OpenEJB 3.1.4 build: 20101112-03:32
http://openejb.apache.org/
------------- ---------------- ---------------
------------- Standard Error -----------------
log4j:WARN No appenders could be found for logger
(org.apache.openejb.resource.activemq.ActiveMQResourceAdapter).
log4j:WARN Please initialize the log4j system properly.
------------- ---------------- ---------------
Testcase: sum took 2,263 sec
Testcase: hello took 0,001 sec
Testcase: sum2 took 0 sec
Testcase: avg took 0,001 sec
それが再び壊れるまで、私は喜んでコーディングとテストをしていました。/appsディレクトリからejb.jarを削除したことが原因のようです。したがって、OpenEJBはインストールディレクトリからJNDIルックアップを実行しているように見えますが、組み込みモードで実行している場合は、現在のディレクトリを使用して実際の実装を検索します。私はこの結論を出しました。apps/dirにデプロイされたejb.jarには、ローカルバージョンが持つすべてのメソッドが含まれていないためです。(javapでダブルチェックしました。)クラスのシグネチャだけが同じです。
この非常に長い紹介の後、それは質問の時間です。
- 誰かがこの行動について何か説明をすることができますか?
- テストの前にapps/dirにEJBをパッケージ化してデプロイするのは簡単な作業ですが、それでも正しい実装をテストしていることを確認できますか?
- これはすべて、OpenEJBインストールディレクトリを指すopenejb.homeプロパティと関係がありますか?
要約すると、OpenEJBのバージョンはApache OpenEJB 3.1.4ビルド:20101112-03:32であり、これはログ出力にも表示されます。
前もって感謝します。