2012-04-10 11 views
1

Ich arbeite an einem EJB-Projekt mit OpenEJB (TomEE ++) -Container. Es gibt eine Session-Bean, deren JNDI-Lookup-Name in Code gesteuert werden muss.Steuern des Namens einer Stateless-Session-Bean mit OpenEJB

@Stateless(mappedName="SlideService", name="SlideService") 
public class SlideService { 

    public Map<Category, List<SlideShow>> fetchSlideShowsBycategory() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public SlideShow fetchSlideShow(long id) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public List<SlideShow> fetchSlideShowsByTitle(String title) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

Mein Problem ist, dass der Name auf die sich diese Bean gebunden wird ist ‚global/slides/SlideService‘

OpenEJB scheint den Namen der Anwendung zu verwenden, auch wenn ich nicht ausdrücklich erwähnt.

Würde dies die Portabilität gefährden? Ist es möglich, dass ein anderer Container den Anwendungsnamen nicht verwendet?

Verwenden Sie die Attribute name und mapName, um den Namen einer statuslosen Bean zu steuern, oder gibt es andere (bessere) Möglichkeiten?

Antwort

2

Ihr Problem wurde in den EJB 3.1-Spezifikationen gelöst. Jeder Java EE 6-zertifizierte Container verwendet mehrere JNDI-Namen für Ihre Beans. In Ihrem Code können Sie den letzten Teil des Namens steuern, hier ein Dokument über Portable Global JNDI Names

Hier finden Sie eine einfache Anleitung zu den drei Standardumfänge JNDI finden Portable JNDI names in EJB 3.1

Also ja, wird Ihr Code tragbar sein über alle Java EE 6-zertifizierten Container