В настоящее время у нас есть проект, который состоит из нескольких приложений, а также базовой библиотеки.Оба приложения, а также базовая библиотека содержат EJB без сохранения состояния, и каждое приложение может вводить EJB, который наследуется от базовой библиотеки EJBand, поэтому реализует один и тот же интерфейс.
Краткий пример:
Inу нас есть базовая библиотека:
@Stateless
@Local( IUserService.class )
public UserServiceBean implements IUserService {
public void login(String user, String password) {...}
}
. В приложении нам нужно переопределить login(...)
, и поэтому мы имеем:
@Stateless
@Local( { ISpecificUserService.class, IUserService.class } )
public SpecificUserServiceBean extends UserServiceBean implements ISpecificUserService {
public void login(String user, String password) { ... } //override
}
Если у меня теперь есть другой EJB-компонент в приложении, которое нуждается вчтобы иметь ссылку на SpecificUserServiceBean
я бы сделал @EJB ISpecificUserService userService;
.
Однако, если в базовой библиотеке есть EJB, он будет содержать @EJB IUserService userService;
, и вот проблема:
Нам нужно получить конкретную службу в приложении, внедренную в базуБиблиотека EJB.Однако есть два EJB, зарегистрированных для одного и того же локального интерфейса, что означает, что контейнер может вернуть базовый EJB или конкретный EJB.
Вы можете сказать: «Не добавляйте jar базовой библиотеки в качестве модуля вapplication.xml ", но сейчас это невозможно, поскольку он содержит другие EJB-компоненты, которые необходимо развернуть.Мы могли бы переместить EJB-объекты для переопределения в другой jar-файл, но так как почти каждый EJB-компонент может быть переопределен, в зависимости от приложения, мы получили бы JAR-файл на EJB-компонент.
Таким образом, я хотел быисключить или удалить базовый EJB-компонент из контейнера внедрения зависимостей, если существует конкретное переопределение.Поскольку я знаю, что во время развертывания я мог бы также использовать файл конфигурации, чтобы указать контейнеру не загружать определенный класс EJB.
Я мог бы добавить службу, которая впоследствии изменяет контейнер, но это будет моим последним средством.
У вас есть идеи о том, что мы могли бы сделать?
Заранее спасибо.
Кстати, мы работаем над JBoss 4.2.3 с EJB 3.0.