2011-07-22 5 views
3

Я хотел бы иметь возможность вставлять модель данных, поддерживающую RichFaces 4 ExtendedDataTable, но для этого требуется, чтобы EntityManager выполнял свою работу. Конечно, запросы EntityManager должны знать класс, и я бы предпочел не передавать их в вызовы методов (в этом случае методы не вызывают мой код); в идеале это было бы в конструкторе.Метод создания CDI для модели данных

Что-то вроде этого:

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 в моих бэк-бобов? Я думал о создании Классификатора, так что вы можете сделать что-то вроде

@Inject @JType(value = MyEntity.class) DataModel<MyEntity> dataModel; 

Но это казалось неуклюжим, и также требую моего @Producer назвать new() - который я думаю, что не допущу EntityManager быть закачиваться в Модель данных. Кроме того, я не уверен, как вы должны требовать, чтобы квалификатор был добавлен разработчиком.

Или, может быть, есть лучший способ приблизиться к этому, и я что-то упустил?

+2

Я бы с инстинктом кишки. Над применением шаблонов проектирования и структур не является хорошим дизайном, они являются инструментами для общения. –

ответ

1

Я делаю это используя модуль seam-persistence от шва3. :

Производитель:

public class EntityManagerProducer { 

    @Produces 
    @ExtensionManaged 
    @ConversationScoped 
    @PersistenceUnit(unitName = "yourUnitName") 
    private EntityManagerFactory emf; 
} 

Затем вы можете @Inject диспетчер сущностей.

В противном случае, есть DeltaSpike проект, который представляется перспективным (никогда не использовал его еще нет)

+0

Благодарим за ответ! Прошел уже год, и я перешел к другим проектам, поэтому я не могу проверить, решит ли это проблему или нет, но я подозреваю, что так. – tdm