Для этого нам нужно в web.xml подключить лисенер и предоставить для него context-param с именем contextConfigLocation, в нем должен находится путь к файлу настрое контекста, вринципе любого, но в нашем даном конкретном случае JPA
Этот файл содержит:
- 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, но вот наоборот не работает.
<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, но вот наоборот не работает.
Комментариев нет:
Отправить комментарий