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

Struts 1 Java Discussion :

[STRUTS][HIBERNATE] problème tres bizzare


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut [STRUTS][HIBERNATE] problème tres bizzare
    bonjour tout le monde ,
    j ai vraiment besoin de votre aide car je n arrive plus a comprendre .
    j ai une action struts de type dispatchAction qui fais appel a une class metier chargé de l insertion dans la base de donné en utilisant hibernate .
    au faite lorce que je valide mon formulaire ou les informations sont indiqué , tous a l aire de se passer tres bien car il ne m affiche aucune exeption et il n ya rien d annormal dans le fichier log .
    mais lorceque je jette un coup d oeuil dans la base , rien n est inseré (dans le log il n ya pas de insert into ...)

    mais ce qui est attrigant c est que l insertion ne va avoir lieu que si je fais appel a la meme dispachAction une autre fois et dans la console ca affiche le message suivant :

    10:25:42,345 DEBUG RequestProcessor:255 - Looking for Action instance for class gov.mpm.domgi.struts.action.EditVariablesAction
    10:25:42,352 DEBUG RequestProcessor:269 - Returning existing Action instance
    10:25:42,362 DEBUG SQL:324 - insert into variable (nom, type, description, formatAffichage, valeur, valeurParDefault, etape_id, id) values (?, ?, ?, ?, ?, ?, ?, ?)

    esque quelqu un peut m aider

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    svp si quelqu un a eu le meme probleme , je suis a deux doigts de la folie

  3. #3
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    bonjour,

    est-ce que tu fais le commit de ta transaction hibernate ?

  4. #4
    Membre chevronné

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Par défaut
    A mon avis, comme dans ton log tu n'as rien, la première fois tu ne passe pas dans ta dispach action (sinon tu aurrais l'écriture de log correspondant au DEBUG de ton RequestProcessor).

    Donc regarde plutôt du coté de ton struts-config si il n'y aurrait pas un problème.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    pour te repondre fnobb , je commit ma transaction hibernate


    concernant ma dispatch action pour te repondre woodwai
    j ai dit que je n ai rien d'annormal dans mon log mais j ai l'écriture de log correspondant au DEBUG du RequestProcessor et tout y es sauf l'insertion qui ne s'effectue qu après un autre apel pour l'action !

    qu est ce qu il peut bien engendrer une telle erreure ?

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    je commence serieusement a douter des capacité de struts !!

    j arrive pas comprendre pour quoi il ce comporte d ' une facon bizzard !!!!!


    help me

  7. #7
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Après ces quelques échanges, on pourrait peut-être avoir un peu de code parce qu'on n'est pas devins ?

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    bein ok !!
    je vous explique un peu le fonctionnement avec des maquettes et puis je vous envoi le code .

    j ai une page pour parametrer des etapes d'un processus , pour chaque etape j ai un lien qui me permet d'aller sur une autre page afin de parametrer le variables de chque etape et cela de facon dynamique .

    explication : pour ma page de parametrage de variable l 'action associé et une action de type DispachAction ou il ya trois methodes:
    • add : retourne les valeur (si existant ) de la base de donnée et set des variables dont j ai besoin apres .

    • addvar:permet d'ajouter une variable dans la jsp de parametrage des variables

    • savevar: suite au submit par le boutton savevar , elle est chargé d'enregistrer les variables dans la base de donnée.



    je vous envoi les maquettes pour mieux comprendre et puis le code

    cordialement abdess6600
    Images attachées Images attachées    

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    pour ce qui est du code , je debute par envouyer l' action et le form dans struts.conf.xml

    l'action:
    <action
    attribute="variablesEditForm"
    input="/jsp/variablesEdit.jsp"
    name="variablesEditForm"
    parameter="submit"
    path="/editVariables"
    type="gov.mpm.domgi.struts.action.EditVariablesAction"
    validate="false">
    <forward name="showVariables" path="/jsp/variablesEdit.jsp" />
    <forward name="editerVariables" path="/editVariables.do?submit=add" />
    <forward name="listEtapes" path="/parametrerEtapes.do" />
    </action>
    le form :
    <form-bean name="variablesEditForm"
    type="org.apache.struts.action.DynaActionForm">
    <form-property name="variables"
    type="gov.mpm.domgi.workflow.Variable[]" />
    <form-property name="nombreVariables"
    type="java.lang.Integer" />
    <form-property name="idEtape" type="java.lang.Integer" />
    <form-property name="nomEtape" type="java.lang.String" />
    <form-property name="processusId" type="java.lang.Integer" />
    </form-bean>

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    le bundle properties ou je specifie les propriétes du bouton submit (necessaire pour le formulaire a plusieurs submit )
    # Resources for parameter 'gov.mpm.domgi.struts.ApplicationResources'
    # Project P/workflow1.2

    button.add=addvar
    button.valider=savevar


  11. #11
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    voila le code de ma dispatch action :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
     
    //Created by MyEclipse Struts
    // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.9.210/xslt/JavaClass.xsl
     
    package gov.mpm.domgi.struts.action;
     
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
     
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import gov.mpm.domgi.workflow.Etape;
    import gov.mpm.domgi.workflow.ProcessManager;
    import gov.mpm.domgi.workflow.Variable;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.DynaActionForm;
    import org.apache.struts.action.RequestProcessor;
    import org.apache.struts.actions.DispatchAction;
    import org.apache.struts.actions.LookupDispatchAction;
    import org.apache.struts.tiles.TilesRequestProcessor;
     
     
     
    /** 
     * MyEclipse Struts
     * Creation date: 05-25-2006
     * 
     * XDoclet definition:
     * @struts:action validate="true"
     */
    public class EditVariablesAction extends DispatchAction {
     
    	// --------------------------------------------------------- Instance Variables
     
    	// --------------------------------------------------------- Methods
     
     
     
     
     
    	/**
             * 
             * @param mapping
             * @param form
             * @param request
             * @param response
             * @return
             */
    	public ActionForward add(
    		ActionMapping mapping,
    		ActionForm form,
    		HttpServletRequest request,
    		HttpServletResponse response) {
    		// TODO Auto-generated method stub
     
    		DynaActionForm variablesEditForm = (DynaActionForm) form;
    		ProcessManager processManager = new ProcessManager();
    		Integer id = 0;
    		if (request.getParameter("idEtape")==null){
    			id = (Integer)request.getAttribute("idEtape");
    		}else{
    			id = Integer.valueOf(request.getParameter("idEtape"));
    		}
     
    		Variable[]	variables = (Variable[]) variablesEditForm .get("variables");
     
    		if (((String)request.getAttribute("addvar"))!="yes"){
    		 	variables = processManager.getVariablesByEtapeId(id);
    		}
     
    		variablesEditForm.set("idEtape", id);
    		variablesEditForm.set("nomEtape", processManager.getEtapeByPrimaryKey(id).getNom());
    		variablesEditForm.set("processusId",processManager.getEtapeByPrimaryKey(id).getProcessus().getId() );
    		variablesEditForm.set("variables", variables);
    		variablesEditForm.set("nombreVariables", processManager.getCountEtapesVariables(id));
     
    		return mapping.findForward("showVariables");
     
     
    	}
     
    	/**
             * 
             * @param mapping
             * @param form
             * @param request
             * @param response
             * @return
             */
    	public ActionForward addvar(
    			ActionMapping mapping,
    			ActionForm form,
    			HttpServletRequest request,
    			HttpServletResponse response) {
    			DynaActionForm variablesEditForm = (DynaActionForm) form;
    			ProcessManager processManager = new ProcessManager();
    			Integer id = Integer.valueOf(request.getParameter("idEtape"));
    			Etape etape = processManager.getEtapeByPrimaryKey(id);
     
    			Variable[] variables = (Variable[]) variablesEditForm.get("variables");
    			List liste = new ArrayList();
    			for (int i =0;i<variables.length;i++){
    				liste.add(variables[i]);
    			}
     
    			Variable variable =  new Variable(); 
    			variable.setEtape(etape);
    			liste.add(variable);
    			//processManager.createVariable(variable);
    			variables = (Variable[]) liste.toArray(new Variable[0]);
    			variablesEditForm.set("variables",variables);
    			request.setAttribute("id",id);
    			String yes = "yes";
    			request.setAttribute("addvar",yes);
    			// TODO Auto-generated method stub
    			return mapping.findForward("editerVariables");
    		}
     
    	/**
             * 
             * @param mapping
             * @param form
             * @param request
             * @param response
             * @return
             */
    	public ActionForward savevar(
    			ActionMapping mapping,
    			ActionForm form,
    			HttpServletRequest request,
    			HttpServletResponse response) {
     
    		DynaActionForm variablesEditForm = (DynaActionForm) form;
     
    		ProcessManager processManager =new ProcessManager();
     
    		Variable[] variables = (Variable[]) variablesEditForm.get("variables");
    		List liste = new ArrayList();
    		for (int i =0;i<variables.length;i++){
     
    			Variable variable = new Variable();
     
    			variable.setNom(variables[i].getNom());
    			variable.setType(variables[i].getType());
    			variable.setDescription(variables[i].getDescription());
    			variable.setEtape(variables[i].getEtape());
    			variable.setValeur(variables[i].getValeur());
    			variable.setValeurpardefault(variables[i].getValeurpardefault());
     
     
    			processManager.createVariable(variable);			
     
    		}
     
    		request.setAttribute("processusId",(Integer) variablesEditForm.get("processusId"));
    		return mapping.findForward("listEtapes");
     
    	}
     
     
     
     
     
    	protected Map getKeyMethodMap() {
    		// TODO Auto-generated method stub
    		Map map = new HashMap();
    		   map.put("button.add", "addvar");
    		   map.put("button.valider", "savevar");
     
    		  return map;
     
    	}
    }

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    enfin voila ma jsp :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    <%@ page language="java"%>
     
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
     
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
     
    <head>
    <title>JSP for variablesEditForm form</title>
    <link href="modele.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <!-- 
    <H3 class="gris">parametrer les variables de l'etape <bean:write
    	name="variablesEditForm" property="nomEtape" /></H3>-->
    <HR>
    <BR>
    <table>
    	<html:form action="/editVariables">
    		<TR class="bleu">
    			<TD>&nbsp;</TD>
    			<TD>nom</TD>
    			<TD>type</TD>
    			<TD>description</TD>
    			<TD>format d'affichage</TD>
    			<TD>valeur par default</TD>
     
    		</TR>
     
    <nested:iterate property="variables"  indexId="cpt" >
    			<c:if test="${(cpt%2)==0}">
    		<TR class="blanc" >
    			</c:if>
    			<c:if test="${(cpt%2)==1}">
    				<TR class="gris" >
    			</c:if>
    				<TD ><nested:notEmpty property="nom">
    					<nested:write  property="nom" />
    				</nested:notEmpty>
    				<nested:empty  property="nom">
    					Variable &nbsp; <c:out value="${cpt}" /></nested:empty></TD>
     
    				<TD ><nested:text property="nom"  /></TD>
     
    				<TD ><nested:text  property="type"  /></TD>
     
    				<TD ><nested:textarea rows="1"  property="description"  /></TD>
     
    				<TD ><nested:text  property="formataffichage"	 /></TD>
     
    				<TD ><nested:text property="valeurpardefault" /></TD>
     
    		</TR>
    </nested:iterate>
     
    </table>
     
    <logic:present name="variables">
     
    			<TR>
    				<TD class="gris"> <html:submit property="submit">
         									<bean:message key="button.add"/>
      								  </html:submit>
      				</TD>
      				<TD class="gris"> <html:submit property="submit">
         									<bean:message key="button.valider"/>
      								  </html:submit>
      				</TD>
    			</TR>
    </logic:present>
    		<html:hidden name="variablesEditForm" property="processusId" />
    		<html:hidden name="variablesEditForm" property="idEtape" />
    		<html:hidden name="variablesEditForm" property="nombreVariables" />
     
    </html:form>
     
    <logic:notPresent name="variables">
    		</table>
    		<hr><br>
    			<h2 class="gris">Pas de variable entrée pour cette etape.</h2>
    			<h2><html:link action="editVariables.do?submit=addvar"	paramName="variablesEditForm" paramId="idEtape" paramProperty="idEtape" >ajouter variable</html:link></h2>
    </logic:notPresent>
     
    </body>
    </html>

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    pour l insertion a la base de données voila la methode createVariable de la class processManager
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
     
    public void createVariable(Variable variableValeur) {
     
    	/*
     
    	 * je vais ouvrir mantenant une session Hibernate
     
    	 */
     
    	Session session =null;
     
    	 /*
     
    	 *  je vais ouvrir maintenant une transaction Hibernate
     
    	 */
     
    	Transaction tx = null;
     
    	 /*
     
    	 *  je vais prendre la session du thread en cours
     
    	 *  
     
    	 */
     
    	session = HibernateSessionFactory.currentSession();
     
    	tx=session.beginTransaction();
     
    	session.save(variableValeur);
     
    	tx .commit();
     
     
     
    }
    et elle marche tres bien ,



    voila j'espere que je n est pas trop detaillé au point de rendre ennuieux de lire
    merci pour vos efforts

    cordialement abdess6600

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    apperement il ny a personne qui a eu un tel probleme ,
    je pense que je vais tagé avec delastage

  15. #15
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Bonsoir,

    as-tu débuggé la taille de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variablesEditForm.get("variables");
    ?

  16. #16
    Membre expérimenté
    Inscrit en
    Octobre 2002
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 164
    Par défaut
    Essaie cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    tx.commit();
    HibernateSessionFactory.closeSession();

  17. #17
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    merci jIdJo , je me suis inspiré de ta reponse , au fait il faut ajouter le HibernateSessionFactory.closeSession(); non pas a la fin mais au debut de ma methode ,comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void createVariable(Variable variableValeur) {
    
    	HibernateSessionFactory.closeSession();
           Session session =null;
    	Transaction tx = null;
    	session = HibernateSessionFactory.currentSession();
    	tx=session.beginTransaction();
    	session.save(variableValeur);
    	tx .commit();
    }
    mais j aimerai bien savoir pourquoi ? car pour d'autre traitement qui utilise des actions simple il n est pas necessaire de faire le closeSession()

    cordialement , abdess6600

  18. #18
    Membre expérimenté
    Inscrit en
    Octobre 2002
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 164
    Par défaut
    En fait HibernateSessionFactory (issue de MyEclipse à priori) utilise un ThreadLocal pour récupérer la session (HibernateSessionFactory.currentSession()), or à mon avis suivant le niveau de cache définit dans Hibernate et suivant quel thread attaque ta requête HTTP tu as des comportements bizarres.

    Un refresh() aurait aussi pu résoudre ton problème ou un changement de stratégie dans la gestion du cache.

  19. #19
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    oui , ca rend les choses un peu logic, est ce que tu connais un tutoriel digne de ce nom qui parle de la facon dont hibernate gère le cache ?


    -----------------------------------
    Cordialement , abdess6600

  20. #20
    Membre expérimenté
    Inscrit en
    Octobre 2002
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 164
    Par défaut
    Le bouquin d'Hibernate

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/05/2006, 22h02
  2. [Data] [STRUTS][HIBERNATE] fichier de conf
    Par nikalkal dans le forum Spring
    Réponses: 1
    Dernier message: 26/04/2006, 17h10
  3. SPRING+STRUTS+HIBERNATE. Une bonne solution ?
    Par ollivier dans le forum Struts 1
    Réponses: 9
    Dernier message: 10/04/2006, 13h16
  4. Réponses: 2
    Dernier message: 02/03/2006, 19h29
  5. [STRUTS/HIBERNATE] Problème d'exécution de requête
    Par mc_chicken dans le forum Hibernate
    Réponses: 5
    Dernier message: 21/10/2005, 09h27

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