Я хотел бы иметь возможность @ Inject модели данных, поддерживающей RichFaces 4 ExtendedDataTable, но для ее работы требуется EntityManager.Конечно, запросы EntityManager должны знать класс, и я бы предпочел не передавать это в вызовы методов (в этом случае методы не вызываются моим кодом);в идеале это было бы в конструкторе.
Примерно так:
public class DataModel<T> {
@Inject private EntityManager em;
private Class<T> entityClass;
public DataModel(Class<T> entityClass) {
this.entityClass = entityClass;
}
//Sample method - this class will handle much more complex queries
public T findEntity(String key) {
return em.find(entityClass, key);
}
Возможно ли создать CDI @Producer, который можно использовать для внедрения этой DataModel в мои компоненты поддержки?Я думал о создании Qualifier, чтобы вы могли сделать что-то вроде
@Inject @JType(value = MyEntity.class) DataModel<MyEntity> dataModel;
Но это казалось неуклюжим и потребовало бы, чтобы мой @Producer вызвал new()
- что, я думаю, не позволило бы EntityManagerбыть введен в DataModel.Кроме того, я не уверен, как вы могли бы требовать, чтобы разработчик добавил квалификатор.
Или, возможно, есть лучший способ приблизиться к этому, и я что-то упускаю?