2012-04-10 4 views
1

Я работаю над проектом EJB с контейнером OpenEJB (TomEE ++). Существует секция сеанса, чье имя JNDI-поиска нужно контролировать в коде.Управление именем сессионного компонента без состояния с 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; 
    } 
} 

Моя проблема заключается в том, что имя, к которому этот компонент становится связанным является «глобальным/Слайды/SlideService»

OpenEJB, похоже, использует имя приложения, хотя я специально не упомянул об этом.

Будет ли эта компромиссная переносимость? Возможно ли, что какой-либо другой контейнер не может использовать имя приложения?

Использует имя и сопоставленное имя атрибут правильный способ управления именем безфакторного компонента или есть другие (лучшие) способы?

ответ

2

Ваша проблема устранена в спецификациях EJB 3.1, любой сертифицированный Java EE 6 контейнер будет использовать несколько JNDI-имен для ваших компонентов. В своем коде вы можете контролировать последнюю часть названия, здесь документ о Portable Global JNDI Names

Здесь Вы можете найти простое руководство по 3 стандартным областям применения JNDI Portable JNDI names in EJB 3.1

Так что да, ваш код будет переносимым через любой сертифицированный Java EE 6 контейнер