OpenEJB(TomEE ++)を使用してEJB3プロジェクトに取り組んでいます。
名前がアノテーションで指定されたステートレスセッション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アクションクラスからSessionBeanを検索します。
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を注入することは可能ですか?