Я пишу приложение Java EE 6, которое использует Morphia для сохранения объектов MongoDB. Я хотел бы иметь возможность @Inject
моих классов DAO, где это необходимо, поэтому я создал класс Factory, который соответствующим образом создает DAO. Это выглядит примерно так:@ Вставить морфию DAO с CDI?
public class MyDAOFactory {
@Inject
private Datastore mongoDatastore = null;
/**
* Creates the DAO
*/
@Produces
@ApplicationScoped
public MyDAO createDAO() {
MyDAO dao = new MyDAO(
this.mongoDatastore);
return dao;
}
}
код компилируется нормально, но когда я запускаю мое приложение на JBoss EAP 6.1 он жалуется, потому что MyDAO
не имеет конструктора без аргументов. Я бы добавил один, но класс Morphia BasicDAO тоже не имеет такого, поэтому я не знаю, что так будет работать.
Есть ли способ для @Inject
экземпляра DAO в моем EJB, сервлете и т. Д.? Или мне нужно каждый раз создавать экземпляры вручную?
Я не знаю Морфию, но я * думаю * конструктор no-args необходим для CDI, чтобы иметь возможность проксировать компонент MyDAO. Я думаю, что это также может быть защищенный (или даже закрытый?) Конструктор, поэтому он не будет бесполезен для вашего публичного интерфейса. Если такой конструктор не может быть записан (например, потому что вы не можете предоставить соответствующие аргументы конструктору родительского класса ['BasicDAO']), то фабрика - это ваш единственный шанс, о котором я могу думать. –
Да, проблема с прокси-сервером - вот почему CDI жалуется на отсутствие конструктора no-arg. Тем не менее, я думаю, что реализация такого класса Factory, как это, обойдется. Разве это не так? Есть ли способ лучше? – Shadowman