ここで示した例を非常に厳密に反映していることに注意してください。
実際、この時点で永続化ユニットを使用してテストしていないため、私の状況はやや単純です。私のテスト プロジェクトは、単純な MDB とセッション Bean を提供します。MDB とセッション Bean の両方が通常どおりロードされ、インジェクションなしで (制約された方法で) 正常にテストできます。
@LocalClient
単体テストの注釈を使用して提案されたインジェクションは、既知のエラーで失敗しています:
javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See http://openejb.apache.org/3.0/local-client-injection.html
このページにアクセスすると、テスト ケース コンテキストのセットアップに追加のプロパティを追加する必要がある可能性があることが通知されます。したがって、次のようになります。
@Override public void setUp() throws Exception { initializeContext(); }
public void initializeContext() {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// the property i've added
p.put("openejb.tempclassloader.skip", "annotations");
try {
InitialContext initialContext = new InitialContext(p);
initialContext.bind("inject", this);
} catch (Throwable throwable) {
throwable.printStackTrace();
throw new RuntimeException(throwable);
}
}
しかし、それはまだ失敗しています。私はこのイディオムがとても好きで、自分のプロジェクトでうまく使えたらとてもワクワクします。
その他の注意事項:
- OpenEJB にクラスパスをスキャンするように指示するために Apache が提案するように、「空の」ejb-jar.xml (src/main/resources 内) と application-client.xml (src/test/resources 内) を提供しています [UPDATE: as結局のところ、私はこれを間違っていました。私のために働いた提案については、以下の私の回答を参照してください。]
- で注釈が付けられたテスト ケース
@LocalClient
は、OpenEJB エンジンによって実際に取得され、適切に処理されていると識別されません (たとえば、私の MDB はそうです)。
ヘルプやガイダンスをお寄せいただきありがとうございます。