Я хотел бы иметь возможность @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, который можно использовать для внедрения этой модели данных в мои вспомогательные компоненты? Я подумал о создании квалификатора, чтобы вы могли сделать что-то вроде
@Inject @JType(value = MyEntity.class) DataModel<MyEntity> dataModel;
Но это казалось неуклюжим, и также потребовало бы, чтобы мой @Producer вызывал new()
, что, я думаю, не позволило бы внедрить EntityManager в DataModel. Также я не уверен, как вы потребуете, чтобы квалификатор был добавлен разработчиком.
Или, возможно, есть лучший способ приблизиться к этому, и я что-то упускаю?