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 Boot Java Discussion :

lazy initialization dans un test d' integration d'une application spring boot


Sujet :

Spring Boot Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut lazy initialization dans un test d' integration d'une application spring boot
    Bonjour, je travaille sur une application spring boot. J'ai développé une fonctionalité qui marche bien sans erreur. Cependant, quand je fais un test d'intégration avec le même code, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.vol.domain.DimPartner.partnerOrderHeaders, could not initialize proxy - no Session
    Voici la méthode où il y a une erreur

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
        private  List<OrderHeaderClusterData> constructOrderHeaderClusterDataFromPartner(DimPartner dimPartner) {
        	List<OrderHeaderClusterData> orderHeaderClusterDatas = new ArrayList<OrderHeaderClusterData>();
        	OrderHeaderClusterData orderHeaderClusterData = new OrderHeaderClusterData();
        	Set<FactAssocPartnerOrderHeader> factAssocPartnerOrderHeaders = dimPartner.getPartnerOrderHeaders();
        	DimOrderHeader dimOrderHeader = null;
        	Set<FactOrderItem> factOrderItems = null;
        	FactOrderItemClusterData factOrderItemClusterData = null;
        	for (FactAssocPartnerOrderHeader factAssocPartnerOrderHeader : factAssocPartnerOrderHeaders) {
        		orderHeaderClusterData = new OrderHeaderClusterData();
        		dimOrderHeader = factAssocPartnerOrderHeader.getHeader();
        		orderHeaderClusterData.setOrderNo(dimOrderHeader.getOrderNo());
        		PartnerData partnerData = dimPartner != null ? ConvertDomainObjectToDataObjectAndReverse.convertDimPartnerToPartnerData(dimPartner) : null;
        		orderHeaderClusterData.setPartnerDatas(Arrays.asList(new PartnerData[]{partnerData}));
        		factOrderItems = dimOrderHeader.getItems();
        		List<FactOrderItemClusterData> factOrderItemClusterDatas = new ArrayList<FactOrderItemClusterData>();
        		for (FactOrderItem factOrderItem : factOrderItems) {
        			factOrderItemClusterData = new FactOrderItemClusterData();
        			factOrderItemClusterData.setItemNo(factOrderItem.getOrderItemNo());
        			factOrderItemClusterData.setStcPurchaseOrder(factOrderItem.getCustomerPoItemLevel());
        			factOrderItemClusterData.setStcPOItem(factOrderItem.getItemNoCustomerPoLevel());
        			factOrderItemClusterData.setDimensionData(factOrderItem.getDimension() != null ? ConvertDomainObjectToDataObjectAndReverse.convertDimDimensionToDimensionData(factOrderItem.getDimension()) : null);
        			factOrderItemClusterData.setMaterialData(factOrderItem.getMaterials() != null ? ConvertDomainObjectToDataObjectAndReverse.convertDimMaterialToMaterialData(factOrderItem.getMaterials()) : null);
        			factOrderItemClusterDatas.add(factOrderItemClusterData);
        		}
        		orderHeaderClusterData.setFactOrderItems(factOrderItemClusterDatas);
        		orderHeaderClusterDatas.add(orderHeaderClusterData);
        	}
        	return orderHeaderClusterDatas;
     
        }
    L'erreur se produit à cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           for (FactAssocPartnerOrderHeader factAssocPartnerOrderHeader : factAssocPartnerOrderHeaders){

    Mais la chose importante est le fait que ça marche sans erreur quand je teste la fonctionnalité alors que ça ne marche pas dans la partie test d'intégration. Il doit me manquer un détail de configuration pour les tests. Pouvez vous m'aider s'il vous plait ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Première hypothèse : pas de transaction ouverte ...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Merci pour ta réponse JeitEmgie. Oui, je pense que c'est ça. Mais comment ça se fait que les transactions soient ouvertes quand j'utilise l'application après l'avoir lancé (spring boot application) et que dans la partie tests d'intégration, les transactions ne soientr pas ouvertes ? Je pense qu'il y a quelque chose dans la configuration de l'application qui ne va pas.

    Voici le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	  restCustomerOrderMockMvc
          .perform(get("/api/orders/modification?"
                  +"beginInsertionOrModificationDate=" + ORDER_ZONE_DATE_TIME_NO_1+
                  "&endInsertionOrModificationDate=" + ORDER_ZONE_DATE_TIME_NO_4)
          .accept(MediaType.APPLICATION_JSON))
          .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
          .andExpect(jsonPath("$.resultCode").value(BusinessErrorCode.NO_ERROR.getCode()))
          .andExpect(jsonPath("$.size").value("1"))
          .andExpect(jsonPath("$.entities[0]." + F_ORDER_HEADER_NO).value(ORDER_NO_1))                
          .andExpect(jsonPath("$.entities[0].partnerDatas[0]" + F_END_USER_UNIQUE_COMPANY_CODE_COM_API).value(PARTNER_1))
    	  .andExpect(jsonPath("$.entities[0].factOrderItems[0]" + F_ORDER_ITEM_NO).value(ITEM_NO_1))
    	  .andExpect(jsonPath("$.entities[0].factOrderItems[0].dimensionData." + F_WEIGHT_COM_VALUE1_COM_API).value(WEIGHT_COM_VALUE_1))
    	  .andExpect(jsonPath("$.entities[0].factOrderItems[0].materialData." + F_STEEL_GRADE).value(STEEL_GRADE_1));

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    "restCustomerOrderMockMvc" ?
    c'est plutôt pour les test unitaires
    donc hypothèse suivante : pas le bon transaction manager !
    (vous ne pouvez pas utiliser le même que celui d'un contexte JEE)


  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour, en rajoutant l'annotation @Transactional dans ma classe de test, cela a résolu mon problème

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/06/2019, 11h59
  2. Réponses: 8
    Dernier message: 30/08/2017, 15h23
  3. integration d'une application dans un windows form
    Par elekis dans le forum Windows Forms
    Réponses: 6
    Dernier message: 13/08/2010, 11h45
  4. Integration d'une application Winform dans Sharepoint
    Par karim.user dans le forum SharePoint
    Réponses: 4
    Dernier message: 16/04/2009, 17h23
  5. Icone dans la barre de titre d'une application
    Par Colieri dans le forum Composants VCL
    Réponses: 2
    Dernier message: 26/08/2007, 14h25

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