我正在開發一個獨立的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