2

Websphere 環境を起動せずに EJB クラスを (ユニット) テストしようとしています。現在、私はOpen EJBを使用していますが、EJB 内で使用されている他の EJB の JNDI 名を解決する際にいくつかの問題があり、現在、テストからモック クラスを注入する方法がありません。

InitialContext の取得

final Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
properties.setProperty("log4j.category.OpenEJB.options ", "debug");
properties.setProperty("log4j.category.OpenEJB.startup ", "debug");
properties.setProperty("log4j.category.OpenEJB.startup.config ", "debug");
properties.setProperty("MyOwnDatasource.JdbcDriver ", "com.ibm.as400.access.AS400JDBCDriver");
properties.setProperty("MyOwnDataSource.JdbcUrl ", "jdbc:as400:MYHOSTNAME;database name=MYDATABASE;libraries=MYDEFAULTTABLE");
ic = new InitialContext(properties);

テスト中のクラス内にルックアップがありjava:comp/env/ejb/PrefixEjbNameLocalHome、その形式で JNDI 名を生成するように Open EJB を設定できません。

JNDI 名形式の追加プロパティ

次のようにフォーマットルールを設定してみました:

properties.setProperty("openejb.jndiname.format ", "comp/env/ejb/{interfaceClass}");

プロパティが使用されていませんか?

また、ロギング構成は使用されません。DEBUGまたはTRACEなどを設定しましたが、Open EJB からのINFOおよびWARNメッセージしか表示されません。log4j.category.OpenEJB.*

4

1 に答える 1

3

テストケースを台無しにしているのは「java:」の部分です。基本的に Context.INITIAL_CONTEXT_FACTORY と "java:" は相互に排他的です。InitialContext クラスは、「java:」または任意の「foo:」ルックアップを特別に理解しており、それらが名前の先頭にある場合、指定した INITIAL_CONTEXT_FACTORY を使用しませんJNDI のややイライラする部分です。

ログに出力された名前を正確に検索すると、機能します。たとえば、このログ メッセージは次のようになります。

INFO - Jndi(name=WidgetBeanRemote) --> Ejb(deployment-id=WidgetBean)

次にコードで:

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// set any other properties you want
Context context = new InitialContext(p);

Object o = context.lookup("WidgetBeanRemote");
于 2010-05-19T19:12:04.990 に答える