2014-09-12 5 views
1

Я пытаюсь научиться создавать диспетчер сущности, используя лучшие практики. Я создаю приложение JavaSE, используя maven, разделенный на отдельные проекты, чтобы я мог использовать разные проекты для создания приложений с различными возможностями.JPA EntityManager Construction

До сих пор я создал свои объекты и протестировал их, используя hibernate.cfg.xml.

Теперь я создал мой persistence.xml, и я пытаюсь понять, как подключить мой EntityManagerFactory к EntityManager и наилучшему образу использовать это с моим испытанием Entities.

Из того, что я прочитал, мне нужен слой Service и слой ServiceImpl. Мой вопрос больше связан с конфигурацией. В настоящее время у меня есть проект com.myapp.entities. Я рассматриваю возможность создания проекта com.myapp.service и com.myapp.serviceimpl. Если я правильно понял, то установление EnitityManagerFactory и EntityManager должно идти в com.myapp.serviceimpl, но как я их вставляю для работы с моими сущностями и как лучше всего создать EntityManager?

Также, в каком проекте идет мой persistence.xml?

+0

Я расширил свой вопрос здесь в другом вопросе. Ссылка здесь для всех, кто заинтересован в следующем. [Использование @PersistenceContext и EntityManager для нескольких схем] (http://stackoverflow.com/questions/25843650/using-persistencecontext-and-entitymanager-for-several-schemas) –

ответ

0

В настоящее время у меня есть проект com.myapp.entities. Я рассматриваю создание проекта com.myapp.service и com.myapp.serviceimpl

Я не думаю, что вы хотите создать разные проекты но различные пакеты в том же проекте вместо этого.

Сущности, реализация услуг и услуг имеет смысл, если они согласованы. Поэтому, если вы разделите их на несколько проектов, тогда ваш код будет очень сложным и даже развернуть ваши приложения, основанные на этом модуле сохранения JPA, также будет очень сложно, потому что у вас будет несколько зависимостей. Не говоря уже о ремонтопригодности, когда ваши приложения работают в производственной среде.

Также помните, что JPA (настойчивость, фактически) является нижним слоем в вашем дизайне приложения. Если вы хотите создавать приложения с различными возможностями, но на основе одного и того же фона персистентности, то эти возможности должны располагаться на верхних уровнях бизнес-логики, а не на уровне сохранения.

Также, в каком проекте идет мой persistence.xml?

Как я уже сказал, на самом деле у вас должен быть один проект вместо нескольких. Но, как правило, persistence.xml должен присутствовать в том же проекте, где находятся ваши объекты.

Я пытаюсь понять, как подключить мой EntityManagerFactory к на и лучший способ EntityManager использовать это с моими тестируемых лиц.

Так как вы говорите, что вы работаете над приложением Java SE, то вы должны позаботиться о жизненном цикле как EntityManagerFactory и EntityManager;

Хотя ваш Service может выглядеть следующим образом:

public interface Service { 

    public EntityManager getEntityManager(); 

} 

Реализация может выглядеть следующим образом:

public class ServiceImp implements Service { 

    private EntityManagerFactory emf; 
    private EntityManager em; 

    public Service() { 
     super(); 
     emf = Peristence.createEntityManagerFactory("YourPU"); 
    } 

    @Override 
    public EntityManager getEntityManager() { 
     if (em == null || !em.isOpen()) { 
      em = emf.createEntityManager(); 
     } 
     return em; 
    } 
} 
+0

благодарим вас за все ваши ответы! Еще один вопрос. В любом случае мне нужно создавать разные проекты для разных db-схем и разных функций. Идея состоит в том, чтобы иметь возможность предлагать некоторые функции в 1 приложении, а все - в другом. Судя по тому, что у меня будет менеджер объектов для каждой схемы правильно? Я также видел несколько примеров, используя '@ PersistenceContext'. Это необходимо или необязательно? –

+0

На самом деле для каждой схемы требуется единица сохранения. У вас может быть несколько менеджеров сущностей для одной и той же единицы персистентности, все из которых связаны с одной и той же схемой. С другой стороны, аннотация '' @ PersistenceContext' (http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceContext.html) предназначена для использования с сохранением контейнеров и является частью стандарта JEE. Это необходимо? Нет, но настоятельно рекомендуется, особенно если вам нужно работать с несколькими единицами сохранения. Контейнер будет управлять жизненным циклом всего менеджера организации для вас. – dic19

+0

Это очень широкая тема, и у вас есть много рамок/инструментов для работы. Если вы сможете более точно определить свои потребности в другом вопросе, я (и много других разработчиков наверняка) будет рад привести вас правильно. @ L.Young – dic19

0

Persistence.xml следует размещать в ресурсах/META-INF. Тогда вы просто вызовите диспетчер сущностей в вашей serviceImpl так:

public class ServiceImpl { 

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("YOUR_PU"); 
    EntityManager em = emf.createEntityManager(); 

    public void save(Entity ent) { 
     em.persist(ent); 
    } 
} 

Где «YOUR_PU» Ваше имя живучесть-блок.