2011-09-14 5 views
2

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

ありがとうございます。

答えて

1

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

conf/openejb.xmlファイルには、配備場所の場所としてapps/が表示されている可能性があります。すべてのログ出力はlogs/ dirにあり、簡単に読むことができるテストケースのSystem.outにはありませんでした。

OpenEJBを組み込むには、設定ファイル、ディレクトリ、ポートは必要ありません。プロジェクトのクラスパスにlibsをインクルードするだけです。

最初に言うことは、openejb-examples-3.1.4.zipをチェックアウトすることです。 AntとMavenの両方のビルドスクリプトを使ってセットアップされたサンプルプロジェクトは、おそらく2ダースあります。すべての例は、OpenEJBライブラリがクラスパスにある限り、どのような環境でも動作します。ここに例の1つをunit test in Eclipseに使用したビデオがあります。最良の出発点として、simple-statelessの例をお勧めします。

+0

私はそれが働いているか、そうそうです。 Openejb.configurationシステム・プロパティーだけを設定してopenejb.xml構成ファイルを指すように設定しました。ここで、Beanを探す場所を定義しています。テストは合格し、出力はレポートで与えられ、openejb.homeプロパティはプロジェクトのディレクトリを指します。 – kaskelotti

+0

[OpenEJB site says](http://openejb.apache.org/embedding-openejb.html) _ OpenEJBローカルサーバーを使用している場合は、実際には埋め込みライブラリとしてOpenEJBを使用しています。 OpenEJBがインストールされているディレクトリでアプリケーションを実行したくないのですが、開発中の場所でアプリケーションを実行したいという場合は、アプリケーションが起動すると、OpenEJBも起動します。 OpenEJBにインストールされている場所を教えてください。これを行うには、 "openejb.home"システム変数を設定してください。_ 混乱しますか? – kaskelotti

+1

リンクをありがとうございます、それは孤立したページであり、非常に古くなっています。現在、[このページ](http://openejb.apache.org/local-server.html)の内容が含まれています。 'openejb.configuration'や' openejb.home'設定を一切使わないで試してみてください。それはそれらと一緒に働くことができますが、あまり面白くないでしょう。アプリケーションを指すディレクトリを指している設定ファイルを指し示すことは少し脆弱です。テストでのファイルパスに問題がある可能性があります。 OpenEJBはクラスパスだけを使ってアプリケーションを見つけることができ、必要のないコンテナを作成します。 –

関連する問題