私はOpenEJB(TomEE ++)を使ってEJB 3プロジェクトに取り組んでいます。どのInitialContextFactoryを使用しますか?
私は、名前がアノテーションで指定されたステートレスセッションBeanを持っています。
@Stateless(mappedName="SlideService", name="SlideService")
public class SlideService {
public Map<Category, List<SlideShow>> fetchSlideShowsByCategory() {
Application app = Application.getInstance();
return app.retreiveAllSlideShowsByCategory();
}
public SlideShow fetchSlideShow(long id) {
return null;
}
public List<SlideShow> fetchSlideShowsByTitle(String title) {
return null;
}
}
私は、このようなStrutsアクションクラスからセッションBeanを参照します。もし上記のコードで
Properties properties = new Properties();
properties.setProperty Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
InitialContext initialContext = new InitialContext(properties);
SlideService slideService = (SlideService)initialContext.lookup("SlideServiceLocalBean");
は私が明示的にBeanの注釈に「SlideService」を指定しているのに対し、Beanを見つけるために、名「SlideServiceLocalBean」を使用する必要があることに気づくでしょう。
しかし、テストケースでBeanの位置を確認しようとすると、別の名前文字列を使用する必要があります。
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
なぜルックアップ名に相違がありますか?
Strutsアクションクラスで正しい方法でInitialContextを取得していますか、または別のメカニズム/ contextFactoryを使用して初期コンテキストを取得する必要がありますか?
外部DIライブラリを使用せずに、アクションクラスにBeanを注入することはできますか?
私は最初のオプションを試してみてはどうでしょうか?パス[/スライド]のコンテキストでサーブレット[アクション]の例外 "SEVERE:Servlet.service()が例外をスローしました[javax.naming.NameNotFoundException:Nameスライドがこのコンテキストにバインドされていません] javax.naming.NameNotFoundException:名前のスライドがこのコンテキストにバインドされていません。 " – Parag
2番目のオプションが正常に機能しました。 – Parag