2

私は、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であり、これはログ出力にも表示されます。

前もって感謝します。

4

1 に答える 1

1

openejb.homeこれは、インストールディレクトリを指すように設定することと関係があります。

デプロイメントが存在する場所としてリストされconf/openejb.xmlている可能性が高いファイルがあります。apps/すべてのログ出力は、logs/簡単に読み取ることができるテストケースのSystem.outではなくdirに送られました。

OpenEJBエンベデッドを使用するために、構成ファイル、ディレクトリー、またはポートは必要ありません。プロジェクトのクラスパスにライブラリを含めるだけです。

私が最初に言うことは、openejb-examples-3.1.4.zipをチェックすることです。AntとMavenの両方のビルドスクリプトを使用してセットアップされたサンプルプロジェクトは、おそらく20個あります。OpenEJBライブラリがクラスパスにある限り、すべての例はどの環境でも機能します。これは、例の1つを使用してEclipseで単体テストを行うビデオです。simple-stateless最良の出発点としてこの例をお勧めします。

于 2011-09-14T10:24:56.050 に答える