Ich arbeite an einem EJB 3 Projekt mit OpenEJB (TomEE ++).Welche InitialContextFactory soll ich verwenden?
Ich habe eine Stateless-Session-Bean, deren Name mit einer Anmerkung angegeben wurde.
@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;
}
}
Ich suche die Session-Bean aus meiner Struts Action-Klasse, wie folgt.
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");
In dem obigen Code werden Sie feststellen, dass ich den Namen ‚SlideServiceLocalBean‘ zu verwenden, haben die Bohne zu finden, während ich ‚SlideService‘ explizit angegeben haben, in der Annotation Bean.
Wenn ich jedoch versuche, die Bean in meinem Testfall zu finden, muss ich noch eine andere Namenszeichenfolge verwenden.
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
Warum gibt es eine Diskrepanz in Lookup-Namen?
Erhalte ich den InitialContext auf die richtige Weise in der Struts-Action-Klasse, oder sollte ich einen anderen Mechanismus/contextFactory verwenden, um den ursprünglichen Kontext zu erhalten?
Kann die Bean in die Action-Klasse injiziert werden, ohne eine externe DI-Bibliothek zu verwenden?
Nit sicher, warum, aber wenn ich die erste Option versuche, bekomme ich eine Ausnahme "SEVERE: Servlet.service() für Servlet [Aktion] im Zusammenhang mit Pfad [/ Folien] warf Ausnahme [javax.naming.NameNotFoundException: Name Dias ist in diesem Kontext nicht gebunden] mit der Ursache javax.naming.NameNotFoundException: Name Folien ist nicht in diesem Kontext gebunden " – Parag
Die zweite Option hat gut funktioniert. – Parag