IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Configuration et transaction [Framework]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut Configuration et transaction
    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.

    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 ;
    	}
    }
    Première question : si vous avez la soluce je prends.

    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 :

    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.*.*(..))" />
    Le point de jonction "org.springframework.jdbc.*.*(..)" est utile pour moi car j'utilise Spring Batch.

    D'avance merci de vos lumières et axe de réflexion.

    HadanMarv

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Autre fait vraiment étrange, quand je lance un test Junit comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @ContextConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    public class ComptesServiceTest extends AbstractJUnit4SpringContextTests {
     
    	@Autowired
    	OrganizationService service;
     
    	@Test
    	public void testComptesService() {
    		System.out.println("start");
    		try {
    			service.create(null, "mon objet", 999) ;
    		} catch (RemoteException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    tout fonctionne si dans je crée une class qui fait juste un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ApplicationContext context = new FileSystemXmlApplicationContext("path_vers_mon_xml/application-context.xml") ;
    OrganizationService service = (OrganizationService)context.getBean("organizationService") ;
    try {
    	service.create(null, "mon objet", 999) ;
    } catch (RemoteException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    }
    et bien dans ce cas mon test ne fonctionne pas.

    Dans mon fichier de configuration xml j'ai la déclaration d'un bean comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean id="monDao" class="fr.xxxx.xxxx.dao.MonDao" />
    Le Dao se trouve dans le post ci-dessus. Dans le cas du test Junit si je mets un point d'arrêt dans le postConstruct en debug il s'arrête bien. Dans l'autre cas en lançant en mode debug également il n'y passe pas ???

    Comprends plus rien...

    HadanMarv

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    L'erreur relevé dans mon précédent poste m'a mis sur une nouvelle voix. J'ai donc creusé un peu plus pour comprendre mon erreur.

    Pour une raison que j'ignore encore le traitement entre Junit et une class lambda est différent.

    Avec Junit il semble possible de déclarer un bean dans le fichier de configuration et pour autant il "semble" que dans ce cas le pilotage par les annotations soient implicites. Cette erreur avec le recul me paraît vraiment idiote mais semble être la cause de mon erreur. je dis semble car je n'ai pas encore mis en prod pour le moment.

    Ainsi pour faire simple si on déclare un bean dans le fichier de configuration xml, et que ce bean contient des annotations, il est préférable (merci de me dire si je me trompe) de laisser Spring s'en occuper avec un bon vieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <context:component-scan base-package="fr.xxxx.xxxx.dao" annotation-config="true" />
    Voilà j'espère pouvoir éviter à certains d'entre vous de perdre un temps qui on le sait est précieux.
    Je vous redis prochainement si le passage en prod valide ou non la correction.

    HadanMarv

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Validation de la correction.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Configuration de MSDTC pour transaction distribuée
    Par xandj74 dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 12/04/2011, 13h36
  2. Firebird, configuration de transaction.
    Par TryExceptEnd dans le forum Connexion aux bases de données
    Réponses: 5
    Dernier message: 20/11/2007, 12h31
  3. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  4. Configurer OpenGL/Glut avec C++Bluider
    Par MiGoN dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/09/2002, 23h18
  5. BDE : Configurer automatiquement le NETDIR
    Par Harry dans le forum Paradox
    Réponses: 10
    Dernier message: 29/07/2002, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo