2013-07-17 3 views
1

Моя проблема заключается в том, что я не могу вводить несколько экземпляров шаблонов из GenericManagerJPA <>. То есть, в этом коде как projectManager, так и userManager будут содержать тот же экземпляр GenericManagerJPA<User>. Я не знаю, почему ...CDI: вводят два генератора из одного шаблона

@Stateless 
public class UserFacadeJPA implements Serializable { 

@Inject private GenericManagerJPA<Project> projectManager; 
@Inject private GenericManagerJPA<User> userManager; 


@PostConstruct 
public void init() { 
    projectManager.setEntityClass(Project.class); 
    userManager.setEntityClass(User.class); 
} 
.... 

Из этого класса:

@Dependent 
@Stateless 
public class GenericManagerJPA<T> implements Serializable { 
... 

Как я могу вводить Differents экземпляры родового объекта с CDI? Можете ли вы мне помочь в этом вопросе? Большое спасибо.

PS: Я прочитал эту тему (https://community.jboss.org/blogs/scott.stark/2012/08/21/a-generic-producer-method), которая представляет, как ее создать (я думаю), но я предполагаю, что это немного сложно понять для меня. Поэтому, если у вас есть другое решение или вы можете объяснить мне принцип более четко ...

ответ

1

Что вы используете, это проблема EJB, а не проблема с CDI. Проблема исчезнет, ​​если вы удалите @Stateless из класса GenericManagerJPA. К сожалению, EJB слишком плохо справляется с дженериками.

+0

Чтобы уточнить немного дальше. Одна из проблем заключается в том, что вы создаете только одну созданную EJB-ссылку. CDI просто ищет эту ссылку и вводит ее в поле. С чистыми CDI-компонентами вы получите две разные точки впрыска (так как они не передают содержимое контейнера EJB, чтобы найти экземпляр). –

+0

ОК, я немного понимаю, что вы имеете в виду, но как я могу сохранить аннотацию Stateless, потому что здесь мой класс становится сдержанным, не так ли? И это не работает без аннотации '@ New' между' @ Inject' и private ... Это создает проблему производительности ... Есть ли хороший способ сделать это. Во всех случаях, спасибо много! – christophedebatz

+0

Проблема с EJB (а не со статусом без состояния, с учетом состояния, singleton) заключается в том, что они не имеют дело с дженериками, все это хорошо с точки зрения спецификации. Они используют интерфейсы для привязки. В CDI, чтобы использовать дженерики, вы должны быть зависимыми. –

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