私は、EJB3コンポーネントのユニットテストのために組み込みモードでOpenEJBを使用する可能性を探求し始めました。最初に私はopenejb.homeプロパティが私のOpenEJBのインストールディレクトリへのシステムプロパティとポイントとして設定されている以下の出力ユニットテストのための組み込みモードでの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
ようなエラーを得ました。
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、並びにログ出力で表示されます。
ありがとうございます。
私はそれが働いているか、そうそうです。 Openejb.configurationシステム・プロパティーだけを設定してopenejb.xml構成ファイルを指すように設定しました。ここで、Beanを探す場所を定義しています。テストは合格し、出力はレポートで与えられ、openejb.homeプロパティはプロジェクトのディレクトリを指します。 – kaskelotti
[OpenEJB site says](http://openejb.apache.org/embedding-openejb.html) _ OpenEJBローカルサーバーを使用している場合は、実際には埋め込みライブラリとしてOpenEJBを使用しています。 OpenEJBがインストールされているディレクトリでアプリケーションを実行したくないのですが、開発中の場所でアプリケーションを実行したいという場合は、アプリケーションが起動すると、OpenEJBも起動します。 OpenEJBにインストールされている場所を教えてください。これを行うには、 "openejb.home"システム変数を設定してください。_ 混乱しますか? – kaskelotti
リンクをありがとうございます、それは孤立したページであり、非常に古くなっています。現在、[このページ](http://openejb.apache.org/local-server.html)の内容が含まれています。 'openejb.configuration'や' openejb.home'設定を一切使わないで試してみてください。それはそれらと一緒に働くことができますが、あまり面白くないでしょう。アプリケーションを指すディレクトリを指している設定ファイルを指し示すことは少し脆弱です。テストでのファイルパスに問題がある可能性があります。 OpenEJBはクラスパスだけを使ってアプリケーションを見つけることができ、必要のないコンテナを作成します。 –