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 :

Timeout sur une action struts


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut Timeout sur une action struts
    Bonjour,

    J'ai un problème soit avec Struts soit avec Tomcat 4.1 :

    je lance une action qui lance une fonction qui dure 1h15 soit 75 min , au bout d'une heure environ ma fonction continue de tourner mais ma page jsp s'efface : la page affiche : impossible d'afficher la page ou un message équivalent

    Dans Web.xml : j'ai pourtant mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <session-config>
      <session-timeout>180</session-timeout>
    </session-config>
    soit 3 h

    puis j'ai mis 0 mais je n'ai pas encore fait de test avec 0 (pas eu le temps ce vendredi) mais 180 devait ou devrait suffir !

    Dans server.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="60000" useURIValidationHack="false" disableUploadTimeout="true" />
    60000 pour connectionTimeout aussi cela devrai être suffisant :
    je crois que j'ai finit par mettre aussi -1 c'est à dire pas de TimeOut mais là encore je ne suis pas sûr d'avoir fait l'essai ...

    Es-ce la session qui tombe ou es-ce Struts qui serai mal paramétré ?

    Cela dit ma fonction va jusqu'à la fin mais je n'ai pas de retour sur ma page jsp autrement que par mes traces ou en regardant dans un répertoire et c'est bien embêtant)

    merci de m'avoir lu et de vos possibles suggestions

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 115
    Points : 77
    Points
    77
    Par défaut
    le timeout a 180

    tu l'as bien place dans le web.xml de ton application ?

    tu es allé voir si il existait pas d'autre fichier web.xml dans le répertoire de Tomcat ?

    omlip

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut y'en aurai-il deux ?
    Bonjour,

    Le timeout à 180 du fichier web.xml , il est dans mon application.

    Il est possible qu'il y ai un autre fichier web.xml dans le répertoire conf de Tomcat. (je l'enleverai )

    J'espère que c'est çà !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut connection et non session
    Bonjour,

    je crains que cela vienne de la connection au serveur HTTP car

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    javax.servlet.http.HttpSession session = request.getSession(true); 
    session.getMaxInactiveInterval(120);
    System.out.println("MaxInactiveInterval->"+session.getMaxInactiveInterval());
    et cela m'as affiché : MaxInactiveInterval->7200 soit 2 heures

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    A priori la seule solution est de lancer un thread et de faire un rafraichissement régulier de la page avec Ajax. C'est ce que j'ai essayé de faire.
    Mais il y a peut être d'autre solutions...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 33
    Points : 13
    Points
    13
    Par défaut
    Je suis attentif à avoir une autre solution, car j'ai le même problème que toi.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut La première solution
    Bonsoir,

    La première solution consiste à créer un Singleton qui crée un thread qui va lancer ton action longue :

    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
     
    public class ManageLongActionSingleton {
     
    	private static ManageLongActionSingleton instance;
    	private String longActionArgument;
    	private Thread ownThread;	
    	private LongActionThread longActionThread;
     
    	private class LongActionThread implements Runnable {
     
      		Main longAction;
     
    		public void run() {
     
                            longAction = new Main();
    			longAction.run(longActionArgument);
    		}
     
    	}
     
    	private ManageLongActionSingleton() {
    	}
     
    	public void start() {
    		if (ownThread == null) {
    			System.out.println("lancement du thread d'action");
    			longActionThread = new LongActionThread();
    			ownThread = new Thread(longActionThread);
    			ownThread.start();
     
    		} else {
    			throw new IllegalStateException("L'action a déjà démarrée !");
    		}
    	}
     
    	public boolean isFinish() {
    		return !instance.ownThread.isAlive();
    	}
     
    	public String avancement() {
    		return "" + longActionThread.longAction.nbFilesTraites() + " / " + longActionThread.longAction.nbTotalFiles();
    	}
    Ce singleton , tu le lance depuis ton action et tu retourne null ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class IntegrationAction extends Action 
    {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception 
      {
             ManageLongActionSingleton man =   ManageLongActionSingleton.getInstance("longActionArgument1");
             man.start();
             return null;
      }
    }
    Ensuite , il faut utiliser XMLHTTPRequest en javascript pour réaliser une requête sur le serveur sans (re)charger la page !

    Créé par Microsoft pour Internet Explorer, l'objet XMLHttpRequest a été adopté par les navigateurs Mozilla, Konqueror, Safari et récemment Opéra.

    Cette technologie n'est pas un standard du W3C , lequel propose des fonctionnalités similaires à travers la recommandation Document Object Model (DOM) Level 3 mais je ne les connait pas.


    Pour instancier ton objet XMLHttpRequest tu fais :

    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
     
    <script type="text/javascript">
     
    var request;
     
    function sendGetRequest(url) {
    	if ( window.XMLHttpRequest ) {
    		// Objet XmlHttpRequest pour les moteurs GECKO
    		xhrObject = new XMLHttpRequest();   
    	} else if ( window.ActiveXObject ) {
    		// Objet XmlHttpRequest pour Internet Explorer
    		xhrObject = new ActiveXObject( 'Microsoft.XMLHTTP' );   
    	} else {
    		// Navigateur non-compatible
    		alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );   
    		return;
    	}
    	request = xhrObject;
     
    	// On ouvre la requete vers la page désirée
    	xhrObject.open( 'GET', url, false );
    }
    et tu crée crée une action qui te fait un response sur ta page

    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
     
    		ManageLongActionSingleton man= ManageLongActionSingleton.getInstance(); 
     
    		System.out.println("avancement : " + man.isFinish());
     
    		if(man.isFinish()) {
    			response.getWriter().print("end");
    		}
    		else {
    			response.getWriter().print(man.avancement());
    		}
     
    		return null;
    	}
    }
    L' autre solution, si elle existe je l'attends aussi !

Discussions similaires

  1. Lancer une action struts sans cliquer sur un bouton submit
    Par cryosore94 dans le forum Struts 1
    Réponses: 10
    Dernier message: 22/03/2009, 16h08
  2. boucle Struts sur une action !
    Par habasque dans le forum Struts 1
    Réponses: 6
    Dernier message: 09/02/2009, 12h00
  3. Afficher un fond sur une action bouton
    Par lordenzo dans le forum Flash
    Réponses: 6
    Dernier message: 31/03/2006, 12h47
  4. Récuperer un bean dans une action Struts
    Par ksavieras dans le forum Struts 1
    Réponses: 4
    Dernier message: 23/10/2005, 14h55
  5. onChange pas déclanché sur une action javascript ?
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/06/2005, 16h32

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