·· List> getEntityGraphs(Class entityClass);

}

Не стоит пугаться API-интерфейса из листинга 6.1, поскольку в этой главе рассматривается большинство соответствующих методов. В следующем разделе я объясню, как получить экземпляр EntityManager.

<p>Получение менеджера сущностей</p>

Менеджер сущностей — центральный интерфейс, используемый для взаимодействия с сущностями, однако приложению нужно сначала получить его. В зависимости от того, является ли среда управляемой контейнером (как вы увидите в главе 7 при работе с EJB-компонентами) или же управляемой приложением, код может быть совершенно другим. Например, в среде, управляемой контейнером, транзакциями управляет контейнер. Это означает, что вам не потребуется явным образом указывать commit или rollback, что вам пришлось бы сделать в среде, управляемой приложением.

Словосочетание «управляемая приложением» означает, что приложение отвечает за явное получение экземпляра EntityManager и управление его жизненным циклом (например, оно закрывает менеджер сущностей по окончании работы). В коде, приведенном в листинге 6.2, показано, как класс, функционирующий в среде Java SE, получает экземпляр менеджера сущностей. Он задействует класс Persistence для начальной загрузки экземпляра EntityManagerFactory, который ассоциирован с единицей сохраняемости (chapter06PU), используемой затем для создания EntityManager. Следует отметить, что в среде, управляемой приложением, за создание и закрытие менеджера сущностей (то есть за управление его жизненным циклом) отвечает разработчик.

Листинг 6.2. Класс Main, создающий менеджер сущностей с помощью фабрики EntityManagerFactory

public class Main {

··public static void main(String[] args) {

····// Создает экземпляр Book

····Book book = new Book ("H2G2", "Автостопом по Галактике", 

····12.5F, "1-84023-742-2", 354, false);

····// Получает менеджер сущностей и транзакцию

····EntityManagerFactory emf = Persistence.createEntityManagerFactory("chapter06PU");

····EntityManager em = emf.createEntityManager();

····// Обеспечивает постоянство Book в базе данных

····EntityTransaction tx = em.getTransaction();

····tx.begin();

····em.persist(book);

····tx.commit();

····// Закрывает менеджер сущностей и фабрику

····em.close();

····emf.close();

··}

}

Создание управляемого приложением менеджера сущностей осуществляется довольно просто с помощью фабрики, однако управляемую приложением среду отличает от управляемой контейнером среды то, каким образом происходит получение EntityManagerFactory. Среда, управляемая контейнером, имеет место, когда приложение эволюционирует в сервлет или EJB-контейнер. В среде Java EE самый распространенный способ получения менеджера сущностей заключается в использовании аннотации @PersistenceContext или в JNDI-поиске. Компоненту, работающему в контейнере (это может быть сервлет, EJB-компонент, веб-служба и т. д.), не нужно создавать или закрывать EntityManager, поскольку его жизненный цикл управляется контейнером. В листинге 6.3 показан код сессионного EJB-компонента без сохранения состояния, в который мы внедряем ссылку на единицу сохраняемости chapter06PU.

Листинг 6.3. EJB-компонент без сохранения состояния с внедренной в него ссылкой на менеджер сущностей

@Stateless

public class BookEJB {

··@PersistenceContext(unitName = "chapter06PU")

··private EntityManager em;

··public void createBook() {

····// Создает экземпляр Book

····Book book = new Book("H2G2", "Автостопом по Галактике", 

····12.5F, "1-84023-742-2", 354, false);

····// Обеспечивает постоянство Book в базе данных

····em.persist(book);

··}

}

Перейти на страницу:

Похожие книги