Я занимаюсь разработкой отдельного компонента Java, который будет упакован как банка и добавлен в родительский проект. причина для этого как компонента заключается в том, что завтра мне, возможно, придется удалить этот код и отбросить его. Проблема, с которой я столкнулся, - это автономный компонент (jar-файл), который разрабатывается, должен запрашивать базу данных, когда кто-то вызывает свой API.Не удается создать объект Entity Manager во внешнем файле Jar
мой родительский проект настроен с использованием Spring + Hibernate + JPA.
Я не могу внедрить EntityManager из родительского проекта во внешний Jar, который создается при запуске весеннего контейнера.
Является ли это концептуально правильным? или можно сделать это таким образом?
Я хочу, чтобы файл jar просто копировал файл persistence.xml, который определяется родительским проектом и использует EntityManager, который был загружен во время запуска.
РЕДАКТИРОВАТЬ 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 в файле фляги, где я хочу EntityManage г, который будет введен таким образом, что он может использовать один уже при условии
Это ДАО в банке файл
@Repository(value = "retryDAO")
public class RetryDAOImpl
implements RetryDAO {
@Autowired
private EntityManager entityManager;
@Transactional
public void saveEvent(final IntegrationEvent event) {
entityManager.merge(event);
}
Я попробовал @Autowired аннотацию и упоминает, что EntityManager фасоль Isnt настоящее.
Разделяя один и тот же контекст, вы имеете в виду, что я должен добавить оба контекста приложения в контекстное местоположение, не так ли в web.xml?Кроме того, он создает экземпляры классов jar-файлов, так как я добавил «контекст: компонент-сканирование />» в контекст родительского приложения. – Hrishikesh
@Hrishikesh. Я обычно делаю это только один контекст приложения Spring, тот, который вы указываете в contextConfigLocation. Затем внутри этого контекста I ' ' файлы контекста из любых JAR, которые я использую. –
gpeche
Да, я сделал это, и он все еще не вводит Entitymanager в DAO моего jar ... Btw, EntityManager обслуживается из метода FactoryContainerEntityManagerFactoryBean, и я пытаюсь autwire Entitymanager с помощью переменной «entityManager». Должно ли это работать? потому что он дает ошибку, говоря, что никакой bean с именем Entitymanager не найден. Та же ошибка, когда вы ссылаетесь на bean-компонент, который не присутствует – Hrishikesh