Я работаю над проектом EJB 3, используя OpenEJB (TomEE++).
У меня есть сессионный компонент без сохранения состояния, имя которого указано в аннотации.
@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;
}
}
Я просматриваю компонент Session из своего класса действий Struts, как здесь.
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");
В приведенном выше коде вы заметите, что я должен использовать имя «SlideServiceLocalBean», чтобы найти компонент, тогда как я явно указал «SlideService» в аннотации компонента.
Однако, когда я пытаюсь найти bean-компонент в своем тестовом примере, мне приходится использовать еще одну строку имени.
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
Почему существует несоответствие в именах поиска?
Правильно ли я получаю InitialContext в классе действий Struts или мне следует использовать другой механизм/contextFactory для получения начального контекста?
Можно ли внедрить bean-компонент в класс действий без использования внешней библиотеки DI?