2011-04-06 3 views

Répondre

0

J'ai finalement trouvé une solution. Il est possible d'injecter un EntityManager dans Spring sans avoir recours à @PersistenceContext. Il existe un factorybean Spring pour créer un EntityManager partagé. Compte tenu d'une entité gestionnaire de l'usine:

<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
<bean id="myJpaFacade" class="com.example.MyJpaFacade"> 
    <property name="entityManager" ref="entityManager" /> 
</bean> 

Maintenant, je peux supprimer l'annotation @PersistenceContext de MyJpaFacade afin que Glassfish ne cherche pas à rechercher et injecter un gestionnaire d'entités dans la propriété entityManager.

+0

Un autre avantage est que JRebel est maintenant beaucoup mieux à réinjecter un nouveau EntityManager si les beans entité ou persistence.xml a été changé. –

0

Spring peut utiliser différentes annotations que GF ne » comprennent. Sans quelques exemples de code, il est difficile d'aller plus loin.

Il n'y a rien qui va tourner DI ... off il fait partie du conteneur, de sorte que vous aurez besoin d'utiliser des annotations, il ne se soucie pas.

+0

Le problème est @PersistenceContext, qui est injecté à partir du printemps. Je n'ai pas réussi à trouver une alternative JEE, Spring. –

+0

Il suffit d'utiliser le nom complet du paquetage comme @ javax.persistence.PersistenceContext private EntityManager em; – Preston

+0

Je ne vois pas la différence entre @PersistenceContext EntityManager em; (avec une importation en haut du fichier java) et @ javax.persistence.PersistenceContext private EntityManager em; Les deux sont injectés à partir de Glassfish, qui échoue, et mon fichier de configuration de printemps, qui réussirait si Glassfish se retirait du chemin. –