2013-04-24 4 views
1

У меня есть EJB, который аннотированный следующим образом:EntityManager из контейнера в SpringBeanAutowiringInterceptor созданного контекста

@Stateless 
@Interceptors(SpringBeanAutowiringInterceptor.class) 

SpringBeanAutowiringInterceptor создает ClassPathXmlApplicationContext, который, в свою очередь, создает некоторые @Component с. Один из этих @Component s - это DAO, и поэтому ему нравится вводить EntityManager. Предпочтительно, это должно быть управляемое контейнером EJB EntityManager (согласно моей текущей информации).

Если добавить к EJB следующие компоненты, что работает просто отлично:

@PersistenceContext 
EntityManager entityManager; 

Если я однако сделать последний на моем DAO (что весной, которая является его собственный контекст), который не работает. Независимо от того, вызываю ли я название устройства конкретно или нет (unitName="test", «No bean named 'test' is defined» против «No unique bean of type [javax.persistence.EntityManagerFactory]»).

Я пробовал jee:jndi-lookup весной, но я не понимаю, как сделать диспетчер сущности доступным в JNDI для этого. Должно ли это быть сделано каким-то образом в моем persistence.xml или даже на другом уровне?

Я использую все это в JBOSS как тест Arquillian, но моя целевая среда WAS. Поэтому я должен уклоняться от решений, специфичных для контейнеров. Это не проект WAR, а сжатие EJB JAR в EAR.

Я думаю, что я ищу общую концепцию или лучшую практику здесь, чтобы продвинуть меня вперед. (Поэтому я ограничил количество кода, включенного в вопрос, хотя я рад поделиться некоторыми особенностями, если это поможет.) Спасибо!

+0

Взгляните на это: http://stackoverflow.com/a/4717196/1850609 – acdcjunior

+0

Большой вопрос. – Ceki

ответ

0

добавить следующие строки в Spring Config

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
Смежные вопросы