2014-01-04 3 views
0

Я изучаю Dependency Injection из EJB без использования CDI и возникли два вопроса. Я был бы признателен любой мог ответить на следующие вопросы:Зависимость от инъекции EJB

1) Можно ли вводить Сеансные (Stateful ВЗ Stateless) с @EJB аннотацию в Message Driven Beans?

2) Если один из двух сессионных бобов реализует один и тот же интерфейс, может ли им вводить аннотацию @EJB с указанием только имени интерфейса? Как можно сделать Container осведомленным о конкретном классе Bean, который должен быть введен? Например:

@Remote 
public interface RemoteInterface{} 

@Stateless 
public class BeanA implements RemoteInterfaceA{} 

@Stateless 
public class BeanB implements RemoteInterfaceA{} 

@Stateful 
public class StatefulBean{ 

@EJB 
RemoteInterface 

} 

Как можно указать, какой Bean должен быть введен без использования CDI и Qualifiers?

ответ

1

1) Конечно, вы обычно хотите вызывать методы из какого-либо сервиса EJB, когда вы получаете сообщение в MDB.

2) Возможно, вы можете назвать боб, а затем вводят его под этим именем, см мой пример

@Stateless(name="bean1") 
public class BeanA implements RemoteInterfaceA{} 

@Stateless(name="bean2") 
public class BeanB implements RemoteInterfaceA{} 

@Stateless 
public class Bean3 { 

    @EJB(beanName="bean1") 
    private RemoteInterfaceA bean; 
    //first bean should get injected here 
} 
+0

Я хотел бы добавить некоторые разъяснения. Хотя в MDB можно ввести компонент Stateful, это не имеет большого смысла. http://stackoverflow.com/questions/6527552/is-it-legal-to-inject-a-stateful-into-an-mdb –

+0

Конечно, это имеет смысл –

Смежные вопросы