Сосуществует с EJB 2.1 и EJB 3-бобами
EJB2 и EJB3 бины могут сосуществовать в одном корпоративном приложении (.ear), но не могут находиться в одном и том же файле ejb jar (модуле). Следовательно, компоненты EJB3 должны находиться в другой банке, чем компоненты EJB2.
Вызов EJB 3 из EJB 2.1
EJB3 bean не имеет домашнего интерфейса, в то время как EJB 2.1 требует этого. Чтобы компонент EJB3 мог получать доступ из EJB2, вам необходимо добавить локальный домашний интерфейс (или удаленный дом, если требуется удаленный вызов) к компоненту EJB3.
Создать домашний интерфейс:
public interface SystemTimeLocalHome extends EJBLocalHome {
SystemTimeLocal create() throws CreateException;
}
Добавить домашний интерфейс к EJB3 bean:
@Stateless
@Local(TimeServiceLocal.class)
@LocalHome(TimeServiceLocalHome.class)
public class TimeServiceBean implements TimeServiceLocal {
public long getCurrentTimeMillis() {
return System.currentTimeMillis();
}
}
Внутри бина EJB2 код для вызова бина EJB3 просто следует спецификации EJB2: ищет ссылку, вызывает домашний интерфейс для создания локального интерфейса, а затем вызывает метод на локальном интерфейсе.
Context ctx = new InitialContext();
TimeServiceLocalHome home = (TimeServiceLocalHome)ctx.lookup("java:comp/env/" + ejbRefName);
TimeServiceLocal timeService = home.create();
timeService.getCurrentTimeMillis();
Вызов EJB 2.1 из EJB 3
Внедрение зависимостей используется для внедрения ссылок на компоненты EJB 2.1 в компонент EJB3. Отличие от внедрения EJB3-компонента заключается в том, что это домашний интерфейс EJB2-объекта. Вызовите метод create()
на введенном домашнем интерфейсе EJB, чтобы создать экземпляр класса EJB.
@EJB BankingServiceHome bsHome;
BankingService bs = bsHome.create();
bs.getBalance(...);