我尝试创建BaseDao并向其注入EntityManager。在春天我做了这个:
public abstract class BaseJpaDao<E> implements BaseDao<E>{
protected Class<?> entityClass;
@PersistenceContext(unitName = "access")
protected EntityManager entityManager;
public BaseJpaDao(Class<?> entityClass) {
this.entityClass = entityClass;
}
@Override
public E persist(E e) {
entityManager.persist(e);
return e;
}
但是现在我尝试在OSGI中制作它,我不明白它是怎么做的。我treid写在blueprint.xml
<bean id="baseJpaDao" class="domain.access.impl.BaseJpaDao" >
<jpa:context unitname="access" property="entityManager"/>
<tx:transaction method="*" value="RequiresNew"/>
</bean>
之后
public abstract class BaseJpaDao<E> implements BaseDao<E>{
protected Class<?> entityClass;
private EntityManager entityManager;
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public BaseJpaDao(Class<?> entityClass) {
this.entityClass = entityClass;
}
@Override
public E persist(E e) {
entityManager.persist(e);
return e;
}
我喜欢this link
但没有帮助。
我试过这个
EntityManagerFactory emf = Persistence.createEntityManagerFactory("access", System.getProperties());
em = emf.createEntityManager();
但没有帮助。
答案 0 :(得分:1)
在Aries JPA 1.x中无效。
在Aries JPA 2.x中,您可以使用与spring中完全相同的代码。见TaskServiceImpl.java。您只需要将jpa:enable and jta:enable elements添加到您的蓝图上下文以激活功能。
或者,您可以使用blueprint-maven-plugin从注释生成整个blueprint.xml。顺便说一下版本1.3.0应该没问题。您不需要快照。
感谢您的配置片段。问题是你为jpa使用了错误的命名空间。试试这些:
xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0"
xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.2.0"