Java EE, внедрение одного EJB в другой EJB - PullRequest
3 голосов
/ 15 июня 2011

Я столкнулся с одной проблемой, которую не могу понять. Я хотел бы добавить один EJB в другой, как это:

@Stateless
public class MainEJB {

    @EJB
    private HelperEJB helper;

}

@Stateless
public class HelperEJB implements HelperInterface {

}

Как видите, HelperEJB предоставляется через представление без интерфейса (примечание: HelperInterface - это интерфейс из внешней библиотеки, а не интерфейс EJB). Это не работает, и я получу следующее исключение:

 javax.naming.NamingException: Lookup failed for 'org.mycompany.ejb.HelperEJB #org.mycompany.ejb.HelperEJB'

Однако, если HelperEJB не реализует какой-либо интерфейс:

@Stateless
public class HelperEJB {

}

Это будет работать. Это также будет работать, если у меня есть @Local интерфейс, стоящий между MainEJB и HelperEJB.

Почему это невозможно сделать с помощью интерфейса без интерфейса, как в моей первой попытке?

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Ваш первый пример должен работать, если ваше личное поле объявлено с использованием интерфейса, например:

@Stateless
public class MainEJB {
    @EJB
    private HelperInterface helper; // changed this
}

@Stateless
public class HelperEJB implements HelperInterface {
}

@Local
public interface HelperInterface {
}
2 голосов
/ 15 июня 2011

Представление без интерфейса создается только тогда, когда EJB не реализует какой-либо (бизнес) интерфейс.

Вы можете явно объявить, что хотите получить представление без интерфейса, используя аннотацию @ LocalBean .

...