Я нахожусь в процессе разработки отдельного Java-компонента, который будет упакован в виде jar-файла и добавлен в родительский проект. причина сделать это как компонент состоит в том, что завтра мне, возможно, придется удалить этот код и отказаться от него.
Проблема, с которой я сталкиваюсь, заключается в том, что отдельный компонент (файл jar), который разрабатывается, должен запрашивать базу данных, когда кто-то вызывает ее API.
Мой родительский проект настроен с использованием Spring + Hibernate + JPA.
Я не могу внедрить EntityManager из родительского проекта во внешний Jar, который создается во время запуска контейнера Spring.
Это концептуально правильно? или это можно сделать таким образом?
Я хочу, чтобы файл jar просто вставлялся в файл persistence.xml, определенный родительским проектом, и использовал EntityManager, который был загружен во время запуска.
EDIT
Таким образом, entityManager внедряется через LocalContainerEntityManagerFactoryBean в основное веб-приложение
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSourceWrapper" />
<property name="persistenceUnitName" value="LineManagement" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" value="${hibernate.dialect}" />
</bean>
</property>
<property name="beanName" value="entityManager"></property>
</bean>
abstractDAO в родительском веб-приложении определяется следующим образом, а аннотация PersistenceContext возвращает EntityManager, и все работает нормально.
public abstract class AbstractDAO<T extends LMEntity> {
@PersistenceContext(unitName = "LineManagement")
protected EntityManager entityManager;
@Autowired
private DataSource dataSource;
@Autowired
private DAOSupport daoSupport;
public void initHibernateStatistics() {
HibernateStatistics.enableHibernateStatistics(entityManager);
}
Ниже приведен DAO в jar-файле, в который я хочу вставить EntityManager, чтобы он мог использовать уже предоставленный
Это DAO в файле jar
@Repository(value = "retryDAO")
public class RetryDAOImpl
implements RetryDAO {
@Autowired
private EntityManager entityManager;
@Transactional
public void saveEvent(final IntegrationEvent event) {
entityManager.merge(event);
}
Я попробовал аннотацию @Autowired, и там упоминается, что компонент entityManager отсутствует.