SpringBeanAutowiringInterceptor创建的上下文中的容器中的EntityManager

时间:2013-04-24 17:59:13

标签: spring hibernate jpa ejb entitymanager

我有一个注释如下的EJB:

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)

SpringBeanAutowiringInterceptor创建ClassPathXmlApplicationContext,然后创建一些@Component。其中一个@Component是DAO,因此喜欢注入EntityManager。最好这应该是EJB的容器管理EntityManager(根据我目前的见解)。

如果我向EJB添加以下内容,那就可以了:

@PersistenceContext
EntityManager entityManager;

但是,如果我在我的DAO(在Spring中是自己的上下文)中执行后者,则不起作用。无论我是否专门调出单位名称(unitName="test",“No bean named 'test' is defined”与“No unique bean of type [javax.persistence.EntityManagerFactory]”相关联。)

我在Spring中尝试了jee:jndi-lookup,但是我无法在JNDI中使用实体管理器以使其工作。这应该以某种方式在我的persistence.xml甚至是另一个级别完成吗?

我在JBOSS中运行所有这些作为Arquillian测试,但我的目标环境是WAS。因此,我应该避开容器特定的解决方案。这不是WAR项目,而是在EAR中收缩包装EJB JAR。

我想我正在寻找这里的一般概念或最佳实践,让我前进。 (因此我限制了问题中包含的代码量,但如果有帮助,我很乐意分享一些细节。)谢谢!

1 个答案:

答案 0 :(得分:0)

将以下内容添加到Spring Config

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />