Разрешено ли наследование для EJB3-компонентов без состояния?
Предположим, у меня есть бин без гражданства:
@Stateless(name = "fooBean")
@LocalBean
public class Foo {
...
}
Я хочу создать макет для тестирования (с CDI)
@Alternative @Specializes
public class FooMock extends Foo {
...
}
Я зарегистрировал макет в beans.xml
и когда я запускаю его с OpenEJB, я получаю следующее исключение:
...
Caused by: javax.naming.NameAlreadyBoundException:
openejb/Deployment/fooBean/com.company.Foo!LocalBeanHome
Мне кажется, что контейнер создает интерфейс для Foo
потому что @LocalBean
который сейчас реализуется FooMock
, тоже. OpenEJB пытается связать два класса с одинаковыми именами одного и того же сгенерированного интерфейса, что невозможно.
Конечно, если я закомментирую @Stateless
а также @LocalBean
в Foo
класс, работает нормально.
Любая идея или предложение, чтобы решить это?
1 ответ
Скорее сделайте что-то вроде:
@Local
public interface Foo {
...
}
@Stateless
public class FooBean implements Foo {
...
}
Тогда заставь себя издеваться.
@Alternative
@Specializes
public class FooMock implements Foo {
...
}
Однако я рекомендую вам взглянуть на Arquillian, он значительно упростит ваше тестирование без необходимости в @Alternative и специальных записях beans.xml для тестов.