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

Tomcat et TomEE Java Discussion :

Problème accès disque réseau lorsque le WAR est déployé hors NetBeans


Sujet :

Tomcat et TomEE Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Problème accès disque réseau lorsque le WAR est déployé hors NetBeans
    Bonjour,

    Dans le cadre de mon projet de stage je fais une application web qui accède à des fichiers partagés par les membres du projet.
    Ces fichiers sont stockés sous un disque réseau.
    Mon problème est que j'arrive parfaitement à accéder aux fichiers lorsque je déploie mon application sous Netbeans 6.8
    (et donc le tomcat 6.0.20 intégré dans Netbeans 6.8) cependant lorsque je crée mon WAR et que je le déploie sur un Tomcat 6.0.20
    en local, je n'arrive plus à accéder à ce disque réseau.

    J'ai effectué les divers tests suivant sans réussite:
    - Utiliser des chemins UNC à la place des chemins habituels , marche sous Netbeans mais pas sur le Tomcat local
    - Copier le server.xml de Netbeans et le mettre à la place du server.xml du Tomcat en local
    - Lancer le Tomcat sur les mêmes ports que ceux utilisés par Netbeans
    - Vérification des md5 du war créé par NetBeans et de celui déployé sur Tomcat, résultats identiques

    J'ai demandé au support de mon entreprise et selon eux ce n'est pas un problème de droit puisque Netbeans arrive bien à y accéder.

    De plus le reste de mon application fonctionne parfaitement (accès à la base de données, affichage des pages...), seul l'accès aux fichiers
    sur le disque réseau ne fonctionne pas en format déployé sous Tomcat en local.

    Voici le code que j'utilise pour accéder aux fichiers :

    Code java : 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
     public static String[] listerRepertoire(String repertoire)throws Exception{
            try{
                File file = new File(repertoire);
                String [] liste;
                liste=file.list();
     
                if (LOG.isInfoEnabled()) {
                    LOG.info("Utile : listerRepertoire: repertoire "+repertoire);
                    int i=0;
                    for (String string : liste) {
                        LOG.info("Utile : listerRepertoire: liste["+i+"] "+string);
                        i++;
                    }
                }
     
                return liste;
            }catch(Exception e){
                throw e;
            }
        }


    Si quelqu'un à une idée de paramétrage Tomcat à faire ou autre, je suis preneur.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Que passez vous à "repeertoire" exactement comme valeur.
    Quelle exception exactement avez vous?
    Retirez ce Catch Exception, vous y faites trois erreurs de design majeures:
    • catcher toutes les exception et non pas uniquement celle que vous traitez;
    • mettre un throws Exception sur une méthode;
    • relancer imédiatement ce que vous avez catché sans le traiter (à quoi bon le catcher alors?)

  3. #3
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    A "repertoire" je passe soit :

    \\BACCHUS\DOI\GROUPS\outil de billing rpe\Dossier Personnel De Travail\AUrbizu\Outil\Test\V1.2.3\FDE1233

    soit

    G:\outil de billing rpe\Dossier Personnel De Travail\AUrbizu\Outil\Test\V1.2.3\FDE1111

    Dans les deux cas la version sous NetBeans liste bien ce qui s'y trouve et la version sous le Tomcat renvoi
    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
     
    java.lang.NullPointerException
    	at oqo.io.Utile.listerRepertoire(Utile.java:42)
    	at oqo.servlet.LancerFM.processRequest(LancerFM.java:84)
    	at oqo.servlet.LancerFM.doGet(LancerFM.java:145)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    	at java.lang.Thread.run(Unknown Source)
    La ligne 42 correspondant à la ligne 10 du code ci-dessus ("for (String string : liste)").
    L'exception ce lève selon moi pour la simple raison que la liste est null puisque le file.list() n'a pas fonctionné.

    En ce qui concerne les Exceptions j'ai mis le throws pour la traiter dans la servlet et afficher un message à l'utilisateur,
    et je le catch avant de renvoyer car en général je fais un LOG.error à dans le catch mais là j'ai oublié.
    Après j'ai ajouté le try catch depuis que cela ne fonctionne pas car coté Netbeans je pouvais tracer en débug mais coté Tomcat
    déployé je ne voyais rien, juste aucune réaction.


    J'ai un autre endroit qui plante avec aussi une tentative d'accès à un fichier sur le disque et qui me lève

    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
    [LectureExcel : lecture] IOException : 
    java.io.FileNotFoundException: \\BACCHUS\DOI\GROUPS\outil_de_billing_rpe_vss\testAU\OutilsQualifOffresTEST.xls (Accès refusé)
    	at java.io.FileInputStream.open(Native Method)
    	at java.io.FileInputStream.<init>(Unknown Source)
    	at jxl.Workbook.getWorkbook(Workbook.java:213)
    	at jxl.Workbook.getWorkbook(Workbook.java:198)
    	at oqo.io.LectureExcel.lecture(LectureExcel.java:43)
    	at oqo.servlet.AppliquerCreation.processRequest(AppliquerCreation.java:64)
    	at oqo.servlet.AppliquerCreation.doPost(AppliquerCreation.java:172)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    	at java.lang.Thread.run(Unknown Source)
    avec le code :
    Code java : 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
     
    public String[][] lecture(String inputFile) throws BiffException, IOException  {
            File inputWorkbook = new File(inputFile);
            Workbook w;
            String[][] table; //colonne ligne
            try {
                // Ouverture du fichier excel
                w = Workbook.getWorkbook(inputWorkbook);  //LIGNE 43 ICI
                // On se place dans l'onglet 1
                Sheet sheet = w.getSheet(0);
                //On initialise la table
                table = new String[sheet.getRows()][7]; //ligne,colonne
     
                for (int i = 1; i < sheet.getRows(); i++) {
                    //IDENTIFIANT
                    Cell cell = sheet.getCell(0, i);
                    table[i-1][Globales.CONFIG_IDENTIFIANT] = cell.getContents();
     
                    //TYPE_OFFRE
                    cell = sheet.getCell(3, i);
                    table[i-1][Globales.CONFIG_TYPE_OFFRE] = cell.getContents();
     
                    //MENSUEL_BIMESTRIEL
                    cell = sheet.getCell(4, i);
                    table[i-1][Globales.CONFIG_MENSUEL_BIMESTRIEL] = cell.getContents();
     
                    //IDENTIFIANT_CIBLE
                    cell = sheet.getCell(10, i);
                    table[i-1][Globales.CONFIG_IDENTIFIANT_CIBLE] = cell.getContents();
     
                    //CREATION DU TEST
                    cell = sheet.getCell(13, i);
                    table[i-1][Globales.CONFIG_CREATION] = cell.getContents();
     
                    //TYPE_EAI
                    cell = sheet.getCell(14, i);
                    table[i-1][Globales.CONFIG_TYPE_EAI] = cell.getContents();
     
                    //IDENTIFIANT_IMPACTANT (qui cible)
                    cell = sheet.getCell(15, i);
                    table[i-1][Globales.CONFIG_IDENTIFIANT_IMPACTANT] = cell.getContents();
                }
     
                return table;
     
            } catch (BiffException e) {
                if (LOG.isErrorEnabled()) {
                    LOG.error("[LectureExcel : lecture] BiffException : ", e);
                }
                e.printStackTrace();
                throw e;
            } catch(IOException ioe){
                 if (LOG.isErrorEnabled()) {
                    LOG.error("[LectureExcel : lecture] IOException : ", ioe);
                }
                ioe.printStackTrace();
                throw ioe;
            }
        }

    L'exception étant levé à la ligne 8 du code ci-dessus


    Ce que je n'arrive pas à comprendre c'est que cela fonctionne déployé avec Netbeans mais par lorsque je crée le WAR et que je
    déploie avec un Tomcat en local.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    a la base, je suis déjà étonné que ça marche sous netbeans. On peut supposer que ça utilise l'api File de windows correctement.

    Permière chose à vérifier: le serveur final de l'application sera-t-il sous windows? Ce genre de notation est certaine de ne pas macher sous linux par exemple!
    Ensuite, tomcat utilise-t-il bien la meme jvm que votre projet sous netbeans? Affichez le contenu de System.getProperties (toutes les clés/valeur) et comparez entre les deux.
    Tomcat tourne-t-il bien sous le même utilisateur? Il est possible que l'utilisateur courant aie fourni les credentials pour le partage mais que vous ayez installé votre tomcat en tant que service, qui lui n'a pas les credentials.

    Enfin, d'une manière générale, pour accéder à un partage windows depuis java, on utilise en général la librairie JCIFS. Elle fournit plus de contrôle et fonctionne quel que soit l'OS

  5. #5
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Permière chose à vérifier: le serveur final de l'application sera-t-il sous windows?
    L'application tournera effectivement sous Windows.

    Ensuite, tomcat utilise-t-il bien la meme jvm que votre projet sous netbeans?
    J'ai vérifié avec le "System.getProperties" et Tomcat utilise bien la même jvm que Netbeans.
    Cependant j'ai pu observé que le user.home était différent.

    Celui de Netbeans a :
    user.home=D:\Document and Settings\monNom
    user.name=monNom

    Celui de Tomcat a :
    user.home=C:\
    user.name=SYSTEM

    Ce qui expliquerait le refus d'accéder au disque réseau...
    Je vais essayer de changer ce user pour le Tomcat, faut que je regarde comment on fait et je vous dit ce qu'il en est.

    Vous dites être étonné que cela fonctionne sous Netbeans. Dois-je en conclure que l'utilisation des "File" est une mauvaise idée et qu'il faudrait que je me penche sur la librairie JCIFS ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je viens de relire mes doc, les UNC (\\server\share) sont supportées officiellement sous windows. Donc faites pas attention à ce que j'ai dit par là. Le seul "hic" c'est que File ne founit aucun moyen de gérer l'authentification. Donc si vous avez besoin d'authentification particulière, vous risquez de devoir jouer avec JCIFS.

  7. #7
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Justement il me semble que le problème vienne du fait que "user.name=SYSTEM" (obtenu lors du System.getProperties correspondant au Tomcat en local) explique le fait que je ne puisse pas accéder au disque réseau, n'ayant pas les droits nécessaires.

    Cependant je n'arrive pas à trouver comment changer ce user.name pour le mettre comme sous NetBeans c'est à dire à mon nom.

    J'ai essayé de créer des utilisateurs sous Tomcat avec mon pseudo et mon password qui me permet d'accéder au réseau mais rien y fait.

    Y a t-il un moyen de changer ce user.name et user.home ou dois-je impérativement regarder les JCIFS?

    Le problème c'est que pour gérer "w = Workbook.getWorkbook(inputWorkbook);" il me faut des "File"

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    les changer ne sert à rien, ces propriétés ne sont que le reflet de l'utilisateur qui exécute tomcat. Il faut donc adapter le service windows associé pour changer l'utilisateur associé au processus tomcat.

  9. #9
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    C'était en effet le problème, j'ai changé le Service pour que Tomcat soit considéré comme un service utilisateur (mon pseudo) à la place de SYSTEM et cela fonctionne.

    Merci de votre aide tchize_

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    merci sa m'a aider c'est nickel

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/04/2011, 15h59
  2. [CSS 2.1] Problème avec position: fixed; lorsque la fenetre est redimensionnée
    Par chok371 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/07/2010, 11h30
  3. Accès disque réseau + Websphere
    Par fsandreau dans le forum Websphere
    Réponses: 1
    Dernier message: 04/11/2009, 15h58
  4. problème accès dossier réseau
    Par zebi42 dans le forum Sécurité
    Réponses: 3
    Dernier message: 09/02/2009, 15h24
  5. HELP-Problème accès internet réseau wi-fi
    Par Tonio12 dans le forum Hardware
    Réponses: 4
    Dernier message: 06/01/2007, 23h56

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