Bonjour,
Je me suis acheté le livre Spring par la pratique (2.5 et 3.0) que j'ai dévoré.
J'en ai tiré beaucoup d'enseignements et bonne pratique.
J'ai notamment lu qu'il était préférable de passer par une configuration xml poussé plutôt que d'utiliser à outrance les annotations (@Autowired et @Resource(name=""))
J'ai reconfigurer la totalité des briques de mon projet, ce qui a pour conséquence que plus aucune annotation n'est présente dans mes class mise à par les DAO car je n'ai pas trouvé/compris comment faire autrement.
Dans mon projet j'ai besoin d'accéder à trois bases de données différentes.
j'ai donc configurer trois entityManager, trois datasource et trois transactionManager.
Première question : si vous avez la soluce je prends.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class MonDao extends ProjetDao { @PersistenceContext(unitName = "unitName") public EntityManager em; @PostConstruct public void setEntityManager() { this.entityManager = em ; } }
Lors de l'exécution de simple test Junit tout fonctionne correctement.
Après packaging et déploiement sur mon serveur de prod, c'est la catastrophe, les transactions ne semble plus opérationnelle. Sur certains appel notamment les getNativeQuery(String) la transaction est suspendu et marqué à RollbackOnly.
Les transactions sont géré par aspect de la même façon pour les trois :
Le point de jonction "org.springframework.jdbc.*.*(..)" est utile pour moi car j'utilise Spring Batch.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <tx:advice id="daoTxAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRES_NEW" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:advisor advice-ref="daoTxAdvice" pointcut="execution(* fr.xxxx.core.dao.*.*(..)) || execution(* fr.xxxx.xxxx.dao.MonDao.*(..)) || execution(* fr.xxxx.xxxx.aop.*.*(..)) || execution(* fr.xxxx.xxxx.batch.*.*(..)) || execution(* org.springframework.jdbc.*.*(..))" />
D'avance merci de vos lumières et axe de réflexion.
HadanMarv
Partager