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

Java Discussion :

Modifier une vieille classe


Sujet :

Java

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Modifier une vieille classe
    Bonjour,

    Je dois reprendre une classe d'un vieux programme (créé il y a plus de 10 ans) pour modifier la connexion de l'application de l'ancien annuaire LDAP vers le nouvel annuaire AD (oui, les paramètres sont en dur dans le programme ! ).

    J'ai opéré les modifications dans le code source ; j'ai transféré le source de la classe vers le serveur (Java 1.6) et j'ai tenté une compilation avec javac (si mes souvenirs du CNAM d'il y a plus de dix ans sont juste, c'est comme ça qu'on fait, non ?).
    Mais javac pas content du tout !
    Code txt : 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
    javac gestionnaireConnexion.java 
    gestionnaireConnexion.java:4: package acces does not exist
    import acces.ConnectionHolder;
                ^
    gestionnaireConnexion.java:5: package javax.servlet.http does not exist
    import javax.servlet.http.*;
    ^
    gestionnaireConnexion.java:31: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
        static public Connection connexion_uti(HttpSession session) throws Exception
                                               ^
    gestionnaireConnexion.java:174: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public ResultSet req_return_resultset(String maReq, HttpSession session) throws Exception
                                                                  ^
    gestionnaireConnexion.java:226: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public void req_return_void(String maReq, HttpSession session) throws Exception
                                                        ^
    gestionnaireConnexion.java:272: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public void req_return_void_addbatch(ArrayList<String> tabRequetesAExec, HttpSession session) throws Exception
                                                                                       ^
    gestionnaireConnexion.java:340: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public ResultSet req_return_resultset_scrollable(String maReq, HttpSession session) throws Exception
                                                                             ^
    gestionnaireConnexion.java:384: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public int req_return_int_generatedkey(String maReq, HttpSession session) throws Exception
                                                                   ^
    gestionnaireConnexion.java:54: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
                    ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                    ^
    gestionnaireConnexion.java:54: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
                    ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                               ^
    gestionnaireConnexion.java:66: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
                                holder = new ConnectionHolder(DriverManager.getConnection("jdbc:mysql://" + serveur + ":" + port + "/" + base + "?jdbcCompliantTruncation=false",user, mdp));
                                             ^
    gestionnaireConnexion.java:183: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:183: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:234: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:234: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:284: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:284: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:349: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:349: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:398: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:398: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    Note: gestionnaireConnexion.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    21 errors

    Seconde tentative naïve avec la paramètre indiqué par javac mais, bien sûr, nouvel échec :
    Code txt : 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
    javac -Xlint:unchecked gestionnaireConnexion.java 
    gestionnaireConnexion.java:4: package acces does not exist
    import acces.ConnectionHolder;
                ^
    gestionnaireConnexion.java:5: package javax.servlet.http does not exist
    import javax.servlet.http.*;
    ^
    gestionnaireConnexion.java:31: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
        static public Connection connexion_uti(HttpSession session) throws Exception
                                               ^
    gestionnaireConnexion.java:174: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public ResultSet req_return_resultset(String maReq, HttpSession session) throws Exception
                                                                  ^
    gestionnaireConnexion.java:226: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public void req_return_void(String maReq, HttpSession session) throws Exception
                                                        ^
    gestionnaireConnexion.java:272: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public void req_return_void_addbatch(ArrayList<String> tabRequetesAExec, HttpSession session) throws Exception
                                                                                       ^
    gestionnaireConnexion.java:340: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public ResultSet req_return_resultset_scrollable(String maReq, HttpSession session) throws Exception
                                                                             ^
    gestionnaireConnexion.java:384: cannot find symbol
    symbol  : class HttpSession
    location: class commun.gestionnaireConnexion
       static public int req_return_int_generatedkey(String maReq, HttpSession session) throws Exception
                                                                   ^
    gestionnaireConnexion.java:54: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
                    ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                    ^
    gestionnaireConnexion.java:54: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
                    ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                               ^
    gestionnaireConnexion.java:66: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
                                holder = new ConnectionHolder(DriverManager.getConnection("jdbc:mysql://" + serveur + ":" + port + "/" + base + "?jdbcCompliantTruncation=false",user, mdp));
                                             ^
    gestionnaireConnexion.java:120: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY);
                       ^
    gestionnaireConnexion.java:121: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.PROVIDER_URL, LDAP_SERVER_URL+"/"+LDAP_BASE_DN);
                       ^
    gestionnaireConnexion.java:122: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.SECURITY_AUTHENTICATION, LDAP_AUTHENTICATION_MODE);
                       ^
    gestionnaireConnexion.java:123: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.SECURITY_PRINCIPAL, LDAP_USER);
                       ^
    gestionnaireConnexion.java:124: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.SECURITY_CREDENTIALS, LDAP_PASSWORD);
                       ^
    gestionnaireConnexion.java:125: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.REFERRAL, LDAP_REFERRAL_MODE);
                       ^
    gestionnaireConnexion.java:183: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:183: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:234: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:234: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:284: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:284: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:349: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:349: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    gestionnaireConnexion.java:398: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
             ^
    gestionnaireConnexion.java:398: cannot find symbol
    symbol  : class ConnectionHolder
    location: class commun.gestionnaireConnexion
             ConnectionHolder holder = (ConnectionHolder) session.getAttribute("servletapp.connection");
                                        ^
    21 errors
    6 warnings

    Comme je ne développe jamais en Java, je suis un peu perdu.

    Cela signifie t-il qu'il faut que je recompile tout le projet ? Donc que je transfère toutes les sources de l'appli ?
    Eclipse se colore de pas mal d'alertes rouges et jaunes, malgré l'indication du mode de compatibilité Java 6.0 (pourquoi 6.0 et pas 1.6.0 chez Eclipse ? ) indiqué dans les paramètres du projet. Je crains qu'une recompilation complète du projet ne se passe pas bien du tout !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    J'ai tenté une compilation avec javac (si mes souvenirs du CNAM d'il y a plus de dix ans sont juste, c'est comme ça qu'on fait, non ?).
    Ouais, c'est la maniere simple de faire.
    Sauf que la, ta classe, elle a des dependances a des librairies qui ne sont pas standard Java (javax.servlet.http.* sont une libraire en plus a ajouter), et aussi qu'elle a des dependances a d'autres classes du project (le package "access"). Ces dependances en Java, c'est ce qu'on appelle le "classpath" (mot cle a retenir).
    Du coup, il faut que tu bourres ta commande de compilation d'options telles que "-cp path/to/servlet.jar:path/to/access/classes:..." pour qu'il trouve tout son bonheur. En gros, le fichier tout seul ne suffit pas a compiler, il faut que tu comprennes quelles sont ses dependances et que tu configures la commande en fonction.

    C'est pourquoi...

    Cela signifie t-il qu'il faut que je recompile tout le projet ? Donc que je transfère toutes les sources de l'appli ?
    Ca peut valoir le coup de prendre tout le projet, de le charger dans un IDE comme Eclipse IDE et de faire la modif sur ta classe.
    Une fois que le projet est bien configure dans l'IDE, tu n'as meme pas a le recompiler: l'IDE le fait pour toi a la volee, et s'il ne le fait pas, le menu Project > Build te le fera.
    Encore une fois, pour que le projet marche bien dans l'IDE, il faut connaitre sa structure de dependances. Si tu as de la chance, tu pourras trouver un fichier .projet, un pom.xml ou un build.xml qui contiennent des metadata pour builder le projet, qu'Eclipse saura soit lire automatiquement, ou qui t'aideront a configurer le projet.

    (pourquoi 6.0 et pas 1.6.0 chez Eclipse ?
    Parce qu'en verite, c'est bel et bien Java 6 et non Java 1.6. Depuis Java 5, on ne dit plus Java 1.x; bien que certains outils ont continue d'utiiser 1.x pendant un peu plus longtemps.

    Eclipse se colore de pas mal d'alertes rouges et jaunes
    C'est probablement plutot des soucis de dependances, similaires a ceux que tu as avec javac, qui te demandent de configurer le classpath de ton projet.
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Merci pour la réponse.

    Dans Eclipse, j'ai tout le projet que m'a passé mon ancienne collègue il y a plusieurs années :
    Nom : Capture_Eclipse_modind_2018-10-04_11-51-52.png
Affichages : 195
Taille : 31,7 Ko

    Comme on peut le voir, il y a du rouge partout !

    Exemple de ce que signale Eclipse dans la classe à modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import javax.servlet.http.*;
    =>
    L'importation javax.servlet ne peut pas être résolue.
    Autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static public Connection connexion_uti(HttpSession session) throws Exception
    =>
    HttpSession n'est pas reconnu comme type valide.
    Me manquerait-il quelque chose dans la configuration d'Eclipse ?
    Au passage, je précise que sur mon poste (de développement, donc), je suis en :
    java version "1.8.0_181"
    Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    Et sur le serveur de l'application :
    java version "1.6.0_29"
    Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
    Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode)

    Si tu as de la chance, tu pourras trouver un fichier .projet, un pom.xml ou un build.xml qui contiennent des metadata pour builder le projet, qu'Eclipse saura soit lire automatiquement, ou qui t'aideront a configurer le projet.
    Dans l'arborescence du projet sur mon disque dur, j'ai un dossier build qui contient l'arborescence des classes compilées. Dans Eclpse, le dossier build est affiché vide.

    Quand je clique sur "Projet / Compiler tout", il semble ne rien se passer.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Il te manque dans ton classpath javax.servlet.http.
    Souvent, si tu associes ton projet a un serveur, il te le rajoutera comme dependance (venant du serveur).
    Sinon, tu le fais a la main: clic-droit sur le project > Build Path > Configure Build Path..., et tu vas dans Libraries et tu rajoutes le jar qui contient "javax.servlet.http".
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Souvent, si tu associes ton projet a un serveur, il te le rajoutera comme dependance (venant du serveur).
    Ça me semble a priori mieux vu la différence de version de Java entre ma machine et le serveur applicatif, non ?

    Comment on fait ?

    Si je vais dans les propriétés du projet, à la rubrique serveur, j'ai seulement :
    Projet : modind (Module Web J2EE)
    Non déployé sur un serveur
    Et je n'ai que les boutons "Restaurer les valeurs par défaut" et "Appliquer". Pas de bouton pour ajouter un serveur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ça me semble a priori mieux vu la différence de version de Java entre ma machine et le serveur applicatif, non ?
    Comment on fait ?
    Il y a pas mal de doc existante sur le sujet, en plein de formats. Tu peux fouiller dans le menu "Help" par exemple, et voir ce qu'il dit a propos de tomcat ou des server adapters.
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je progresse...

    J'ai supprimé le projet et je l'ai recréé en tant que "Projet Tomcat".
    Du coup, Eclipse m'a recréé un .classpath qui trouve tout :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="var" path="TOMCAT_HOME/lib/servlet-api.jar"/>
        <classpathentry kind="var" path="TOMCAT_HOME/lib/jasper.jar"/>
        <classpathentry kind="var" path="TOMCAT_HOME/lib/jsp-api.jar"/>
        <classpathentry kind="var" path="TOMCAT_HOME/lib/el-api.jar"/>
        <classpathentry kind="var" path="TOMCAT_HOME/lib/annotations-api.jar"/>
        <classpathentry kind="src" path="WEB-INF/src"/>
        <classpathentry kind="src" output="work" path="work"/>
        <classpathentry kind="output" path="WEB-INF/classes"/>
    </classpath>
    Je n'ai plus qu'un gros point d'exclamation rouge à gauche du nom du projet. Eclipse a encore du mal avec une bibliothèque absente.

    J'ai quand même transféré de nouveau le projet sur le serveur et essayé de compiler le source modifié :
    Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
    ~/modind/src> javac -cp ../../.classpath commun/gestionnaireConnexion.java
    Résultat : il ne trouve pas le package acces qui n'est pas dans le même sous-dossier de src que le programme à compiler. Et javac a toujours des problèmes pour trouver javax.servlet.http et HttpSession qui en fait partie.
    commun/gestionnaireConnexion.java:4: package acces does not exist
    import acces.ConnectionHolder;
    ^
    commun/gestionnaireConnexion.java:5: package javax.servlet.http does not exist
    import javax.servlet.http.*;
    ^
    commun/gestionnaireConnexion.java:31: cannot find symbol
    symbol : class HttpSession
    location: class commun.gestionnaireConnexion
    static public Connection connexion_uti(HttpSession session) throws Exception
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Bonjour,

    Si vraiment le lien avec Tomcat ne suffit pas (servlet-api est une partie de la solution), il est possible de récupérer le jar nécessaire sur le site maven :
    https://mvnrepository.com/artifact/j...x.servlet-api/ pour servlet.jar. A voir quelle est la bonne version...
    Le lien vers le jar est dans la page de la version choisie, ligne "Files" : pom (maven) / jar

    Pour les autres packages, on peut demander à Eclipse de recharger les packages du projet : Source/organize imports (ou Ctrl+Shift+O).

    Cordialement,

  9. #9
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Si vraiment le lien avec Tomcat ne suffit pas (servlet-api est une partie de la solution), il est possible de récupérer le jar nécessaire sur le site maven :
    https://mvnrepository.com/artifact/j...x.servlet-api/ pour servlet.jar.
    Le bon jar doit en fait être servlet-api.jar et non servlet.jar...

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut Processus de build
    Bonjour,
    On ne t'as donné aucune information concernant le processus de build? Et la structure projet , quel serveur: Tomcat Websphere, Weblogic, Glassfish, JBoss? (c'est difficile sinon, surtout sur un projet JEE)

    Pour compiler:
    En ligne de commande, oublie d'utiliser javac à la main (au pire tu pourrait script un shell) mais il y a plusieurs outils de build (en ligne de commande), par ordre du plus vieux au plus récent:
    ant; utilise un fichier build.xml
    maven: utilise un fichier pom.xml <-- celui la le plus répandu
    gradle: utilise un fichier build.gradle

    il y en a plétore d'autre, mais ceux là sont très connus, et ajouter une dépendance (tes lib jar) dépend pour chacun d'entre eux, c'est un sujet à part entière.

    Pour développer
    Au niveau de l'IDE, si tu as choisi Eclipse, il faut ajouter tes autres jar au niveau du build path, si tu utilise maven, ça marche tout seul, sinon il faut sélectionner les librairie dans les propriétés projet:
    click-droit sur le projet properties(ou alt_enter) /Java build path/libraires -> sur cette fenêtre il faut ajouter les jar.

    Voila pour partir du bon pied, je te conseille d'utiliser le script prévu s'il existe , sinon la configuration de Eclipse sans utiliser la CLI est possible.

    Cordialement,

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par deltree Voir le message
    Bonjour,
    On ne t'as donné aucune information concernant le processus de build? Et la structure projet , quel serveur: Tomcat Websphere, Weblogic, Glassfish, JBoss? (c'est difficile sinon, surtout sur un projet JEE)
    Contexte :
    Une vieille appli de plus de 10 ans (avant que j'arrive) sur un vieux serveur en tomcat6.
    Les sources de la version de production ne sont pas sur le serveur.
    Mon ex-collègue qui est partie depuis plusieurs années et qui gérait cette application (mais qui n'en était pas non plus la développeuse) m'a laissé un dossier "projet eclipse" contenant les sources du projet. Je crois me souvenir qu'elle n'avait pas réussi à faire tourner ça dans Eclipse.
    Là on vient de passer d'un annuaire LDAP à un annuaire AD. Comme de bien entendu, les paramètres qui sont à changer sont codés en dur dans une classe de l'application donc il faut que je recompile le vieillard.
    Mais non, je n'ai pas plus d'infos que ça donc je patauge. Et comme en plus je ne développe jamais en Java mais en PHP et en SQL, ces histoires de classpath et autres, jai un peu oublié depuis mes cours du CNAM il y a plus de 10 ans aussi.

    Pour compiler:
    En ligne de commande, oublie d'utiliser javac à la main
    Pourquoi ?
    A priori, là où j'en suis est qu'il ne trouve pas cette foutue bibliothèque javax.servlet.http.*

    Comme ma machine n'est pas avec la même version de Java et de Tomcat que le serveur, je préfère essayer de compiler seulement la classe modifiée directement sur le serveur.

    javac possède un paramètre -classpath. Le .classpath construit par Eclipse, qui est un fichier xml, n'est pas lisible par javac ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Bonjour

    Je progresse (j'ai quand même fait d'autres choses depuis l'autre jour, hein !)...

    Voilà où j'en suis :
    Code bash : 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
    javac -cp "/etc/alternatives/servlet" -sourcepath ./src/ -Xlint:unchecked ./src/commun/gestionnaireConnexion.java 
    ./src/commun/gestionnaireConnexion.java:120: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
    			env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY);
    			       ^
    ./src/commun/gestionnaireConnexion.java:121: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
    			env.put(Context.PROVIDER_URL, LDAP_SERVER_URL+"/"+LDAP_BASE_DN);
    			       ^
    ./src/commun/gestionnaireConnexion.java:122: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
    			env.put(Context.SECURITY_AUTHENTICATION, LDAP_AUTHENTICATION_MODE);
    			       ^
    ./src/commun/gestionnaireConnexion.java:123: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
    			env.put(Context.SECURITY_PRINCIPAL, LDAP_USER);
    			       ^
    ./src/commun/gestionnaireConnexion.java:124: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
    			env.put(Context.SECURITY_CREDENTIALS, LDAP_PASSWORD);
    			       ^
    ./src/commun/gestionnaireConnexion.java:125: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
    			env.put(Context.REFERRAL, LDAP_REFERRAL_MODE);
    			       ^
    6 warnings
    Il semble que j'ai donné le bon classpath pour trouver javax.servlet.api mais que signifie cette nouvelle erreur et comment la corriger ?

    EDIT : En fait ce sont des warnings et ça a quand même compilé.
    Je n'ai plus qu'à trouver le bon paramétrage pour le nouvel annuaire parce que pour le moment il refuse mon login/mot de passe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    javac -cp "/etc/alternatives/servlet" -sourcepath ./src/ -Xlint:unchecked ./src/commun/gestionnaireConnexion.java 
    ./src/commun/gestionnaireConnexion.java:120: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
                env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY);
                       ^
    [...]
                       ^
    6 warnings
    Il semble que j'ai donné le bon classpath pour trouver javax.servlet.api mais que signifie cette nouvelle erreur et comment la corriger ?

    EDIT : En fait ce sont des warnings et ça a quand même compilé.
    Bonjour,

    C'est simplement que "env" est une Map, par défaut elle prend comme clés et valeurs des Object non typés. Il est préférable de préciser les types de données utilisés, comme Map<String, String> pour des clés et valeurs de type chaînes de caractères. Mais effectivement ça ne bloque pas la compilation...

    cf
    https://jmdoudoux.developpez.com/cou...#collections-5

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Extrait du source qui provoque les 6 warnings :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			Hashtable env = new Hashtable();
    			env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY);
    			env.put(Context.PROVIDER_URL, LDAP_SERVER_URL+"/"+LDAP_BASE_DN);
    			env.put(Context.SECURITY_AUTHENTICATION, LDAP_AUTHENTICATION_MODE);
    			env.put(Context.SECURITY_PRINCIPAL, LDAP_USER);
    			env.put(Context.SECURITY_CREDENTIALS, LDAP_PASSWORD);
    			env.put(Context.REFERRAL, LDAP_REFERRAL_MODE);
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			Hashtable env = new Hashtable<String, String>();
    			env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY);
    			env.put(Context.PROVIDER_URL, LDAP_SERVER_URL+"/"+LDAP_BASE_DN);
    			env.put(Context.SECURITY_AUTHENTICATION, LDAP_AUTHENTICATION_MODE);
    			env.put(Context.SECURITY_PRINCIPAL, LDAP_USER);
    			env.put(Context.SECURITY_CREDENTIALS, LDAP_PASSWORD);
    			env.put(Context.REFERRAL, LDAP_REFERRAL_MODE);
    Mais j'ai toujours les Warnings.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Avec le typage des génériques, il vaudrait mieux mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hashtable<String, String> env = new Hashtable<String, String>();
    Java étant ce qu'il est, il faut déclarer le type complet dans la déclaration du type et l'instanciation.

  16. #16
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Effectivement, avec ta syntaxe, plus de warning !

    On va dire que cette discussion consacrée à la compilation de la classe est résolue mais mon problème n'est pas totalement résolu quand même !
    Voir la discussion suivante...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Modifier une sous classe CSS a l'aide du javascript
    Par renayz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/04/2009, 19h28
  2. modifier une variable d'une classe à partir d'une autre classe
    Par Rniamo dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/03/2008, 20h40
  3. Modifier une menu bar (class CCeCommandBar)
    Par TomII dans le forum C++
    Réponses: 1
    Dernier message: 23/10/2007, 11h58
  4. [CSS] modifier une classe à la volée, est-ce possible ?
    Par guidav dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/01/2007, 15h18
  5. Réponses: 3
    Dernier message: 18/02/2006, 23h21

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