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

Glassfish et Payara Java Discussion :

Netbeans 6.0 - GlassFishV2 : Classe Main du client invisible au runtime


Sujet :

Glassfish et Payara Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Netbeans 6.0 - GlassFishV2 : Classe Main du client invisible au runtime
    Bonsoir tous le monde,

    Je suis plutôt nouveau en J2EE, et je me permet de vous soumettre ce problème. J'ai suivi un tuto pour créer une application d'entreprise :
    http://wiki.netbeans.org/DevFaqAppClientOnNbPlatformTut

    Tout fonctionne à la compilation, pas d'erreur, mais au runtime l'exception suivante lorsque j'apelle mon formulaire d'affichage :

    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
    java.lang.NoClassDefFoundError: liveea/Main
    	at appli.EmployeTopComponent.initData(EmployeTopComponent.java:41)
    	at appli.EmployeTopComponent.<init>(EmployeTopComponent.java:37)
    	at appli.EmployeTopComponent.getDefault(EmployeTopComponent.java:112)
    	at appli.EmployeTopComponent.findInstance(EmployeTopComponent.java:125)
    	at appli.EmployeAction.actionPerformed(EmployeAction.java:25)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
    	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
    	at java.awt.Component.processMouseEvent(Component.java:6041)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    	at java.awt.Component.processEvent(Component.java:5806)
    	at java.awt.Container.processEvent(Container.java:2058)
    	at java.awt.Component.dispatchEventImpl(Component.java:4413)
    	at java.awt.Container.dispatchEventImpl(Container.java:2116)
    	at java.awt.Component.dispatchEvent(Component.java:4243)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    	at java.awt.Container.dispatchEventImpl(Container.java:2102)
    	at java.awt.Component.dispatchEvent(Component.java:4243)
    [catch] at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    Il s'agit d'un formulaire qui est sensé afficher le contenu d'un bean.

    La classe main du client n'est apparemment pas visible, et tous les beans sont donc inaccessible. C'est comme si un classpath n'était pas bien specifié, mais comment faire pour trouver dans cette grosse botte de foin ?

    A la vue du tuto, que j'ai pû réaliser sous linux et windows xp, il semblerait que le problème soit le même... (même sur un netbeans 5.5.1)

    Je remercie quiconque pourrait maider même à avancer d'un pouce !

    Bonne soirée.

  2. #2
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    As-tu une configuration de ton projet NetBeans qui rajoute liveea.Main dans ton projet sans le mettre dans le JAR final (dans le sous-répertoire 'dist')?

    Peux-tu partager le code de appli.EmployeTopComponent.initData() ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Pas de problème voici la méthode appli.EmployeTopComponent.initData() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    import db.Employe;
    import java.io.Serializable;
    import java.util.List;
    import java.util.logging.Logger;
    import javax.swing.table.DefaultTableModel;
    import liveea.Main;
    import org.openide.util.NbBundle;
    import org.openide.windows.TopComponent;
    import org.openide.windows.WindowManager;
    import org.openide.util.Utilities;
    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
     
     
    private void initData() {
            List<Employe> employes = Main.getEmployes();
     
            Object[][] rows = new Object[employes.size()][6];
            int i = 0;
     
            for (Employe e : employes) {
                rows[i][0] = e.getNom();
                rows[i][1] = e.getPrenom();
                rows[i][2] = e.getFonction();
                rows[i][3] =  e.getEquipe();
                rows[i][4] = e.getActif();
                rows[i++][5] = e.getGroupeUtilisateur();
            }
     
            Object[] colums = new Object[] {"Nom", "Prénom", "Fonction", "Equipe", "Activité","Groupe"};
     
            jTable1.setModel(new DefaultTableModel(rows, colums));                
        }
    il s'agit vraiment d'un essai de formulaire. La classe liveea.Main et la classe db.employe sont visible par le composant car on a rajouté dans le project.properties du module (comme dans le tuto) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cp.extra=\
    D:/LiveRepository18.02.08/LiveEA/LiveEA-ejb/dist/LiveEA-ejb.jar:\
    D:/LiveRepository18.02.08/LiveEA/LiveEA-app-client/dist/LiveEA-app-client.jar:\
    D:/glassfish-v2/lib/javaee.jar
    Je ne sais pas si j'ai répondu à ta question mais merci de t'interesser à mon problème !!!

    J'ai trouvé ceci comme début de piste, qui semblerait montrer que le déploiement se ferait mal sous windows. Mais la ca devient très spécifique, et je nage un peu ...

    http://blogs.sun.com/blog/entry/java...tion_client_on

    Cela m'étonne je dois pas être le seul à qui ca arrive
    ou alors je dois faire quelque chose de mal ...

  4. #4
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Tu n'as pas mis la déclaration de la classe liveea.Main.
    C'est une application NetBeans Platform?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Il s'agit d'une module suite interfaçé avec une enterprise application. J'ai vraiment fait comme dans le 1 er tutoriel en suivant à la lettre ce qui est écrit (Je ne connais pas assez cet environnement pour me permettre de faire de "la figure libre")

    Excuse moi , voici la classe Main (on vois les reminiscence d'un bout de code censé changer les userdir mais qui ne fonctionne pas) :

    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
    public class Main {
        @EJB
        private static EmployeRemote employeBean;
     
            //private static final String absoluteRessourcesPath = "/home/sixkiller/documents/live3d/LiveRepository/LiveModuleSuite/build/jnlp/";
            private static final String absoluteRessourcesPath = "livemodulesuite/";
     
            //Important que boot.jar soit le premier jar
            private static final String[] resources = {"netbeans/org-netbeans-bootstrap/boot.jar",
            "netbeans/org-jdesktop-layout/ext-swing-layout-1.0.3.jar",
            "netbeans/org-jdesktop-layout/org-jdesktop-layout.jar",
            "netbeans/org-netbeans-api-progress/org-netbeans-api-progress.jar",
            "netbeans/org-netbeans-api-visual/org-netbeans-api-visual.jar",
            "netbeans/org-netbeans-core/org-netbeans-core.jar",
            "netbeans/org-netbeans-core-execution/org-netbeans-core-execution.jar",
            "netbeans/org-netbeans-core-multiview/org-netbeans-core-multiview.jar",
            "netbeans/org-netbeans-core-output2/org-netbeans-core-output2.jar",
            "netbeans/org-netbeans-core-startup/core.jar",
            "netbeans/org-netbeans-core-ui/locale-org-netbeans-core-ui_ja.jar",
            "netbeans/org-netbeans-core-ui/locale-org-netbeans-core-ui_pt_BR.jar",
            "netbeans/org-netbeans-core-ui/locale-org-netbeans-core-ui_zh_CN.jar",
            "netbeans/org-netbeans-core-ui/org-netbeans-core-ui.jar",
            "netbeans/org-netbeans-core-windows/org-netbeans-core-windows.jar",
            "netbeans/org-netbeans-libs-jsr223/ext-script-api.jar",
            "netbeans/org-netbeans-libs-jsr223/org-netbeans-libs-jsr223.jar",
            "netbeans/org-netbeans-modules-applemenu/org-netbeans-modules-applemenu.jar",
            "netbeans/org-netbeans-modules-autoupdate-services/ext-updater.jar",
            "netbeans/org-netbeans-modules-autoupdate-services/org-netbeans-modules-autoupdate-services.jar",
            "netbeans/org-netbeans-modules-autoupdate-ui/org-netbeans-modules-autoupdate-ui.jar",
            "netbeans/org-netbeans-modules-core-kit/locale-org-netbeans-modules-core-kit_ja.jar",
            "netbeans/org-netbeans-modules-core-kit/locale-org-netbeans-modules-core-kit_pt_BR.jar",
            "netbeans/org-netbeans-modules-core-kit/locale-org-netbeans-modules-core-kit_zh_CN.jar",
            "netbeans/org-netbeans-modules-core-kit/org-netbeans-modules-core-kit.jar",
            "netbeans/org-netbeans-modules-editor-mimelookup/org-netbeans-modules-editor-mimelookup.jar",
            "netbeans/org-netbeans-modules-editor-mimelookup-impl/org-netbeans-modules-editor-mimelookup-impl.jar",
            "netbeans/org-netbeans-modules-favorites/org-netbeans-modules-favorites.jar",
            "netbeans/org-netbeans-modules-javahelp/ext-jh-2.0_05.jar",
            "netbeans/org-netbeans-modules-javahelp/org-netbeans-modules-javahelp.jar",
            "netbeans/org-netbeans-modules-masterfs/org-netbeans-modules-masterfs.jar",
            "netbeans/org-netbeans-modules-options-api/org-netbeans-modules-options-api.jar",
            "netbeans/org-netbeans-modules-options-keymap/org-netbeans-modules-options-keymap.jar",
            "netbeans/org-netbeans-modules-progress-ui/org-netbeans-modules-progress-ui.jar",
            "netbeans/org-netbeans-modules-queries/org-netbeans-modules-queries.jar",
            "netbeans/org-netbeans-modules-sendopts/org-netbeans-modules-sendopts.jar",
            "netbeans/org-netbeans-modules-settings/org-netbeans-modules-settings.jar",
            "netbeans/org-netbeans-modules-templates/org-netbeans-modules-templates.jar",
            "netbeans/org-netbeans-swing-plaf/org-netbeans-swing-plaf.jar",
            "netbeans/org-netbeans-swing-tabcontrol/org-netbeans-swing-tabcontrol.jar",
            "netbeans/org-openide-actions/org-openide-actions.jar",
            "netbeans/org-openide-awt/org-openide-awt.jar",
            "netbeans/org-openide-compat/org-openide-compat.jar",
            "netbeans/org-openide-dialogs/org-openide-dialogs.jar",
            "netbeans/org-openide-execution/org-openide-execution.jar",
            "netbeans/org-openide-explorer/locale-org-openide-explorer_ja.jar",
            "netbeans/org-openide-explorer/locale-org-openide-explorer_pt_BR.jar",
            "netbeans/org-openide-explorer/locale-org-openide-explorer_zh_CN.jar",
            "netbeans/org-openide-explorer/org-openide-explorer.jar",
            "netbeans/org-openide-filesystems/org-openide-filesystems.jar",
            "netbeans/org-openide-io/org-openide-io.jar",
            "netbeans/org-openide-loaders/org-openide-loaders.jar",
            "netbeans/org-openide-modules/org-openide-modules.jar",
            "netbeans/org-openide-nodes/org-openide-nodes.jar",
            "netbeans/org-openide-options/org-openide-options.jar",
            "netbeans/org-openide-text/org-openide-text.jar",
            "netbeans/org-openide-util/org-openide-util.jar",
            "netbeans/org-openide-util-enumerations/org-openide-util-enumerations.jar",
            "netbeans/org-openide-windows/org-openide-windows.jar"};
     
        /**
         * @param args the command line arguments
         */ 
        public static void main(String[] args) {
            try {
                String userDir = System.getProperty("user.home") + File.separator + ".liveea";
                org.netbeans.Main.main(new String[] {"--branding", "liveea", "--userdir", userDir});
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
     
        /**
         * @param args the command line arguments
         * see http://blogs.sun.com/blog/resource/Main.java
         */
    //    public static void main(String[] args) {
    //        //create new "top-level" classloader which will not see dbschema.jar
    //        //get original classloader
    //        ClassLoader originalClassLoader = new Main().getClass().getClassLoader();
    //        URLClassLoader applicationClassLoader = (URLClassLoader) (originalClassLoader.getParent());
    //        URL[] us = applicationClassLoader.getURLs();
    //        List<URL> l = new ArrayList<URL>();
    //        for (int i = 0; i < us.length; i++) {
    //            //if (!us[i].getFile().endsWith("dbschema.jar")) {
    //                l.add(us[i]);
    //           // }
    //        }
    //        //our new "top-level" classloader
    //        ClassLoader rootClassLoader = new URLClassLoader(l.toArray(new URL[l.size()]), null);
    //        //our custom "NB platform" classloader
    //        l.clear();
    //        for (int i = 0; i < resources.length; i++) {
    //            URL u = originalClassLoader.getResource(absoluteRessourcesPath+resources[i]);
    //            if (u == null) u=rootClassLoader.getResource(absoluteRessourcesPath+resources[i]);
    //            if (u == null) u=applicationClassLoader.getResource(absoluteRessourcesPath+resources[i]);
    //            l.add(u);
    //        }
    //        ClassLoader loader = new URLClassLoader(l.toArray(new URL[l.size()]), rootClassLoader);
    //        
    //        //fix userdir
    //        fixNetBeansUser();
    //        //fix netbeans.dirs property - to get rid of warning about dbschema module
    //        //when running using appclient script
    //        URL url = originalClassLoader.getResource(absoluteRessourcesPath+resources[0]);
    //        System.setProperty("netbeans.dirs", new File(url.getFile()).getParentFile().getAbsolutePath());
    //        //start our NB platform based application
    //        try {
    //            Object[] argss = new String[] {"--branding", "liveea"};
    //            Class c = loader.loadClass("org.netbeans.Main");
    //            Method m = c.getMethod("main", new Class[] { String[].class });
    //            m.invoke(null, new Object[] {argss});
    //        } catch (Exception ex) {
    //            ex.printStackTrace();
    //        }
    //    }
     
        public static List<Employe> getEmployes() {
            return employeBean.getEmployes();
        }
     
            /** Sets value of netbeans.user property.
         */
    //    final static void fixNetBeansUser() {
     
    //        String userDir = System.getProperty("user.home") + File.separator + ".liveea"; //"${user.home}/.liveea"; // NOI18N
    //        final String PREFIX = "${user.home}/"; // NOI18N
    //        int uh = userDir.indexOf(PREFIX);
    //        if (uh == -1) {
    //            return;
    //        }
    //        String newDir =
    //                userDir.substring(0, uh) +
    //                System.getProperty("user.home") + // NOI18N
    //                File.separator +
    //                userDir.substring(uh + PREFIX.length());
    //        System.setProperty("netbeans.user", newDir); // NOI18N
    //    }
     
    }
    A l'aide de l'autre tuto, j'ai pu trouver une manière de faire marcher le bouzou. En fait il faut ajouter en dépendance au client tous les jar présent dans répertoire build/jnlp présent dans le projet (entre autre défini dans les resources du main). Cela palie au fait que le war ou le ear n'est pas bien deployé et les copies mal faite (ce que je suppose)

    Ca fonctionne, j'arrive maintenant à lancer l'enterprise application, et les copies de tous ces jar sont correctement effectués et le client trouve les beans. Cependant, même si je connais pas grand chose, je me dis que ce n'est pas la bonne manière... Ça fait un peu bourrin non ? Quelle sont les risques lors du déploiement sur un vrai serveur en production ? Je me pose pas mal de question là...

  6. #6
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    ok, je suis peut-être lourd, mais je ne vois pas de rapport avec un serveur d'application. C'est une application "classique" avec un main().

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je me suis peut-être mal expliqué...

    J'utilise glassfish comme serveur d'appli. Je développe une appli en 3/3 :
    - La base de données est distante et fonctionne sur postgres 8.2, tout est ok
    - Le serveur d'appli instancie les beans qui iront chercher les données dans le serveur d'appli, et les traiteront.
    - Le client télécharge l'appli sur le serveur d'appli, et des modules netbeans affichent des formulaires avec des champs et des listes que l'on peut modifier via le client.

    La question initiale (sans ma bidouille d'ajout de jars), est comment faire pour que le client qui lance le JNLP peut-il voir cette fameuse classe Main qui contient les méthodes renvoyant les Java.util.List dont j'ai besoin ?

    En considérant l'ajout de tous les jars dans le client, qui n'est certainement pas une bonne méthode, comment cette solution se comporterait-elle en production (en deployant sur un vrai serveur d'application) ?

    On pourra me dire : tu n'as qu'a essayer Je souhaite avoir une solution propre et je ne sais pas si c'est le cas ...

Discussions similaires

  1. Intégrer une classe main jfreechart dans le jpanel1 netbeans
    Par ririsuperstar dans le forum Composants
    Réponses: 0
    Dernier message: 09/04/2013, 16h11
  2. Réponses: 4
    Dernier message: 23/12/2010, 19h47
  3. maven+netbeans+javafx = pas de classe main trouvée
    Par olivier57b dans le forum JavaFX
    Réponses: 0
    Dernier message: 29/08/2010, 02h51
  4. Réponses: 0
    Dernier message: 26/10/2009, 20h58
  5. [ERREUR] Ne retrouve pas la classe main
    Par Anathema dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 06/07/2005, 16h16

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