1

我有一个注释如下的 EJB:

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)

SpringBeanAutowiringInterceptor创造了一个,而ClassPathXmlApplicationContext后者又创造了一些@Components。其中一个@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]")。

jee:jndi-lookup在 Spring 中尝试过,但我不知道如何使实体管理器在 JNDI 中可用以使其正常工作。是否应该以某种方式在我的persistence.xml或什至在另一个层面上完成?

我在 JBOSS 中运行所有这些作为 Arquillian 测试,但我的目标环境是 WAS。因此,我也应该避免使用特定于容器的解决方案。这不是一个 WAR 项目,而是将 EJB JAR 压缩到 EAR 中。

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

4

1 回答 1

0

将以下内容添加到您的 Spring Config

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
于 2013-04-26T02:19:01.287 回答