我正在开发一个独立的java组件,该组件将被打包为jar并添加到父项目中。将其作为组件的原因是因为明天我可能必须删除该代码并丢弃它。 我面临的问题是独立组件,(正在开发的jar文件)需要在有人调用其API时查询数据库。无法在外部Jar文件中注入实体管理器
我的父项目是使用Spring + Hibernate + JPA设置的。
我无法从父项目注入EntityManager到弹簧容器启动期间实例化的外部Jar中。
这在概念上是正确的吗?还是有可能以这种方式做到这一点?
我希望jar文件只是在由父项目定义的persistence.xml上使用,并使用在启动过程中加载的EntityManager。
EDIT 了EntityManager通过LocalContainerEntityManagerFactoryBean注入在主web应用以这种方式
<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的在以下面的方式被定义父web应用,并且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文件,我想要的EntityManage R键被注入,以便它可以使用已经提供
这是jar文件
@Repository(value = "retryDAO")
public class RetryDAOImpl
implements RetryDAO {
@Autowired
private EntityManager entityManager;
@Transactional
public void saveEvent(final IntegrationEvent event) {
entityManager.merge(event);
}
的DAO我尝试了@Autowired注解之一,它提到了EntityManager豆心不是存在。
通过共享相同的上下文,您的意思是我应该将这两个应用程序上下文添加到contextConfig位置不是它在web.xml中?另外,它还实例化了jar文件类,因为我已经在父应用上下文中添加了' ' –
Hrishikesh
2012-02-21 01:01:32
@Hrishikesh我通常做的是只有一个Spring应用程序上下文,的contextConfigLocation。然后在这个上下文中,我使用我所使用的任何JAR的' '上下文文件。 –
gpeche
2012-02-21 16:18:24
是的,我这样做,它仍然没有注入Entitymanager在我的jar的DAO ...顺便说一句,EntityManager是从LocalContainerEntityManagerFactoryBean工厂方法服务的,我尝试使用“entityManager”变量自动调用Entitymanager。这应该工作吗?因为它给出了一个错误,说没有找到名为Entitymanager的bean。多数民众赞成在同样的错误,当你提到一个豆没有目前 – Hrishikesh 2012-02-21 17:15:29