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

Linux Discussion :

Batch Java lancé depuis une appli php?


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut Batch Java lancé depuis une appli php?
    Bonjour à tous...
    Je suis confronté à un petit problème depuis peu...et j'ai du mal a trouver la solution...

    alors voila mon problème : J'ai un site php qui lors du chargement d'un de ces pages lance un batch java (exec("java -cp leclasspath laclassejava"))...ce programme en java est assez long et je voudrais qu'il tourne en arrière plan, que l'utilisateur puisse gader la main sur l'appli php...Or le batch se lance bien avec cette commande, mais la page php ne reprends son chargement qu'une fois le programme java terminé...et ça c'est pas cool!!
    En bref j'arrive pas a lancer le programme en arriere plan!! C'est la misere!!!

    Si vous avez deja rencontré ce probleme ou si vous avez des idees...

    Merci d'avance!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Pour lancer un proccess en arriere plan sous linux, il suffit de mettre un & à la fin de ta commande. Ca fait donc : "java -cp toncp taclasse &"

    Sinon regarde dans php s'il n'y a pas moyen de lancer une commande system en arriere plan ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par getupa
    Pour lancer un proccess en arriere plan sous linux, il suffit de mettre un & à la fin de ta commande. Ca fait donc : "java -cp toncp taclasse &"

    Sinon regarde dans php s'il n'y a pas moyen de lancer une commande system en arriere plan ...
    J'ai essayé avec le & mais ça ne marche pas non plus...la page ne se charge que lorsque le batch java est terminé...C'est pas simple cette histoire!!!
    Je vais continuer ma recherche sur le net...(peut etre des thread php, non?)

    Merci.

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Salut

    Tu as essayé d'utiliser une commande pour daemonisez ton programme ? A moins bien sur que Java te permette de faire un fork() (j'en doute) ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Non je n'ai pas essayé (que signifie daemoniser?? )...
    Je vais me renseigner sur ce point...de toute façon il doit bien exister quelquechose!! c'est obliger!!

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par gui38
    Non je n'ai pas essayé (que signifie daemoniser?? )...
    Je vais me renseigner sur ce point...de toute façon il doit bien exister quelquechose!! c'est obliger!!


    un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nohup /path/to/command > /dev/null 2>&1 < /dev/null &

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par gorgonite
    un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nohup /path/to/command > /dev/null 2>&1 < /dev/null &
    J'ai fait des recherches sur nohup, et j'ai testé avec cette ligne de commande dans mon php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec ("nohup java -cp /SitesWeb/SCPT/Java BatchJava &");
    et malheuresement ça ne marche pas...
    Par contre sur le code que tu m'as mis en exemple je ne comprends pas bien ce que je dois ecrire (entre les dev/null, 2>&1, etc...). Tu pourrais m'en dire un peu d'avantage...

    Merci beaucoup!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    J'ai trouvé une possible solution...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec("java -cp /SitesWeb/SCPT/Java BatchJava >log.txt &");
    Ce code marche puisqu'il redirige la sortie du batch sur une sortie externe, la page php lance le batch et continue son chargement...donc ça m'a l'air pas mal...Après est ce que c'est la meilleure solution je ne sais pas, je vais encore chercher un peu!


    PS @Gorgonite: Si tu peux quand même m'expliquer la ligne d'exemple que tu as mis ça serait cool, on sait jamais c'est peut etre une meilleure solution!

    Merci!

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Bon le code fonctionne bien avec la redirection vers un .txt(et ça me permet en plus de faire un pti fichier log direct!que du bonheur! )
    Maintenant un nouveau problème s'ajoute...Comment faire pour afficher un petite fenêtre "Chargement" tant que le batch java tourne??
    J'ai pensé à plusieurs solution (pop up dans le php, fenêtre dans le batch java...) mais je n'arrive pas à mettre en place la moindre solution...
    Si quelqu'un a deja experimenté ce genre de problème ou a des conseils à me donner je suis preneur...

    Merci d'avance!

  10. #10
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Tu créés un fichier au démarrage de ton batch et tu le supprimes à la fin. Dans ton PHP tu testes si le fichier existe, si c'est le cas tu affiches "Chargement", et puis un rechargement automatique de la page toutes les X secondes et tu auras une superbe interface (tu peux aussi le faire avec AJAX, le principe est le même).

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Tchetch
    Tu créés un fichier au démarrage de ton batch et tu le supprimes à la fin. Dans ton PHP tu testes si le fichier existe, si c'est le cas tu affiches "Chargement", et puis un rechargement automatique de la page toutes les X secondes et tu auras une superbe interface (tu peux aussi le faire avec AJAX, le principe est le même).

    Merci, mais je ne suis pas sur que ce soit bien ce que je recherche. En fait quand l'utilisateur clique sur importer, le batch java se lance en arriere plan et je voudrais qu'une petite fenetre apparaisse pour informer que le transfert vers la base est en cours...mais l'utilisateur doit pouvoir garder la main sur l'appli principal (le batch peut durer assez longtemps) et continuer à se balader sur le site...

    Enfin bref, c'est prise de tête!

  12. #12
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Bien oui. Tu lances ton batch, un fichier, par exemple /tmp/mon_batch, est créé. Du côté de ton PHP/JavaScript tu ouvres une popup qui a une page qui se recharge automatiquement toutes les X secondes.
    Quand ton batch est terminé, il efface le fichier, /tmp/mon_batch, et ta popup s'en rend compte et hop tu mets "C'est tout bon" à la place de "Chargement".

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Tchetch
    Bien oui. Tu lances ton batch, un fichier, par exemple /tmp/mon_batch, est créé. Du côté de ton PHP/JavaScript tu ouvres une popup qui a une page qui se recharge automatiquement toutes les X secondes.
    Quand ton batch est terminé, il efface le fichier, /tmp/mon_batch, et ta popup s'en rend compte et hop tu mets "C'est tout bon" à la place de "Chargement".
    Ah ouais bien vu! je vais tenter ça!!
    Je vous tiens au courant.
    Merci bien!

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Ah, ca commence a etre pénible cette histoire!!!

    Voici le code que j'utilise dans la fenetre popup pour afficher soit en cours, soit importé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    if (file_exists("imp.tmp"))
    {
    echo '<center><FONT  size="+4" color="blue"><b>Importation en cours...</b></FONT></center>';
    }
    else
    {
    echo '<center><FONT  size="+4" color="blue"><b>Fichier import&eacute</b></FONT></center>';
    }
    ?>
    Donc bien entendu il ne trouve jamais le fichier imp.tmp! j'ai vérifié dans tmp le fichier est bien créé, mais pas nommé exactement comme je l'ai demandé dans le batch java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    File temp = null;
    	try {
    		temp = File.createTempFile("imp",".tmp");
    	} catch (IOException e) {
    		// TODO Bloc catch auto-généré
    		e.printStackTrace();
    	}
    	temp.deleteOnExit();
    je lui demande de créer un fichier imp.tmp et le fichier qu'il me crée s'appelle imp21548.tmp ! ! (avec bien sur la suite de chiffre qui change a chaque fois! ) Je ne sais pas si ça vient de la le fait qu'il ne trouve pas le fichier (probablement...) mais je ne sais plus quoi faire! C'est un vrai casse tête !

    Au secours!!!!

  15. #15
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Je pense que la fonction File.createTempFile créé un fichier temporaire avec un nom aléatoire ... Donc tu ne peux théoriquement pas prédire le nom de ce fichier !

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Tchetch
    Je pense que la fonction File.createTempFile créé un fichier temporaire avec un nom aléatoire ... Donc tu ne peux théoriquement pas prédire le nom de ce fichier !
    Comment je peux vérifier son existence alors si je ne connais pas le nom?

    un *.tmp c'est quand même risqué...

  17. #17
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Une solution que j'utilise volontier dans ces conditions c'est de créer un fichier ayant le numéro de processus comme nom (PID). Ensuite il peut-être intéressant de mettre ce fichier dans /tmp/ voir /tmp/mon_app/ et de créer un fichier genre $PID.run.
    En faisant ainsi tu permets que deux processus tournant en parallèle ne se marche pas dessus. Si vraiment tu peux encore ajouter un numéro aléatoire au nom de fichier.

Discussions similaires

  1. [WD15] Imprimer un fichier depuis une appli lancée depuis un service
    Par elscorpio dans le forum WinDev
    Réponses: 0
    Dernier message: 09/01/2014, 17h04
  2. [MySQL] Automatisé un enregistrement depuis une appli php vers ma table
    Par Debutant10 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/05/2012, 00h13
  3. Modification d'un fichier Batch depuis une page PHP
    Par antho0903 dans le forum Langage
    Réponses: 1
    Dernier message: 24/01/2012, 12h29
  4. Récupérer les parametres de context.xml depuis une appli JAVA
    Par anthropo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/02/2008, 23h10
  5. Passage d'une collection depuis une Appli java
    Par Florent Coulon dans le forum iReport
    Réponses: 2
    Dernier message: 09/11/2006, 11h30

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