среда, 28 мая 2014 г.

Подключение JPA настроек в приложении Spring Web MVC

Для этого нам нужно в web.xml подключить лисенер и предоставить для него context-param с именем contextConfigLocation, в нем должен находится путь к файлу настрое контекста, вринципе любого, но в нашем даном конкретном случае JPA
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:jpaContext.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
Разберемся за что отвечает jpaContext.xml, который мы используем всместо persistence.xml. Его имя не обязно быть таким как мы его определили в web.xml - оно будет таким как мы его определим, но по смыслу оно таково как мы его сейчас назвали.

Этот файл содержит:
- EntityManagerFactory;
  - JPA Vendor;
  - JPA Properties;
- Transaction Manager;
- Annotation configuration;
- Datasource configuration or lookup.

EntityManagerFactory представлен в spring классом LocalContainerEntityManagerFactoryBean:
  - класс находится в spring-orm.jar;
  - представляет собой наш персистенс модуль;
  - впрыскивает датасорс, если такой не определен в нашем персистенс модуле;
  - поставляет специфические JPA свойства


Еще такой прикол в SpringMVC-Hibernate приложении. Чтобы у нас все работало гладко и с транзакциями, мы должны сканировать пакеты репозиториев, моделей и сервисов в  jpaContext.xml. Потому что аннотация @Transactional, которой помечаются методы сервисов, должна именно обрабатываться бинами из контекста  jpaContext.xml. Хоть на сервисы есть ссылки и с контроллеров, но как показывает практитка указав для сканирования только пакет с контроллерами в servlet-context.xml все работает - контейнер предоставляет сервисы из контекста  jpaContext.xml, но вот наоборот не работает.



Комментариев нет:

Отправить комментарий